<?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>31844</bug_id>
          
          <creation_ts>2009-11-24 12:03:52 -0800</creation_ts>
          <short_desc>SocketStreamHandleCFNet should support CONNECT proxy credentials</short_desc>
          <delta_ts>2009-11-24 13:52:32 -0800</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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>beidson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>166222</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-24 12:03:52 -0800</bug_when>
    <thetext>SocketStreamHandleCFNet should support CONNECT proxy credentials. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166231</commentid>
    <comment_count>1</comment_count>
      <attachid>43796</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-24 12:10:58 -0800</bug_when>
    <thetext>Created attachment 43796
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166262</commentid>
    <comment_count>2</comment_count>
      <attachid>43796</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-11-24 13:34:15 -0800</bug_when>
    <thetext>Comment on attachment 43796
proposed patch

r+ with comments

&gt; +void SocketStreamHandle::addCONNECTCredentials(CFHTTPMessageRef proxyResponse)
&gt; +{
&gt; +    // Creating a temporary request to make CFNetwork apply credentials to it. Unfortunately, this cannot work with NTLM authentication.
&gt; +    RetainPtr&lt;CFHTTPMessageRef&gt; dummyRequest(AdoptCF, CFHTTPMessageCreateRequest(0, CFSTR(&quot;GET&quot;), m_httpsURL.get(), kCFHTTPVersion1_1));
&gt; +    RetainPtr&lt;CFHTTPAuthenticationRef&gt; authentication(AdoptCF, CFHTTPAuthenticationCreateFromResponse(0, proxyResponse));
&gt; +
&gt; +    if (!CFHTTPAuthenticationRequiresUserNameAndPassword(authentication.get())) {
&gt; +        // That&apos;s all we can offer...
&gt; +        m_client-&gt;didFail(this, SocketStreamError()); // FIXME: Provide a sensible error.
&gt; +        return;
&gt; +    }

Suggest re-ordering the above to create the authentication object, check if it needs username/password, do the early return if it doesn&apos;t, then create the dummy request.

Plus, how are we going to track getting a sensible error for this(x1)?

&gt; +
&gt; +    int port = 0;
&gt; +    CFNumberGetValue(m_proxyPort.get(), kCFNumberIntType, &amp;port);
&gt; +    RetainPtr&lt;CFStringRef&gt; methodCF(AdoptCF, CFHTTPAuthenticationCopyMethod(authentication.get()));
&gt; +    RetainPtr&lt;CFStringRef&gt; realmCF(AdoptCF, CFHTTPAuthenticationCopyRealm(authentication.get()));
&gt; +    ProtectionSpace protectionSpace(String(m_proxyHost.get()), port, ProtectionSpaceProxyHTTPS, String(realmCF.get()), authenticationSchemeFromAuthenticationMethod(methodCF.get()));
&gt; +    String login;
&gt; +    String password;
&gt; +    if (!m_sentStoredCredentials &amp;&amp; getStoredCONNECTProxyCredentials(protectionSpace, login, password)) {
&gt; +        // Try to get sotred credentials, if we haven&apos;t tried those already.

Typo on this comment.  Plus, I think you mean to say &quot;Try to *use* stored credentials...&quot;?

&gt; +        RetainPtr&lt;CFStringRef&gt; loginCF(AdoptCF, login.createCFString());
&gt; +        RetainPtr&lt;CFStringRef&gt; passwordCF(AdoptCF, password.createCFString());
&gt; +        Boolean appliedCredentials = CFHTTPMessageApplyCredentials(dummyRequest.get(), authentication.get(), loginCF.get(), passwordCF.get(), 0);
&gt; +        ASSERT_UNUSED(appliedCredentials, appliedCredentials);
&gt; +
&gt; +        RetainPtr&lt;CFStringRef&gt; proxyAuthorizationString(AdoptCF, CFHTTPMessageCopyHeaderFieldValue(dummyRequest.get(), CFSTR(&quot;Proxy-Authorization&quot;)));
&gt; +
&gt; +        if (!proxyAuthorizationString) {
&gt; +            // Fails e.g. for NTLM auth.
&gt; +            m_client-&gt;didFail(this, SocketStreamError()); // FIXME: Provide a sensible error.
&gt; +            return;
&gt; +        }

How are we going to track getting a sensible error for this (x2)?

&gt; +
&gt; +        // Setting the authorization results in a new connection attempt.
&gt; +        wkSetCONNECTProxyAuthorizationForStream(m_readStream.get(), proxyAuthorizationString.get());
&gt; +        m_sentStoredCredentials = true;
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    // FIXME: Ask the client if credentials could not be found.

How are we going to track asking the client?

&gt; +
&gt; +    m_client-&gt;didFail(this, SocketStreamError()); // FIXME: Provide a sensible error.

How are we going to track getting a sensible error for this(x3)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166263</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2009-11-24 13:35:35 -0800</bug_when>
    <thetext>
&gt; &gt; +    if (!m_sentStoredCredentials &amp;&amp; getStoredCONNECTProxyCredentials(protectionSpace, login, password)) {
&gt; &gt; +        // Try to get sotred credentials, if we haven&apos;t tried those already.
&gt;
&gt; Typo on this comment.  Plus, I think you mean to say &quot;Try to *use* stored
&gt; credentials...&quot;?

Reading it again, I now parse it how you intended it.  I still think it could be clearer - maybe &quot;Try to apply stored credentials&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166271</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-11-24 13:52:32 -0800</bug_when>
    <thetext>Committed &lt;http://trac.webkit.org/changeset/51354&gt;.

&gt; Suggest re-ordering the above to create the authentication object, check if it
&gt; needs username/password, do the early return if it doesn&apos;t, then create the
&gt; dummy request.

Good catch, done!

&gt; Plus, how are we going to track getting a sensible error for this(x1)?

With a FIXME, for now. The error doesn&apos;t go anywhere yet.

&gt; Typo on this comment.  Plus, I think you mean to say &quot;Try to *use* stored
&gt; credentials...&quot;?

Fixed, and re-worded a bit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43796</attachid>
            <date>2009-11-24 12:10:58 -0800</date>
            <delta_ts>2009-11-24 13:34:15 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>WSCredentials.txt</filename>
            <type>text/plain</type>
            <size>28297</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MTM0NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDktMTEtMjQgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxODQ0CisgICAgICAgIFNv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0IHNob3VsZCBzdXBwb3J0IENPTk5FQ1QgcHJveHkgY3JlZGVu
dGlhbHMKKworICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9y
bS9uZXR3b3JrL0NyZWRlbnRpYWxTdG9yYWdlLmg6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9tYWMvQ3JlZGVudGlhbFN0b3JhZ2VNYWMubW06IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
Q3JlZGVudGlhbFN0b3JhZ2U6OmdldEZyb21QZXJzaXN0ZW50U3RvcmFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9y
YWdlKToKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGZldGNoaW5nIGNyZWRlbnRpYWxzIGZyb20g
cGVyc2lzdGVudCBzdG9yYWdlIChDRk5ldCB2ZXJzaW9uIGlzIGN1cnJlbnRseQorICAgICAgICBh
IHN0dWIpLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwOiBS
ZW1vdmVkIGFuIHVubmVlZGVkIGluY2x1ZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2Yv
U29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3Ry
ZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0
U3RyZWFtSGFuZGxlOjpjcmVhdGVTdHJlYW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmdldFN0b3Jl
ZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYkNvcmU6OmF1dGhlbnRpY2F0
aW9uU2NoZW1lRnJvbUF1dGhlbnRpY2F0aW9uTWV0aG9kKToKKyAgICAgICAgKFdlYkNvcmU6OlNv
Y2tldFN0cmVhbUhhbmRsZTo6YWRkQ09OTkVDVENyZWRlbnRpYWxzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNvY2tldFN0cmVhbUhhbmRsZTo6cmVhZFN0cmVhbUNhbGxiYWNrKToKKyAgICAgICAgQ2hl
Y2sgaWYgY29ubmVjdGlvbiBhdHRlbXB0IHdhcyByZXN1bHRlZCBpbiA0MDcsIGFuZCB0cnkgc3Rv
cmVkIGNyZWRlbnRpYWxzIGlmIGl0IGRpZC4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJD
b3JlU3lzdGVtSW50ZXJmYWNlLmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UubW06CisgICAgICAgICogV2ViQ29yZS5iYXNlLmV4cDoKKyAgICAgICAgVXBk
YXRlZCBXS1NJLgorCiAyMDA5LTExLTI0ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL1dlYkNv
cmUuYmFzZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCShyZXZp
c2lvbiA1MTMyMikKKysrIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkod29ya2luZyBjb3B5KQpA
QCAtOTkzLDYgKzk5Myw3IEBAIF9zdHJpbmdJc0Nhc2VJbnNlbnNpdGl2ZUVxdWFsVG9TdHJpbmcK
IF9zdWdnZXN0ZWRGaWxlbmFtZVdpdGhNSU1FVHlwZQogX3drQWR2YW5jZURlZmF1bHRCdXR0b25Q
dWxzZUFuaW1hdGlvbgogX3drQ0dDb250ZXh0R2V0U2hvdWxkU21vb3RoRm9udHMKK193a0NvcHlD
T05ORUNUUHJveHlSZXNwb25zZQogX3drQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtCiBfd2tDcmVh
dGVOU1VSTENvbm5lY3Rpb25EZWxlZ2F0ZVByb3h5CiBfd2tDcmVhdGVVUkxOUGFzdGVib2FyZEZs
YXZvclR5cGVOYW1lCkBAIC0xMDMxLDYgKzEwMzIsOCBAQCBfd2tRVE1vdmllTWF4VGltZVNlZWth
YmxlCiBfd2tRVE1vdmllU2V0U2hvd0Nsb3NlZENhcHRpb25zCiBfd2tRVE1vdmllVmlld1NldERy
YXdTeW5jaHJvbm91c2x5CiBfd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlCitfd2tTZXRDT05ORUNU
UHJveHlBdXRob3JpemF0aW9uRm9yU3RyZWFtCitfd2tTZXRDT05ORUNUUHJveHlGb3JTdHJlYW0K
IF93a1NldERyYWdJbWFnZQogX3drU2V0TlNVUkxDb25uZWN0aW9uRGVmZXJzQ2FsbGJhY2tzCiBf
d2tTZXROU1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNTEzMjIpCisrKyBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNDIyOSw2ICsyNDIyOSwy
NiBAQAogCQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KCiAJCQkJCTwvRmlsZT4KCiAJCQkJCTxG
aWxlCgorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGNmXENyZWRlbnRp
YWxTdG9yYWdlQ0ZOZXQuY3BwIgoKKwkJCQkJCT4KCisJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24K
CisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm98V2luMzIiCgorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgoKKwkJCQkJCQk+CgorCQkJCQkJCTxUb29sCgorCQkJCQkJCQlOYW1lPSJWQ0NM
Q29tcGlsZXJUb29sIgoKKwkJCQkJCQkvPgoKKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+Cgor
CQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCgorCQkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm98V2lu
MzIiCgorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgoKKwkJCQkJCQk+CgorCQkJCQkJ
CTxUb29sCgorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgoKKwkJCQkJCQkvPgoKKwkJ
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CgorCQkJCQk8L0ZpbGU+CgorCQkJCQk8RmlsZQoKIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cbmV0d29ya1xjZlxETlNDRk5ldC5jcHAiCgog
CQkJCQkJPgoKIAkJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgoKSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1MTMyMikKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NjQz
LDYgKzQ2NDMsNyBAQAogCQlFMUFERURENTBFNzZCRDYwMDA0QTFBNUUgLyogRE9NTWVzc2FnZVBv
cnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFBREVERDQwRTc2QkQ2MDAwNEExQTVFIC8qIERPTU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCAq
LzsgfTsKIAkJRTFBREVEREEwRTc2QkQ5MzAwNEExQTVFIC8qIEpTTWVzc2FnZVBvcnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFREQ4MEU3NkJE
OTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmggKi87IH07CiAJCUUxQURFRERCMEU3NkJEOTMw
MDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEUxQURFREQ5MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQ
b3J0LmNwcCAqLzsgfTsKKwkJRTFCNENEMjUxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxT
dG9yYWdlTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTFCNENEMjQxMEIzMjJFMjAwQkZGRDdFIC8qIENyZWRlbnRpYWxTdG9yYWdlTWFjLm1tICov
OyB9OwogCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxQkU1MTJCMENG
NkM1MTIwMDJFQTk1OSAvKiBYU0xUVW5pY29kZVNvcnQuY3BwICovOyB9OwogCQlFMUJFNTEyRTBD
RjZDNTEyMDAyRUE5NTkgLyogWFNMVFVuaWNvZGVTb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyogWFNM
VFVuaWNvZGVTb3J0LmggKi87IH07CiAJCUUxQzM2MkVGMEVBRjJBQTkwMDc0MTBCQyAvKiBKU1dv
cmtlckxvY2F0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMUMzNjJFRDBFQUYyQUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oICovOyB9
OwpAQCAtOTgxNSw2ICs5ODE2LDcgQEAKIAkJRTFBREVERDQwRTc2QkQ2MDAwNEExQTVFIC8qIERP
TU1lc3NhZ2VQb3J0SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
RE9NTWVzc2FnZVBvcnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
MUFERUREODBFNzZCRDkzMDA0QTFBNUUgLyogSlNNZXNzYWdlUG9ydC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU01lc3NhZ2VQb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUxQURFREQ5MEU3NkJEOTMwMDRBMUE1RSAvKiBKU01lc3NhZ2VQb3J0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTWVzc2FnZVBvcnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUI0Q0QyNDEwQjMyMkUyMDBCRkZEN0UgLyog
Q3JlZGVudGlhbFN0b3JhZ2VNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IHBhdGggPSBDcmVkZW50aWFsU3RvcmFnZU1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRTFCRTUxMkIwQ0Y2QzUxMjAwMkVBOTU5IC8qIFhTTFRVbmljb2RlU29ydC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBYU0xUVW5pY29kZVNvcnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUJFNTEyQzBDRjZDNTEyMDAyRUE5NTkgLyog
WFNMVFVuaWNvZGVTb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhTTFRV
bmljb2RlU29ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMUMzNjJFRDBFQUYy
QUE5MDA3NDEwQkMgLyogSlNXb3JrZXJMb2NhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU1dvcmtlckxvY2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMTA1NSw2ICsxMTA1Nyw3IEBACiAJCQkJOTM0RjcxNDMwRDVBNkY1MzAwMDE4RDY5IC8q
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmggKi8sCiAJCQkJNTE0Qzc2NDIwQ0U5MjM0RTAwN0VG
M0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLmggKi8sCiAJCQkJNTE0Qzc2NDMwQ0U5MjM0RTAwN0VG
M0NEIC8qIEF1dGhlbnRpY2F0aW9uTWFjLm1tICovLAorCQkJCUUxQjRDRDI0MTBCMzIyRTIwMEJG
RkQ3RSAvKiBDcmVkZW50aWFsU3RvcmFnZU1hYy5tbSAqLywKIAkJCQk1MTRDNzY0NDBDRTkyMzRF
MDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMuaCAqLywKIAkJCQk1MTRDNzY0NTBDRTkyMzRF
MDA3RUYzQ0QgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gKi8sCiAJCQkJMUE3RkE2NDcwRERBM0NC
QTAwMjhGOEE1IC8qIE5ldHdvcmtTdGF0ZU5vdGlmaWVyTWFjLmNwcCAqLywKQEAgLTIwMjc3LDYg
KzIwMjgwLDcgQEAKIAkJCQkxNDc5RkFFRjEwOUFFMzc1MDBERUQ2NTUgLyogUmVuZGVyUnVieUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjExMDlBRTM3NTAwREVENjU1IC8qIFJl
bmRlclJ1YnlSdW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3OUZBRjMxMDlBRTM3NTAwREVE
NjU1IC8qIFJlbmRlclJ1YnlUZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUUxQjRDRDI1MTBC
MzIyRTIwMEJGRkQ3RSAvKiBDcmVkZW50aWFsU3RvcmFnZU1hYy5tbSBpbiBTb3VyY2VzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJ
bmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHJldmlzaW9u
IDUxMzIyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDYgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVk
ZSAiSlNFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0LmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBKU0M7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oCShyZXZpc2lvbiA1MTMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dl
YkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw5IEBA
IGV4dGVybiB2b2lkICgqd2tTaWduYWxDRlJlYWRTdHJlYW1FbmQpKEMKIGV4dGVybiB2b2lkICgq
d2tTaWduYWxDRlJlYWRTdHJlYW1FcnJvcikoQ0ZSZWFkU3RyZWFtUmVmIHN0cmVhbSwgQ0ZTdHJl
YW1FcnJvciAqZXJyb3IpOwogZXh0ZXJuIHZvaWQgKCp3a1NpZ25hbENGUmVhZFN0cmVhbUhhc0J5
dGVzKShDRlJlYWRTdHJlYW1SZWYgc3RyZWFtKTsKIGV4dGVybiB1bnNpZ25lZCAoKndrSW5pdGlh
bGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCkodW5zaWduZWQgcHJlZmVycmVk
Q29ubmVjdGlvbkNvdW50KTsKK2V4dGVybiB2b2lkICgqd2tTZXRDT05ORUNUUHJveHlGb3JTdHJl
YW0pKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJpbmdSZWYgcHJveHlIb3N0LCBDRk51bWJlclJlZiBw
cm94eVBvcnQpOworZXh0ZXJuIHZvaWQgKCp3a1NldENPTk5FQ1RQcm94eUF1dGhvcml6YXRpb25G
b3JTdHJlYW0pKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJpbmdSZWYgcHJveHlBdXRob3JpemF0aW9u
U3RyaW5nKTsKK2V4dGVybiBDRkhUVFBNZXNzYWdlUmVmICgqd2tDb3B5Q09OTkVDVFByb3h5UmVz
cG9uc2UpKENGUmVhZFN0cmVhbVJlZiwgQ0ZVUkxSZWYgcmVzcG9uc2VVUkwpOwogZXh0ZXJuIEJP
T0wgKCp3a0lzTGF0Y2hpbmdXaGVlbEV2ZW50KShOU0V2ZW50ICopOwogCiAjaWZuZGVmIEJVSUxE
SU5HX09OX1RJR0VSCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVTeXN0
ZW1JbnRlcmZhY2UubW0JKHJldmlzaW9uIDUxMzIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5tbQkod29ya2luZyBjb3B5KQpAQCAtODMsNiArODMsOSBA
QCB2b2lkICgqd2tTZXROU1VSTENvbm5lY3Rpb25EZWZlcnNDYWxsYmFjCiB2b2lkICgqd2tTZXRO
U1VSTFJlcXVlc3RTaG91bGRDb250ZW50U25pZmYpKE5TTXV0YWJsZVVSTFJlcXVlc3QgKiwgQk9P
TCk7CiBpZCAoKndrQ3JlYXRlTlNVUkxDb25uZWN0aW9uRGVsZWdhdGVQcm94eSkodm9pZCk7CiB1
bnNpZ25lZCAoKndrSW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCko
dW5zaWduZWQgcHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKK3ZvaWQgKCp3a1NldENPTk5FQ1RQ
cm94eUZvclN0cmVhbSkoQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmluZ1JlZiBwcm94eUhvc3QsIENG
TnVtYmVyUmVmIHByb3h5UG9ydCk7Cit2b2lkICgqd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0
aW9uRm9yU3RyZWFtKShDRlJlYWRTdHJlYW1SZWYsIENGU3RyaW5nUmVmIHByb3h5QXV0aG9yaXph
dGlvblN0cmluZyk7CitDRkhUVFBNZXNzYWdlUmVmICgqd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9u
c2UpKENGUmVhZFN0cmVhbVJlZiwgQ0ZVUkxSZWYgcmVzcG9uc2VVUkwpOwogQk9PTCAoKndrSXNM
YXRjaGluZ1doZWVsRXZlbnQpKE5TRXZlbnQgKik7CiAKICNpZm5kZWYgQlVJTERJTkdfT05fVElH
RVIKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFsU3RvcmFnZS5o
CShyZXZpc2lvbiA1MTMyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9DcmVkZW50aWFs
U3RvcmFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCwxMyBAQCBjbGFzcyBQcm90ZWN0
aW9uU3BhY2U7CiAKIGNsYXNzIENyZWRlbnRpYWxTdG9yYWdlIHsKIHB1YmxpYzoKKyAgICAvLyBX
ZWJDb3JlIHNlc3Npb24gY3JlZGVudGlhbCBzdG9yYWdlLgogICAgIHN0YXRpYyB2b2lkIHNldChj
b25zdCBDcmVkZW50aWFsJiwgY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgS1VSTCYpOwog
ICAgIHN0YXRpYyBDcmVkZW50aWFsIGdldChjb25zdCBQcm90ZWN0aW9uU3BhY2UmKTsKIAorICAg
IC8vIE9TIHBlcnNpc3RlbnQgc3RvcmFnZS4KKyAgICBzdGF0aWMgQ3JlZGVudGlhbCBnZXRGcm9t
UGVyc2lzdGVudFN0b3JhZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJik7CisKICAgICAvLyBUaGVz
ZSBtZXRob2RzIHdvcmsgZm9yIGF1dGhlbnRpY2F0aW9uIHNjaGVtZXMgdGhhdCBzdXBwb3J0IHNl
bmRpbmcgY3JlZGVudGlhbHMgd2l0aG91dCB3YWl0aW5nIGZvciBhIHJlcXVlc3QuIEUuZy4sIGZv
ciBIVFRQIEJhc2ljIGF1dGhlbnRpY2F0aW9uIHNjaGVtZQogICAgIC8vIGEgY2xpZW50IHNob3Vs
ZCBhc3N1bWUgdGhhdCBhbGwgcGF0aHMgYXQgb3IgZGVlcGVyIHRoYW4gdGhlIGRlcHRoIG9mIGEg
a25vd24gcHJvdGVjdGVkIHJlc291cmNlIHNoYXJlIGFyZSB3aXRoaW4gdGhlIHNhbWUgcHJvdGVj
dGlvbiBzcGFjZS4KICAgICBzdGF0aWMgYm9vbCBzZXQoY29uc3QgQ3JlZGVudGlhbCYsIGNvbnN0
IEtVUkwmKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBVUkwgY29ycmVzcG9uZHMgdG8gYSBrbm93
biBwcm90ZWN0aW9uIHNwYWNlLCBzbyBjcmVkZW50aWFscyBjb3VsZCBiZSB1cGRhdGVkLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0NyZWRlbnRpYWxTdG9yYWdlQ0ZOZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9DcmVkZW50aWFsU3Rv
cmFnZUNGTmV0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
Zi9DcmVkZW50aWFsU3RvcmFnZUNGTmV0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDcmVkZW50aWFs
U3RvcmFnZS5oIgorCisjaW5jbHVkZSAiQ3JlZGVudGlhbC5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUHJvdGVjdGlvblNwYWNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ3JlZGVudGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRT
dG9yYWdlKGNvbnN0IFByb3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIFVO
VVNFRF9QQVJBTShwcm90ZWN0aW9uU3BhY2UpOworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIENyZWRlbnRpYWwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1NvY2tldFN0cmVhbUhhbmRsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGUuaAko
cmV2aXNpb24gNTEzMjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3Ry
ZWFtSGFuZGxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxLDYgKzcxLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIGJvb2wgc2hvdWxkVXNlU1NMKCkgY29uc3QgeyByZXR1cm4gbV91
cmwucHJvdG9jb2xJcygid3NzIik7IH0KIAorICAgICAgICB2b2lkIGFkZENPTk5FQ1RDcmVkZW50
aWFscyhDRkhUVFBNZXNzYWdlUmVmIHJlc3BvbnNlKTsKKwogICAgICAgICBzdGF0aWMgQ0ZTdHJp
bmdSZWYgY29weUNGU3RyZWFtRGVzY3JpcHRpb24odm9pZCogKTsKICAgICAgICAgc3RhdGljIHZv
aWQgcmVhZFN0cmVhbUNhbGxiYWNrKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJlYW1FdmVudFR5cGUs
IHZvaWQqKTsKICAgICAgICAgc3RhdGljIHZvaWQgd3JpdGVTdHJlYW1DYWxsYmFjayhDRldyaXRl
U3RyZWFtUmVmLCBDRlN0cmVhbUV2ZW50VHlwZSwgdm9pZCopOwpAQCAtOTgsNiArMTAwLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZXRhaW5QdHI8Q0ZOdW1iZXJSZWY+IG1fcHJv
eHlQb3J0OwogCiAgICAgICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdlUmVmPiBtX3Byb3h5UmVz
cG9uc2VNZXNzYWdlOworICAgICAgICBib29sIG1fc2VudFN0b3JlZENyZWRlbnRpYWxzOwogICAg
ICAgICBSZXRhaW5QdHI8Q0ZSZWFkU3RyZWFtUmVmPiBtX3JlYWRTdHJlYW07CiAgICAgICAgIFJl
dGFpblB0cjxDRldyaXRlU3RyZWFtUmVmPiBtX3dyaXRlU3RyZWFtOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2YvU29ja2V0U3RyZWFtSGFuZGxlQ0ZOZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9Tb2NrZXRTdHJlYW1IYW5kbGVDRk5l
dC5jcHAJKHJldmlzaW9uIDUxMzIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL1Nv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsMTMg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIK
IAorI2luY2x1ZGUgIkNyZWRlbnRpYWwuaCIKKyNpbmNsdWRlICJDcmVkZW50aWFsU3RvcmFnZS5o
IgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJQcm90ZWN0aW9uU3BhY2UuaCIKICNp
bmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgogCiAjaWYgZGVmaW5lZChCVUlMRElOR19PTl9USUdFUikgfHwg
ZGVmaW5lZChCVUlMRElOR19PTl9MRU9QQVJEKQpAQCAtNDksMTggKzUzLDEzIEBACiAjZGVmaW5l
IENGTl9FWFBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotZXh0ZXJuICJDIiB7Ci1DRk5fRVhQT1JUIGNv
bnN0IENGU3RyaW5nUmVmIGtDRlN0cmVhbVByb3BlcnR5Q09OTkVDVFByb3h5OwotQ0ZOX0VYUE9S
VCBjb25zdCBDRlN0cmluZ1JlZiBrQ0ZTdHJlYW1Qcm9wZXJ0eUNPTk5FQ1RQcm94eUhvc3Q7Ci1D
Rk5fRVhQT1JUIGNvbnN0IENGU3RyaW5nUmVmIGtDRlN0cmVhbVByb3BlcnR5Q09OTkVDVFByb3h5
UG9ydDsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTb2NrZXRTdHJlYW1IYW5kbGU6OlNv
Y2tldFN0cmVhbUhhbmRsZShjb25zdCBLVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVu
dCogY2xpZW50KQogICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKICAg
ICAsIG1fY29ubmVjdGluZ1N1YnN0YXRlKE5ldykKICAgICAsIG1fY29ubmVjdGlvblR5cGUoVW5r
bm93bikKKyAgICAsIG1fc2VudFN0b3JlZENyZWRlbnRpYWxzKGZhbHNlKQogewogICAgIExPRyhO
ZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAiLCB0aGlzLCBtX2Ns
aWVudCk7CiAKQEAgLTMzMywxMyArMzMyLDkgQEAgdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmNy
ZWF0ZVN0cmVhbXMoKQogICAgICAgICBDRlJlYWRTdHJlYW1TZXRQcm9wZXJ0eShtX3JlYWRTdHJl
YW0uZ2V0KCksIGtDRlN0cmVhbVByb3BlcnR5U09DS1NQcm94eSwgY29ubmVjdERpY3Rpb25hcnku
Z2V0KCkpOwogICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgIGNhc2UgQ09OTkVDVFByb3h5
OiB7Ci0gICAgICAgIGNvbnN0IHZvaWQqIHByb3h5S2V5c1tdID0geyBrQ0ZTdHJlYW1Qcm9wZXJ0
eUNPTk5FQ1RQcm94eUhvc3QsIGtDRlN0cmVhbVByb3BlcnR5Q09OTkVDVFByb3h5UG9ydCB9Owot
ICAgICAgICBjb25zdCB2b2lkKiBwcm94eVZhbHVlc1tdID0geyBtX3Byb3h5SG9zdC5nZXQoKSwg
bV9wcm94eVBvcnQuZ2V0KCkgfTsKLSAgICAgICAgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4g
Y29ubmVjdERpY3Rpb25hcnkoQWRvcHRDRiwgQ0ZEaWN0aW9uYXJ5Q3JlYXRlKDAsIHByb3h5S2V5
cywgcHJveHlWYWx1ZXMsIHNpemVvZihwcm94eUtleXMpIC8gc2l6ZW9mKCpwcm94eUtleXMpLCAm
a0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZrQ0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2Fs
bEJhY2tzKSk7Ci0gICAgICAgIENGUmVhZFN0cmVhbVNldFByb3BlcnR5KG1fcmVhZFN0cmVhbS5n
ZXQoKSwga0NGU3RyZWFtUHJvcGVydHlDT05ORUNUUHJveHksIGNvbm5lY3REaWN0aW9uYXJ5Lmdl
dCgpKTsKKyAgICBjYXNlIENPTk5FQ1RQcm94eToKKyAgICAgICAgd2tTZXRDT05ORUNUUHJveHlG
b3JTdHJlYW0obV9yZWFkU3RyZWFtLmdldCgpLCBtX3Byb3h5SG9zdC5nZXQoKSwgbV9wcm94eVBv
cnQuZ2V0KCkpOwogICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChz
aG91bGRVc2VTU0woKSkgewpAQCAtMzUxLDYgKzM0Niw4MyBAQCB2b2lkIFNvY2tldFN0cmVhbUhh
bmRsZTo6Y3JlYXRlU3RyZWFtcygpCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBnZXRTdG9yZWRD
T05ORUNUUHJveHlDcmVkZW50aWFscyhjb25zdCBQcm90ZWN0aW9uU3BhY2UmIHByb3RlY3Rpb25T
cGFjZSwgU3RyaW5nJiBsb2dpbiwgU3RyaW5nJiBwYXNzd29yZCkKK3sKKyAgICAvLyBUcnkgc3lz
dGVtIGNyZWRlbnRpYWwgc3RvcmFnZSBmaXJzdCwgbWF0Y2hpbmcgSFRUUCBiZWhhdmlvciAoQ0ZO
ZXR3b3JrIG9ubHkgYXNrcyB0aGUgY2xpZW50IGZvciBwYXNzd29yZCBpZiBpdCBjb3VsZG4ndCBm
aW5kIGl0IGluIEtleWNoYWluKS4KKyAgICBDcmVkZW50aWFsIHN0b3JlZENyZWRlbnRpYWwgPSBD
cmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKHByb3RlY3Rpb25TcGFj
ZSk7CisgICAgaWYgKHN0b3JlZENyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICBzdG9yZWRD
cmVkZW50aWFsID0gQ3JlZGVudGlhbFN0b3JhZ2U6OmdldChwcm90ZWN0aW9uU3BhY2UpOworCisg
ICAgaWYgKHN0b3JlZENyZWRlbnRpYWwuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBsb2dpbiA9IHN0b3JlZENyZWRlbnRpYWwudXNlcigpOworICAgIHBhc3N3b3JkID0g
c3RvcmVkQ3JlZGVudGlhbC5wYXNzd29yZCgpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZSBhdXRoZW50aWNhdGlvblNj
aGVtZUZyb21BdXRoZW50aWNhdGlvbk1ldGhvZChDRlN0cmluZ1JlZiBtZXRob2QpCit7CisgICAg
aWYgKENGRXF1YWwobWV0aG9kLCBrQ0ZIVFRQQXV0aGVudGljYXRpb25TY2hlbWVCYXNpYykpCisg
ICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZUhUVFBCYXNp
YzsKKyAgICBpZiAoQ0ZFcXVhbChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZURp
Z2VzdCkpCisgICAgICAgIHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVt
ZUhUVFBEaWdlc3Q7CisjaWZuZGVmIEJVSUxESU5HX09OX1RJR0VSCisgICAgaWYgKENGRXF1YWwo
bWV0aG9kLCBrQ0ZIVFRQQXV0aGVudGljYXRpb25TY2hlbWVOVExNKSkKKyAgICAgICAgcmV0dXJu
IFByb3RlY3Rpb25TcGFjZUF1dGhlbnRpY2F0aW9uU2NoZW1lTlRMTTsKKyAgICBpZiAoQ0ZFcXVh
bChtZXRob2QsIGtDRkhUVFBBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZSkpCisgICAgICAg
IHJldHVybiBQcm90ZWN0aW9uU3BhY2VBdXRoZW50aWNhdGlvblNjaGVtZU5lZ290aWF0ZTsKKyNl
bmRpZgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBQcm90ZWN0aW9uU3Bh
Y2VBdXRoZW50aWNhdGlvblNjaGVtZURlZmF1bHQ7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFu
ZGxlOjphZGRDT05ORUNUQ3JlZGVudGlhbHMoQ0ZIVFRQTWVzc2FnZVJlZiBwcm94eVJlc3BvbnNl
KQoreworICAgIC8vIENyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlcXVlc3QgdG8gbWFrZSBDRk5ldHdv
cmsgYXBwbHkgY3JlZGVudGlhbHMgdG8gaXQuIFVuZm9ydHVuYXRlbHksIHRoaXMgY2Fubm90IHdv
cmsgd2l0aCBOVExNIGF1dGhlbnRpY2F0aW9uLgorICAgIFJldGFpblB0cjxDRkhUVFBNZXNzYWdl
UmVmPiBkdW1teVJlcXVlc3QoQWRvcHRDRiwgQ0ZIVFRQTWVzc2FnZUNyZWF0ZVJlcXVlc3QoMCwg
Q0ZTVFIoIkdFVCIpLCBtX2h0dHBzVVJMLmdldCgpLCBrQ0ZIVFRQVmVyc2lvbjFfMSkpOworICAg
IFJldGFpblB0cjxDRkhUVFBBdXRoZW50aWNhdGlvblJlZj4gYXV0aGVudGljYXRpb24oQWRvcHRD
RiwgQ0ZIVFRQQXV0aGVudGljYXRpb25DcmVhdGVGcm9tUmVzcG9uc2UoMCwgcHJveHlSZXNwb25z
ZSkpOworCisgICAgaWYgKCFDRkhUVFBBdXRoZW50aWNhdGlvblJlcXVpcmVzVXNlck5hbWVBbmRQ
YXNzd29yZChhdXRoZW50aWNhdGlvbi5nZXQoKSkpIHsKKyAgICAgICAgLy8gVGhhdCdzIGFsbCB3
ZSBjYW4gb2ZmZXIuLi4KKyAgICAgICAgbV9jbGllbnQtPmRpZEZhaWwodGhpcywgU29ja2V0U3Ry
ZWFtRXJyb3IoKSk7IC8vIEZJWE1FOiBQcm92aWRlIGEgc2Vuc2libGUgZXJyb3IuCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpbnQgcG9ydCA9IDA7CisgICAgQ0ZOdW1iZXJHZXRWYWx1
ZShtX3Byb3h5UG9ydC5nZXQoKSwga0NGTnVtYmVySW50VHlwZSwgJnBvcnQpOworICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gbWV0aG9kQ0YoQWRvcHRDRiwgQ0ZIVFRQQXV0aGVudGljYXRpb25D
b3B5TWV0aG9kKGF1dGhlbnRpY2F0aW9uLmdldCgpKSk7CisgICAgUmV0YWluUHRyPENGU3RyaW5n
UmVmPiByZWFsbUNGKEFkb3B0Q0YsIENGSFRUUEF1dGhlbnRpY2F0aW9uQ29weVJlYWxtKGF1dGhl
bnRpY2F0aW9uLmdldCgpKSk7CisgICAgUHJvdGVjdGlvblNwYWNlIHByb3RlY3Rpb25TcGFjZShT
dHJpbmcobV9wcm94eUhvc3QuZ2V0KCkpLCBwb3J0LCBQcm90ZWN0aW9uU3BhY2VQcm94eUhUVFBT
LCBTdHJpbmcocmVhbG1DRi5nZXQoKSksIGF1dGhlbnRpY2F0aW9uU2NoZW1lRnJvbUF1dGhlbnRp
Y2F0aW9uTWV0aG9kKG1ldGhvZENGLmdldCgpKSk7CisgICAgU3RyaW5nIGxvZ2luOworICAgIFN0
cmluZyBwYXNzd29yZDsKKyAgICBpZiAoIW1fc2VudFN0b3JlZENyZWRlbnRpYWxzICYmIGdldFN0
b3JlZENPTk5FQ1RQcm94eUNyZWRlbnRpYWxzKHByb3RlY3Rpb25TcGFjZSwgbG9naW4sIHBhc3N3
b3JkKSkgeworICAgICAgICAvLyBUcnkgdG8gZ2V0IHNvdHJlZCBjcmVkZW50aWFscywgaWYgd2Ug
aGF2ZW4ndCB0cmllZCB0aG9zZSBhbHJlYWR5LgorICAgICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IGxvZ2luQ0YoQWRvcHRDRiwgbG9naW4uY3JlYXRlQ0ZTdHJpbmcoKSk7CisgICAgICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gcGFzc3dvcmRDRihBZG9wdENGLCBwYXNzd29yZC5jcmVhdGVD
RlN0cmluZygpKTsKKyAgICAgICAgQm9vbGVhbiBhcHBsaWVkQ3JlZGVudGlhbHMgPSBDRkhUVFBN
ZXNzYWdlQXBwbHlDcmVkZW50aWFscyhkdW1teVJlcXVlc3QuZ2V0KCksIGF1dGhlbnRpY2F0aW9u
LmdldCgpLCBsb2dpbkNGLmdldCgpLCBwYXNzd29yZENGLmdldCgpLCAwKTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChhcHBsaWVkQ3JlZGVudGlhbHMsIGFwcGxpZWRDcmVkZW50aWFscyk7CisKKyAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwcm94eUF1dGhvcml6YXRpb25TdHJpbmcoQWRv
cHRDRiwgQ0ZIVFRQTWVzc2FnZUNvcHlIZWFkZXJGaWVsZFZhbHVlKGR1bW15UmVxdWVzdC5nZXQo
KSwgQ0ZTVFIoIlByb3h5LUF1dGhvcml6YXRpb24iKSkpOworCisgICAgICAgIGlmICghcHJveHlB
dXRob3JpemF0aW9uU3RyaW5nKSB7CisgICAgICAgICAgICAvLyBGYWlscyBlLmcuIGZvciBOVExN
IGF1dGguCisgICAgICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbCh0aGlzLCBTb2NrZXRTdHJlYW1F
cnJvcigpKTsgLy8gRklYTUU6IFByb3ZpZGUgYSBzZW5zaWJsZSBlcnJvci4KKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNldHRpbmcgdGhlIGF1dGhvcml6YXRp
b24gcmVzdWx0cyBpbiBhIG5ldyBjb25uZWN0aW9uIGF0dGVtcHQuCisgICAgICAgIHdrU2V0Q09O
TkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbShtX3JlYWRTdHJlYW0uZ2V0KCksIHByb3h5
QXV0aG9yaXphdGlvblN0cmluZy5nZXQoKSk7CisgICAgICAgIG1fc2VudFN0b3JlZENyZWRlbnRp
YWxzID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBc2sg
dGhlIGNsaWVudCBpZiBjcmVkZW50aWFscyBjb3VsZCBub3QgYmUgZm91bmQuCisKKyAgICBtX2Ns
aWVudC0+ZGlkRmFpbCh0aGlzLCBTb2NrZXRTdHJlYW1FcnJvcigpKTsgLy8gRklYTUU6IFByb3Zp
ZGUgYSBzZW5zaWJsZSBlcnJvci4KK30KKwogQ0ZTdHJpbmdSZWYgU29ja2V0U3RyZWFtSGFuZGxl
Ojpjb3B5Q0ZTdHJlYW1EZXNjcmlwdGlvbih2b2lkKiBpbmZvKQogewogICAgIFNvY2tldFN0cmVh
bUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oaW5mbyk7
CkBAIC00MTIsNyArNDg0LDEzIEBAIHZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpyZWFkU3RyZWFt
Q2FsbGIKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBrQ0ZTdHJlYW1FdmVudEhhc0J5dGVzQXZh
aWxhYmxlOiB7CiAgICAgICAgIGlmIChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9y
Q29ubmVjdCkgewotICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBDT05ORUNUIHByb3h5IGNy
ZWRlbnRpYWxzIGhlcmUuCisgICAgICAgICAgICBpZiAobV9jb25uZWN0aW9uVHlwZSA9PSBDT05O
RUNUUHJveHkpIHsKKyAgICAgICAgICAgICAgICBSZXRhaW5QdHI8Q0ZIVFRQTWVzc2FnZVJlZj4g
cHJveHlSZXNwb25zZShBZG9wdENGLCB3a0NvcHlDT05ORUNUUHJveHlSZXNwb25zZShtX3JlYWRT
dHJlYW0uZ2V0KCksIG1faHR0cHNVUkwuZ2V0KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAocHJv
eHlSZXNwb25zZSAmJiAoNDA3ID09IENGSFRUUE1lc3NhZ2VHZXRSZXNwb25zZVN0YXR1c0NvZGUo
cHJveHlSZXNwb25zZS5nZXQoKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZENPTk5FQ1RD
cmVkZW50aWFscyhwcm94eVJlc3BvbnNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlm
IChtX2Nvbm5lY3RpbmdTdWJzdGF0ZSA9PSBXYWl0aW5nRm9yQ3JlZGVudGlhbHMpCiAgICAgICAg
ICAgICBicmVhazsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50
aWFsU3RvcmFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
bWFjL0NyZWRlbnRpYWxTdG9yYWdlTWFjLm1tCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL21hYy9DcmVkZW50aWFsU3RvcmFnZU1hYy5tbQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJDcmVkZW50aWFsU3RvcmFnZS5oIgorCisjaW5jbHVkZSAiQXV0aGVudGljYXRpb25NYWMuaCIK
KyNpbmNsdWRlICJDcmVkZW50aWFsLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ3JlZGVu
dGlhbCBDcmVkZW50aWFsU3RvcmFnZTo6Z2V0RnJvbVBlcnNpc3RlbnRTdG9yYWdlKGNvbnN0IFBy
b3RlY3Rpb25TcGFjZSYgcHJvdGVjdGlvblNwYWNlKQoreworICAgIE5TVVJMQ3JlZGVudGlhbCAq
Y3JlZGVudGlhbCA9IFtbTlNVUkxDcmVkZW50aWFsU3RvcmFnZSBzaGFyZWRDcmVkZW50aWFsU3Rv
cmFnZV0gZGVmYXVsdENyZWRlbnRpYWxGb3JQcm90ZWN0aW9uU3BhY2U6bWFjKHByb3RlY3Rpb25T
cGFjZSldOworICAgIHJldHVybiBjcmVkZW50aWFsID8gY29yZShjcmVkZW50aWFsKSA6IENyZWRl
bnRpYWwoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViS2l0L21hYy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDUx
MzQ3KQorKysgV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MiBAQAorMjAwOS0xMS0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NDQKKyAgICAgICAgU29ja2V0U3RyZWFt
SGFuZGxlQ0ZOZXQgc2hvdWxkIHN1cHBvcnQgQ09OTkVDVCBwcm94eSBjcmVkZW50aWFscworCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVtSW50ZXJmYWNlLm06IChJbml0V2ViQ29y
ZVN5c3RlbUludGVyZmFjZSk6IEFkZCBXS1NJIG1ldGhvZHMuCisKIDIwMDktMTEtMjMgIFNpbW9u
IEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYktpdC9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViU3lzdGVt
SW50ZXJmYWNlLm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJT
eXN0ZW1JbnRlcmZhY2UubQkocmV2aXNpb24gNTEzMjIpCisrKyBXZWJLaXQvbWFjL1dlYkNvcmVT
dXBwb3J0L1dlYlN5c3RlbUludGVyZmFjZS5tCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSw3
IEBAIHZvaWQgSW5pdFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uodm9pZCkKIAogICAgIElOSVQoQWR2
YW5jZURlZmF1bHRCdXR0b25QdWxzZUFuaW1hdGlvbik7CiAgICAgSU5JVChDR0NvbnRleHRHZXRT
aG91bGRTbW9vdGhGb250cyk7CisgICAgSU5JVChDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UpOwog
ICAgIElOSVQoQ3JlYXRlQ3VzdG9tQ0ZSZWFkU3RyZWFtKTsKICAgICBJTklUKENyZWF0ZU5TVVJM
Q29ubmVjdGlvbkRlbGVnYXRlUHJveHkpOwogICAgIElOSVQoRHJhd0NhcHNMb2NrSW5kaWNhdG9y
KTsKQEAgLTY1LDYgKzY2LDggQEAgdm9pZCBJbml0V2ViQ29yZVN5c3RlbUludGVyZmFjZSh2b2lk
KQogICAgIElOSVQoTWVkaWFDb250cm9sbGVyVGhlbWVBdmFpbGFibGUpOwogICAgIElOSVQoUG9w
dXBNZW51KTsKICAgICBJTklUKFNldENHRm9udFJlbmRlcmluZ01vZGUpOworICAgIElOSVQoU2V0
Q09OTkVDVFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbSk7CisgICAgSU5JVChTZXRDT05ORUNU
UHJveHlGb3JTdHJlYW0pOwogICAgIElOSVQoU2V0RHJhZ0ltYWdlKTsKICAgICBJTklUKFNldE5T
VVJMQ29ubmVjdGlvbkRlZmVyc0NhbGxiYWNrcyk7CiAgICAgSU5JVChTZXROU1VSTFJlcXVlc3RT
aG91bGRDb250ZW50U25pZmYpOwpJbmRleDogV2ViS2l0TGlicmFyaWVzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRMaWJyYXJpZXMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1MTM0NykKKysr
IFdlYktpdExpYnJhcmllcy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBA
QAorMjAwOS0xMS0yNCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzE4NDQKKyAgICAgICAgU29ja2V0U3RyZWFtSGFu
ZGxlQ0ZOZXQgc2hvdWxkIHN1cHBvcnQgQ09OTkVDVCBwcm94eSBjcmVkZW50aWFscworCisgICAg
ICAgICogV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg6CisgICAgICAgICogbGliV2ViS2l0U3lzdGVt
SW50ZXJmYWNlTGVvcGFyZC5hOgorICAgICAgICAqIGxpYldlYktpdFN5c3RlbUludGVyZmFjZVNu
b3dMZW9wYXJkLmE6CisgICAgICAgICogbGliV2ViS2l0U3lzdGVtSW50ZXJmYWNlVGlnZXIuYToK
KyAgICAgICAgKiB3aW4vaW5jbHVkZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVt
SW50ZXJmYWNlLmg6CisgICAgICAgICogd2luL2xpYi9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UubGli
OgorICAgICAgICAqIHdpbi9saWIvV2ViS2l0U3lzdGVtSW50ZXJmYWNlX2RlYnVnLmxpYjoKKyAg
ICAgICAgVXBkYXRlIFdlYktpdFN5c3RlbUludGVyZmFjZS4KKwogMjAwOS0xMS0yMiAgRGFuIEJl
cm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgQ2Fy
bHNvbi4KSW5kZXg6IFdlYktpdExpYnJhcmllcy9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRMaWJyYXJpZXMvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgJKHJldmlz
aW9uIDUxMzIyKQorKysgV2ViS2l0TGlicmFyaWVzL1dlYktpdFN5c3RlbUludGVyZmFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNzksNiArMjc5LDEwIEBAIHZvaWQgV0tTZXRDQUFuaW1hdGlvblZh
bHVlRnVuY3Rpb24oQ0FQcm8KIAogdW5zaWduZWQgV0tJbml0aWFsaXplTWF4aW11bUhUVFBDb25u
ZWN0aW9uQ291bnRQZXJIb3N0KHVuc2lnbmVkIHByZWZlcnJlZENvbm5lY3Rpb25Db3VudCk7CiAK
K3ZvaWQgV0tTZXRDT05ORUNUUHJveHlGb3JTdHJlYW0oQ0ZSZWFkU3RyZWFtUmVmLCBDRlN0cmlu
Z1JlZiBwcm94eUhvc3QsIENGTnVtYmVyUmVmIHByb3h5UG9ydCk7Cit2b2lkIFdLU2V0Q09OTkVD
VFByb3h5QXV0aG9yaXphdGlvbkZvclN0cmVhbShDRlJlYWRTdHJlYW1SZWYsIENGU3RyaW5nUmVm
IHByb3h5QXV0aG9yaXphdGlvblN0cmluZyk7CitDRkhUVFBNZXNzYWdlUmVmIFdLQ29weUNPTk5F
Q1RQcm94eVJlc3BvbnNlKENGUmVhZFN0cmVhbVJlZiwgQ0ZVUkxSZWYgcmVzcG9uc2VVUkwpOwor
CiBCT09MIFdLSXNMYXRjaGluZ1doZWVsRXZlbnQoTlNFdmVudCAqKTsKIAogI2lmbmRlZiBCVUlM
RElOR19PTl9USUdFUgpJbmRleDogV2ViS2l0TGlicmFyaWVzL3dpbi9pbmNsdWRlL1dlYktpdFN5
c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRMaWJyYXJpZXMvd2luL2luY2x1ZGUvV2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3Rl
bUludGVyZmFjZS5oCShyZXZpc2lvbiA1MTMyMikKKysrIFdlYktpdExpYnJhcmllcy93aW4vaW5j
bHVkZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIHR5cGVkZWYgc3RydWN0IF9DRlVSTFJlc3BvbnNl
KiBDRlVSTFJlc3AKIHR5cGVkZWYgc3RydWN0IE9wYXF1ZUNGSFRUUENvb2tpZVN0b3JhZ2UqICBD
RkhUVFBDb29raWVTdG9yYWdlUmVmOwogdHlwZWRlZiBzdHJ1Y3QgX0NGVVJMUmVxdWVzdCogQ0ZN
dXRhYmxlVVJMUmVxdWVzdFJlZjsKIHR5cGVkZWYgY29uc3Qgc3RydWN0IF9DRlVSTFJlcXVlc3Qq
IENGVVJMUmVxdWVzdFJlZjsKK3R5cGVkZWYgc3RydWN0IF9DRlVSTENyZWRlbnRpYWwqIENGVVJM
Q3JlZGVudGlhbFJlZjsKK3R5cGVkZWYgc3RydWN0IF9fQ0ZIVFRQTWVzc2FnZSogQ0ZIVFRQTWVz
c2FnZVJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IF9fQ0ZOdW1iZXIqIENGTnVtYmVyUmVmOwor
dHlwZWRlZiBzdHJ1Y3QgX19DRlJlYWRTdHJlYW0qIENGUmVhZFN0cmVhbVJlZjsKK3R5cGVkZWYg
Y29uc3Qgc3RydWN0IF9fQ0ZVUkwqIENGVVJMUmVmOwogCiB2b2lkIHdrU2V0Rm9udFNtb290aGlu
Z0xldmVsKGludCB0eXBlKTsKIGludCB3a0dldEZvbnRTbW9vdGhpbmdMZXZlbCgpOwpAQCAtNzcs
NiArODIsMTAgQEAgdm9pZCB3a0NGVVJMUmVxdWVzdFNldEhUVFBSZXF1ZXN0Qm9keVBhcgogCiB1
bnNpZ25lZCB3a0luaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QodW5z
aWduZWQgcHJlZmVycmVkQ29ubmVjdGlvbkNvdW50KTsKIAordm9pZCB3a1NldENPTk5FQ1RQcm94
eUZvclN0cmVhbShDRlJlYWRTdHJlYW1SZWYsIENGU3RyaW5nUmVmIHByb3h5SG9zdCwgQ0ZOdW1i
ZXJSZWYgcHJveHlQb3J0KTsKK3ZvaWQgd2tTZXRDT05ORUNUUHJveHlBdXRob3JpemF0aW9uRm9y
U3RyZWFtKENGUmVhZFN0cmVhbVJlZiwgQ0ZTdHJpbmdSZWYgcHJveHlBdXRob3JpemF0aW9uU3Ry
aW5nKTsKK0NGSFRUUE1lc3NhZ2VSZWYgd2tDb3B5Q09OTkVDVFByb3h5UmVzcG9uc2UoQ0ZSZWFk
U3RyZWFtUmVmLCBDRlVSTFJlZiByZXNwb25zZVVSTCk7CisKIENGU3RyaW5nUmVmIHdrQ0ZOZXR3
b3JrRXJyb3JHZXRMb2NhbGl6ZWREZXNjcmlwdGlvbihDRkluZGV4IGVycm9yQ29kZSk7CiAKICNl
bmRpZiAvLyBXZWJLaXRTeXN0ZW1JbnRlcmZhY2VfaApJbmRleDogV2ViS2l0TGlicmFyaWVzL2xp
YldlYktpdFN5c3RlbUludGVyZmFjZUxlb3BhcmQuYQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgoKSW5kZXg6IFdlYktpdExpYnJhcmllcy9saWJXZWJLaXRTeXN0ZW1J
bnRlcmZhY2VTbm93TGVvcGFyZC5hCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgpJbmRleDogV2ViS2l0TGlicmFyaWVzL2xpYldlYktpdFN5c3RlbUludGVyZmFjZVRp
Z2VyLmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCkluZGV4OiBX
ZWJLaXRMaWJyYXJpZXMvd2luL2xpYi9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UubGliCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgpJbmRleDogV2ViS2l0TGlicmFyaWVz
L3dpbi9saWIvV2ViS2l0U3lzdGVtSW50ZXJmYWNlX2RlYnVnLmxpYgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCg==
</data>
<flag name="review"
          id="25529"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>