<?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>191498</bug_id>
          
          <creation_ts>2018-11-09 16:30:06 -0800</creation_ts>
          <short_desc>[Curl] implement CertificateInfo::summaryInfo</short_desc>
          <delta_ts>2019-08-05 00:35: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 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>Curl, InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>191447</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Devin Rousso">hi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>basuke</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>galpeter</cc>
    
    <cc>hi</cc>
    
    <cc>takashi.komori</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1477180</commentid>
    <comment_count>0</comment_count>
    <who name="Devin Rousso">hi</who>
    <bug_when>2018-11-09 16:30:06 -0800</bug_when>
    <thetext>Used by WebInspector when showing secure certificate info per-request &lt;https://webkit.org/b/191447&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551146</commentid>
    <comment_count>1</comment_count>
      <attachid>373699</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-08 21:06:15 -0700</bug_when>
    <thetext>Created attachment 373699
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551147</commentid>
    <comment_count>2</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-08 21:41:05 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:28
&gt; +#include &quot;OpenSSLHelper.h&quot;

See https://webkit.org/code-style-guidelines/#include-config-h

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:168
&gt; +                char buf[256] { 0 };

Remove &apos;{ 0 }&apos;. clang-cl reports a warning.
char buf[16];

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:169
&gt; +                snprintf(buf, sizeof(buf), &quot;%d.%d.%d.%d&quot;, data[0], data[1], data[2], data[3]);

I think WTF::makeString is better than snprintf. See also Bug 199452.

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:174
&gt; +                for (int i = 0; i &lt; 8; i++) {

Move &apos;buf&apos; here.
char buf[5];

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:181
&gt; +class Ptr {

Can you use std::unique_ptr? You can specify a custom deleter. 
https://en.cppreference.com/w/cpp/memory/unique_ptr

&gt; LayoutTests/platform/wincairo/TestExpectations:1021
&gt; +webkit.org/b/191498 http/tests/inspector/network/getSerializedCertificate.html [ Pass ]

Can you just remove these two lines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551149</commentid>
    <comment_count>3</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-08 21:51:37 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:122
&gt; +    struct tm time { 0 };

clang-cl dislikes this. Replace &apos;{ 0 }&apos; with &apos;{ }&apos;.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:31
&gt; +#include &lt;wtf/vector.h&gt;

This is can be compiled on Windows. Because it is using case-insensitive file system.
#include &lt;wtf/Optional.h&gt;
#include &lt;wtf/Vector.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551155</commentid>
    <comment_count>4</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-08 23:25:20 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #2)
&gt; &gt; LayoutTests/platform/wincairo/TestExpectations:1021
&gt; &gt; +webkit.org/b/191498 http/tests/inspector/network/getSerializedCertificate.html [ Pass ]
&gt; 
&gt; Can you just remove these two lines?

As wincairo/TestExpectations skips whole http/tests/inspector/ directory first, we have to specify newly passed tests as [ Pass ].
If possible, we want specify &quot;http/tests/inspector/network [ Pass ]&quot; but we can&apos;t do that because not all inspector/network tests don&apos;t pass now on wincairo.

Is there any better way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551159</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-08 23:45:00 -0700</bug_when>
    <thetext>(In reply to Takashi Komori from comment #4)

Got it. Np.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551161</commentid>
    <comment_count>6</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-09 00:09:12 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:143
&gt; +        time.tm_sec = (data[8] - &apos;0&apos;) * 10 + (data[9] - &apos;0&apos;);

Is it safe to ignore fractional second and timezone parts?
What about using ASN1_TIME_to_tm?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551163</commentid>
    <comment_count>7</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-09 00:15:04 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:76
&gt; +        auto certificateChain = certificateInfo.certificateChain();

This is a common C++ pit-hole. The type of certificateInfo.certificateChain() is &quot;const Vector&lt;Certificate&gt;&amp;&quot;, but type of auto drops &amp; and &quot;const Vector&lt;Certificate&gt;&quot;.
Then, this sentence copies the Vector.
auto&amp; certificateChain = certificateInfo.certificateChain();

&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:80
&gt; +        for (auto certificate : certificateChain) {

auto&amp; certificate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551164</commentid>
    <comment_count>8</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-09 00:17:33 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt;&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:76
&gt;&gt; +        auto certificateChain = certificateInfo.certificateChain();
&gt; 
&gt; This is a common C++ pit-hole. The type of certificateInfo.certificateChain() is &quot;const Vector&lt;Certificate&gt;&amp;&quot;, but type of auto drops &amp; and &quot;const Vector&lt;Certificate&gt;&quot;.
&gt; Then, this sentence copies the Vector.
&gt; auto&amp; certificateChain = certificateInfo.certificateChain();

Not copying, but just ref-ing. However we should avoid such unnecessary ref-ing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551167</commentid>
    <comment_count>9</comment_count>
      <attachid>373699</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-09 01:00:55 -0700</bug_when>
    <thetext>Comment on attachment 373699
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:102
&gt; +            WebCore::CertificateInfo::Certificate certificate(certSize);

Before allocating the buffer certificate, you should check the decoder remaining data size.
decoder.bufferIsLargeEnoughToContain&lt;char&gt;(certSize)
You can see other decoder example by grepping &quot;bufferIsLargeEnoughToContain&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551937</commentid>
    <comment_count>10</comment_count>
      <attachid>373889</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 18:46:52 -0700</bug_when>
    <thetext>Created attachment 373889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551944</commentid>
    <comment_count>11</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 18:55:16 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #2)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:28
&gt; &gt; +#include &quot;OpenSSLHelper.h&quot;
&gt; 
&gt; See https://webkit.org/code-style-guidelines/#include-config-h
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:168
&gt; &gt; +                char buf[256] { 0 };
&gt; 
&gt; Remove &apos;{ 0 }&apos;. clang-cl reports a warning.
&gt; char buf[16];
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:169
&gt; &gt; +                snprintf(buf, sizeof(buf), &quot;%d.%d.%d.%d&quot;, data[0], data[1], data[2], data[3]);
&gt; 
&gt; I think WTF::makeString is better than snprintf. See also Bug 199452.
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:174
&gt; &gt; +                for (int i = 0; i &lt; 8; i++) {
&gt; 
&gt; Move &apos;buf&apos; here.
&gt; char buf[5];

Stop using char buffer and snprintf.


&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:181
&gt; &gt; +class Ptr {
&gt; 
&gt; Can you use std::unique_ptr? You can specify a custom deleter. 
&gt; https://en.cppreference.com/w/cpp/memory/unique_ptr
&gt; 

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551946</commentid>
    <comment_count>12</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 18:56:12 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #3)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:122
&gt; &gt; +    struct tm time { 0 };
&gt; 
&gt; clang-cl dislikes this. Replace &apos;{ 0 }&apos; with &apos;{ }&apos;.

Fixed.

 
&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:31
&gt; &gt; +#include &lt;wtf/vector.h&gt;
&gt; 
&gt; This is can be compiled on Windows. Because it is using case-insensitive
&gt; file system.
&gt; #include &lt;wtf/Optional.h&gt;
&gt; #include &lt;wtf/Vector.h&gt;

Fiexed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551960</commentid>
    <comment_count>13</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 19:24:37 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:143
&gt; &gt; +        time.tm_sec = (data[8] - &apos;0&apos;) * 10 + (data[9] - &apos;0&apos;);
&gt; 
&gt; Is it safe to ignore fractional second and timezone parts?
&gt; What about using ASN1_TIME_to_tm?

Unfortunately libressl doesn&apos;t seem to have the function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551961</commentid>
    <comment_count>14</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 19:27:36 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #8)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:76
&gt; &gt;&gt; +        auto certificateChain = certificateInfo.certificateChain();
&gt; &gt; 
&gt; &gt; This is a common C++ pit-hole. The type of certificateInfo.certificateChain() is &quot;const Vector&lt;Certificate&gt;&amp;&quot;, but type of auto drops &amp; and &quot;const Vector&lt;Certificate&gt;&quot;.
&gt; &gt; Then, this sentence copies the Vector.
&gt; &gt; auto&amp; certificateChain = certificateInfo.certificateChain();
&gt; 
&gt; Not copying, but just ref-ing. However we should avoid such unnecessary
&gt; ref-ing.

Changed to auto&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551962</commentid>
    <comment_count>15</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 19:28:16 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #9)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfo.h:102
&gt; &gt; +            WebCore::CertificateInfo::Certificate certificate(certSize);
&gt; 
&gt; Before allocating the buffer certificate, you should check the decoder
&gt; remaining data size.
&gt; decoder.bufferIsLargeEnoughToContain&lt;char&gt;(certSize)
&gt; You can see other decoder example by grepping &quot;bufferIsLargeEnoughToContain&quot;.

decoder.decode() and decoder.decodeFixedLengthData() call bufferIsLargeEnoughToContain internally.
Do we have to call that before allocating Certificate again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551972</commentid>
    <comment_count>16</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-10 20:23:11 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; Comment on attachment 373699 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373699&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:143
&gt; &gt; +        time.tm_sec = (data[8] - &apos;0&apos;) * 10 + (data[9] - &apos;0&apos;);
&gt; 
&gt; Is it safe to ignore fractional second and timezone parts?


According to RFC, fractional second must not be included.

https://tools.ietf.org/html/rfc5280#section-4.1.2.5.2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551997</commentid>
    <comment_count>17</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-11 00:24:22 -0700</bug_when>
    <thetext>(In reply to Takashi Komori from comment #15)
&gt; decoder.decode() and decoder.decodeFixedLengthData() call
&gt; bufferIsLargeEnoughToContain internally.
&gt; Do we have to call that before allocating Certificate again?

I don&apos;t know the reason.
Since this part is security sensitive, it think we should follow other code.
See Bug 43647, and 
https://github.com/WebKit/webkit/blob/71c68d0d57514f7cc2514d8d167468e5cc7e3a73/Source/WebKit/Platform/IPC/ArgumentCoders.cpp#L99</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551998</commentid>
    <comment_count>18</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-11 00:31:59 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #17)
&gt; I don&apos;t know the reason.

I guess it can crash UI process if the compromised web process sends very large size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552016</commentid>
    <comment_count>19</comment_count>
      <attachid>373889</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-11 03:44:13 -0700</bug_when>
    <thetext>Comment on attachment 373889
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:73
&gt; +    if (commonNameEntryData &lt; 0)

The type of return value of X509_NAME_ENTRY_get_data is ASN1_STRING pointer. Why do you compare a pointer with &lt;0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552022</commentid>
    <comment_count>20</comment_count>
      <attachid>373889</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-11 04:09:21 -0700</bug_when>
    <thetext>Comment on attachment 373889
Patch

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

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:76
&gt; +    auto commonName = OpenSSL::createPtr&lt;uint8_t&gt;();

Looks so bad. The previous your code looks better: OpenSSL::Ptr commonName;
You can specify a lambda as deleter of std::unique_ptr. Google &quot;lambda deleter std::unique_ptr&quot;.
You can improve more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552049</commentid>
    <comment_count>21</comment_count>
      <attachid>373889</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-11 06:55:26 -0700</bug_when>
    <thetext>Comment on attachment 373889
Patch

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

&gt;&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:76
&gt;&gt; +    auto commonName = OpenSSL::createPtr&lt;uint8_t&gt;();
&gt; 
&gt; Looks so bad. The previous your code looks better: OpenSSL::Ptr commonName;
&gt; You can specify a lambda as deleter of std::unique_ptr. Google &quot;lambda deleter std::unique_ptr&quot;.
&gt; You can improve more.

Sorry, I didn&apos;t understand the problem.
Now I understand why we shouldn&apos;t use std::unique_ptr for this purpose.

What about the following code?:

static auto toASN1String(const X509_NAME* name)
{
    auto deleter = [](unsigned char* ptr) {
                       if (ptr)
                           free(ptr);
    };
    unsigned char* buffer;
    ASN1_STRING_to_UTF8(&amp;buffer, name);
    return std::unique_ptr&lt;unsigned char[], decltype(deleter)&gt;(buffer, deleter);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1552479</commentid>
    <comment_count>22</comment_count>
      <attachid>373889</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-07-12 11:50:07 -0700</bug_when>
    <thetext>Comment on attachment 373889
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This patch makes WebInspector show summary of certificates.

This sounds good.

&gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:104
&gt; +static Optional&lt;Seconds&gt; convertASN1TimeToSeconds(const ASN1_TIME* ans1Time)

I think things like this ought to go in OpenSSLHelper because it&apos;s specific to OpenSSL, not libCURL.  Also, there&apos;s a lot of custom parsing code here.  It would be good to minimize that.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:41
&gt; +    X509Ref(::X509* x509, bool isOwner = true)

I think this design is lending itself to strange lifetime management bugs without a good reason...

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:107
&gt; +    X509Ref item(unsigned i) { return X509Ref { sk_X509_value(m_certs, i), false}; }

... If this instead returned an X509* we wouldn&apos;t need this &quot;sometimes an X509Ref points to something that something else manages&quot; strangeness.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:181
&gt; +using Ptr = std::unique_ptr&lt;T*, WTF::Function&lt;void(T**)&gt;&gt;;

I don&apos;t think this is a good name.  I think each type should have its own pointer type.  This is what boringssl did, and what I did in https://trac.webkit.org/changeset/244568/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554162</commentid>
    <comment_count>23</comment_count>
      <attachid>374451</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-19 01:50:39 -0700</bug_when>
    <thetext>Created attachment 374451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554163</commentid>
    <comment_count>24</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-19 01:51:41 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #17)
&gt; (In reply to Takashi Komori from comment #15)
&gt; &gt; decoder.decode() and decoder.decodeFixedLengthData() call
&gt; &gt; bufferIsLargeEnoughToContain internally.
&gt; &gt; Do we have to call that before allocating Certificate again?
&gt; 
&gt; I don&apos;t know the reason.
&gt; Since this part is security sensitive, it think we should follow other code.
&gt; See Bug 43647, and 
&gt; https://github.com/WebKit/webkit/blob/
&gt; 71c68d0d57514f7cc2514d8d167468e5cc7e3a73/Source/WebKit/Platform/IPC/
&gt; ArgumentCoders.cpp#L99

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554164</commentid>
    <comment_count>25</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-19 01:52:07 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #19)
&gt; Comment on attachment 373889 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373889&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:73
&gt; &gt; +    if (commonNameEntryData &lt; 0)
&gt; 
&gt; The type of return value of X509_NAME_ENTRY_get_data is ASN1_STRING pointer.
&gt; Why do you compare a pointer with &lt;0?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554166</commentid>
    <comment_count>26</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-19 02:02:15 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #22)
&gt; Comment on attachment 373889 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373889&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        This patch makes WebInspector show summary of certificates.
&gt; 
&gt; This sounds good.
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:104
&gt; &gt; +static Optional&lt;Seconds&gt; convertASN1TimeToSeconds(const ASN1_TIME* ans1Time)
&gt; 
&gt; I think things like this ought to go in OpenSSLHelper because it&apos;s specific
&gt; to OpenSSL, not libCURL.  Also, there&apos;s a lot of custom parsing code here. 
&gt; It would be good to minimize that.
&gt; 

Thank you for your comments.
We moved it to OpenSSLHelper.cpp. 

&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:41
&gt; &gt; +    X509Ref(::X509* x509, bool isOwner = true)
&gt; 
&gt; I think this design is lending itself to strange lifetime management bugs
&gt; without a good reason...

Changed X509Ref more simpler.

&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:107
&gt; &gt; +    X509Ref item(unsigned i) { return X509Ref { sk_X509_value(m_certs, i), false}; }
&gt; 
&gt; ... If this instead returned an X509* we wouldn&apos;t need this &quot;sometimes an
&gt; X509Ref points to something that something else manages&quot; strangeness.

Changed to return X509*

&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.h:181
&gt; &gt; +using Ptr = std::unique_ptr&lt;T*, WTF::Function&lt;void(T**)&gt;&gt;;
&gt; 
&gt; I don&apos;t think this is a good name.  I think each type should have its own
&gt; pointer type.  This is what boringssl did, and what I did in
&gt; https://trac.webkit.org/changeset/244568/webkit

We reconsidered names of unique pointers and changed.
Thank you for your advice! It was great help!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554170</commentid>
    <comment_count>27</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-19 02:13:40 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #20)
&gt; Comment on attachment 373889 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=373889&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfoCurl.cpp:76
&gt; &gt; +    auto commonName = OpenSSL::createPtr&lt;uint8_t&gt;();
&gt; 
&gt; Looks so bad. The previous your code looks better: OpenSSL::Ptr commonName;
&gt; You can specify a lambda as deleter of std::unique_ptr. Google &quot;lambda
&gt; deleter std::unique_ptr&quot;.
&gt; You can improve more.

By reconsidering how to use unique pointer, converting function became simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554176</commentid>
    <comment_count>28</comment_count>
      <attachid>374451</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-07-19 03:48:39 -0700</bug_when>
    <thetext>Comment on attachment 374451
Patch

Attachment 374451 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/12771851

New failing tests:
mozilla-tests.yaml/js1_5/Array/regress-101964.js.mozilla-baseline
apiTests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554224</commentid>
    <comment_count>29</comment_count>
      <attachid>374451</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-07-19 09:08:29 -0700</bug_when>
    <thetext>Comment on attachment 374451
Patch

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

&gt; Source/WTF/wtf/persistence/PersistentCoders.h:153
&gt; -        encoder.encodeFixedLengthData(reinterpret_cast&lt;const uint8_t*&gt;(vector.data()), vector.size() * sizeof(T), alignof(T));
&gt; +        encoder.encodeFixedLengthData(reinterpret_cast&lt;const uint8_t*&gt;(vector.data()), vector.size() * sizeof(T));

Why does this no longer match ArgumentCoders.h? Why did you make this change?

&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:84
&gt; +    static bool decode(Decoder&amp; decoder, WebCore::CertificateInfo&amp; certificateInfo)

Please use modern decoding that returns an Optional&lt;WebCore::CertificateInfo&gt;. Decoders that return a bool prevent us from removing default constructors in decodable classes.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:56
&gt; +        if (*ptr)
&gt; +            OPENSSL_free(*ptr);

How do we know there will only be one thing needing OPENSSL_free here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554987</commentid>
    <comment_count>30</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-22 20:16:04 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #29)
&gt; Comment on attachment 374451 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374451&amp;action=review
&gt; 
&gt; &gt; Source/WTF/wtf/persistence/PersistentCoders.h:153
&gt; &gt; -        encoder.encodeFixedLengthData(reinterpret_cast&lt;const uint8_t*&gt;(vector.data()), vector.size() * sizeof(T), alignof(T));
&gt; &gt; +        encoder.encodeFixedLengthData(reinterpret_cast&lt;const uint8_t*&gt;(vector.data()), vector.size() * sizeof(T));
&gt; 
&gt; Why does this no longer match ArgumentCoders.h? Why did you make this change?

ArgumentCoders.h and PresistentCoders.h are alike but they are unrelated.
Because they are separated by namespace, changing PersistentCoders doesn&apos;t affect ArgumentCoders.

This change aimed to use Persistence::VectorCoder to simplify code.
Before the change, argument number of Persistence::Encoder::encodeFixedLengthData was wrong but this template function didn&apos;t raise compile errors as it is not reffered anywhere and didn&apos;t raise compile errors.

&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfo.h:84
&gt; &gt; +    static bool decode(Decoder&amp; decoder, WebCore::CertificateInfo&amp; certificateInfo)
&gt; 
&gt; Please use modern decoding that returns an
&gt; Optional&lt;WebCore::CertificateInfo&gt;. Decoders that return a bool prevent us
&gt; from removing default constructors in decodable classes.

Other ports use PersistentDecoders for encoding/decoding certificates too and replacing coder affects other ports.
Should we replace PersistentCoders by ArgumentCoders or something modern coder?
 
&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:56
&gt; &gt; +        if (*ptr)
&gt; &gt; +            OPENSSL_free(*ptr);
&gt; 
&gt; How do we know there will only be one thing needing OPENSSL_free here?

Do you mean we should consider not only buffer we got from ASN1_STRING_to_UTF8other but also other type objects we have to free with OPENSSL_free?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555114</commentid>
    <comment_count>31</comment_count>
      <attachid>374451</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-07-23 12:55:44 -0700</bug_when>
    <thetext>Comment on attachment 374451
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:56
&gt;&gt;&gt; +            OPENSSL_free(*ptr);
&gt;&gt; 
&gt;&gt; How do we know there will only be one thing needing OPENSSL_free here?
&gt; 
&gt; Do you mean we should consider not only buffer we got from ASN1_STRING_to_UTF8other but also other type objects we have to free with OPENSSL_free?

If this is only to be used for that type, it should not be in a deleter&lt;unsigned char**&gt;, but rather in a class type that can only be used for a buffer you got from ASN1_STRING_to_UTF8other</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556513</commentid>
    <comment_count>32</comment_count>
      <attachid>375068</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-29 00:57:45 -0700</bug_when>
    <thetext>Created attachment 375068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556517</commentid>
    <comment_count>33</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-29 01:04:31 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #31)
&gt; Comment on attachment 374451 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374451&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:56
&gt; &gt;&gt;&gt; +            OPENSSL_free(*ptr);
&gt; &gt;&gt; 
&gt; &gt;&gt; How do we know there will only be one thing needing OPENSSL_free here?
&gt; &gt; 
&gt; &gt; Do you mean we should consider not only buffer we got from ASN1_STRING_to_UTF8other but also other type objects we have to free with OPENSSL_free?
&gt; 
&gt; If this is only to be used for that type, it should not be in a
&gt; deleter&lt;unsigned char**&gt;, but rather in a class type that can only be used
&gt; for a buffer you got from ASN1_STRING_to_UTF8other

Stopped using deleter&lt;unsigned char**&gt; because we can free buffer locally in convert function.

Stopped using deleter&lt;BUF_MEM&gt; and add getting data functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557183</commentid>
    <comment_count>34</comment_count>
      <attachid>375068</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-07-30 22:04:02 -0700</bug_when>
    <thetext>Comment on attachment 375068
Patch

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

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:46
&gt; +using X509Ref = std::unique_ptr&lt;X509, deleter&lt;X509&gt;&gt;;

I don&apos;t think X509Ref is a good name because this is not ref-counted object and this can be nullptr.
I think you don&apos;t need to type aliasing becuase this type is used only once.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:138
&gt; +        if (auto x509 = ::PEM_read_bio_X509(m_bio, nullptr, 0, nullptr))

return X509Ref(::PEM_read_bio_X509(m_bio, nullptr, 0, nullptr));

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:184
&gt; +    return WTFMove(result);

You should remove WTFMove.
return result;
https://lists.webkit.org/pipermail/webkit-dev/2019-March/030548.html

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:205
&gt; +    auto commonName = toString(commonNameEntryData);

How about simply returning the return value of toString?
return toString(commonNameEntryData);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557509</commentid>
    <comment_count>35</comment_count>
      <attachid>375286</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-31 20:39:24 -0700</bug_when>
    <thetext>Created attachment 375286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557511</commentid>
    <comment_count>36</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-07-31 20:41:27 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #34)
&gt; Comment on attachment 375068 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375068&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:46
&gt; &gt; +using X509Ref = std::unique_ptr&lt;X509, deleter&lt;X509&gt;&gt;;
&gt; 
&gt; I don&apos;t think X509Ref is a good name because this is not ref-counted object
&gt; and this can be nullptr.
&gt; I think you don&apos;t need to type aliasing becuase this type is used only once.

Removed type aliasing.

&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:138
&gt; &gt; +        if (auto x509 = ::PEM_read_bio_X509(m_bio, nullptr, 0, nullptr))
&gt; 
&gt; return X509Ref(::PEM_read_bio_X509(m_bio, nullptr, 0, nullptr));

Fixed.
 
&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:184
&gt; &gt; +    return WTFMove(result);
&gt; 
&gt; You should remove WTFMove.
&gt; return result;
&gt; https://lists.webkit.org/pipermail/webkit-dev/2019-March/030548.html

Fixed.

&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:205
&gt; &gt; +    auto commonName = toString(commonNameEntryData);
&gt; 
&gt; How about simply returning the return value of toString?
&gt; return toString(commonNameEntryData);

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557547</commentid>
    <comment_count>37</comment_count>
      <attachid>375286</attachid>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-08-01 00:27:33 -0700</bug_when>
    <thetext>Comment on attachment 375286
Patch

Attachment 375286 did not pass jsc-ews (mac):
Output: https://webkit-queues.webkit.org/results/12845399

New failing tests:
mozilla-tests.yaml/js1_5/Array/regress-101964.js.mozilla-llint</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557588</commentid>
    <comment_count>38</comment_count>
      <attachid>375286</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-01 07:04:49 -0700</bug_when>
    <thetext>Comment on attachment 375286
Patch

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

r=me with a few nits.
ews failure is unrelated

&gt; Source/WebCore/platform/network/curl/CertificateInfo.h:-79
&gt; -    static bool decode(Decoder&amp;, WebCore::CertificateInfo&amp;)

Please use modern decoding that returns an Optional&lt;WebCore::CertificateInfo&gt;. Decoders that return a bool prevent us from removing default constructors in decodable classes.

&gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:171
&gt; +static Optional&lt;String&gt; toString(const ASN1_STRING* name)

These can just return a String, which has a null state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1557923</commentid>
    <comment_count>39</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-08-02 03:47:20 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #38)
&gt; &gt; Source/WebCore/platform/network/curl/CertificateInfo.h:-79
&gt; &gt; -    static bool decode(Decoder&amp;, WebCore::CertificateInfo&amp;)
&gt; 
&gt; Please use modern decoding that returns an
&gt; Optional&lt;WebCore::CertificateInfo&gt;. Decoders that return a bool prevent us
&gt; from removing default constructors in decodable classes.

Changing decoder&apos;s style affects other ports so we will fix it in this ticket.
https://bugs.webkit.org/show_bug.cgi?id=200387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558424</commentid>
    <comment_count>40</comment_count>
      <attachid>375520</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-08-04 22:41:21 -0700</bug_when>
    <thetext>Created attachment 375520
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558425</commentid>
    <comment_count>41</comment_count>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-08-04 22:43:27 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #38)
&gt; Comment on attachment 375286 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=375286&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/network/curl/OpenSSLHelper.cpp:171
&gt; &gt; +static Optional&lt;String&gt; toString(const ASN1_STRING* name)
&gt; 
&gt; These can just return a String, which has a null state.

Changed to return String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558428</commentid>
    <comment_count>42</comment_count>
      <attachid>375522</attachid>
    <who name="Takashi Komori">takashi.komori</who>
    <bug_when>2019-08-04 23:42:00 -0700</bug_when>
    <thetext>Created attachment 375522
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558435</commentid>
    <comment_count>43</comment_count>
      <attachid>375522</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-05 00:34:30 -0700</bug_when>
    <thetext>Comment on attachment 375522
Patch for landing

Clearing flags on attachment: 375522

Committed r248268: &lt;https://trac.webkit.org/changeset/248268&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558436</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-05 00:34:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1558437</commentid>
    <comment_count>45</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-05 00:35:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/53931826&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373699</attachid>
            <date>2019-07-08 21:06:15 -0700</date>
            <delta_ts>2019-07-10 18:46:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190709130219.patch</filename>
            <type>text/plain</type>
            <size>23766</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJhMjFjZGNhZDBjYjA5
NTFiNTRiZGY0ZmQ4NzUzNjYzY2YwNmUxMS4uZTM5YmQzNjEzYjJmZDAyYmFiNTAyOTBmYmJlNDZh
NDQ2MTEyMTY1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE5LTA3LTA4ICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBp
bXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1tYXJ5SW5mbworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDk4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IENlcnRpZmljYWVJbmZvOjpT
dW1tYXJ5SW5mby4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBXZWJJbnNwZWN0b3Igc2hvdyBz
dW1tYXJ5IG9mIGNlcnRpZmljYXRlcy4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvbmV0d29yay9yZXNvdXJjZS1zZWN1cml0eS1jZXJ0aWZpY2F0ZS5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldENvbW1vbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3ViamVjdE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFTTjFUaW1lVG9TZWNvbmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldFN1YmplY3RBbHROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVy
Ojpjb2xsZWN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OnZlcmlm
eUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnBlbURhdGFGcm9tQ3R4KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YWNrT2ZYNTA5OjpTdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdGFja09mWDUwOTo6flN0YWNrT2ZYNTA5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0YWNrT2ZYNTA5Ojpjb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dGFja09mWDUwOTo6aXRlbSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QklPSG9sZGVyOjpCSU9Ib2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QklPSG9sZGVyOjp+QklPSG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJJT0hvbGRlcjo6d3JpdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVy
Ojphc0NlcnRpZmljYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvT3BlblNTTEhlbHBlci5oOiBBZGRlZC4KKyAgICAgICAgKE9wZW5TU0w6Olg1MDlSZWY6Olg1
MDlSZWYpOgorICAgICAgICAoT3BlblNTTDo6WDUwOVJlZjo6flg1MDlSZWYpOgorICAgICAgICAo
T3BlblNTTDo6WDUwOVJlZjo6b3BlcmF0b3IgY29uc3QgOjpYNTA5KiBjb25zdCk6CisgICAgICAg
IChPcGVuU1NMOjpYNTA5UmVmOjpvcGVyYXRvciA6Olg1MDkqKToKKyAgICAgICAgKE9wZW5TU0w6
OlN0YWNrT2ZHZW5lcmFsTmFtZTo6U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9wZW5T
U0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6flN0YWNrT2ZHZW5lcmFsTmFtZSk6CisgICAgICAgIChP
cGVuU1NMOjpTdGFja09mR2VuZXJhbE5hbWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoT3Bl
blNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lOjpjb3VudCk6CisgICAgICAgIChPcGVuU1NMOjpTdGFj
a09mR2VuZXJhbE5hbWU6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6OlN0
YWNrT2ZYNTA5KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNrT2ZYNTA5Ojp+U3RhY2tPZlg1MDkp
OgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6OmNvdW50KToKKyAgICAgICAgKE9wZW5T
U0w6OlN0YWNrT2ZYNTA5OjppdGVtKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6QklPKToKKyAg
ICAgICAgKE9wZW5TU0w6OkJJTzo6fkJJTyk6CisgICAgICAgIChPcGVuU1NMOjpCSU86OndyaXRl
KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6cmVhZFg1MDkpOgorICAgICAgICAoT3BlblNTTDo6
QklPOjpnZXRNZW1EYXRhIGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0KToKKyAg
ICAgICAgKE9wZW5TU0w6OkJ1Zk1lbTo6fkJ1Zk1lbSk6CisgICAgICAgIChPcGVuU1NMOjpCdWZN
ZW06Om9wZXJhdG9yIGNvbnN0IEJVRl9NRU0qICBjb25zdCk6CisgICAgICAgIChPcGVuU1NMOjpC
dWZNZW06Om9wZXJhdG9yIEJVRl9NRU0qICk6CisgICAgICAgIChPcGVuU1NMOjpCdWZNZW06Omdl
dCk6CisgICAgICAgIChPcGVuU1NMOjpQdHI6OlB0cik6CisgICAgICAgIChPcGVuU1NMOjpQdHI6
On5QdHIpOgorICAgICAgICAoT3BlblNTTDo6UHRyOjphZG9wdCk6CisgICAgICAgIChPcGVuU1NM
OjpQdHI6OmdldCBjb25zdCk6CisgICAgICAgIChPcGVuU1NMOjpQdHI6OmdldCk6CisgICAgICAg
IChPcGVuU1NMOjpQdHI6Om9wZXJhdG9yIGNvbnN0IFQqIGNvbnN0KToKKyAgICAgICAgKE9wZW5T
U0w6OlB0cjo6b3BlcmF0b3IgVCopOgorICAgICAgICAoT3BlblNTTDo6UHRyOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKE9wZW5TU0w6OlB0cjo6b3BlcmF0b3IgJik6CisKIDIwMTktMDctMDgg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIERvY3VtZW50
Ojpwb3N0VGFzaygpIHNhZmUgdG8gY2FsbCBmcm9tIGEgYmFja2dyb3VuZCB0aHJlYWQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUlu
Zm8uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUlu
Zm8uaAppbmRleCBlNTdmM2JkMGE0ODkwOGU1M2ZlNThjOWFlNGQ0YWY1NjAxZmEwZTAwLi40ODYx
ZTBkNDM4ZGEwMjhhYTE4ZWI5MjI3Y2I1N2QyNjY5ZWJhMzgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCkBAIC00
OSw3ICs0OSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnNOb25Sb290U0hBMVNpZ25l
ZENlcnRpZmljYXRlKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0K
IAotICAgIE9wdGlvbmFsPFN1bW1hcnlJbmZvPiBzdW1tYXJ5SW5mbygpIGNvbnN0IHsgbm90SW1w
bGVtZW50ZWQoKTsgcmV0dXJuIFdURjo6bnVsbG9wdDsgfQorICAgIE9wdGlvbmFsPFN1bW1hcnlJ
bmZvPiBzdW1tYXJ5SW5mbygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jZXJ0aWZpY2F0ZUNoYWluLmlzRW1wdHkoKTsgfQogCkBAIC03MSwxNSArNzEsNDMg
QEAgbmFtZXNwYWNlIFdURiB7CiBuYW1lc3BhY2UgUGVyc2lzdGVuY2UgewogCiB0ZW1wbGF0ZTw+
IHN0cnVjdCBDb2RlcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+IHsKLSAgICBzdGF0aWMgdm9p
ZCBlbmNvZGUoRW5jb2RlciYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCisgICAg
c3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNvbnN0IFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvKQogICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZUNoYWluID0gY2VydGlmaWNhdGVJbmZvLmNl
cnRpZmljYXRlQ2hhaW4oKTsKKworICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby52
ZXJpZmljYXRpb25FcnJvcigpOworICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlQ2hhaW4u
c2l6ZSgpOworICAgICAgICBmb3IgKGF1dG8gY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWlu
KSB7CisgICAgICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlLnNpemUoKTsKKyAgICAgICAg
ICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNlcnRpZmljYXRlLmRhdGEoKSwgY2Vy
dGlmaWNhdGUuc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKKyAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCiAgICAgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGludCB2ZXJpZmljYXRpb25FcnJvcjsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZSh2ZXJpZmljYXRpb25FcnJvcikpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IG51bU9mQ2VydCA9IDA7CisgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUobnVtT2ZDZXJ0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlQ2hhaW4gY2VydGlmaWNh
dGVDaGFpbjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNlcnQ7IGkrKykg
eworICAgICAgICAgICAgc2l6ZV90IGNlcnRTaXplID0gMDsKKyAgICAgICAgICAgIGlmICghZGVj
b2Rlci5kZWNvZGUoY2VydFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBjZXJ0aWZp
Y2F0ZShjZXJ0U2l6ZSk7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5n
dGhEYXRhKGNlcnRpZmljYXRlLmRhdGEoKSwgY2VydGlmaWNhdGUuc2l6ZSgpKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBw
ZW5kKFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRpZmlj
YXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RG
TW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIzNDk0MjM4ZmE1MDlk
MjRmZjkxMTA4YTkzZTE3Li4wODgwMTk1OTk5YTJmYjI2MGM5ZjdiMmRkZDczYjM3YmQzMTc3YmM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlm
aWNhdGVJbmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDggKzI1LDExIEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKKyNpbmNsdWRlICJPcGVu
U1NMSGVscGVyLmgiCiAKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KKyNpbmNs
dWRlIDx3dGYvU2Vjb25kcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
IAogI2lmIFVTRShDVVJMKQogCkBAIC01MCw2ICs1MywxNjUgQEAgQ2VydGlmaWNhdGVJbmZvOjpD
ZXJ0aWZpY2F0ZSBDZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShjb25zdCB1aW50OF90
KiBidWYKICAgICByZXR1cm4gY2VydGlmaWNhdGU7CiB9CiAKK3N0YXRpYyBPcHRpb25hbDxTdHJp
bmc+IGdldENvbW1vbk5hbWUoY29uc3QgWDUwOSogeDUwOSkKK3sKKyAgICBhdXRvIHN1YmplY3RO
YW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHg1MDkpOworICAgIGlmICghc3ViamVjdE5hbWUp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGluZGV4ID0gWDUwOV9O
QU1FX2dldF9pbmRleF9ieV9OSUQoc3ViamVjdE5hbWUsIE5JRF9jb21tb25OYW1lLCAtMSk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1
dG8gY29tbW9uTmFtZUVudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShzdWJqZWN0TmFtZSwgaW5k
ZXgpOworICAgIGlmIChjb21tb25OYW1lRW50cnkgPCAwKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgYXV0byBjb21tb25OYW1lRW50cnlEYXRhID0gWDUwOV9OQU1FX0VOVFJZ
X2dldF9kYXRhKGNvbW1vbk5hbWVFbnRyeSk7CisgICAgaWYgKGNvbW1vbk5hbWVFbnRyeURhdGEg
PCAwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgT3BlblNTTDo6UHRyPHVp
bnQ4X3Q+IGNvbW1vbk5hbWU7CisgICAgYXV0byBjb21tb25OYW1lTGVuZ3RoID0gQVNOMV9TVFJJ
TkdfdG9fVVRGOCgmY29tbW9uTmFtZSwgY29tbW9uTmFtZUVudHJ5RGF0YSk7CisgICAgaWYgKGNv
bW1vbk5hbWVMZW5ndGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBTdHJpbmcoY29tbW9uTmFtZSwgY29tbW9uTmFtZUxlbmd0aCk7Cit9CisKK3N0YXRp
YyBPcHRpb25hbDxTdHJpbmc+IGdldFN1YmplY3ROYW1lKGNvbnN0IFg1MDkqIHg1MDkpCit7Cisg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAoQVNOMV9TVFJGTEdTX1JGQzIy
NTMgfCBBU04xX1NUUkZMR1NfRVNDX1FVT1RFIHwgWE5fRkxBR19TRVBfQ1BMVVNfU1BDIHwgWE5f
RkxBR19ETl9SRVYgfCBYTl9GTEFHX0ZOX05PTkUgfCBYTl9GTEFHX1NQQ19FUSkgJiB+QVNOMV9T
VFJGTEdTX0VTQ19NU0I7CisKKyAgICBhdXRvIHN1YmplY3ROYW1lID0gWDUwOV9nZXRfc3ViamVj
dF9uYW1lKHg1MDkpOworICAgIGlmICghc3ViamVjdE5hbWUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBPcGVuU1NMOjpCSU8gYmlvOworICAgIGF1dG8gbGVuZ3RoID0gWDUw
OV9OQU1FX3ByaW50X2V4KGJpby5nZXQoKSwgc3ViamVjdE5hbWUsIDAsIGZsYWdzKTsKKyAgICBp
ZiAobGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBPcGVu
U1NMOjpCdWZNZW0gYnVmTWVtOworICAgIEJJT19nZXRfbWVtX3B0cihiaW8uZ2V0KCksICZidWZN
ZW0pOworICAgIEJJT19zZXRfY2xvc2UoYmlvLmdldCgpLCBCSU9fTk9DTE9TRSk7CisKKyAgICBy
ZXR1cm4gU3RyaW5nKGJ1Zk1lbS5nZXQoKS0+ZGF0YSwgYnVmTWVtLmdldCgpLT5sZW5ndGgpOwor
fQorCitzdGF0aWMgT3B0aW9uYWw8U2Vjb25kcz4gY29udmVydEFTTjFUaW1lVG9TZWNvbmRzKGNv
bnN0IEFTTjFfVElNRSogYW5zMVRpbWUpCit7CisgICAgaWYgKCFhbnMxVGltZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICgoYW5zMVRpbWUtPnR5cGUgIT0gVl9BU04x
X1VUQ1RJTUUgJiYgYW5zMVRpbWUtPnR5cGUgIT0gVl9BU04xX0dFTkVSQUxJWkVEVElNRSkgfHwg
IWFuczFUaW1lLT5kYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgLy8g
VVRDVElNRSAgICAgICAgIDogWVltbWRkSEhNTVtTU10KKyAgICAvLyBHRU5FUkFMSVpFRFRJTUUg
OiBZWVlZbW1kZEhITU1bU1NdCisgICAgaW50IGRpZ2l0TGVuZ3RoID0gYW5zMVRpbWUtPnR5cGUg
PT0gVl9BU04xX1VUQ1RJTUUgPyAxMCA6IDEyOworICAgIGlmIChhbnMxVGltZS0+bGVuZ3RoIDwg
ZGlnaXRMZW5ndGgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGRh
dGEgPSBhbnMxVGltZS0+ZGF0YTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpZ2l0TGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgaWYgKCFpc0FTQ0lJRGlnaXQoZGF0YVtpXSkpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KKworICAgIHN0cnVjdCB0bSB0aW1lIHsgMCB9
OworCisgICAgaWYgKGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FKSB7CisgICAgICAg
IHRpbWUudG1feWVhciA9IChkYXRhWzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0gLSAnMCcpOwor
ICAgICAgICBpZiAodGltZS50bV95ZWFyIDwgNTApCisgICAgICAgICAgICB0aW1lLnRtX3llYXIg
Kz0gMTAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbWUudG1feWVhciA9IChkYXRhWzBdIC0g
JzAnKSAqIDEwMDAgKyAoZGF0YVsxXSAtICcwJykgKiAxMDAgKyAoZGF0YVsyXSAtICcwJykgKiAx
MCArIChkYXRhWzNdIC0gJzAnKTsKKyAgICAgICAgdGltZS50bV95ZWFyIC09IDE5MDA7CisgICAg
fQorCisgICAgZGF0YSArPSBhbnMxVGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSA/IDIgOiA0
OworCisgICAgdGltZS50bV9tb24gPSAoZGF0YVswXSAtICcwJykgKiAxMCArIChkYXRhWzFdIC0g
JzAnKSAtIDE7CisgICAgaWYgKHRpbWUudG1fbW9uIDwgMCB8fCB0aW1lLnRtX21vbiA+IDExKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHRpbWUudG1fbWRheSA9IChkYXRhWzJd
IC0gJzAnKSAqIDEwICsgKGRhdGFbM10gLSAnMCcpOworICAgIHRpbWUudG1faG91ciA9IChkYXRh
WzRdIC0gJzAnKSAqIDEwICsgKGRhdGFbNV0gLSAnMCcpOworICAgIHRpbWUudG1fbWluID0gKGRh
dGFbNl0gLSAnMCcpICogMTAgKyAoZGF0YVs3XSAtICcwJyk7CisKKyAgICBpZiAoKGFuczFUaW1l
LT5sZW5ndGggPj0gZGlnaXRMZW5ndGggKyAyKSAmJiBpc0FTQ0lJRGlnaXQoZGF0YVs4XSkgJiYg
aXNBU0NJSURpZ2l0KGRhdGFbOV0pKQorICAgICAgICB0aW1lLnRtX3NlYyA9IChkYXRhWzhdIC0g
JzAnKSAqIDEwICsgKGRhdGFbOV0gLSAnMCcpOworCisgICAgcmV0dXJuIFNlY29uZHMobWt0aW1l
KCZ0aW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIGdldFN1YmplY3RBbHROYW1lKGNvbnN0IE9wZW5T
U0w6Olg1MDlSZWYmIHg1MDksIFZlY3RvcjxTdHJpbmc+JiBkbnNOYW1lcywgVmVjdG9yPFN0cmlu
Zz4mIGlwQWRkcmVzc2VzKQoreworICAgIE9wZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZSBzYW5M
aXN0KHg1MDksIE5JRF9zdWJqZWN0X2FsdF9uYW1lKTsKKyAgICBpZiAoIXNhbkxpc3QpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gbnVtID0gc2FuTGlzdC5jb3VudCgpOworICAgIGZvciAo
YXV0byBpID0gMDsgaSA8IG51bTsgaSsrKSB7CisgICAgICAgIGF1dG8qIHZhbHVlID0gc2FuTGlz
dC5pdGVtKGkpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgaWYgKHZhbHVlLT50eXBlID09IEdFTl9ETlMpIHsKKyAgICAgICAgICAgIE9wZW5T
U0w6OlB0cjx1aW50OF90PiBkbnNOYW1lOworICAgICAgICAgICAgaW50IGRuc0xlbmd0aCA9IEFT
TjFfU1RSSU5HX3RvX1VURjgoJmRuc05hbWUsIHZhbHVlLT5kLmROU05hbWUpOworICAgICAgICAg
ICAgaWYgKGRuc0xlbmd0aCA+PSAwICYmIGRuc05hbWUpCisgICAgICAgICAgICAgICAgZG5zTmFt
ZXMuYXBwZW5kKFN0cmluZyhkbnNOYW1lLCBkbnNMZW5ndGgpKTsKKyAgICAgICAgfSBlbHNlIGlm
ICh2YWx1ZS0+dHlwZSA9PSBHRU5fSVBBREQpIHsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IHZh
bHVlLT5kLmlQQWRkcmVzcy0+ZGF0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+ZC5pUEFkZHJl
c3MtPmxlbmd0aCA9PSA0KSB7CisgICAgICAgICAgICAgICAgY2hhciBidWZbMjU2XSB7IDAgfTsK
KyAgICAgICAgICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJWQuJWQuJWQuJWQi
LCBkYXRhWzBdLCBkYXRhWzFdLCBkYXRhWzJdLCBkYXRhWzNdKTsKKyAgICAgICAgICAgICAgICBp
cEFkZHJlc3Nlcy5hcHBlbmQoU3RyaW5nKGJ1ZikpOworICAgICAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9PSAxNikgeworICAgICAgICAgICAgICAgIFN0cmlu
Z0J1aWxkZXIgaXBBZGRyZXNzOworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl0geyAwIH07
CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiUwNFgiLCBkYXRhWzBdIDw8
IDggfCBkYXRhWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzLmFwcGVuZChidWYp
OworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSA3KQorICAgICAgICAgICAgICAgICAgICAg
ICAgaXBBZGRyZXNzLmFwcGVuZCgiOiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IDI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlwQWRkcmVzc2VzLmFwcGVuZChp
cEFkZHJlc3MudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK09wdGlvbmFsPENlcnRpZmljYXRlSW5mbzo6U3VtbWFyeUluZm8+IENlcnRpZmljYXRlSW5m
bzo6c3VtbWFyeUluZm8oKSBjb25zdAoreworICAgIGlmICghbV9jZXJ0aWZpY2F0ZUNoYWluLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wZW5TU0w6OkJJTyBi
aW8geyBtX2NlcnRpZmljYXRlQ2hhaW4uYXQoMCkgfTsKKyAgICBhdXRvIHg1MDkgPSBiaW8ucmVh
ZFg1MDkoKTsKKyAgICBpZiAoIXg1MDkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBTdW1tYXJ5SW5mbyBzdW1tYXJ5SW5mbzsKKworICAgIGlmIChhdXRvIGNvbW1vbk5hbWUg
PSBnZXRDb21tb25OYW1lKCp4NTA5KSkKKyAgICAgICAgc3VtbWFyeUluZm8uc3ViamVjdCA9IFdU
Rk1vdmUoKmNvbW1vbk5hbWUpOworICAgIGVsc2UgaWYgKGF1dG8gc3ViamVjdE5hbWUgPSBnZXRT
dWJqZWN0TmFtZSgqeDUwOSkpCisgICAgICAgIHN1bW1hcnlJbmZvLnN1YmplY3QgPSBXVEZNb3Zl
KCpzdWJqZWN0TmFtZSk7CisKKyAgICBpZiAoYXV0byBub3RCZWZvcmUgPSBjb252ZXJ0QVNOMVRp
bWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEJlZm9yZSgqeDUwOSkpKQorICAgICAgICBzdW1tYXJ5
SW5mby52YWxpZEZyb20gPSAqbm90QmVmb3JlOworCisgICAgaWYgKGF1dG8gbm90QWZ0ZXIgPSBj
b252ZXJ0QVNOMVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEFmdGVyKCp4NTA5KSkpCisgICAg
ICAgIHN1bW1hcnlJbmZvLnZhbGlkVW50aWwgPSAqbm90QWZ0ZXI7CisKKyAgICBnZXRTdWJqZWN0
QWx0TmFtZSgqeDUwOSwgc3VtbWFyeUluZm8uZG5zTmFtZXMsIHN1bW1hcnlJbmZvLmlwQWRkcmVz
c2VzKTsKKworICAgIHJldHVybiBzdW1tYXJ5SW5mbzsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKaW5kZXggODA5NGI5MzU5OTgzODJlZWY0MTNkYzRhNWVhZmIyNGU0ZWFmNzdhZS4u
OWY3YjY2MWUwNjBlMzE3YzRlZWY3YWZiMzFiMjRiZGI4NTQ2MDFjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4
dC5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5o
PgorI2luY2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02MSw3ICs2MSw3IEBAIEN1cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVyKHZvaWQqIHNz
bEN0eCkKICAgICAgICAgU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0KGN0eCwgY3VydmVzTGlzdC51
dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKFg1
MDlTdG9yZUNUWCogY3R4KQordm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKE9wZW5T
U0w6Olg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIG1fY2VydGlmaWNhdGVJbmZvID0gQ2VydGlm
aWNhdGVJbmZvIHsgWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCksIHBlbURhdGFGcm9tQ3R4
KGN0eCkgfTsKIApAQCAtNjksNyArNjksNyBAQCB2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVj
dEluZm8oWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgICAgIG1fc3NsRXJyb3JzID0gc3RhdGljX2Nh
c3Q8aW50Pihjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGVycm9yKSk7CiB9CiAKLWludCBD
dXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3Jl
Q1RYKiBjdHgpCitpbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgcHJldmVy
aWZpZWQsIE9wZW5TU0w6Olg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIGF1dG8gc3NsID0gc3Rh
dGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4
X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsKICAgICBhdXRvIHNzbEN0eCA9IFNTTF9nZXRf
U1NMX0NUWChzc2wpOwpAQCAtODAsNzAgKzgwLDIxIEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZl
cmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0
dXJuIHByZXZlcmlmaWVkOwogfQogCi1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgU3RhY2tPZlg1MDkoWDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0
cyB7IFg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAg
IH5TdGFja09mWDUwOSgpCi0gICAgewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAg
IHNrX1g1MDlfcG9wX2ZyZWUobV9jZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBjb3VudCgpIHsgcmV0dXJuIHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSog
aXRlbSh1bnNpZ25lZCBpKSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgU1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19Owot
Ci1jbGFzcyBCSU9Ib2xkZXIgewotcHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDog
bV9iaW8geyBCSU9fbmV3KEJJT19zX21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9I
b2xkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUo
bV9iaW8pOwotICAgIH0KLQotICAgIGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVN
X3dyaXRlX2Jpb19YNTA5KG1fYmlvLCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2Vy
dGlmaWNhdGUgYXNDZXJ0aWZpY2F0ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwot
ICAgICAgICBsb25nIGxlbmd0aCA9IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAg
ICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZSgpOwotCi0gICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6
bWFrZUNlcnRpZmljYXRlKGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBCSU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGlj
IFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5
U3RvcmVDVFgqIGN0eCkKK3N0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0
ZT4gcGVtRGF0YUZyb21DdHgoT3BlblNTTDo6WDUwOVN0b3JlQ1RYKiBjdHgpCiB7CiAgICAgVmVj
dG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKLSAgICBTdGFja09mWDUw
OSBjZXJ0cyB7IGN0eCB9OworICAgIE9wZW5TU0w6OlN0YWNrT2ZYNTA5IGNlcnRzIHsgY3R4IH07
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3VudCgpOyBpKyspIHsKLSAgICAgICAg
QklPSG9sZGVyIGJpbzsKKyAgICAgICAgT3BlblNTTDo6QklPIGJpbzsKIAogICAgICAgICBpZiAo
IWJpby53cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2Vy
dGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OworICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYmlvLmFzQ2VydGlmaWNhdGUoKTsKLSAgICAg
ICAgaWYgKGNlcnRpZmljYXRlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8
Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OworICAgICAgICBpZiAoYXV0byBjZXJ0
aWZpY2F0ZSA9IGJpby5nZXRNZW1EYXRhKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmNlcnRpZmljYXRlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9PcGVuU1NMSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRiYjc1NjhkZDA1OGY2
N2RiZDkwNDE2ZDMyMWU4ODRhM2I2MDIyMTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCkBAIC0wLDAgKzEsMjE0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3BlbnNzbC9z
c2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPHd0Zi9vcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi92ZWN0b3IuaD4KKworc3RydWN0IHg1MDlfc3RvcmVfY3R4X3N0
OworCituYW1lc3BhY2UgT3BlblNTTCB7CisKK3VzaW5nIFg1MDlTdG9yZUNUWCA9IHg1MDlfc3Rv
cmVfY3R4X3N0OworCitjbGFzcyBYNTA5UmVmIHsKK3B1YmxpYzoKKyAgICBYNTA5UmVmKDo6WDUw
OSogeDUwOSwgYm9vbCBpc093bmVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX3g1MDkgeyB4NTA5IH0K
KyAgICAgICAgLCBtX2lzT3duZXIgeyBpc093bmVyIH0KKyAgICB7CisgICAgfQorCisgICAgWDUw
OVJlZihYNTA5UmVmJiYgb3RoZXIpCisgICAgeworICAgICAgICBtX3g1MDkgPSBvdGhlci5tX3g1
MDk7CisgICAgICAgIG1faXNPd25lciA9IG90aGVyLm1faXNPd25lcjsKKyAgICAgICAgb3RoZXIu
bV94NTA5ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB+WDUwOVJlZigpCisgICAgeworICAgICAg
ICBpZiAobV94NTA5ICYmIG1faXNPd25lcikKKyAgICAgICAgICAgIDo6WDUwOV9mcmVlKG1feDUw
OSk7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29uc3QgOjpYNTA5KigpIGNvbnN0IHsgcmV0dXJu
IG1feDUwOTsgfQorICAgIG9wZXJhdG9yIDo6WDUwOSooKSB7IHJldHVybiBtX3g1MDk7IH0KKwor
ICAgIFg1MDlSZWYoKSA9IGRlbGV0ZTsKKyAgICBYNTA5UmVmKGNvbnN0IFg1MDkmKSA9IGRlbGV0
ZTsKKworcHJpdmF0ZToKKyAgICA6Olg1MDkqIG1feDUwOSB7IG51bGxwdHIgfTsKKyAgICBib29s
IG1faXNPd25lciB7IHRydWUgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZHZW5lcmFsTmFtZSB7Citw
dWJsaWM6CisgICAgU3RhY2tPZkdlbmVyYWxOYW1lKGNvbnN0IFg1MDlSZWYmIHg1MDksIGludCBu
aWQpCisgICAgICAgIDogbV9uYW1lIHsgc3RhdGljX2Nhc3Q8U1RBQ0tfT0YoR0VORVJBTF9OQU1F
KSo+KFg1MDlfZ2V0X2V4dF9kMmkoeDUwOSwgbmlkLCBudWxscHRyLCBudWxscHRyKSkgfQorICAg
IHsKKyAgICB9CisKKyAgICB+U3RhY2tPZkdlbmVyYWxOYW1lKCkKKyAgICB7CisgICAgICAgIGlm
IChtX25hbWUpCisgICAgICAgICAgICBHRU5FUkFMX05BTUVTX2ZyZWUobV9uYW1lKTsKKyAgICB9
CisKKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBpbnQgY291
bnQoKSB7IHJldHVybiBza19HRU5FUkFMX05BTUVfbnVtKG1fbmFtZSk7IH0KKyAgICBHRU5FUkFM
X05BTUUqIGl0ZW0oaW50IGkpIHsgcmV0dXJuIHNrX0dFTkVSQUxfTkFNRV92YWx1ZShtX25hbWUs
IGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9uYW1lIHsg
bnVsbHB0ciB9OworfTsKKworY2xhc3MgU3RhY2tPZlg1MDkgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFN0YWNrT2ZYNTA5KFg1MDlTdG9yZUNUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBY
NTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3Rh
Y2tPZlg1MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19Y
NTA5X3BvcF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
Y291bnQoKSB7IHJldHVybiBza19YNTA5X251bShtX2NlcnRzKTsgfQorICAgIFg1MDlSZWYgaXRl
bSh1bnNpZ25lZCBpKSB7IHJldHVybiBYNTA5UmVmIHsgc2tfWDUwOV92YWx1ZShtX2NlcnRzLCBp
KSwgZmFsc2V9OyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBu
dWxscHRyIH07Cit9OworCitjbGFzcyBCSU8geworcHVibGljOgorICAgIEJJTygpCisgICAgICAg
IDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19tZW0oKSkgfQorICAgIHsKKyAgICB9CisKKyAg
ICBCSU8oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgICAgICA6IG1fYmlvIHsgOjpC
SU9fbmV3X21lbV9idWYoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSB9CisgICAgeworICAgIH0K
KworICAgIH5CSU8oKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmlvKQorICAgICAgICAgICAgOjpC
SU9fZnJlZShtX2Jpbyk7CisgICAgfQorCisgICAgYm9vbCB3cml0ZShYNTA5KiBkYXRhKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDo6UEVNX3dyaXRlX2Jpb19YNTA5KG1fYmlvLCBkYXRhKTsKKyAg
ICB9CisKKyAgICBPcHRpb25hbDxYNTA5UmVmPiByZWFkWDUwOSgpCisgICAgeworICAgICAgICBp
ZiAoYXV0byB4NTA5ID0gOjpQRU1fcmVhZF9iaW9fWDUwOShtX2JpbywgbnVsbHB0ciwgMCwgbnVs
bHB0cikpCisgICAgICAgICAgICByZXR1cm4geyB4NTA5IH07CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRNZW1E
YXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGRhdGFQOworICAgICAgICBhdXRv
IGxlbmd0aCA9IDo6QklPX2dldF9tZW1fZGF0YShtX2JpbywgJmRhdGFQKTsKKyAgICAgICAgaWYg
KGxlbmd0aCA8IDApCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICBkYXRhLmFwcGVuZChkYXRhUCwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfQorCisgICAgOjpCSU8qIGdldCgpIHsgcmV0
dXJuIG1fYmlvOyB9CisKK3ByaXZhdGU6CisgICAgOjpCSU8qIG1fYmlvIHsgbnVsbHB0ciB9Owor
fTsKKworY2xhc3MgQnVmTWVtIHsKK3B1YmxpYzoKKyAgICBCdWZNZW0oKSA9IGRlZmF1bHQ7CisK
KyAgICB+QnVmTWVtKCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1Zk1lbSkKKyAgICAgICAgICAg
IEJVRl9NRU1fZnJlZShtX2J1Zk1lbSk7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29uc3QgQlVG
X01FTSogKCkgY29uc3QgeyByZXR1cm4gbV9idWZNZW07IH0KKyAgICBvcGVyYXRvciBCVUZfTUVN
KiAoKSB7IHJldHVybiBtX2J1Zk1lbTsgfQorCisgICAgQlVGX01FTSogZ2V0KCkgeyByZXR1cm4g
bV9idWZNZW07IH0KKworcHJpdmF0ZToKKyAgICBCVUZfTUVNKiBtX2J1Zk1lbSB7IG51bGxwdHIg
fTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBQdHIgeworcHVibGljOgorICAg
IFB0cigpID0gZGVmYXVsdDsKKworICAgIGV4cGxpY2l0IFB0cihUKiBwdHIpCisgICAgICAgIDog
bV9wdHIgeyBwdHIgfQorICAgIHsKKyAgICB9CisKKyAgICB+UHRyKCkKKyAgICB7CisgICAgICAg
IGlmIChtX3B0cikKKyAgICAgICAgICAgIE9QRU5TU0xfZnJlZShtX3B0cik7CisgICAgfQorCisg
ICAgdm9pZCBhZG9wdChUICpwdHIpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fcHRyKTsKKyAg
ICAgICAgbV9wdHIgPSBwdHI7CisgICAgfQorCisgICAgY29uc3QgVCogZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wdHI7IH0KKyAgICBUKiBnZXQoKSB7IHJldHVybiBtX3B0cjsgfQorCisgICAgb3Bl
cmF0b3IgY29uc3QgVCooKSBjb25zdCB7IHJldHVybiBnZXQoKTsgfQorICAgIG9wZXJhdG9yIFQq
KCkgeyByZXR1cm4gZ2V0KCk7IH0KKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9wdHI7
IH0KKyAgICBUKiogb3BlcmF0b3IgJigpIHsgcmV0dXJuICZtX3B0cjsgfQorCitwcml2YXRlOgor
ICAgIFQqIG1fcHRyIHsgbnVsbHB0ciB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgT3BlblNTTApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGE5MTM3OTBhZTc5YzI5ODJlMzRlZmYyNTA3NDM0ZjExMTI0OGM5ZTMuLjU2NzFkYTNj
ZTI2OTFjZGJkYzY2YjRhZDQ5MDY1Nzk0YjdkYjk3MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxOS0wNy0wOCAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255LmNvbT4KKwor
ICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTQ5OAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0v
d2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxhdGZvcm0vd2luY2Fp
cm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxOS0wNy0wOCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRl
c0BhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gU3VwcG9ydCBzZWxlY3QgYWxsIGluIG5vbi1l
ZGl0YWJsZSBlbGVtZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWly
by13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdr
MS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDVkMTA4MTdhMzRhNzg4YzI0YmVkMDE2OTNhNDVkYjUw
ZmQ3OTFkYTMuLjY1NzA4MjBlZjY4NWEzMTczODEyNDY1Y2RmMDUzOWVlOWUwMDg1MTQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25z
CkBAIC0zNDAsMyArMzQwLDcgQEAgZmFzdC9jc3MvdHJhbnNpdGlvbi1jb2xvci11bnNwZWNpZmll
ZC5odG1sIFsgU2tpcCBdCiBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXItaW1hZ2UtYW5pbWF0aW9u
Lmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tb2RpZnktZnJhbWV0cmVlLWluLWNhbGxi
YWNrLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tdWx0aS1mcmFtZXMuaHRtbCBbIFNr
aXAgXQorCisjIFdpbkNhaXJvIHdrMSBkb2Vzbid0IHN1cHBvcnQgaW5zcGVjdG9yIHRlc3RzLgor
d2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNl
LXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8xOTE0OTgg
aHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRt
bCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggZGU2ODMyNzM3NTVhYzBmZjI4NWYyNTZlMjk1MmExYjBjNTA3Nzk5OS4uZmZh
NmE2YmE0MmVmZDJjNGM1ODkzZjRkMjBlZmZkMGJiMjgyOTNlNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0xMDE3LDggKzEwMTcsOCBA
QCBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LW92ZXJyaWRlbWltZXR5
cGUtY29udGVudC10eXBlLWhlYWRlci5odAogaHR0cC90ZXN0cy94bWx2aWV3ZXIgWyBTa2lwIF0K
IAogd2Via2l0Lm9yZy9iLzE5MjQwNiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291
cmNlLXNlY3VyaXR5LWNvbm5lY3Rpb24uaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE5MTQ5
OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmlj
YXRlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0
b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQord2Via2l0
Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3Vy
aXR5LWNlcnRpZmljYXRlLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcvYi8xOTE0OTggaHR0cC90
ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbCBbIFBh
c3MgXQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBJc3N1ZSBjYXRlZ29yaWVzIGJlbG93
IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBwbGF0Zm9ybXMgKHByaW1hcmlseSBBcHBsZVdpbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>373889</attachid>
            <date>2019-07-10 18:46:52 -0700</date>
            <delta_ts>2019-07-19 01:50:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190711104257.patch</filename>
            <type>text/plain</type>
            <size>23261</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3MjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJhMjFjZGNhZDBjYjA5
NTFiNTRiZGY0ZmQ4NzUzNjYzY2YwNmUxMS4uMjZlMWNjZWZkZjMzMmNjYjY1ZWE1ODVhYTdkM2Q4
N2Y5MzdmZDUxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE5LTA3LTEwICBUYWth
c2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAgIFtDdXJsXSBp
bXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1tYXJ5SW5mbworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDk4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IENlcnRpZmljYWVJbmZvOjpT
dW1tYXJ5SW5mby4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBXZWJJbnNwZWN0b3Igc2hvdyBz
dW1tYXJ5IG9mIGNlcnRpZmljYXRlcy4KKworICAgICAgICBUZXN0czogaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvbmV0d29yay9yZXNvdXJjZS1zZWN1cml0eS1jZXJ0aWZpY2F0ZS5odG1sCisgICAgICAg
ICAgICAgICBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZS5odG1sCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmdldENvbW1vbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U3ViamVjdE5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6Y29udmVydEFTTjFUaW1lVG9TZWNvbmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldFN1YmplY3RBbHROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVy
Ojpjb2xsZWN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NMVmVyaWZpZXI6OnZlcmlm
eUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OnBlbURhdGFGcm9tQ3R4KToKKyAgICAgICAg
KFdlYkNvcmU6OlN0YWNrT2ZYNTA5OjpTdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTdGFja09mWDUwOTo6flN0YWNrT2ZYNTA5KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0YWNrT2ZYNTA5Ojpjb3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dGFja09mWDUwOTo6aXRlbSk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QklPSG9sZGVyOjpCSU9Ib2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6QklPSG9sZGVyOjp+QklPSG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkJJT0hvbGRlcjo6d3JpdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVy
Ojphc0NlcnRpZmljYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvT3BlblNTTEhlbHBlci5oOiBBZGRlZC4KKyAgICAgICAgKE9wZW5TU0w6Olg1MDlSZWY6Olg1
MDlSZWYpOgorICAgICAgICAoT3BlblNTTDo6WDUwOVJlZjo6flg1MDlSZWYpOgorICAgICAgICAo
T3BlblNTTDo6WDUwOVJlZjo6b3BlcmF0b3IgY29uc3QgOjpYNTA5KiBjb25zdCk6CisgICAgICAg
IChPcGVuU1NMOjpYNTA5UmVmOjpvcGVyYXRvciA6Olg1MDkqKToKKyAgICAgICAgKE9wZW5TU0w6
OlN0YWNrT2ZHZW5lcmFsTmFtZTo6U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9wZW5T
U0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6flN0YWNrT2ZHZW5lcmFsTmFtZSk6CisgICAgICAgIChP
cGVuU1NMOjpTdGFja09mR2VuZXJhbE5hbWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoT3Bl
blNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lOjpjb3VudCk6CisgICAgICAgIChPcGVuU1NMOjpTdGFj
a09mR2VuZXJhbE5hbWU6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6OlN0
YWNrT2ZYNTA5KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNrT2ZYNTA5Ojp+U3RhY2tPZlg1MDkp
OgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6OmNvdW50KToKKyAgICAgICAgKE9wZW5T
U0w6OlN0YWNrT2ZYNTA5OjppdGVtKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6QklPKToKKyAg
ICAgICAgKE9wZW5TU0w6OkJJTzo6fkJJTyk6CisgICAgICAgIChPcGVuU1NMOjpCSU86OndyaXRl
KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6cmVhZFg1MDkpOgorICAgICAgICAoT3BlblNTTDo6
QklPOjpnZXRNZW1EYXRhIGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0KToKKyAg
ICAgICAgKE9wZW5TU0w6OkJ1Zk1lbTo6fkJ1Zk1lbSk6CisgICAgICAgIChPcGVuU1NMOjpCdWZN
ZW06Om9wZXJhdG9yIGNvbnN0IEJVRl9NRU0qICBjb25zdCk6CisgICAgICAgIChPcGVuU1NMOjpC
dWZNZW06Om9wZXJhdG9yIEJVRl9NRU0qICk6CisgICAgICAgIChPcGVuU1NMOjpCdWZNZW06Omdl
dCk6CisgICAgICAgIChPcGVuU1NMOjpjcmVhdGVQdHIpOgorCiAyMDE5LTA3LTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBEb2N1bWVudDo6cG9zdFRh
c2soKSBzYWZlIHRvIGNhbGwgZnJvbSBhIGJhY2tncm91bmQgdGhyZWFkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5k
ZXggZTU3ZjNiZDBhNDg5MDhlNTNmZTU4YzlhZTRkNGFmNTYwMWZhMGUwMC4uYWVmNmU2NTA5MDA0
M2E0ZjlmZDQ3YTkwM2M0NDBlY2NmZDBhMTM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaApAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zTm9uUm9vdFNIQTFTaWduZWRDZXJ0aWZp
Y2F0ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBP
cHRpb25hbDxTdW1tYXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxTdW1tYXJ5SW5mbz4gc3Vt
bWFyeUluZm8oKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2VydGlmaWNhdGVDaGFpbi5pc0VtcHR5KCk7IH0KIApAQCAtNzEsMTUgKzcxLDQzIEBAIG5hbWVz
cGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgICAgIGF1dG8mIGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNh
dGVDaGFpbigpOworCisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnZlcmlmaWNh
dGlvbkVycm9yKCk7CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7
CisgICAgICAgIGZvciAoYXV0byYgY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWluKSB7Cisg
ICAgICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlLnNpemUoKTsKKyAgICAgICAgICAgIGVu
Y29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKGNlcnRpZmljYXRlLmRhdGEoKSwgY2VydGlmaWNh
dGUuc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAgIHN0YXRpYyBib29sIGRlY29kZShE
ZWNvZGVyJiwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKKyAgICBzdGF0aWMgYm9vbCBkZWNv
ZGUoRGVjb2RlciYgZGVjb2RlciwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0
ZUluZm8pCiAgICAgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGludCB2ZXJpZmljYXRpb25FcnJvcjsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLmRlY29kZSh2ZXJpZmljYXRpb25FcnJvcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgc2l6ZV90IG51bU9mQ2VydCA9IDA7CisgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUobnVtT2ZDZXJ0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlQ2hhaW4gY2VydGlmaWNhdGVDaGFp
bjsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1PZkNlcnQ7IGkrKykgeworICAg
ICAgICAgICAgc2l6ZV90IGNlcnRTaXplID0gMDsKKyAgICAgICAgICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoY2VydFNpemUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZShj
ZXJ0U2l6ZSk7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlRml4ZWRMZW5ndGhEYXRh
KGNlcnRpZmljYXRlLmRhdGEoKSwgY2VydGlmaWNhdGUuc2l6ZSgpKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBwZW5kKFdU
Rk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRpZmljYXRlSW5m
byA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RGTW92ZShj
ZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0
ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIzNDk0MjM4ZmE1MDlkMjRmZjkx
MTA4YTkzZTE3Li5kNzJhMTVlNzQxMzIxNGVkMWE0MTNiMDhmODIxNjk4NDlkYzQyMmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nl
cnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29weXJpZ2h0
IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDcgKzI2LDEyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCiAKKyNpbmNsdWRlICJPcGVuU1NMSGVs
cGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiAjaWYgVVNF
KENVUkwpCiAKQEAgLTUwLDYgKzU1LDE2MyBAQCBDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRl
IENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRpZmljYXRlKGNvbnN0IHVpbnQ4X3QqIGJ1ZgogICAg
IHJldHVybiBjZXJ0aWZpY2F0ZTsKIH0KIAorc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0Q29t
bW9uTmFtZShjb25zdCBYNTA5KiB4NTA5KQoreworICAgIGF1dG8gc3ViamVjdE5hbWUgPSBYNTA5
X2dldF9zdWJqZWN0X25hbWUoeDUwOSk7CisgICAgaWYgKCFzdWJqZWN0TmFtZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5kZXggPSBYNTA5X05BTUVfZ2V0X2lu
ZGV4X2J5X05JRChzdWJqZWN0TmFtZSwgTklEX2NvbW1vbk5hbWUsIC0xKTsKKyAgICBpZiAoaW5k
ZXggPCAwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBjb21tb25O
YW1lRW50cnkgPSBYNTA5X05BTUVfZ2V0X2VudHJ5KHN1YmplY3ROYW1lLCBpbmRleCk7CisgICAg
aWYgKGNvbW1vbk5hbWVFbnRyeSA8IDApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBhdXRvIGNvbW1vbk5hbWVFbnRyeURhdGEgPSBYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGEo
Y29tbW9uTmFtZUVudHJ5KTsKKyAgICBpZiAoY29tbW9uTmFtZUVudHJ5RGF0YSA8IDApCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGNvbW1vbk5hbWUgPSBPcGVuU1NM
OjpjcmVhdGVQdHI8dWludDhfdD4oKTsKKyAgICBhdXRvIGNvbW1vbk5hbWVMZW5ndGggPSBBU04x
X1NUUklOR190b19VVEY4KGNvbW1vbk5hbWUuZ2V0KCksIGNvbW1vbk5hbWVFbnRyeURhdGEpOwor
ICAgIGlmIChjb21tb25OYW1lTGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gU3RyaW5nKCpjb21tb25OYW1lLCBjb21tb25OYW1lTGVuZ3RoKTsK
K30KKworc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0U3ViamVjdE5hbWUoY29uc3QgWDUwOSog
eDUwOSkKK3sKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncyA9IChBU04xX1NU
UkZMR1NfUkZDMjI1MyB8IEFTTjFfU1RSRkxHU19FU0NfUVVPVEUgfCBYTl9GTEFHX1NFUF9DUExV
U19TUEMgfCBYTl9GTEFHX0ROX1JFViB8IFhOX0ZMQUdfRk5fTk9ORSB8IFhOX0ZMQUdfU1BDX0VR
KSAmIH5BU04xX1NUUkZMR1NfRVNDX01TQjsKKworICAgIGF1dG8gc3ViamVjdE5hbWUgPSBYNTA5
X2dldF9zdWJqZWN0X25hbWUoeDUwOSk7CisgICAgaWYgKCFzdWJqZWN0TmFtZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wZW5TU0w6OkJJTyBiaW87CisgICAgYXV0byBs
ZW5ndGggPSBYNTA5X05BTUVfcHJpbnRfZXgoYmlvLmdldCgpLCBzdWJqZWN0TmFtZSwgMCwgZmxh
Z3MpOworICAgIGlmIChsZW5ndGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIE9wZW5TU0w6OkJ1Zk1lbSBidWZNZW07CisgICAgQklPX2dldF9tZW1fcHRyKGJpby5n
ZXQoKSwgJmJ1Zk1lbSk7CisgICAgQklPX3NldF9jbG9zZShiaW8uZ2V0KCksIEJJT19OT0NMT1NF
KTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmTWVtLmdldCgpLT5kYXRhLCBidWZNZW0uZ2V0KCkt
Pmxlbmd0aCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxTZWNvbmRzPiBjb252ZXJ0QVNOMVRpbWVU
b1NlY29uZHMoY29uc3QgQVNOMV9USU1FKiBhbnMxVGltZSkKK3sKKyAgICBpZiAoIWFuczFUaW1l
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKChhbnMxVGltZS0+dHlw
ZSAhPSBWX0FTTjFfVVRDVElNRSAmJiBhbnMxVGltZS0+dHlwZSAhPSBWX0FTTjFfR0VORVJBTEla
RURUSU1FKSB8fCAhYW5zMVRpbWUtPmRhdGEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAvLyBVVENUSU1FICAgICAgICAgOiBZWW1tZGRISE1NW1NTXQorICAgIC8vIEdFTkVS
QUxJWkVEVElNRSA6IFlZWVltbWRkSEhNTVtTU10KKyAgICBpbnQgZGlnaXRMZW5ndGggPSBhbnMx
VGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSA/IDEwIDogMTI7CisgICAgaWYgKGFuczFUaW1l
LT5sZW5ndGggPCBkaWdpdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGF1dG8gZGF0YSA9IGFuczFUaW1lLT5kYXRhOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGlnaXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChkYXRhW2ldKSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RydWN0IHRt
IHRpbWUgeyB9OworCisgICAgaWYgKGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FKSB7
CisgICAgICAgIHRpbWUudG1feWVhciA9IChkYXRhWzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0g
LSAnMCcpOworICAgICAgICBpZiAodGltZS50bV95ZWFyIDwgNTApCisgICAgICAgICAgICB0aW1l
LnRtX3llYXIgKz0gMTAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbWUudG1feWVhciA9IChk
YXRhWzBdIC0gJzAnKSAqIDEwMDAgKyAoZGF0YVsxXSAtICcwJykgKiAxMDAgKyAoZGF0YVsyXSAt
ICcwJykgKiAxMCArIChkYXRhWzNdIC0gJzAnKTsKKyAgICAgICAgdGltZS50bV95ZWFyIC09IDE5
MDA7CisgICAgfQorCisgICAgZGF0YSArPSBhbnMxVGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElN
RSA/IDIgOiA0OworCisgICAgdGltZS50bV9tb24gPSAoZGF0YVswXSAtICcwJykgKiAxMCArIChk
YXRhWzFdIC0gJzAnKSAtIDE7CisgICAgaWYgKHRpbWUudG1fbW9uIDwgMCB8fCB0aW1lLnRtX21v
biA+IDExKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHRpbWUudG1fbWRheSA9
IChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFbM10gLSAnMCcpOworICAgIHRpbWUudG1faG91
ciA9IChkYXRhWzRdIC0gJzAnKSAqIDEwICsgKGRhdGFbNV0gLSAnMCcpOworICAgIHRpbWUudG1f
bWluID0gKGRhdGFbNl0gLSAnMCcpICogMTAgKyAoZGF0YVs3XSAtICcwJyk7CisKKyAgICBpZiAo
KGFuczFUaW1lLT5sZW5ndGggPj0gZGlnaXRMZW5ndGggKyAyKSAmJiBpc0FTQ0lJRGlnaXQoZGF0
YVs4XSkgJiYgaXNBU0NJSURpZ2l0KGRhdGFbOV0pKQorICAgICAgICB0aW1lLnRtX3NlYyA9IChk
YXRhWzhdIC0gJzAnKSAqIDEwICsgKGRhdGFbOV0gLSAnMCcpOworCisgICAgYXV0byBnbXRUaW1l
ID0gbWt0aW1lKCZ0aW1lKTsKKyAgICBhdXRvIGxvY2FsVGltZU9mZnNldCA9IGNhbGN1bGF0ZUxv
Y2FsVGltZU9mZnNldChnbXRUaW1lICogMTAwMC4wKTsKKyAgICByZXR1cm4gU2Vjb25kcyhnbXRU
aW1lICsgKGxvY2FsVGltZU9mZnNldC5vZmZzZXQgLyAxMDAwLjApKTsKK30KKworc3RhdGljIHZv
aWQgZ2V0U3ViamVjdEFsdE5hbWUoY29uc3QgT3BlblNTTDo6WDUwOVJlZiYgeDUwOSwgVmVjdG9y
PFN0cmluZz4mIGRuc05hbWVzLCBWZWN0b3I8U3RyaW5nPiYgaXBBZGRyZXNzZXMpCit7CisgICAg
T3BlblNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lIHNhbkxpc3QoeDUwOSwgTklEX3N1YmplY3RfYWx0
X25hbWUpOworICAgIGlmICghc2FuTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBu
dW0gPSBzYW5MaXN0LmNvdW50KCk7CisgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtOyBpKysp
IHsKKyAgICAgICAgYXV0byogdmFsdWUgPSBzYW5MaXN0Lml0ZW0oaSk7CisgICAgICAgIGlmICgh
dmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodmFsdWUtPnR5cGUg
PT0gR0VOX0ROUykgeworICAgICAgICAgICAgYXV0byBkbnNOYW1lID0gT3BlblNTTDo6Y3JlYXRl
UHRyPHVpbnQ4X3Q+KCk7CisgICAgICAgICAgICBhdXRvIGRuc0xlbmd0aCA9IEFTTjFfU1RSSU5H
X3RvX1VURjgoZG5zTmFtZS5nZXQoKSwgdmFsdWUtPmQuZE5TTmFtZSk7CisgICAgICAgICAgICBp
ZiAoZG5zTGVuZ3RoID49IDAgJiYgZG5zTmFtZSkKKyAgICAgICAgICAgICAgICBkbnNOYW1lcy5h
cHBlbmQoU3RyaW5nKCpkbnNOYW1lLCBkbnNMZW5ndGgpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2
YWx1ZS0+dHlwZSA9PSBHRU5fSVBBREQpIHsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IHZhbHVl
LT5kLmlQQWRkcmVzcy0+ZGF0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+ZC5pUEFkZHJlc3Mt
Pmxlbmd0aCA9PSA0KQorICAgICAgICAgICAgICAgIGlwQWRkcmVzc2VzLmFwcGVuZChtYWtlU3Ry
aW5nKGRhdGFbMF0sICIuIiwgZGF0YVsxXSwgIi4iLCBkYXRhWzJdLCAiLiIsIGRhdGFbM10pKTsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5kLmlQQWRkcmVzcy0+bGVuZ3RoID09IDE2KSB7
CisgICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBpcEFkZHJlc3M7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaXBB
ZGRyZXNzLmFwcGVuZChtYWtlU3RyaW5nKGhleChkYXRhWzBdIDw8IDggfCBkYXRhWzFdLCA0KSkp
OworICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSA3KQorICAgICAgICAgICAgICAgICAgICAg
ICAgaXBBZGRyZXNzLmFwcGVuZCgiOiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IDI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlwQWRkcmVzc2VzLmFwcGVuZChp
cEFkZHJlc3MudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK09wdGlvbmFsPENlcnRpZmljYXRlSW5mbzo6U3VtbWFyeUluZm8+IENlcnRpZmljYXRlSW5m
bzo6c3VtbWFyeUluZm8oKSBjb25zdAoreworICAgIGlmICghbV9jZXJ0aWZpY2F0ZUNoYWluLnNp
emUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIE9wZW5TU0w6OkJJTyBi
aW8geyBtX2NlcnRpZmljYXRlQ2hhaW4uYXQoMCkgfTsKKyAgICBhdXRvIHg1MDkgPSBiaW8ucmVh
ZFg1MDkoKTsKKyAgICBpZiAoIXg1MDkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICBTdW1tYXJ5SW5mbyBzdW1tYXJ5SW5mbzsKKworICAgIGlmIChhdXRvIGNvbW1vbk5hbWUg
PSBnZXRDb21tb25OYW1lKCp4NTA5KSkKKyAgICAgICAgc3VtbWFyeUluZm8uc3ViamVjdCA9IFdU
Rk1vdmUoKmNvbW1vbk5hbWUpOworICAgIGVsc2UgaWYgKGF1dG8gc3ViamVjdE5hbWUgPSBnZXRT
dWJqZWN0TmFtZSgqeDUwOSkpCisgICAgICAgIHN1bW1hcnlJbmZvLnN1YmplY3QgPSBXVEZNb3Zl
KCpzdWJqZWN0TmFtZSk7CisKKyAgICBpZiAoYXV0byBub3RCZWZvcmUgPSBjb252ZXJ0QVNOMVRp
bWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEJlZm9yZSgqeDUwOSkpKQorICAgICAgICBzdW1tYXJ5
SW5mby52YWxpZEZyb20gPSAqbm90QmVmb3JlOworCisgICAgaWYgKGF1dG8gbm90QWZ0ZXIgPSBj
b252ZXJ0QVNOMVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEFmdGVyKCp4NTA5KSkpCisgICAg
ICAgIHN1bW1hcnlJbmZvLnZhbGlkVW50aWwgPSAqbm90QWZ0ZXI7CisKKyAgICBnZXRTdWJqZWN0
QWx0TmFtZSgqeDUwOSwgc3VtbWFyeUluZm8uZG5zTmFtZXMsIHN1bW1hcnlJbmZvLmlwQWRkcmVz
c2VzKTsKKworICAgIHJldHVybiBzdW1tYXJ5SW5mbzsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZp
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJp
Zmllci5jcHAKaW5kZXggODA5NGI5MzU5OTgzODJlZWY0MTNkYzRhNWVhZmIyNGU0ZWFmNzdhZS4u
OWY3YjY2MWUwNjBlMzE3YzRlZWY3YWZiMzFiMjRiZGI4NTQ2MDFjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5j
cHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4
dC5oIgogI2luY2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5o
PgorI2luY2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC02MSw3ICs2MSw3IEBAIEN1cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVyKHZvaWQqIHNz
bEN0eCkKICAgICAgICAgU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0KGN0eCwgY3VydmVzTGlzdC51
dGY4KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKFg1
MDlTdG9yZUNUWCogY3R4KQordm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKE9wZW5T
U0w6Olg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIG1fY2VydGlmaWNhdGVJbmZvID0gQ2VydGlm
aWNhdGVJbmZvIHsgWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCksIHBlbURhdGFGcm9tQ3R4
KGN0eCkgfTsKIApAQCAtNjksNyArNjksNyBAQCB2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVj
dEluZm8oWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgICAgIG1fc3NsRXJyb3JzID0gc3RhdGljX2Nh
c3Q8aW50Pihjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGVycm9yKSk7CiB9CiAKLWludCBD
dXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3Jl
Q1RYKiBjdHgpCitpbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgcHJldmVy
aWZpZWQsIE9wZW5TU0w6Olg1MDlTdG9yZUNUWCogY3R4KQogewogICAgIGF1dG8gc3NsID0gc3Rh
dGljX2Nhc3Q8U1NMKj4oWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4
X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpKTsKICAgICBhdXRvIHNzbEN0eCA9IFNTTF9nZXRf
U1NMX0NUWChzc2wpOwpAQCAtODAsNzAgKzgwLDIxIEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZl
cmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0
dXJuIHByZXZlcmlmaWVkOwogfQogCi1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAg
ZXhwbGljaXQgU3RhY2tPZlg1MDkoWDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0
cyB7IFg1MDlfU1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAg
IH5TdGFja09mWDUwOSgpCi0gICAgewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAg
IHNrX1g1MDlfcG9wX2ZyZWUobV9jZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNp
Z25lZCBjb3VudCgpIHsgcmV0dXJuIHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSog
aXRlbSh1bnNpZ25lZCBpKSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0K
LXByaXZhdGU6Ci0gICAgU1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19Owot
Ci1jbGFzcyBCSU9Ib2xkZXIgewotcHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDog
bV9iaW8geyBCSU9fbmV3KEJJT19zX21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9I
b2xkZXIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUo
bV9iaW8pOwotICAgIH0KLQotICAgIGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVN
X3dyaXRlX2Jpb19YNTA5KG1fYmlvLCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2Vy
dGlmaWNhdGUgYXNDZXJ0aWZpY2F0ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwot
ICAgICAgICBsb25nIGxlbmd0aCA9IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAg
ICAgICAgaWYgKGxlbmd0aCA8IDApCi0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZv
OjpDZXJ0aWZpY2F0ZSgpOwotCi0gICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6
bWFrZUNlcnRpZmljYXRlKGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAg
IH0KLQotcHJpdmF0ZToKLSAgICBCSU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGlj
IFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5
U3RvcmVDVFgqIGN0eCkKK3N0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0
ZT4gcGVtRGF0YUZyb21DdHgoT3BlblNTTDo6WDUwOVN0b3JlQ1RYKiBjdHgpCiB7CiAgICAgVmVj
dG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKLSAgICBTdGFja09mWDUw
OSBjZXJ0cyB7IGN0eCB9OworICAgIE9wZW5TU0w6OlN0YWNrT2ZYNTA5IGNlcnRzIHsgY3R4IH07
CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3VudCgpOyBpKyspIHsKLSAgICAgICAg
QklPSG9sZGVyIGJpbzsKKyAgICAgICAgT3BlblNTTDo6QklPIGJpbzsKIAogICAgICAgICBpZiAo
IWJpby53cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2Vy
dGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OworICAgICAgICAgICAgcmV0dXJuIHsgfTsK
IAotICAgICAgICBhdXRvIGNlcnRpZmljYXRlID0gYmlvLmFzQ2VydGlmaWNhdGUoKTsKLSAgICAg
ICAgaWYgKGNlcnRpZmljYXRlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8
Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OworICAgICAgICBpZiAoYXV0byBjZXJ0
aWZpY2F0ZSA9IGJpby5nZXRNZW1EYXRhKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmNlcnRpZmljYXRlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB7
IH07CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CiAgICAg
fQogCiAgICAgcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9PcGVuU1NMSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmZGJiMjE4ODVkZGM3
OTRjNzhhNzIzM2MwYzYxMzhkYWI3MTdiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCkBAIC0wLDAgKzEsMTk0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlu
bWVudCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8b3BlbnNzbC9z
c2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworc3RydWN0IHg1MDlfc3RvcmVfY3R4X3N0
OworCituYW1lc3BhY2UgT3BlblNTTCB7CisKK3VzaW5nIFg1MDlTdG9yZUNUWCA9IHg1MDlfc3Rv
cmVfY3R4X3N0OworCitjbGFzcyBYNTA5UmVmIHsKK3B1YmxpYzoKKyAgICBYNTA5UmVmKDo6WDUw
OSogeDUwOSwgYm9vbCBpc093bmVyID0gdHJ1ZSkKKyAgICAgICAgOiBtX3g1MDkgeyB4NTA5IH0K
KyAgICAgICAgLCBtX2lzT3duZXIgeyBpc093bmVyIH0KKyAgICB7CisgICAgfQorCisgICAgWDUw
OVJlZihYNTA5UmVmJiYgb3RoZXIpCisgICAgeworICAgICAgICBtX3g1MDkgPSBvdGhlci5tX3g1
MDk7CisgICAgICAgIG1faXNPd25lciA9IG90aGVyLm1faXNPd25lcjsKKyAgICAgICAgb3RoZXIu
bV94NTA5ID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB+WDUwOVJlZigpCisgICAgeworICAgICAg
ICBpZiAobV94NTA5ICYmIG1faXNPd25lcikKKyAgICAgICAgICAgIDo6WDUwOV9mcmVlKG1feDUw
OSk7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29uc3QgOjpYNTA5KigpIGNvbnN0IHsgcmV0dXJu
IG1feDUwOTsgfQorICAgIG9wZXJhdG9yIDo6WDUwOSooKSB7IHJldHVybiBtX3g1MDk7IH0KKwor
ICAgIFg1MDlSZWYoKSA9IGRlbGV0ZTsKKyAgICBYNTA5UmVmKGNvbnN0IFg1MDkmKSA9IGRlbGV0
ZTsKKworcHJpdmF0ZToKKyAgICA6Olg1MDkqIG1feDUwOSB7IG51bGxwdHIgfTsKKyAgICBib29s
IG1faXNPd25lciB7IHRydWUgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZHZW5lcmFsTmFtZSB7Citw
dWJsaWM6CisgICAgU3RhY2tPZkdlbmVyYWxOYW1lKGNvbnN0IFg1MDlSZWYmIHg1MDksIGludCBu
aWQpCisgICAgICAgIDogbV9uYW1lIHsgc3RhdGljX2Nhc3Q8U1RBQ0tfT0YoR0VORVJBTF9OQU1F
KSo+KFg1MDlfZ2V0X2V4dF9kMmkoeDUwOSwgbmlkLCBudWxscHRyLCBudWxscHRyKSkgfQorICAg
IHsKKyAgICB9CisKKyAgICB+U3RhY2tPZkdlbmVyYWxOYW1lKCkKKyAgICB7CisgICAgICAgIGlm
IChtX25hbWUpCisgICAgICAgICAgICBHRU5FUkFMX05BTUVTX2ZyZWUobV9uYW1lKTsKKyAgICB9
CisKKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lOyB9CisKKyAgICBpbnQgY291
bnQoKSB7IHJldHVybiBza19HRU5FUkFMX05BTUVfbnVtKG1fbmFtZSk7IH0KKyAgICBHRU5FUkFM
X05BTUUqIGl0ZW0oaW50IGkpIHsgcmV0dXJuIHNrX0dFTkVSQUxfTkFNRV92YWx1ZShtX25hbWUs
IGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9uYW1lIHsg
bnVsbHB0ciB9OworfTsKKworY2xhc3MgU3RhY2tPZlg1MDkgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFN0YWNrT2ZYNTA5KFg1MDlTdG9yZUNUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBY
NTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3Rh
Y2tPZlg1MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19Y
NTA5X3BvcF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
Y291bnQoKSB7IHJldHVybiBza19YNTA5X251bShtX2NlcnRzKTsgfQorICAgIFg1MDlSZWYgaXRl
bSh1bnNpZ25lZCBpKSB7IHJldHVybiBYNTA5UmVmIHsgc2tfWDUwOV92YWx1ZShtX2NlcnRzLCBp
KSwgZmFsc2V9OyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBu
dWxscHRyIH07Cit9OworCitjbGFzcyBCSU8geworcHVibGljOgorICAgIEJJTygpCisgICAgICAg
IDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19tZW0oKSkgfQorICAgIHsKKyAgICB9CisKKyAg
ICBCSU8oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKQorICAgICAgICA6IG1fYmlvIHsgOjpC
SU9fbmV3X21lbV9idWYoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSB9CisgICAgeworICAgIH0K
KworICAgIH5CSU8oKQorICAgIHsKKyAgICAgICAgaWYgKG1fYmlvKQorICAgICAgICAgICAgOjpC
SU9fZnJlZShtX2Jpbyk7CisgICAgfQorCisgICAgYm9vbCB3cml0ZShYNTA5KiBkYXRhKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIDo6UEVNX3dyaXRlX2Jpb19YNTA5KG1fYmlvLCBkYXRhKTsKKyAg
ICB9CisKKyAgICBPcHRpb25hbDxYNTA5UmVmPiByZWFkWDUwOSgpCisgICAgeworICAgICAgICBp
ZiAoYXV0byB4NTA5ID0gOjpQRU1fcmVhZF9iaW9fWDUwOShtX2JpbywgbnVsbHB0ciwgMCwgbnVs
bHB0cikpCisgICAgICAgICAgICByZXR1cm4geyB4NTA5IH07CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfQorCisgICAgT3B0aW9uYWw8VmVjdG9yPHVpbnQ4X3Q+PiBnZXRNZW1E
YXRhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGRhdGFQOworICAgICAgICBhdXRv
IGxlbmd0aCA9IDo6QklPX2dldF9tZW1fZGF0YShtX2JpbywgJmRhdGFQKTsKKyAgICAgICAgaWYg
KGxlbmd0aCA8IDApCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAg
IFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICBkYXRhLmFwcGVuZChkYXRhUCwgbGVuZ3Ro
KTsKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgfQorCisgICAgOjpCSU8qIGdldCgpIHsgcmV0
dXJuIG1fYmlvOyB9CisKK3ByaXZhdGU6CisgICAgOjpCSU8qIG1fYmlvIHsgbnVsbHB0ciB9Owor
fTsKKworY2xhc3MgQnVmTWVtIHsKK3B1YmxpYzoKKyAgICBCdWZNZW0oKSA9IGRlZmF1bHQ7CisK
KyAgICB+QnVmTWVtKCkKKyAgICB7CisgICAgICAgIGlmIChtX2J1Zk1lbSkKKyAgICAgICAgICAg
IEJVRl9NRU1fZnJlZShtX2J1Zk1lbSk7CisgICAgfQorCisgICAgb3BlcmF0b3IgY29uc3QgQlVG
X01FTSogKCkgY29uc3QgeyByZXR1cm4gbV9idWZNZW07IH0KKyAgICBvcGVyYXRvciBCVUZfTUVN
KiAoKSB7IHJldHVybiBtX2J1Zk1lbTsgfQorCisgICAgQlVGX01FTSogZ2V0KCkgeyByZXR1cm4g
bV9idWZNZW07IH0KKworcHJpdmF0ZToKKyAgICBCVUZfTUVNKiBtX2J1Zk1lbSB7IG51bGxwdHIg
fTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit1c2luZyBQdHIgPSBzdGQ6OnVuaXF1ZV9w
dHI8VCosIFdURjo6RnVuY3Rpb248dm9pZChUKiopPj47CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitQdHI8VD4gY3JlYXRlUHRyKCkKK3sKKyAgICByZXR1cm4gUHRyPFQ+KG5ldyBUKiB7IG51bGxw
dHIgfSwgW10oVCoqIHB0cikgeworICAgICAgICBpZiAoKnB0cikKKyAgICAgICAgICAgIE9QRU5T
U0xfZnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPigqcHRyKSk7CisgICAgICAgIGlmIChwdHIp
CisgICAgICAgICAgICBkZWxldGUgcHRyOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBP
cGVuU1NMCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggYTkxMzc5MGFlNzljMjk4MmUzNGVmZjI1MDc0MzRmMTExMjQ4YzllMy4u
NGUyN2U2NDhjMTkzYTJjOWIxYzI3NGIzYzFlZTZkYTIzMDljMzZiZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDE5LTA3LTEwICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnku
Y29tPgorCisgICAgICAgIFtDdXJsXSBpbXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1tYXJ5
SW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkx
NDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9y
bS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDE5LTA3LTA4ICBEYW5pZWwgQmF0ZXMg
IDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBTdXBwb3J0IHNlbGVjdCBhbGwg
aW4gbm9uLWVkaXRhYmxlIGVsZW1lbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2lu
Y2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNWQxMDgxN2EzNGE3ODhjMjRiZWQwMTY5
M2E0NWRiNTBmZDc5MWRhMy4uNjU3MDgyMGVmNjg1YTMxNzM4MTI0NjVjZGYwNTM5ZWU5ZTAwODUx
NCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBl
Y3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBl
Y3RhdGlvbnMKQEAgLTM0MCwzICszNDAsNyBAQCBmYXN0L2Nzcy90cmFuc2l0aW9uLWNvbG9yLXVu
c3BlY2lmaWVkLmh0bWwgWyBTa2lwIF0KIGZhc3QvZmlsdGVyLWltYWdlL2ZpbHRlci1pbWFnZS1h
bmltYXRpb24uaHRtbCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVyL21vZGlmeS1mcmFtZXRyZWUt
aW4tY2FsbGJhY2suaHRtbCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVyL211bHRpLWZyYW1lcy5o
dG1sIFsgU2tpcCBdCisKKyMgV2luQ2Fpcm8gd2sxIGRvZXNuJ3Qgc3VwcG9ydCBpbnNwZWN0b3Ig
dGVzdHMuCit3ZWJraXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsv
cmVzb3VyY2Utc2VjdXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9i
LzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZp
Y2F0ZS5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5j
YWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVz
dEV4cGVjdGF0aW9ucwppbmRleCBkZTY4MzI3Mzc1NWFjMGZmMjg1ZjI1NmUyOTUyYTFiMGM1MDc3
OTk5Li5mZmE2YTZiYTQyZWZkMmM0YzU4OTNmNGQyMGVmZmQwYmIyODI5M2U3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEwMTcsOCAr
MTAxNyw4IEBAIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtb3ZlcnJp
ZGVtaW1ldHlwZS1jb250ZW50LXR5cGUtaGVhZGVyLmh0CiBodHRwL3Rlc3RzL3htbHZpZXdlciBb
IFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTkyNDA2IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdv
cmsvcmVzb3VyY2Utc2VjdXJpdHktY29ubmVjdGlvbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3Jn
L2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHkt
Y2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZS5odG1sIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3Vy
Y2Utc2VjdXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzE5MTQ5
OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZS5o
dG1sIFsgUGFzcyBdCiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIElzc3VlIGNhdGVnb3Jp
ZXMgYmVsb3cgYXJlIHNoYXJlZCB3aXRoIG90aGVyIHBsYXRmb3JtcyAocHJpbWFyaWx5IEFwcGxl
V2luKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374451</attachid>
            <date>2019-07-19 01:50:39 -0700</date>
            <delta_ts>2019-07-29 00:57:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190719174650.patch</filename>
            <type>text/plain</type>
            <size>29348</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3NTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMyOTYzNWY3MzkwZDhkOWExYzgzN2Iy
NTMyOTg4ZjYyNjU1OThjZWUuLjc5MWY1NzhlZjExZDk2YjQzZGU3YzQwM2FiNzljYzY5N2U5MDRk
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDctMTkgIFRha2FzaGkgS29tb3JpICA8VGFr
YXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZp
Y2F0ZUluZm86OnN1bW1hcnlJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXhlZCBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgZW5jb2RpbmcgdmVjdG9y
LgorCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKwogMjAx
OS0wNy0xNiAgQ2hyaXN0b3BoZXIgUmVpZCAgPGNocmlzLnJlaWRAc29ueS5jb20+CiAKICAgICAg
ICAgQnl0ZWNvZGUgY2FjaGUgc2hvdWxkIHVzZSBGaWxlU3lzdGVtCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDI2
ZTg0YmU2MDJhYWU3MWNlYTJkMzMzY2ZlNWY1Zjk5YWJlNzk2ZC4uZDNmYWZhNDJjMzZmMzUwYmMx
Y2M0NWNlOTViZGM0NDFmMGIwNWM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE5
LTA3LTE5ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAg
ICAgIFtDdXJsXSBpbXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1tYXJ5SW5mbworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDk4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IENlcnRp
ZmljYWVJbmZvOjpTdW1tYXJ5SW5mby4KKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBXZWJJbnNw
ZWN0b3Igc2hvdyBzdW1tYXJ5IG9mIGNlcnRpZmljYXRlcy4KKworICAgICAgICBUZXN0czogaHR0
cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9yZXNvdXJjZS1zZWN1cml0eS1jZXJ0aWZpY2F0ZS5o
dG1sCisgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvZ2V0U2VyaWFsaXplZENl
cnRpZmljYXRlLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL0N1cmwuY21ha2U6CisgICAgICAg
ICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oOgorICAgICAgICAoV1RG
OjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZW5jb2RlKToK
KyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVyPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz46OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJ
bmZvIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2Vy
dGlmaWNhdGVJbmZvQ3VybC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86
OnN1bW1hcnlJbmZvIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFNTTFZlcmlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxTU0xWZXJpZmllcjo6Y29s
bGVjdEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6U3RhY2tPZlg1MDkpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tPZlg1MDk6On5TdGFja09mWDUwOSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6Y291bnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3RhY2tPZlg1MDk6Oml0ZW0pOiBEZWxldGVkLgorICAgICAgICAoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6QklPSG9sZGVyKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6fkJJT0hvbGRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpCSU9Ib2xkZXI6OndyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJJT0hvbGRlcjo6YXNDZXJ0aWZpY2F0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpwZW1EYXRhRnJvbUN0eCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29y
ay9jdXJsL0N1cmxTU0xWZXJpZmllci5oOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9PcGVuU1NMSGVscGVyLmNwcDogQWRkZWQuCisgICAgICAgIChPcGVuU1NMOjpkZWxldGVyPEJV
Rl9NRU0+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKE9wZW5TU0w6OmRlbGV0ZXI8WDUwOT46Om9w
ZXJhdG9yKCkpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lOjpTdGFja09m
R2VuZXJhbE5hbWUpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lOjp+U3Rh
Y2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6
b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mR2VuZXJhbE5hbWU6OmNv
dW50KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6aXRlbSk6CisgICAg
ICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6U3RhY2tPZlg1MDkpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZlg1MDk6On5TdGFja09mWDUwOSk6CisgICAgICAgIChPcGVuU1NMOjpTdGFja09m
WDUwOTo6Y291bnQpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6Oml0ZW0pOgorICAg
ICAgICAoT3BlblNTTDo6QklPOjpCSU8pOgorICAgICAgICAoT3BlblNTTDo6QklPOjp+QklPKToK
KyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0TWVtRGF0YSBjb25zdCk6CisgICAgICAgIChPcGVu
U1NMOjpCSU86OnJlYWRYNTA5KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0KToKKyAgICAg
ICAgKE9wZW5TU0w6OnBlbURhdGFGcm9tQ3R4KToKKyAgICAgICAgKE9wZW5TU0w6OmNyZWF0ZUNl
cnRpZmljYXRlSW5mbyk6CisgICAgICAgIChPcGVuU1NMOjp0b1N0cmluZyk6CisgICAgICAgIChP
cGVuU1NMOjpnZXRDb21tb25OYW1lKToKKyAgICAgICAgKE9wZW5TU0w6OmdldFN1YmplY3ROYW1l
KToKKyAgICAgICAgKE9wZW5TU0w6OmNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyk6CisgICAgICAg
IChPcGVuU1NMOjpnZXRTdWJqZWN0QWx0TmFtZSk6CisgICAgICAgIChPcGVuU1NMOjpjcmVhdGVT
dW1tYXJ5SW5mbyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxw
ZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nl
cnRpZmljYXRlSW5mb0N1cmwuY3BwLgorCiAyMDE5LTA3LTE2ICBDaHJpc3RvcGhlciBSZWlkICA8
Y2hyaXMucmVpZEBzb255LmNvbT4KIAogICAgICAgICBCeXRlY29kZSBjYWNoZSBzaG91bGQgdXNl
IEZpbGVTeXN0ZW0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNp
c3RlbnRDb2RlcnMuaCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2Rl
cnMuaAppbmRleCA3ZWUzYzkzMjk0MDFlOGNjNzBkZjEzNjE5Nzk2MWY4NjU4MTYwYzg4Li44NjMw
Njc0NDk3OGY4MDI2MjQwOTQ3NjI5Y2M4NjY1M2QwNGU5NmU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dURi93
dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29k
ZXI8dHJ1ZSwgVCwgaW5saW5lQ2EKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5j
b2RlciwgY29uc3QgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAg
ICAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0g
ICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBh
bGlnbm9mKFQpKTsKKyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkg
KiBzaXplb2YoVCkpOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2Rl
ciYgZGVjb2RlciwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0N1cmwuY21ha2UKaW5kZXggMDA2NGFkZjBhYzRhZGU2OTJmNzE5NWViZjgwODNjYTdi
NDMyYzRkZi4uYzE3MTc4OTFmNzJlYTRiODJhZGYwMDRiZDczZTk0NjMzNGRmOWIzZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9DdXJsLmNtYWtlCkBAIC0yNCw2ICsyNCw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIu
Y3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuY3BwCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Byb3RlY3Rpb25TcGFjZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1Byb3h5U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHVi
bGljU3VmZml4Q3VybC5jcHAKQEAgLTUxLDExICs1MiwxNSBAQCBsaXN0KEFQUEVORCBXZWJDb3Jl
X1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFByb3h5U2V0dGluZ3MuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5o
CiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmgKKyAgICBwbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuaAogICAgIHBsYXRmb3JtL25l
dHdvcmsvY3VybC9DdXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvQ3VybFJlc3BvbnNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNT
TEhhbmRsZS5oCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuaAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9Eb3dubG9hZEJ1bmRsZS5oCisgICAgcGxhdGZvcm0vbmV0d29yay9j
dXJsL09wZW5TU0xIZWxwZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm90ZWN0aW9u
U3BhY2VDdXJsLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCiAg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlUmVxdWVzdC5oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5k
ZXggZTU3ZjNiZDBhNDg5MDhlNTNmZTU4YzlhZTRkNGFmNTYwMWZhMGUwMC4uMmZiNmZlY2I4ZDlm
YWQwZTM0MGEwZmY2NmViNDBjNjFjOGI5ZmM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaApAQCAtNDksNyArNDks
NyBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zTm9uUm9vdFNIQTFTaWduZWRDZXJ0aWZp
Y2F0ZSgpIGNvbnN0IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBP
cHRpb25hbDxTdW1tYXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVk
KCk7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxTdW1tYXJ5SW5mbz4gc3Vt
bWFyeUluZm8oKSBjb25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2VydGlmaWNhdGVDaGFpbi5pc0VtcHR5KCk7IH0KIApAQCAtNzEsMTUgKzcxLDM3IEBAIG5hbWVz
cGFjZSBXVEYgewogbmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3Qg
Q29kZXI8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2Rl
KEVuY29kZXImLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyB2
b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUlu
Zm8mIGNlcnRpZmljYXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgICAgIGF1dG8mIGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNh
dGVDaGFpbigpOworCisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnZlcmlmaWNh
dGlvbkVycm9yKCk7CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7
CisgICAgICAgIGZvciAoYXV0byYgY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWluKQorICAg
ICAgICAgICAgZW5jb2RlciA8PCBjZXJ0aWZpY2F0ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9v
bCBkZWNvZGUoRGVjb2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCisgICAgc3RhdGlj
IGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYg
Y2VydGlmaWNhdGVJbmZvKQogICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CisgICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUodmVyaWZpY2F0aW9uRXJyb3IpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIHNpemVfdCBudW1PZkNlcnQgPSAwOworICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKG51bU9mQ2VydCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRp
ZmljYXRlQ2hhaW47CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBp
KyspIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUg
Y2VydGlmaWNhdGU7CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRl
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmlj
YXRlQ2hhaW4uYXBwZW5kKFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGNlcnRpZmljYXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRp
b25FcnJvciwgV1RGTW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIz
NDk0MjM4ZmE1MDlkMjRmZjkxMTA4YTkzZTE3Li4yNzliMzZjMTljMmY2MTNkZjQxMjMwYTM4ZGEw
YTYxZjg4Y2I2Nzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQg
SW5jLgorICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVu
dCBJbmMuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKIAorI2lu
Y2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIu
aD4KIAogI2lmIFVTRShDVVJMKQpAQCAtNTAsNiArNTEsMTQgQEAgQ2VydGlmaWNhdGVJbmZvOjpD
ZXJ0aWZpY2F0ZSBDZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShjb25zdCB1aW50OF90
KiBidWYKICAgICByZXR1cm4gY2VydGlmaWNhdGU7CiB9CiAKK09wdGlvbmFsPENlcnRpZmljYXRl
SW5mbzo6U3VtbWFyeUluZm8+IENlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8oKSBjb25zdAor
eworICAgIGlmICghbV9jZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIHJldHVybiBPcGVuU1NMOjpjcmVhdGVTdW1tYXJ5SW5mbyhtX2Nl
cnRpZmljYXRlQ2hhaW4uYXQoMCkpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApp
bmRleCA4MDk0YjkzNTk5ODM4MmVlZjQxM2RjNGE1ZWFmYjI0ZTRlYWY3N2FlLi5iZjE0YjI4MThh
YjgxZjI0MTU0ZjE5ZjQ2N2YwMjUzYzAzYTU0MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAtMzAs
MTEgKzMwLDkgQEAKICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2lu
Y2x1ZGUgIkN1cmxTU0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZp
Y2F0ZT4gcGVtRGF0YUZyb21DdHgoWDUwOVN0b3JlQ1RYKik7CiBzdGF0aWMgQ3VybFNTTFZlcmlm
aWVyOjpTU0xDZXJ0aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3ModW5z
aWduZWQpOwogCiBDdXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2b2lkKiBzc2xDdHgp
CkBAIC02MSwxNSArNTksMTYgQEAgQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIodm9p
ZCogc3NsQ3R4KQogICAgICAgICBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNM
aXN0LnV0ZjgoKS5kYXRhKCkpOwogfQogCi12b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdElu
Zm8oWDUwOVN0b3JlQ1RYKiBjdHgpCit2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8o
WDUwOV9TVE9SRV9DVFgqIGN0eCkKIHsKLSAgICBtX2NlcnRpZmljYXRlSW5mbyA9IENlcnRpZmlj
YXRlSW5mbyB7IFg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChj
dHgpIH07CisgICAgaWYgKGF1dG8gY2VydGlmaWNhdGVJbmZvID0gT3BlblNTTDo6Y3JlYXRlQ2Vy
dGlmaWNhdGVJbmZvKGN0eCkpCisgICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gV1RGTW92ZSgq
Y2VydGlmaWNhdGVJbmZvKTsKIAogICAgIGlmIChhdXRvIGVycm9yID0gbV9jZXJ0aWZpY2F0ZUlu
Zm8udmVyaWZpY2F0aW9uRXJyb3IoKSkKICAgICAgICAgbV9zc2xFcnJvcnMgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3MoZXJyb3IpKTsKIH0KIAotaW50IEN1
cmxTU0xWZXJpZmllcjo6dmVyaWZ5Q2FsbGJhY2soaW50IHByZXZlcmlmaWVkLCBYNTA5U3RvcmVD
VFgqIGN0eCkKK2ludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJp
ZmllZCwgWDUwOV9TVE9SRV9DVFgqIGN0eCkKIHsKICAgICBhdXRvIHNzbCA9IHN0YXRpY19jYXN0
PFNTTCo+KFg1MDlfU1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1
MDlfU1RPUkVfQ1RYX2lkeCgpKSk7CiAgICAgYXV0byBzc2xDdHggPSBTU0xfZ2V0X1NTTF9DVFgo
c3NsKTsKQEAgLTgwLDc1ICs3OSw2IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxi
YWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0dXJuIHByZXZl
cmlmaWVkOwogfQogCi1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
U3RhY2tPZlg1MDkoWDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0cyB7IFg1MDlf
U1RPUkVfQ1RYX2dldDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAgIH5TdGFja09m
WDUwOSgpCi0gICAgewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAgIHNrX1g1MDlf
cG9wX2ZyZWUobV9jZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb3Vu
dCgpIHsgcmV0dXJuIHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSogaXRlbSh1bnNp
Z25lZCBpKSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgU1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBC
SU9Ib2xkZXIgewotcHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDogbV9iaW8geyBC
SU9fbmV3KEJJT19zX21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9Ib2xkZXIoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUobV9iaW8pOwot
ICAgIH0KLQotICAgIGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVNX3dyaXRlX2Jp
b19YNTA5KG1fYmlvLCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUg
YXNDZXJ0aWZpY2F0ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwotICAgICAgICBs
b25nIGxlbmd0aCA9IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAgICAgICAgaWYg
KGxlbmd0aCA8IDApCi0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZp
Y2F0ZSgpOwotCi0gICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRp
ZmljYXRlKGRhdGEsIGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICBCSU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGljIFZlY3RvcjxD
ZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5U3RvcmVDVFgq
IGN0eCkKLXsKLSAgICBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcmVzdWx0
OwotICAgIFN0YWNrT2ZYNTA5IGNlcnRzIHsgY3R4IH07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBjZXJ0cy5jb3VudCgpOyBpKyspIHsKLSAgICAgICAgQklPSG9sZGVyIGJpbzsKLQotICAgICAg
ICBpZiAoIWJpby53cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0
b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OwotCi0gICAgICAgIGF1dG8gY2Vy
dGlmaWNhdGUgPSBiaW8uYXNDZXJ0aWZpY2F0ZSgpOwotICAgICAgICBpZiAoY2VydGlmaWNhdGUu
aXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNl
cnRpZmljYXRlPiB7IH07Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmlj
YXRlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIEN1cmxTU0xW
ZXJpZmllcjo6U1NMQ2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdz
KHVuc2lnbmVkIHNzbEVycm9yKQogewogICAgIHN3aXRjaCAoc3NsRXJyb3IpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIu
aAppbmRleCA5ZTNiODAwMWI3M2ExYjk3Zjc4NDI0OTFjNDFlMDk0ZDNjZWQ4MmY1Li40NTJmNzA1
ZjljYjhmZTI5MTljZjI4NTZkZWU4ZDBhZDFhODE0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCkBAIC0yNywx
NiArMjcsMTIgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgi
CisjaW5jbHVkZSAiT3BlblNTTEhlbHBlci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdHJ1Y3QgeDUwOV9zdG9yZV9j
dHhfc3Q7Ci10eXBlZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVDVFg7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ3VybEhhbmRsZTsKLQogY2xhc3MgQ3VybFNT
TFZlcmlmaWVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOwog
cHVibGljOgpAQCAtNTYsMTIgKzUyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBDZXJ0aWZpY2F0
ZUluZm8mIGNlcnRpZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZv
OyB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlT
dG9yZUNUWCopOworICAgIHN0YXRpYyBpbnQgdmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5X1NUT1JF
X0NUWCopOworICAgIHZvaWQgY29sbGVjdEluZm8oWDUwOV9TVE9SRV9DVFgqKTsKIAogICAgIGlu
dCBtX3NzbEVycm9ycyB7IDAgfTsKICAgICBDZXJ0aWZpY2F0ZUluZm8gbV9jZXJ0aWZpY2F0ZUlu
Zm87Ci0KLSAgICB2b2lkIGNvbGxlY3RJbmZvKFg1MDlTdG9yZUNUWCopOwogfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU1NTIyNmJkOGUxNmZhNTFm
Y2I0NzVmNjdjN2RjYjdlY2JkMTA2ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5jcHAKQEAgLTAsMCArMSwzNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5t
ZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5T
U0xIZWxwZXIuaCIKKworI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8d3Rm
L0RhdGVNYXRoLmg+CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9T
ZWNvbmRzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3Bh
Y2UgT3BlblNTTCB7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVsZXRlcjsKK3RlbXBs
YXRlPD4gc3RydWN0IGRlbGV0ZXI8QlVGX01FTT4geworICAgIHZvaWQgb3BlcmF0b3IoKShCVUZf
TUVNKiBtZW0pCisgICAgeworICAgICAgICBpZiAobWVtKQorICAgICAgICAgICAgQlVGX01FTV9m
cmVlKG1lbSk7CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IGRlbGV0ZXI8WDUwOT4gewor
ICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsKKyAgICAgICAgaWYgKHg1MDkp
CisgICAgICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IGRlbGV0ZXI8dW5zaWduZWQgY2hhcioqPiB7CisgICAgdm9pZCBvcGVyYXRvcigpKHVuc2ln
bmVkIGNoYXIqKiBwdHIpCisgICAgeworICAgICAgICBpZiAoKnB0cikKKyAgICAgICAgICAgIE9Q
RU5TU0xfZnJlZSgqcHRyKTsKKworICAgICAgICBkZWxldGUgcHRyOworICAgIH0KK307CisKK3Vz
aW5nIFg1MDlSZWYgPSBzdGQ6OnVuaXF1ZV9wdHI8WDUwOSwgZGVsZXRlcjxYNTA5Pj47Cit1c2lu
ZyBCdWZNZW1SZWYgPSBzdGQ6OnVuaXF1ZV9wdHI8QlVGX01FTSwgZGVsZXRlcjxCVUZfTUVNPj47
Cit1c2luZyBNZW1QdHJSZWYgPSBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhciosIGRlbGV0
ZXI8dW5zaWduZWQgY2hhcioqPj47CisKK2NsYXNzIFN0YWNrT2ZHZW5lcmFsTmFtZSB7CitwdWJs
aWM6CisgICAgU3RhY2tPZkdlbmVyYWxOYW1lKGNvbnN0IFg1MDkqIHg1MDksIGludCBuaWQpCisg
ICAgICAgIDogbV9uYW1lcyB7IHN0YXRpY19jYXN0PFNUQUNLX09GKEdFTkVSQUxfTkFNRSkqPihY
NTA5X2dldF9leHRfZDJpKHg1MDksIG5pZCwgbnVsbHB0ciwgbnVsbHB0cikpIH0KKyAgICB7Cisg
ICAgfQorCisgICAgflN0YWNrT2ZHZW5lcmFsTmFtZSgpCisgICAgeworICAgICAgICBpZiAobV9u
YW1lcykKKyAgICAgICAgICAgIEdFTkVSQUxfTkFNRVNfZnJlZShtX25hbWVzKTsKKyAgICB9CisK
KyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lczsgfQorCisgICAgaW50IGNvdW50
KCkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX251bShtX25hbWVzKTsgfQorICAgIEdFTkVSQUxf
TkFNRSogaXRlbShpbnQgaSkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKG1fbmFtZXMs
IGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9uYW1lcyB7
IG51bGxwdHIgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZYNTA5IHsKK3B1YmxpYzoKKyAgICBTdGFj
a09mWDUwOShYNTA5X1NUT1JFX0NUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBYNTA5X1NU
T1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3RhY2tPZlg1
MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19YNTA5X3Bv
cF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgaW50IGNvdW50KCkgeyBy
ZXR1cm4gc2tfWDUwOV9udW0obV9jZXJ0cyk7IH0KKyAgICBYNTA5KiBpdGVtKGludCBpKSB7IHJl
dHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tf
T0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBCSU8geworcHVibGlj
OgorICAgIEJJTygpCisgICAgICAgIDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19tZW0oKSkg
fQorICAgIHsKKyAgICB9CisKKyAgICBCSU8oWDUwOSogZGF0YSkKKyAgICAgICAgOiBtX2JpbyB7
IDo6QklPX25ldyg6OkJJT19zX21lbSgpKSB9CisgICAgeworICAgICAgICA6OlBFTV93cml0ZV9i
aW9fWDUwOShtX2JpbywgZGF0YSk7CisgICAgfQorCisgICAgQklPKGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2JpbyB7IDo6QklPX25ld19tZW1fYnVmKGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+QklPKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX2JpbykKKyAgICAgICAgICAgIDo6QklPX2ZyZWUobV9iaW8pOworICAgIH0K
KworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0TWVtRGF0YSgpIGNvbnN0CisgICAg
eworICAgICAgICB1aW50OF90KiBkYXRhUDsKKyAgICAgICAgYXV0byBsZW5ndGggPSA6OkJJT19n
ZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhUCk7CisgICAgICAgIGlmIChsZW5ndGggPCAwKQorICAg
ICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgICAgICBWZWN0b3I8dWludDhfdD4g
ZGF0YTsKKyAgICAgICAgZGF0YS5hcHBlbmQoZGF0YVAsIGxlbmd0aCk7CisgICAgICAgIHJldHVy
biBkYXRhOworICAgIH0KKworICAgIFg1MDlSZWYgcmVhZFg1MDkoKQorICAgIHsKKyAgICAgICAg
aWYgKGF1dG8geDUwOSA9IDo6UEVNX3JlYWRfYmlvX1g1MDkobV9iaW8sIG51bGxwdHIsIDAsIG51
bGxwdHIpKQorICAgICAgICAgICAgcmV0dXJuIFg1MDlSZWYoeDUwOSk7CisgICAgICAgIHJldHVy
biBYNTA5UmVmKCk7CisgICAgfQorCisgICAgOjpCSU8qIGdldCgpIHsgcmV0dXJuIG1fYmlvOyB9
CisKK3ByaXZhdGU6CisgICAgOjpCSU8qIG1fYmlvIHsgbnVsbHB0ciB9OworfTsKKworCitzdGF0
aWMgVmVjdG9yPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFG
cm9tQ3R4KFg1MDlfU1RPUkVfQ1RYKiBjdHgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKKyAgICBTdGFja09mWDUwOSBjZXJ0cyB7
IGN0eCB9OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3VudCgpOyBpKyspIHsK
KyAgICAgICAgQklPIGJpbyhjZXJ0cy5pdGVtKGkpKTsKKworICAgICAgICBpZiAoYXV0byBjZXJ0
aWZpY2F0ZSA9IGJpby5nZXRNZW1EYXRhKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmNlcnRpZmljYXRlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPiBjcmVhdGVDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFgqIGN0
eCkKK3sKKyAgICBpZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9y
KGN0eCksIHBlbURhdGFGcm9tQ3R4KGN0eCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5n
PiB0b1N0cmluZyhjb25zdCBBU04xX1NUUklORyogbmFtZSkKK3sKKyAgICBNZW1QdHJSZWYgZGF0
YShuZXcgdW5zaWduZWQgY2hhciogeyBudWxscHRyIH0pOworCisgICAgYXV0byBsZW5ndGggPSBB
U04xX1NUUklOR190b19VVEY4KGRhdGEuZ2V0KCksIG5hbWUpOworICAgIGlmIChsZW5ndGggPCAw
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFN0cmluZygqZGF0
YSwgbGVuZ3RoKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFN0cmluZz4gZ2V0Q29tbW9uTmFtZShj
b25zdCBYNTA5KiB4NTA5KQoreworICAgIGF1dG8gc3ViamVjdE5hbWUgPSBYNTA5X2dldF9zdWJq
ZWN0X25hbWUoeDUwOSk7CisgICAgaWYgKCFzdWJqZWN0TmFtZSkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKworICAgIGF1dG8gaW5kZXggPSBYNTA5X05BTUVfZ2V0X2luZGV4X2J5X05J
RChzdWJqZWN0TmFtZSwgTklEX2NvbW1vbk5hbWUsIC0xKTsKKyAgICBpZiAoaW5kZXggPCAwKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBjb21tb25OYW1lRW50cnkg
PSBYNTA5X05BTUVfZ2V0X2VudHJ5KHN1YmplY3ROYW1lLCBpbmRleCk7CisgICAgaWYgKCFjb21t
b25OYW1lRW50cnkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGNv
bW1vbk5hbWVFbnRyeURhdGEgPSBYNTA5X05BTUVfRU5UUllfZ2V0X2RhdGEoY29tbW9uTmFtZUVu
dHJ5KTsKKyAgICBpZiAoIWNvbW1vbk5hbWVFbnRyeURhdGEpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBhdXRvIGNvbW1vbk5hbWUgPSB0b1N0cmluZyhjb21tb25OYW1lRW50
cnlEYXRhKTsKKyAgICBpZiAoIWNvbW1vbk5hbWUgfHwgIWNvbW1vbk5hbWUtPmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIFdURk1vdmUoKmNvbW1v
bk5hbWUpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBnZXRTdWJqZWN0TmFtZShjb25z
dCBYNTA5KiB4NTA5KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzID0g
KEFTTjFfU1RSRkxHU19SRkMyMjUzIHwgQVNOMV9TVFJGTEdTX0VTQ19RVU9URSB8IFhOX0ZMQUdf
U0VQX0NQTFVTX1NQQyB8IFhOX0ZMQUdfRE5fUkVWIHwgWE5fRkxBR19GTl9OT05FIHwgWE5fRkxB
R19TUENfRVEpICYgfkFTTjFfU1RSRkxHU19FU0NfTVNCOworCisgICAgYXV0byBzdWJqZWN0TmFt
ZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KTsKKyAgICBpZiAoIXN1YmplY3ROYW1lKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQklPIGJpbzsKKyAgICBhdXRvIGxl
bmd0aCA9IFg1MDlfTkFNRV9wcmludF9leChiaW8uZ2V0KCksIHN1YmplY3ROYW1lLCAwLCBmbGFn
cyk7CisgICAgaWYgKGxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgQnVmTWVtUmVmIGJ1Zk1lbTsKKyAgICBCSU9fZ2V0X21lbV9wdHIoYmlvLmdldCgpLCAm
YnVmTWVtKTsKKyAgICBCSU9fc2V0X2Nsb3NlKGJpby5nZXQoKSwgQklPX05PQ0xPU0UpOworCisg
ICAgcmV0dXJuIFN0cmluZyhidWZNZW0tPmRhdGEsIGJ1Zk1lbS0+bGVuZ3RoKTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPFNlY29uZHM+IGNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyhjb25zdCBBU04x
X1RJTUUqIGFuczFUaW1lKQoreworICAgIGlmICghYW5zMVRpbWUpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CisKKyAgICBpZiAoKGFuczFUaW1lLT50eXBlICE9IFZfQVNOMV9VVENUSU1F
ICYmIGFuczFUaW1lLT50eXBlICE9IFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUpIHx8ICFhbnMxVGlt
ZS0+ZGF0YSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIFVUQ1RJTUUg
ICAgICAgICA6IFlZbW1kZEhITU1bU1NdCisgICAgLy8gR0VORVJBTElaRURUSU1FIDogWVlZWW1t
ZGRISE1NW1NTXQorICAgIGludCBkaWdpdExlbmd0aCA9IGFuczFUaW1lLT50eXBlID09IFZfQVNO
MV9VVENUSU1FID8gMTAgOiAxMjsKKyAgICBpZiAoYW5zMVRpbWUtPmxlbmd0aCA8IGRpZ2l0TGVu
Z3RoKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBkYXRhID0gYW5z
MVRpbWUtPmRhdGE7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdExlbmd0aDsgaSsrKSB7
CisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGRhdGFbaV0pKQorICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdHJ1Y3QgdG0gdGltZSB7IH07CisKKyAgICBp
ZiAoYW5zMVRpbWUtPnR5cGUgPT0gVl9BU04xX1VUQ1RJTUUpIHsKKyAgICAgICAgdGltZS50bV95
ZWFyID0gKGRhdGFbMF0gLSAnMCcpICogMTAgKyAoZGF0YVsxXSAtICcwJyk7CisgICAgICAgIGlm
ICh0aW1lLnRtX3llYXIgPCA1MCkKKyAgICAgICAgICAgIHRpbWUudG1feWVhciArPSAxMDA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdGltZS50bV95ZWFyID0gKGRhdGFbMF0gLSAnMCcpICogMTAw
MCArIChkYXRhWzFdIC0gJzAnKSAqIDEwMCArIChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFb
M10gLSAnMCcpOworICAgICAgICB0aW1lLnRtX3llYXIgLT0gMTkwMDsKKyAgICB9CisKKyAgICBk
YXRhICs9IGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FID8gMiA6IDQ7CisKKyAgICB0
aW1lLnRtX21vbiA9IChkYXRhWzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0gLSAnMCcpIC0gMTsK
KyAgICBpZiAodGltZS50bV9tb24gPCAwIHx8IHRpbWUudG1fbW9uID4gMTEpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgdGltZS50bV9tZGF5ID0gKGRhdGFbMl0gLSAnMCcpICog
MTAgKyAoZGF0YVszXSAtICcwJyk7CisgICAgdGltZS50bV9ob3VyID0gKGRhdGFbNF0gLSAnMCcp
ICogMTAgKyAoZGF0YVs1XSAtICcwJyk7CisgICAgdGltZS50bV9taW4gPSAoZGF0YVs2XSAtICcw
JykgKiAxMCArIChkYXRhWzddIC0gJzAnKTsKKworICAgIGlmICgoYW5zMVRpbWUtPmxlbmd0aCA+
PSBkaWdpdExlbmd0aCArIDIpICYmIGlzQVNDSUlEaWdpdChkYXRhWzhdKSAmJiBpc0FTQ0lJRGln
aXQoZGF0YVs5XSkpCisgICAgICAgIHRpbWUudG1fc2VjID0gKGRhdGFbOF0gLSAnMCcpICogMTAg
KyAoZGF0YVs5XSAtICcwJyk7CisKKyAgICBhdXRvIGdtdFRpbWUgPSBta3RpbWUoJnRpbWUpOwor
ICAgIGF1dG8gbG9jYWxUaW1lT2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KGdtdFRp
bWUgKiAxMDAwLjApOworICAgIHJldHVybiBTZWNvbmRzKGdtdFRpbWUgKyAobG9jYWxUaW1lT2Zm
c2V0Lm9mZnNldCAvIDEwMDAuMCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRTdWJqZWN0QWx0TmFt
ZShjb25zdCBYNTA5KiB4NTA5LCBWZWN0b3I8U3RyaW5nPiYgZG5zTmFtZXMsIFZlY3RvcjxTdHJp
bmc+JiBpcEFkZHJlc3NlcykKK3sKKyAgICBTdGFja09mR2VuZXJhbE5hbWUgc2FuTGlzdCh4NTA5
LCBOSURfc3ViamVjdF9hbHRfbmFtZSk7CisgICAgaWYgKCFzYW5MaXN0KQorICAgICAgICByZXR1
cm47CisKKyAgICBhdXRvIG51bSA9IHNhbkxpc3QuY291bnQoKTsKKyAgICBmb3IgKGF1dG8gaSA9
IDA7IGkgPCBudW07IGkrKykgeworICAgICAgICBhdXRvKiB2YWx1ZSA9IHNhbkxpc3QuaXRlbShp
KTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmICh2YWx1ZS0+dHlwZSA9PSBHRU5fRE5TKSB7CisgICAgICAgICAgICBhdXRvIGRuc05hbWUg
PSB0b1N0cmluZyh2YWx1ZS0+ZC5kTlNOYW1lKTsKKyAgICAgICAgICAgIGlmIChkbnNOYW1lICYm
IGRuc05hbWUtPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIGRuc05hbWVzLmFwcGVuZChXVEZN
b3ZlKCpkbnNOYW1lKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUtPnR5cGUgPT0gR0VOX0lQ
QUREKSB7CisgICAgICAgICAgICBhdXRvIGRhdGEgPSB2YWx1ZS0+ZC5pUEFkZHJlc3MtPmRhdGE7
CisgICAgICAgICAgICBpZiAodmFsdWUtPmQuaVBBZGRyZXNzLT5sZW5ndGggPT0gNCkKKyAgICAg
ICAgICAgICAgICBpcEFkZHJlc3Nlcy5hcHBlbmQobWFrZVN0cmluZyhkYXRhWzBdLCAiLiIsIGRh
dGFbMV0sICIuIiwgZGF0YVsyXSwgIi4iLCBkYXRhWzNdKSk7CisgICAgICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9PSAxNikgeworICAgICAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIgaXBBZGRyZXNzOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzcy5hcHBlbmQobWFrZVN0
cmluZyhoZXgoZGF0YVswXSA8PCA4IHwgZGF0YVsxXSwgNCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGkgIT0gNykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzcy5hcHBlbmQo
IjoiKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YSArPSAyOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpcEFkZHJlc3Nlcy5hcHBlbmQoaXBBZGRyZXNzLnRvU3RyaW5nKCkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitPcHRpb25hbDxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm86OlN1bW1hcnlJbmZvPiBjcmVhdGVTdW1tYXJ5SW5mbyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIHBlbSkKK3sKKyAgICBCSU8gYmlvIHsgcGVtIH07CisgICAgYXV0byB4
NTA5ID0gYmlvLnJlYWRYNTA5KCk7CisgICAgaWYgKCF4NTA5KQorICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworCisgICAgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbyBz
dW1tYXJ5SW5mbzsKKworICAgIGlmIChhdXRvIGNvbW1vbk5hbWUgPSBnZXRDb21tb25OYW1lKHg1
MDkuZ2V0KCkpKQorICAgICAgICBzdW1tYXJ5SW5mby5zdWJqZWN0ID0gV1RGTW92ZSgqY29tbW9u
TmFtZSk7CisgICAgZWxzZSBpZiAoYXV0byBzdWJqZWN0TmFtZSA9IGdldFN1YmplY3ROYW1lKHg1
MDkuZ2V0KCkpKQorICAgICAgICBzdW1tYXJ5SW5mby5zdWJqZWN0ID0gV1RGTW92ZSgqc3ViamVj
dE5hbWUpOworCisgICAgaWYgKGF1dG8gbm90QmVmb3JlID0gY29udmVydEFTTjFUaW1lVG9TZWNv
bmRzKFg1MDlfZ2V0MF9ub3RCZWZvcmUoeDUwOS5nZXQoKSkpKQorICAgICAgICBzdW1tYXJ5SW5m
by52YWxpZEZyb20gPSAqbm90QmVmb3JlOworCisgICAgaWYgKGF1dG8gbm90QWZ0ZXIgPSBjb252
ZXJ0QVNOMVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEFmdGVyKHg1MDkuZ2V0KCkpKSkKKyAg
ICAgICAgc3VtbWFyeUluZm8udmFsaWRVbnRpbCA9ICpub3RBZnRlcjsKKworICAgIGdldFN1Ympl
Y3RBbHROYW1lKHg1MDkuZ2V0KCksIHN1bW1hcnlJbmZvLmRuc05hbWVzLCBzdW1tYXJ5SW5mby5p
cEFkZHJlc3Nlcyk7CisKKyAgICByZXR1cm4gc3VtbWFyeUluZm87Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9PcGVuU1NMSGVscGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjE4NWRhZjViNzIwYmE3MmEyNWI2OTBhMWRmYTQxNDBmNTM2YzgxMzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvT3BlblNT
TEhlbHBlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgU29u
eSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5o
PgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIE9wZW5TU0wgeworCitPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8+
IGNyZWF0ZUNlcnRpZmljYXRlSW5mbyhYNTA5X1NUT1JFX0NUWCopOworT3B0aW9uYWw8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbz4gY3JlYXRlU3VtbWFyeUluZm8oY29uc3Qg
VmVjdG9yPHVpbnQ4X3Q+JiBwZW0pOworCit9IC8vIG5hbWVzcGFjZSBPcGVuU1NMCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
NzRhMzk5ZWRkODE3YzZjMWI2NDc5N2FkYzE2NWRhOTVhM2JhMWFiMi4uYTAyNzhjODllMjVkZDVk
MmIzMzNjMGQ3OTYwZjMyODUzZjhlNDVhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDE5LTA3
LTE5ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNvbnkuY29tPgorCisgICAgICAg
IFtDdXJsXSBpbXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1tYXJ5SW5mbworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDk4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWly
by13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBwbGF0Zm9ybS93aW5jYWlyby9UZXN0
RXhwZWN0YXRpb25zOgorCiAyMDE5LTA3LTE2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVs
ZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dITFNMXSBNb3ZlIFdITFNMIHRlc3RzIHRvIHRoZWly
IG93biBmb2xkZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdr
MS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggNWQxMDgxN2EzNGE3ODhjMjRiZWQwMTY5M2E0NWRiNTBmZDc5
MWRhMy4uNjU3MDgyMGVmNjg1YTMxNzM4MTI0NjVjZGYwNTM5ZWU5ZTAwODUxNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTM0MCwzICszNDAsNyBAQCBmYXN0L2Nzcy90cmFuc2l0aW9uLWNvbG9yLXVuc3BlY2lmaWVkLmh0
bWwgWyBTa2lwIF0KIGZhc3QvZmlsdGVyLWltYWdlL2ZpbHRlci1pbWFnZS1hbmltYXRpb24uaHRt
bCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVyL21vZGlmeS1mcmFtZXRyZWUtaW4tY2FsbGJhY2su
aHRtbCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVyL211bHRpLWZyYW1lcy5odG1sIFsgU2tpcCBd
CisKKyMgV2luQ2Fpcm8gd2sxIGRvZXNuJ3Qgc3VwcG9ydCBpbnNwZWN0b3IgdGVzdHMuCit3ZWJr
aXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2Vj
dXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRw
L3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZS5odG1sIFsg
U2tpcCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhw
ZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9u
cwppbmRleCBkZTY4MzI3Mzc1NWFjMGZmMjg1ZjI1NmUyOTUyYTFiMGM1MDc3OTk5Li5mZmE2YTZi
YTQyZWZkMmM0YzU4OTNmNGQyMGVmZmQwYmIyODI5M2U3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTEwMTcsOCArMTAxNyw4IEBAIGh0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3Qtb3ZlcnJpZGVtaW1ldHlwZS1j
b250ZW50LXR5cGUtaGVhZGVyLmh0CiBodHRwL3Rlc3RzL3htbHZpZXdlciBbIFNraXAgXQogCiB3
ZWJraXQub3JnL2IvMTkyNDA2IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Ut
c2VjdXJpdHktY29ubmVjdGlvbi5odG1sIFsgU2tpcCBdCi13ZWJraXQub3JnL2IvMTkxNDk4IGh0
dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHktY2VydGlmaWNhdGUu
aHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9u
ZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHkt
Y2VydGlmaWNhdGUuaHRtbCBbIFBhc3MgXQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0ZS5odG1sIFsgUGFzcyBd
CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIElzc3VlIGNhdGVnb3JpZXMgYmVsb3cgYXJl
IHNoYXJlZCB3aXRoIG90aGVyIHBsYXRmb3JtcyAocHJpbWFyaWx5IEFwcGxlV2luKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375068</attachid>
            <date>2019-07-29 00:57:45 -0700</date>
            <delta_ts>2019-07-31 20:39:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190729165402.patch</filename>
            <type>text/plain</type>
            <size>29147</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiY2ZjNzVjNDk5YWNiZjQxMDU5ZGM3
ZWEwYmM0Mzk4NjE0MDcwM2YuLmE0MDU3Mzk0NjViZDlhZGIyNmUyOGM2YzQ5Y2ZjYjIwM2Q4Y2Jm
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDctMjkgIFRha2FzaGkgS29tb3JpICA8VGFr
YXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZp
Y2F0ZUluZm86OnN1bW1hcnlJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXhlZCBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgZW5jb2RpbmcgdmVjdG9y
LgorCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKwogMjAx
OS0wNy0yNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGhl
bHBlciBmb3IgaWdub3JpbmcgZGVwcmVjYXRlZCBpbXBsZW1lbnRhdGlvbiB3YXJuaW5ncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDIxOTgzZTQ2MDU3Zjk2MjZkYzBlODZmODI4M2JhM2JmYjRkM2RhMDkuLjg5MmUz
NmRjOGNjODk5MDQxMTliMjcyMDVjNWU2NDlhZDEzNDk4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw2NCBAQAorMjAxOS0wNy0yOSAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KKworICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRpZmljYXRlSW5mbzo6c3VtbWFy
eUluZm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBDZXJ0aWZpY2FlSW5mbzo6U3VtbWFyeUluZm8uCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgV2ViSW5zcGVjdG9yIHNob3cgc3VtbWFyeSBvZiBjZXJ0aWZpY2F0ZXMuCisKKyAgICAg
ICAgVGVzdHM6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHkt
Y2VydGlmaWNhdGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0
d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0v
Q3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFNTTFZlcmlmaWVyOjpjb2xsZWN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NM
VmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5
OjpTdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6
flN0YWNrT2ZYNTA5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5Ojpj
b3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6aXRlbSk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVy
OjpCSU9Ib2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjp+QklP
SG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6d3JpdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjphc0NlcnRpZmljYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBlbURhdGFGcm9tQ3R4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KE9wZW5TU0w6OmRlbGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoT3BlblNTTDo6
U3RhY2tPZkdlbmVyYWxOYW1lOjpTdGFja09mR2VuZXJhbE5hbWUpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZkdlbmVyYWxOYW1lOjp+U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9w
ZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChPcGVu
U1NMOjpTdGFja09mR2VuZXJhbE5hbWU6OmNvdW50KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNr
T2ZHZW5lcmFsTmFtZTo6aXRlbSk6CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6U3Rh
Y2tPZlg1MDkpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6On5TdGFja09mWDUwOSk6
CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6Y291bnQpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZlg1MDk6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6QklPOjpCSU8pOgorICAg
ICAgICAoT3BlblNTTDo6QklPOjp+QklPKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0
YUFzVmVjdG9yIGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0YUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6cmVhZFg1MDkpOgorICAgICAgICAoT3Bl
blNTTDo6QklPOjpnZXQpOgorICAgICAgICAoT3BlblNTTDo6cGVtRGF0YUZyb21DdHgpOgorICAg
ICAgICAoT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKE9wZW5TU0w6
OnRvU3RyaW5nKToKKyAgICAgICAgKE9wZW5TU0w6OmdldENvbW1vbk5hbWUpOgorICAgICAgICAo
T3BlblNTTDo6Z2V0U3ViamVjdE5hbWUpOgorICAgICAgICAoT3BlblNTTDo6Y29udmVydEFTTjFU
aW1lVG9TZWNvbmRzKToKKyAgICAgICAgKE9wZW5TU0w6OmdldFN1YmplY3RBbHROYW1lKToKKyAg
ICAgICAgKE9wZW5TU0w6OmNyZWF0ZVN1bW1hcnlJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAuCisKIDIwMTktMDct
MjggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gVG91Y2ggcmVnaW9ucyBvdmVybGF5IG5lZWRzIHRvIHNob3cgdG91Y2gtYWN0aW9uOm5vbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMu
aCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAppbmRleCBi
NDE2YWQ4NGI5MjNiZWU4MDYxNzk0NTY2NjMzZTc1YmIxMDA1YmYzLi5jN2E4NDJhZTRiZGU5OTRl
NWRlZGY2YjMyNzY2Mjc5MTYzZDdmMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwg
aW5saW5lQ2EKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsK
KyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwu
Y21ha2UKaW5kZXggMDA2NGFkZjBhYzRhZGU2OTJmNzE5NWViZjgwODNjYTdiNDMyYzRkZi4uYzE3
MTc4OTFmNzJlYTRiODJhZGYwMDRiZDczZTk0NjMzNGRmOWIzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DdXJsLmNtYWtlCkBAIC0yNCw2ICsyNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Byb3RlY3Rpb25TcGFjZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5
U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHVibGljU3VmZml4Q3Vy
bC5jcHAKQEAgLTUxLDExICs1MiwxNSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGlu
Z3MuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlc3BvbnNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5oCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuaAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Eb3dubG9hZEJ1bmRsZS5oCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xI
ZWxwZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm90ZWN0aW9uU3BhY2VDdXJsLmgK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlUmVxdWVzdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5kZXggZTU3ZjNiZDBh
NDg5MDhlNTNmZTU4YzlhZTRkNGFmNTYwMWZhMGUwMC4uMmZiNmZlY2I4ZDlmYWQwZTM0MGEwZmY2
NmViNDBjNjFjOGI5ZmM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGNvbnRhaW5zTm9uUm9vdFNIQTFTaWduZWRDZXJ0aWZpY2F0ZSgpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBPcHRpb25hbDxTdW1t
YXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxTdW1tYXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBj
b25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVD
aGFpbi5pc0VtcHR5KCk7IH0KIApAQCAtNzEsMTUgKzcxLDM3IEBAIG5hbWVzcGFjZSBXVEYgewog
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGF1dG8m
IGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpOwor
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnZlcmlmaWNhdGlvbkVycm9yKCk7
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7CisgICAgICAgIGZv
ciAoYXV0byYgY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWluKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBjZXJ0aWZpY2F0ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVj
b2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQogICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmVyaWZpY2F0aW9uRXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHNpemVfdCBudW1PZkNlcnQgPSAwOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG51bU9mQ2VydCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBpKyspIHsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBw
ZW5kKFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRpZmlj
YXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RG
TW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIzNDk0MjM4ZmE1MDlk
MjRmZjkxMTA4YTkzZTE3Li4yNzliMzZjMTljMmY2MTNkZjQxMjMwYTM4ZGEwYTYxZjg4Y2I2Nzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlm
aWNhdGVJbmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKIAorI2luY2x1ZGUgIk9wZW5T
U0xIZWxwZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KIAogI2lmIFVT
RShDVVJMKQpAQCAtNTAsNiArNTEsMTQgQEAgQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBD
ZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShjb25zdCB1aW50OF90KiBidWYKICAgICBy
ZXR1cm4gY2VydGlmaWNhdGU7CiB9CiAKK09wdGlvbmFsPENlcnRpZmljYXRlSW5mbzo6U3VtbWFy
eUluZm8+IENlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8oKSBjb25zdAoreworICAgIGlmICgh
bV9jZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiBPcGVuU1NMOjpjcmVhdGVTdW1tYXJ5SW5mbyhtX2NlcnRpZmljYXRlQ2hh
aW4uYXQoMCkpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCA4MDk0Yjkz
NTk5ODM4MmVlZjQxM2RjNGE1ZWFmYjI0ZTRlYWY3N2FlLi5iZjE0YjI4MThhYjgxZjI0MTU0ZjE5
ZjQ2N2YwMjUzYzAzYTU0MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAtMzAsMTEgKzMwLDkgQEAK
ICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1ZGUgIkN1cmxT
U0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0
YUZyb21DdHgoWDUwOVN0b3JlQ1RYKik7CiBzdGF0aWMgQ3VybFNTTFZlcmlmaWVyOjpTU0xDZXJ0
aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3ModW5zaWduZWQpOwogCiBD
dXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2b2lkKiBzc2xDdHgpCkBAIC02MSwxNSAr
NTksMTYgQEAgQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIodm9pZCogc3NsQ3R4KQog
ICAgICAgICBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNMaXN0LnV0ZjgoKS5k
YXRhKCkpOwogfQogCi12b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOVN0b3Jl
Q1RYKiBjdHgpCit2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOV9TVE9SRV9D
VFgqIGN0eCkKIHsKLSAgICBtX2NlcnRpZmljYXRlSW5mbyA9IENlcnRpZmljYXRlSW5mbyB7IFg1
MDlfU1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChjdHgpIH07CisgICAg
aWYgKGF1dG8gY2VydGlmaWNhdGVJbmZvID0gT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZv
KGN0eCkpCisgICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gV1RGTW92ZSgqY2VydGlmaWNhdGVJ
bmZvKTsKIAogICAgIGlmIChhdXRvIGVycm9yID0gbV9jZXJ0aWZpY2F0ZUluZm8udmVyaWZpY2F0
aW9uRXJyb3IoKSkKICAgICAgICAgbV9zc2xFcnJvcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnZl
cnRUb1NTTENlcnRpZmljYXRlRmxhZ3MoZXJyb3IpKTsKIH0KIAotaW50IEN1cmxTU0xWZXJpZmll
cjo6dmVyaWZ5Q2FsbGJhY2soaW50IHByZXZlcmlmaWVkLCBYNTA5U3RvcmVDVFgqIGN0eCkKK2lu
dCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOV9T
VE9SRV9DVFgqIGN0eCkKIHsKICAgICBhdXRvIHNzbCA9IHN0YXRpY19jYXN0PFNTTCo+KFg1MDlf
U1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RY
X2lkeCgpKSk7CiAgICAgYXV0byBzc2xDdHggPSBTU0xfZ2V0X1NTTF9DVFgoc3NsKTsKQEAgLTgw
LDc1ICs3OSw2IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2
ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0dXJuIHByZXZlcmlmaWVkOwogfQog
Ci1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhY2tPZlg1MDko
WDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RYX2dl
dDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAgIH5TdGFja09mWDUwOSgpCi0gICAg
ewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUobV9j
ZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgpIHsgcmV0dXJu
IHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSogaXRlbSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0KLXByaXZhdGU6Ci0gICAgU1RBQ0tf
T0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBCSU9Ib2xkZXIgewot
cHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDogbV9iaW8geyBCSU9fbmV3KEJJT19z
X21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9Ib2xkZXIoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUobV9iaW8pOwotICAgIH0KLQotICAg
IGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVNX3dyaXRlX2Jpb19YNTA5KG1fYmlv
LCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgYXNDZXJ0aWZpY2F0
ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwotICAgICAgICBsb25nIGxlbmd0aCA9
IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSgpOwotCi0g
ICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRpZmljYXRlKGRhdGEs
IGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBC
SU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGljIFZlY3RvcjxDZXJ0aWZpY2F0ZUlu
Zm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5U3RvcmVDVFgqIGN0eCkKLXsKLSAg
ICBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcmVzdWx0OwotICAgIFN0YWNr
T2ZYNTA5IGNlcnRzIHsgY3R4IH07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgQklPSG9sZGVyIGJpbzsKLQotICAgICAgICBpZiAoIWJpby53
cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2VydGlmaWNh
dGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OwotCi0gICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBi
aW8uYXNDZXJ0aWZpY2F0ZSgpOwotICAgICAgICBpZiAoY2VydGlmaWNhdGUuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiB7
IH07Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NM
Q2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkIHNz
bEVycm9yKQogewogICAgIHN3aXRjaCAoc3NsRXJyb3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAppbmRleCA5ZTNi
ODAwMWI3M2ExYjk3Zjc4NDI0OTFjNDFlMDk0ZDNjZWQ4MmY1Li40NTJmNzA1ZjljYjhmZTI5MTlj
ZjI4NTZkZWU4ZDBhZDFhODE0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCkBAIC0yNywxNiArMjcsMTIgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCisjaW5jbHVkZSAi
T3BlblNTTEhlbHBlci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3Q7Ci10eXBl
ZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVDVFg7Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ3VybEhhbmRsZTsKLQogY2xhc3MgQ3VybFNTTFZlcmlmaWVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOwogcHVibGljOgpAQCAt
NTYsMTIgKzUyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOyB9CiAKIHByaXZh
dGU6Ci0gICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlTdG9yZUNUWCopOwor
ICAgIHN0YXRpYyBpbnQgdmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5X1NUT1JFX0NUWCopOworICAg
IHZvaWQgY29sbGVjdEluZm8oWDUwOV9TVE9SRV9DVFgqKTsKIAogICAgIGludCBtX3NzbEVycm9y
cyB7IDAgfTsKICAgICBDZXJ0aWZpY2F0ZUluZm8gbV9jZXJ0aWZpY2F0ZUluZm87Ci0KLSAgICB2
b2lkIGNvbGxlY3RJbmZvKFg1MDlTdG9yZUNUWCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmM2U1ZTU0MGExZWNhZjAwYTcxODQ4M2U2Nzk0
Zjc4ODFiODEzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5jcHAKQEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIK
KworI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgT3BlblNTTCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVsZXRlcjsKK3RlbXBsYXRlPD4gc3RydWN0
IGRlbGV0ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsK
KyAgICAgICAgaWYgKHg1MDkpCisgICAgICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQor
fTsKKwordXNpbmcgWDUwOVJlZiA9IHN0ZDo6dW5pcXVlX3B0cjxYNTA5LCBkZWxldGVyPFg1MDk+
PjsKKworY2xhc3MgU3RhY2tPZkdlbmVyYWxOYW1lIHsKK3B1YmxpYzoKKyAgICBTdGFja09mR2Vu
ZXJhbE5hbWUoY29uc3QgWDUwOSogeDUwOSwgaW50IG5pZCkKKyAgICAgICAgOiBtX25hbWVzIHsg
c3RhdGljX2Nhc3Q8U1RBQ0tfT0YoR0VORVJBTF9OQU1FKSo+KFg1MDlfZ2V0X2V4dF9kMmkoeDUw
OSwgbmlkLCBudWxscHRyLCBudWxscHRyKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3RhY2tP
ZkdlbmVyYWxOYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX25hbWVzKQorICAgICAgICAgICAg
c2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKG1fbmFtZXMsIEdFTkVSQUxfTkFNRV9mcmVlKTsKKyAg
ICB9CisKKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lczsgfQorCisgICAgaW50
IGNvdW50KCkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX251bShtX25hbWVzKTsgfQorICAgIEdF
TkVSQUxfTkFNRSogaXRlbShpbnQgaSkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKG1f
bmFtZXMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9u
YW1lcyB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZYNTA5IHsKK3B1YmxpYzoKKyAg
ICBTdGFja09mWDUwOShYNTA5X1NUT1JFX0NUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBY
NTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3Rh
Y2tPZlg1MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19Y
NTA5X3BvcF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgaW50IGNvdW50
KCkgeyByZXR1cm4gc2tfWDUwOV9udW0obV9jZXJ0cyk7IH0KKyAgICBYNTA5KiBpdGVtKGludCBp
KSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAg
U1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBCSU8gewor
cHVibGljOgorICAgIEJJTygpCisgICAgICAgIDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19t
ZW0oKSkgfQorICAgIHsKKyAgICB9CisKKyAgICBCSU8oWDUwOSogZGF0YSkKKyAgICAgICAgOiBt
X2JpbyB7IDo6QklPX25ldyg6OkJJT19zX21lbSgpKSB9CisgICAgeworICAgICAgICA6OlBFTV93
cml0ZV9iaW9fWDUwOShtX2JpbywgZGF0YSk7CisgICAgfQorCisgICAgQklPKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2JpbyB7IDo6QklPX25ld19tZW1fYnVmKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+QklPKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2JpbykKKyAgICAgICAgICAgIDo6QklPX2ZyZWUobV9iaW8pOwor
ICAgIH0KKworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0RGF0YUFzVmVjdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAg
IGF1dG8gbGVuZ3RoID0gOjpCSU9fZ2V0X21lbV9kYXRhKG1fYmlvLCAmZGF0YSk7CisgICAgICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgT3B0aW9uYWw8
U3RyaW5nPiBnZXREYXRhQXNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCog
ZGF0YSB7IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byBsZW5ndGggPSA6OkJJT19nZXRfbWVtX2Rh
dGEobV9iaW8sICZkYXRhKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiBTdHJpbmcoZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBYNTA5UmVmIHJlYWRYNTA5KCkKKyAgICB7CisgICAgICAgIGlmIChh
dXRvIHg1MDkgPSA6OlBFTV9yZWFkX2Jpb19YNTA5KG1fYmlvLCBudWxscHRyLCAwLCBudWxscHRy
KSkKKyAgICAgICAgICAgIHJldHVybiBYNTA5UmVmKHg1MDkpOworICAgICAgICByZXR1cm4gWDUw
OVJlZigpOworICAgIH0KKworICAgIDo6QklPKiBnZXQoKSB7IHJldHVybiBtX2JpbzsgfQorCitw
cml2YXRlOgorICAgIDo6QklPKiBtX2JpbyB7IG51bGxwdHIgfTsKK307CisKKworc3RhdGljIFZl
Y3RvcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0
eChYNTA5X1NUT1JFX0NUWCogY3R4KQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpDZXJ0aWZpY2F0
ZUluZm86OkNlcnRpZmljYXRlPiByZXN1bHQ7CisgICAgU3RhY2tPZlg1MDkgY2VydHMgeyBjdHgg
fTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2VydHMuY291bnQoKTsgaSsrKSB7CisgICAg
ICAgIEJJTyBiaW8oY2VydHMuaXRlbShpKSk7CisKKyAgICAgICAgaWYgKGF1dG8gY2VydGlmaWNh
dGUgPSBiaW8uZ2V0RGF0YUFzVmVjdG9yKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdU
Rk1vdmUoKmNlcnRpZmljYXRlKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvPiBjcmVhdGVDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFgqIGN0
eCkKK3sKKyAgICBpZiAoIWN0eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9y
KGN0eCksIHBlbURhdGFGcm9tQ3R4KGN0eCkpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5n
PiB0b1N0cmluZyhjb25zdCBBU04xX1NUUklORyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFy
KiBkYXRhIHsgbnVsbHB0ciB9OworICAgIGF1dG8gbGVuZ3RoID0gQVNOMV9TVFJJTkdfdG9fVVRG
OCgmZGF0YSwgbmFtZSk7CisgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBTdHJpbmcgcmVzdWx0KGRhdGEsIGxlbmd0aCk7CisgICAgT1BFTlNT
TF9mcmVlKGRhdGEpOworICAgIHJldHVybiBXVEZNb3ZlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBP
cHRpb25hbDxTdHJpbmc+IGdldENvbW1vbk5hbWUoY29uc3QgWDUwOSogeDUwOSkKK3sKKyAgICBh
dXRvIHN1YmplY3ROYW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHg1MDkpOworICAgIGlmICgh
c3ViamVjdE5hbWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGlu
ZGV4ID0gWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQoc3ViamVjdE5hbWUsIE5JRF9jb21tb25O
YW1lLCAtMSk7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIGF1dG8gY29tbW9uTmFtZUVudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShzdWJq
ZWN0TmFtZSwgaW5kZXgpOworICAgIGlmICghY29tbW9uTmFtZUVudHJ5KQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBjb21tb25OYW1lRW50cnlEYXRhID0gWDUwOV9O
QU1FX0VOVFJZX2dldF9kYXRhKGNvbW1vbk5hbWVFbnRyeSk7CisgICAgaWYgKCFjb21tb25OYW1l
RW50cnlEYXRhKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBjb21t
b25OYW1lID0gdG9TdHJpbmcoY29tbW9uTmFtZUVudHJ5RGF0YSk7CisgICAgaWYgKCFjb21tb25O
YW1lIHx8ICFjb21tb25OYW1lLT5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIHJldHVybiBXVEZNb3ZlKCpjb21tb25OYW1lKTsKK30KKworc3RhdGljIE9wdGlv
bmFsPFN0cmluZz4gZ2V0U3ViamVjdE5hbWUoY29uc3QgWDUwOSogeDUwOSkKK3sKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncyA9IChBU04xX1NUUkZMR1NfUkZDMjI1MyB8IEFT
TjFfU1RSRkxHU19FU0NfUVVPVEUgfCBYTl9GTEFHX1NFUF9DUExVU19TUEMgfCBYTl9GTEFHX0RO
X1JFViB8IFhOX0ZMQUdfRk5fTk9ORSB8IFhOX0ZMQUdfU1BDX0VRKSAmIH5BU04xX1NUUkZMR1Nf
RVNDX01TQjsKKworICAgIGF1dG8gc3ViamVjdE5hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUo
eDUwOSk7CisgICAgaWYgKCFzdWJqZWN0TmFtZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKKworICAgIEJJTyBiaW87CisgICAgYXV0byBsZW5ndGggPSBYNTA5X05BTUVfcHJpbnRfZXgo
YmlvLmdldCgpLCBzdWJqZWN0TmFtZSwgMCwgZmxhZ3MpOworICAgIGlmIChsZW5ndGggPD0gMCkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBiaW8uZ2V0RGF0YUFz
U3RyaW5nKCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxTZWNvbmRzPiBjb252ZXJ0QVNOMVRpbWVU
b1NlY29uZHMoY29uc3QgQVNOMV9USU1FKiBhbnMxVGltZSkKK3sKKyAgICBpZiAoIWFuczFUaW1l
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKChhbnMxVGltZS0+dHlw
ZSAhPSBWX0FTTjFfVVRDVElNRSAmJiBhbnMxVGltZS0+dHlwZSAhPSBWX0FTTjFfR0VORVJBTEla
RURUSU1FKSB8fCAhYW5zMVRpbWUtPmRhdGEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKKyAgICAvLyBVVENUSU1FICAgICAgICAgOiBZWW1tZGRISE1NW1NTXQorICAgIC8vIEdFTkVS
QUxJWkVEVElNRSA6IFlZWVltbWRkSEhNTVtTU10KKyAgICBpbnQgZGlnaXRMZW5ndGggPSBhbnMx
VGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSA/IDEwIDogMTI7CisgICAgaWYgKGFuczFUaW1l
LT5sZW5ndGggPCBkaWdpdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIGF1dG8gZGF0YSA9IGFuczFUaW1lLT5kYXRhOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
ZGlnaXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdChkYXRhW2ldKSkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgc3RydWN0IHRt
IHRpbWUgeyB9OworCisgICAgaWYgKGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FKSB7
CisgICAgICAgIHRpbWUudG1feWVhciA9IChkYXRhWzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0g
LSAnMCcpOworICAgICAgICBpZiAodGltZS50bV95ZWFyIDwgNTApCisgICAgICAgICAgICB0aW1l
LnRtX3llYXIgKz0gMTAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHRpbWUudG1feWVhciA9IChk
YXRhWzBdIC0gJzAnKSAqIDEwMDAgKyAoZGF0YVsxXSAtICcwJykgKiAxMDAgKyAoZGF0YVsyXSAt
ICcwJykgKiAxMCArIChkYXRhWzNdIC0gJzAnKTsKKyAgICAgICAgdGltZS50bV95ZWFyIC09IDE5
MDA7CisgICAgfQorCisgICAgZGF0YSArPSBhbnMxVGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElN
RSA/IDIgOiA0OworCisgICAgdGltZS50bV9tb24gPSAoZGF0YVswXSAtICcwJykgKiAxMCArIChk
YXRhWzFdIC0gJzAnKSAtIDE7CisgICAgaWYgKHRpbWUudG1fbW9uIDwgMCB8fCB0aW1lLnRtX21v
biA+IDExKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHRpbWUudG1fbWRheSA9
IChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFbM10gLSAnMCcpOworICAgIHRpbWUudG1faG91
ciA9IChkYXRhWzRdIC0gJzAnKSAqIDEwICsgKGRhdGFbNV0gLSAnMCcpOworICAgIHRpbWUudG1f
bWluID0gKGRhdGFbNl0gLSAnMCcpICogMTAgKyAoZGF0YVs3XSAtICcwJyk7CisKKyAgICBpZiAo
KGFuczFUaW1lLT5sZW5ndGggPj0gZGlnaXRMZW5ndGggKyAyKSAmJiBpc0FTQ0lJRGlnaXQoZGF0
YVs4XSkgJiYgaXNBU0NJSURpZ2l0KGRhdGFbOV0pKQorICAgICAgICB0aW1lLnRtX3NlYyA9IChk
YXRhWzhdIC0gJzAnKSAqIDEwICsgKGRhdGFbOV0gLSAnMCcpOworCisgICAgYXV0byBnbXRUaW1l
ID0gbWt0aW1lKCZ0aW1lKTsKKyAgICBhdXRvIGxvY2FsVGltZU9mZnNldCA9IGNhbGN1bGF0ZUxv
Y2FsVGltZU9mZnNldChnbXRUaW1lICogMTAwMC4wKTsKKyAgICByZXR1cm4gU2Vjb25kcyhnbXRU
aW1lICsgKGxvY2FsVGltZU9mZnNldC5vZmZzZXQgLyAxMDAwLjApKTsKK30KKworc3RhdGljIHZv
aWQgZ2V0U3ViamVjdEFsdE5hbWUoY29uc3QgWDUwOSogeDUwOSwgVmVjdG9yPFN0cmluZz4mIGRu
c05hbWVzLCBWZWN0b3I8U3RyaW5nPiYgaXBBZGRyZXNzZXMpCit7CisgICAgU3RhY2tPZkdlbmVy
YWxOYW1lIHNhbkxpc3QoeDUwOSwgTklEX3N1YmplY3RfYWx0X25hbWUpOworICAgIGlmICghc2Fu
TGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBudW0gPSBzYW5MaXN0LmNvdW50KCk7
CisgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKyAgICAgICAgYXV0byogdmFs
dWUgPSBzYW5MaXN0Lml0ZW0oaSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAodmFsdWUtPnR5cGUgPT0gR0VOX0ROUykgeworICAgICAg
ICAgICAgYXV0byBkbnNOYW1lID0gdG9TdHJpbmcodmFsdWUtPmQuZE5TTmFtZSk7CisgICAgICAg
ICAgICBpZiAoZG5zTmFtZSAmJiBkbnNOYW1lLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBk
bnNOYW1lcy5hcHBlbmQoV1RGTW92ZSgqZG5zTmFtZSkpOworICAgICAgICB9IGVsc2UgaWYgKHZh
bHVlLT50eXBlID09IEdFTl9JUEFERCkgeworICAgICAgICAgICAgYXV0byBkYXRhID0gdmFsdWUt
PmQuaVBBZGRyZXNzLT5kYXRhOworICAgICAgICAgICAgaWYgKHZhbHVlLT5kLmlQQWRkcmVzcy0+
bGVuZ3RoID09IDQpCisgICAgICAgICAgICAgICAgaXBBZGRyZXNzZXMuYXBwZW5kKG1ha2VTdHJp
bmcoZGF0YVswXSwgIi4iLCBkYXRhWzFdLCAiLiIsIGRhdGFbMl0sICIuIiwgZGF0YVszXSkpOwor
ICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUtPmQuaVBBZGRyZXNzLT5sZW5ndGggPT0gMTYpIHsK
KyAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGlwQWRkcmVzczsKKyAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpcEFk
ZHJlc3MuYXBwZW5kKG1ha2VTdHJpbmcoaGV4KGRhdGFbMF0gPDwgOCB8IGRhdGFbMV0sIDQpKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDcpCisgICAgICAgICAgICAgICAgICAgICAg
ICBpcEFkZHJlc3MuYXBwZW5kKCI6Iik7CisgICAgICAgICAgICAgICAgICAgIGRhdGEgKz0gMjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXBBZGRyZXNzZXMuYXBwZW5kKGlw
QWRkcmVzcy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30K
KworT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbz4gY3JlYXRl
U3VtbWFyeUluZm8oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZW0pCit7CisgICAgQklPIGJpbyB7
IHBlbSB9OworICAgIGF1dG8geDUwOSA9IGJpby5yZWFkWDUwOSgpOworICAgIGlmICgheDUwOSkK
KyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbzo6U3VtbWFyeUluZm8gc3VtbWFyeUluZm87CisKKyAgICBpZiAoYXV0byBjb21tb25OYW1l
ID0gZ2V0Q29tbW9uTmFtZSh4NTA5LmdldCgpKSkKKyAgICAgICAgc3VtbWFyeUluZm8uc3ViamVj
dCA9IFdURk1vdmUoKmNvbW1vbk5hbWUpOworICAgIGVsc2UgaWYgKGF1dG8gc3ViamVjdE5hbWUg
PSBnZXRTdWJqZWN0TmFtZSh4NTA5LmdldCgpKSkKKyAgICAgICAgc3VtbWFyeUluZm8uc3ViamVj
dCA9IFdURk1vdmUoKnN1YmplY3ROYW1lKTsKKworICAgIGlmIChhdXRvIG5vdEJlZm9yZSA9IGNv
bnZlcnRBU04xVGltZVRvU2Vjb25kcyhYNTA5X2dldDBfbm90QmVmb3JlKHg1MDkuZ2V0KCkpKSkK
KyAgICAgICAgc3VtbWFyeUluZm8udmFsaWRGcm9tID0gKm5vdEJlZm9yZTsKKworICAgIGlmIChh
dXRvIG5vdEFmdGVyID0gY29udmVydEFTTjFUaW1lVG9TZWNvbmRzKFg1MDlfZ2V0MF9ub3RBZnRl
cih4NTA5LmdldCgpKSkpCisgICAgICAgIHN1bW1hcnlJbmZvLnZhbGlkVW50aWwgPSAqbm90QWZ0
ZXI7CisKKyAgICBnZXRTdWJqZWN0QWx0TmFtZSh4NTA5LmdldCgpLCBzdW1tYXJ5SW5mby5kbnNO
YW1lcywgc3VtbWFyeUluZm8uaXBBZGRyZXNzZXMpOworCisgICAgcmV0dXJuIHN1bW1hcnlJbmZv
OworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvT3BlblNTTEhlbHBlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L09wZW5TU0xIZWxwZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODVkYWY1YjcyMGJhNzJhMjViNjkwYTFkZmE0
MTQwZjUzNmM4MTMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCisjaW5j
bHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3dGYvT3B0aW9uYWwuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBPcGVuU1NMIHsKKworT3B0aW9uYWw8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvPiBjcmVhdGVDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFgq
KTsKK09wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6U3VtbWFyeUluZm8+IGNyZWF0
ZVN1bW1hcnlJbmZvKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGVtKTsKKworfSAvLyBuYW1lc3Bh
Y2UgT3BlblNTTApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDI2NGEwYWVlMmUxNzRmNTNhNDBlMGQ1ZDBhMWU1YTkyMmExOGMz
MGQuLjJmMjYzMjk3YjIyZDlkMjE4MDNjNTk5NmQzNWViYzQ2MWFmOGU4MDcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMyBAQAorMjAxOS0wNy0yOSAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBz
b255LmNvbT4KKworICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRpZmljYXRlSW5mbzo6c3Vt
bWFyeUluZm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnM6CisgICAgICAgICogcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxOS0wNy0yNyAgQW5kcmVzIEdv
bnphbGV6ICA8YW5kcmVzZ18yMkBhcHBsZS5jb20+CiAKICAgICAgICAgRXhwb3NlIHRoZSBhcmlh
LWxhYmVsIGF0dHJpYnV0ZSBmb3IgPHZpZGVvPiBlbGVtZW50cy4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luY2Fpcm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMmI3MWNkNmVi
NTJlNzkwMjI5ZWNjNTEzNTM2ZDI3MjA1YmQ5ODk0NS4uOTE1ZDc2M2FlYWE4ZmRmZjBmNjdlMTc3
ZTJmMGZiNzllOGUzZDU2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fp
cm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fp
cm8td2sxL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTMzMSwzICszMzEsNyBAQCBmYXN0L2Nzcy90cmFu
c2l0aW9uLWNvbG9yLXVuc3BlY2lmaWVkLmh0bWwgWyBTa2lwIF0KIGZhc3QvZmlsdGVyLWltYWdl
L2ZpbHRlci1pbWFnZS1hbmltYXRpb24uaHRtbCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVyL21v
ZGlmeS1mcmFtZXRyZWUtaW4tY2FsbGJhY2suaHRtbCBbIFNraXAgXQogcmVzaXplLW9ic2VydmVy
L211bHRpLWZyYW1lcy5odG1sIFsgU2tpcCBdCisKKyMgV2luQ2Fpcm8gd2sxIGRvZXNuJ3Qgc3Vw
cG9ydCBpbnNwZWN0b3IgdGVzdHMuCit3ZWJraXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5z
cGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNl
cmlhbGl6ZWRDZXJ0aWZpY2F0ZS5odG1sIFsgU2tpcCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwppbmRleCA3YmVjMDYyOTg1OTFjODJmOGRjYTc0
NjZlMzlkMTc4Y2U1YTQ5NWNiLi5lMjkwZTA4OWY2OGUyZDQxYTEyZGI4ZDRiYWZhYzI0OTJlMTc3
ZDIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0
YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlv
bnMKQEAgLTEwMTgsOCArMTAxOCw4IEBAIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0
cHJlcXVlc3Qtb3ZlcnJpZGVtaW1ldHlwZS1jb250ZW50LXR5cGUtaGVhZGVyLmh0CiBodHRwL3Rl
c3RzL3htbHZpZXdlciBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMTkyNDA2IGh0dHAvdGVzdHMv
aW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHktY29ubmVjdGlvbi5odG1sIFsgU2tp
cCBdCi13ZWJraXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVz
b3VyY2Utc2VjdXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQotd2Via2l0Lm9yZy9iLzE5
MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6ZWRDZXJ0aWZpY2F0
ZS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMTkxNDk4IGh0dHAvdGVzdHMvaW5zcGVjdG9y
L25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHktY2VydGlmaWNhdGUuaHRtbCBbIFBhc3MgXQord2Vi
a2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL2dldFNlcmlhbGl6
ZWRDZXJ0aWZpY2F0ZS5odG1sIFsgUGFzcyBdCiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAj
IElzc3VlIGNhdGVnb3JpZXMgYmVsb3cgYXJlIHNoYXJlZCB3aXRoIG90aGVyIHBsYXRmb3JtcyAo
cHJpbWFyaWx5IEFwcGxlV2luKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375286</attachid>
            <date>2019-07-31 20:39:24 -0700</date>
            <delta_ts>2019-08-04 22:41:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190801123542.patch</filename>
            <type>text/plain</type>
            <size>28911</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiY2ZjNzVjNDk5YWNiZjQxMDU5ZGM3
ZWEwYmM0Mzk4NjE0MDcwM2YuLmM5NzE5YjliYWE2YTJjNjVkZWI5OWMxNmM2NmE1MmJiNjFhZmJm
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDctMzEgIFRha2FzaGkgS29tb3JpICA8VGFr
YXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZp
Y2F0ZUluZm86OnN1bW1hcnlJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXhlZCBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgZW5jb2RpbmcgdmVjdG9y
LgorCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKwogMjAx
OS0wNy0yNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGhl
bHBlciBmb3IgaWdub3JpbmcgZGVwcmVjYXRlZCBpbXBsZW1lbnRhdGlvbiB3YXJuaW5ncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDIxOTgzZTQ2MDU3Zjk2MjZkYzBlODZmODI4M2JhM2JmYjRkM2RhMDkuLjRlNzM2
ZDU3OTc3YmM2MjZhMzZiZjRhNTIxNDI1NjUyODM0ODY1YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw2NCBAQAorMjAxOS0wNy0zMSAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KKworICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRpZmljYXRlSW5mbzo6c3VtbWFy
eUluZm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBDZXJ0aWZpY2FlSW5mbzo6U3VtbWFyeUluZm8uCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgV2ViSW5zcGVjdG9yIHNob3cgc3VtbWFyeSBvZiBjZXJ0aWZpY2F0ZXMuCisKKyAgICAg
ICAgVGVzdHM6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHkt
Y2VydGlmaWNhdGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0
d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0v
Q3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFNTTFZlcmlmaWVyOjpjb2xsZWN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NM
VmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5
OjpTdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6
flN0YWNrT2ZYNTA5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5Ojpj
b3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6aXRlbSk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVy
OjpCSU9Ib2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjp+QklP
SG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6d3JpdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjphc0NlcnRpZmljYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBlbURhdGFGcm9tQ3R4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KE9wZW5TU0w6OmRlbGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoT3BlblNTTDo6
U3RhY2tPZkdlbmVyYWxOYW1lOjpTdGFja09mR2VuZXJhbE5hbWUpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZkdlbmVyYWxOYW1lOjp+U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9w
ZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChPcGVu
U1NMOjpTdGFja09mR2VuZXJhbE5hbWU6OmNvdW50KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNr
T2ZHZW5lcmFsTmFtZTo6aXRlbSk6CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6U3Rh
Y2tPZlg1MDkpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6On5TdGFja09mWDUwOSk6
CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6Y291bnQpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZlg1MDk6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6QklPOjpCSU8pOgorICAg
ICAgICAoT3BlblNTTDo6QklPOjp+QklPKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0
YUFzVmVjdG9yIGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0YUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6cmVhZFg1MDkpOgorICAgICAgICAoT3Bl
blNTTDo6QklPOjpnZXQpOgorICAgICAgICAoT3BlblNTTDo6cGVtRGF0YUZyb21DdHgpOgorICAg
ICAgICAoT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKE9wZW5TU0w6
OnRvU3RyaW5nKToKKyAgICAgICAgKE9wZW5TU0w6OmdldENvbW1vbk5hbWUpOgorICAgICAgICAo
T3BlblNTTDo6Z2V0U3ViamVjdE5hbWUpOgorICAgICAgICAoT3BlblNTTDo6Y29udmVydEFTTjFU
aW1lVG9TZWNvbmRzKToKKyAgICAgICAgKE9wZW5TU0w6OmdldFN1YmplY3RBbHROYW1lKToKKyAg
ICAgICAgKE9wZW5TU0w6OmNyZWF0ZVN1bW1hcnlJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAuCisKIDIwMTktMDct
MjggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gVG91Y2ggcmVnaW9ucyBvdmVybGF5IG5lZWRzIHRvIHNob3cgdG91Y2gtYWN0aW9uOm5vbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMu
aCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAppbmRleCBi
NDE2YWQ4NGI5MjNiZWU4MDYxNzk0NTY2NjMzZTc1YmIxMDA1YmYzLi5jN2E4NDJhZTRiZGU5OTRl
NWRlZGY2YjMyNzY2Mjc5MTYzZDdmMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwg
aW5saW5lQ2EKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsK
KyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwu
Y21ha2UKaW5kZXggMDA2NGFkZjBhYzRhZGU2OTJmNzE5NWViZjgwODNjYTdiNDMyYzRkZi4uYzE3
MTc4OTFmNzJlYTRiODJhZGYwMDRiZDczZTk0NjMzNGRmOWIzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DdXJsLmNtYWtlCkBAIC0yNCw2ICsyNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Byb3RlY3Rpb25TcGFjZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5
U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHVibGljU3VmZml4Q3Vy
bC5jcHAKQEAgLTUxLDExICs1MiwxNSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGlu
Z3MuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlc3BvbnNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5oCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuaAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Eb3dubG9hZEJ1bmRsZS5oCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xI
ZWxwZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm90ZWN0aW9uU3BhY2VDdXJsLmgK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlUmVxdWVzdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5kZXggZTU3ZjNiZDBh
NDg5MDhlNTNmZTU4YzlhZTRkNGFmNTYwMWZhMGUwMC4uMmZiNmZlY2I4ZDlmYWQwZTM0MGEwZmY2
NmViNDBjNjFjOGI5ZmM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGNvbnRhaW5zTm9uUm9vdFNIQTFTaWduZWRDZXJ0aWZpY2F0ZSgpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBPcHRpb25hbDxTdW1t
YXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxTdW1tYXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBj
b25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVD
aGFpbi5pc0VtcHR5KCk7IH0KIApAQCAtNzEsMTUgKzcxLDM3IEBAIG5hbWVzcGFjZSBXVEYgewog
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGF1dG8m
IGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpOwor
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnZlcmlmaWNhdGlvbkVycm9yKCk7
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7CisgICAgICAgIGZv
ciAoYXV0byYgY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWluKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBjZXJ0aWZpY2F0ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVj
b2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQogICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmVyaWZpY2F0aW9uRXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHNpemVfdCBudW1PZkNlcnQgPSAwOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG51bU9mQ2VydCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBpKyspIHsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBw
ZW5kKFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRpZmlj
YXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RG
TW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIzNDk0MjM4ZmE1MDlk
MjRmZjkxMTA4YTkzZTE3Li4yNzliMzZjMTljMmY2MTNkZjQxMjMwYTM4ZGEwYTYxZjg4Y2I2Nzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlm
aWNhdGVJbmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKIAorI2luY2x1ZGUgIk9wZW5T
U0xIZWxwZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KIAogI2lmIFVT
RShDVVJMKQpAQCAtNTAsNiArNTEsMTQgQEAgQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBD
ZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShjb25zdCB1aW50OF90KiBidWYKICAgICBy
ZXR1cm4gY2VydGlmaWNhdGU7CiB9CiAKK09wdGlvbmFsPENlcnRpZmljYXRlSW5mbzo6U3VtbWFy
eUluZm8+IENlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8oKSBjb25zdAoreworICAgIGlmICgh
bV9jZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiBPcGVuU1NMOjpjcmVhdGVTdW1tYXJ5SW5mbyhtX2NlcnRpZmljYXRlQ2hh
aW4uYXQoMCkpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCA4MDk0Yjkz
NTk5ODM4MmVlZjQxM2RjNGE1ZWFmYjI0ZTRlYWY3N2FlLi5iZjE0YjI4MThhYjgxZjI0MTU0ZjE5
ZjQ2N2YwMjUzYzAzYTU0MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAtMzAsMTEgKzMwLDkgQEAK
ICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1ZGUgIkN1cmxT
U0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0
YUZyb21DdHgoWDUwOVN0b3JlQ1RYKik7CiBzdGF0aWMgQ3VybFNTTFZlcmlmaWVyOjpTU0xDZXJ0
aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3ModW5zaWduZWQpOwogCiBD
dXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2b2lkKiBzc2xDdHgpCkBAIC02MSwxNSAr
NTksMTYgQEAgQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIodm9pZCogc3NsQ3R4KQog
ICAgICAgICBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNMaXN0LnV0ZjgoKS5k
YXRhKCkpOwogfQogCi12b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOVN0b3Jl
Q1RYKiBjdHgpCit2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOV9TVE9SRV9D
VFgqIGN0eCkKIHsKLSAgICBtX2NlcnRpZmljYXRlSW5mbyA9IENlcnRpZmljYXRlSW5mbyB7IFg1
MDlfU1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChjdHgpIH07CisgICAg
aWYgKGF1dG8gY2VydGlmaWNhdGVJbmZvID0gT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZv
KGN0eCkpCisgICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gV1RGTW92ZSgqY2VydGlmaWNhdGVJ
bmZvKTsKIAogICAgIGlmIChhdXRvIGVycm9yID0gbV9jZXJ0aWZpY2F0ZUluZm8udmVyaWZpY2F0
aW9uRXJyb3IoKSkKICAgICAgICAgbV9zc2xFcnJvcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnZl
cnRUb1NTTENlcnRpZmljYXRlRmxhZ3MoZXJyb3IpKTsKIH0KIAotaW50IEN1cmxTU0xWZXJpZmll
cjo6dmVyaWZ5Q2FsbGJhY2soaW50IHByZXZlcmlmaWVkLCBYNTA5U3RvcmVDVFgqIGN0eCkKK2lu
dCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOV9T
VE9SRV9DVFgqIGN0eCkKIHsKICAgICBhdXRvIHNzbCA9IHN0YXRpY19jYXN0PFNTTCo+KFg1MDlf
U1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RY
X2lkeCgpKSk7CiAgICAgYXV0byBzc2xDdHggPSBTU0xfZ2V0X1NTTF9DVFgoc3NsKTsKQEAgLTgw
LDc1ICs3OSw2IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2
ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0dXJuIHByZXZlcmlmaWVkOwogfQog
Ci1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhY2tPZlg1MDko
WDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RYX2dl
dDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAgIH5TdGFja09mWDUwOSgpCi0gICAg
ewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUobV9j
ZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgpIHsgcmV0dXJu
IHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSogaXRlbSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0KLXByaXZhdGU6Ci0gICAgU1RBQ0tf
T0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBCSU9Ib2xkZXIgewot
cHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDogbV9iaW8geyBCSU9fbmV3KEJJT19z
X21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9Ib2xkZXIoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUobV9iaW8pOwotICAgIH0KLQotICAg
IGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVNX3dyaXRlX2Jpb19YNTA5KG1fYmlv
LCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgYXNDZXJ0aWZpY2F0
ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwotICAgICAgICBsb25nIGxlbmd0aCA9
IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSgpOwotCi0g
ICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRpZmljYXRlKGRhdGEs
IGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBC
SU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGljIFZlY3RvcjxDZXJ0aWZpY2F0ZUlu
Zm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5U3RvcmVDVFgqIGN0eCkKLXsKLSAg
ICBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcmVzdWx0OwotICAgIFN0YWNr
T2ZYNTA5IGNlcnRzIHsgY3R4IH07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgQklPSG9sZGVyIGJpbzsKLQotICAgICAgICBpZiAoIWJpby53
cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2VydGlmaWNh
dGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OwotCi0gICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBi
aW8uYXNDZXJ0aWZpY2F0ZSgpOwotICAgICAgICBpZiAoY2VydGlmaWNhdGUuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiB7
IH07Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NM
Q2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkIHNz
bEVycm9yKQogewogICAgIHN3aXRjaCAoc3NsRXJyb3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAppbmRleCA5ZTNi
ODAwMWI3M2ExYjk3Zjc4NDI0OTFjNDFlMDk0ZDNjZWQ4MmY1Li40NTJmNzA1ZjljYjhmZTI5MTlj
ZjI4NTZkZWU4ZDBhZDFhODE0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCkBAIC0yNywxNiArMjcsMTIgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCisjaW5jbHVkZSAi
T3BlblNTTEhlbHBlci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3Q7Ci10eXBl
ZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVDVFg7Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ3VybEhhbmRsZTsKLQogY2xhc3MgQ3VybFNTTFZlcmlmaWVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOwogcHVibGljOgpAQCAt
NTYsMTIgKzUyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOyB9CiAKIHByaXZh
dGU6Ci0gICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlTdG9yZUNUWCopOwor
ICAgIHN0YXRpYyBpbnQgdmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5X1NUT1JFX0NUWCopOworICAg
IHZvaWQgY29sbGVjdEluZm8oWDUwOV9TVE9SRV9DVFgqKTsKIAogICAgIGludCBtX3NzbEVycm9y
cyB7IDAgfTsKICAgICBDZXJ0aWZpY2F0ZUluZm8gbV9jZXJ0aWZpY2F0ZUluZm87Ci0KLSAgICB2
b2lkIGNvbGxlY3RJbmZvKFg1MDlTdG9yZUNUWCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NGQ1MjhhOTIyZmU3YTY2MTE0MmY4ZWJhMGJk
Y2I4NTQyZDdhZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5jcHAKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIK
KworI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgT3BlblNTTCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVsZXRlcjsKK3RlbXBsYXRlPD4gc3RydWN0
IGRlbGV0ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsK
KyAgICAgICAgaWYgKHg1MDkpCisgICAgICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQor
fTsKKworY2xhc3MgU3RhY2tPZkdlbmVyYWxOYW1lIHsKK3B1YmxpYzoKKyAgICBTdGFja09mR2Vu
ZXJhbE5hbWUoY29uc3QgWDUwOSogeDUwOSwgaW50IG5pZCkKKyAgICAgICAgOiBtX25hbWVzIHsg
c3RhdGljX2Nhc3Q8U1RBQ0tfT0YoR0VORVJBTF9OQU1FKSo+KFg1MDlfZ2V0X2V4dF9kMmkoeDUw
OSwgbmlkLCBudWxscHRyLCBudWxscHRyKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3RhY2tP
ZkdlbmVyYWxOYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX25hbWVzKQorICAgICAgICAgICAg
c2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKG1fbmFtZXMsIEdFTkVSQUxfTkFNRV9mcmVlKTsKKyAg
ICB9CisKKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lczsgfQorCisgICAgaW50
IGNvdW50KCkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX251bShtX25hbWVzKTsgfQorICAgIEdF
TkVSQUxfTkFNRSogaXRlbShpbnQgaSkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKG1f
bmFtZXMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9u
YW1lcyB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZYNTA5IHsKK3B1YmxpYzoKKyAg
ICBTdGFja09mWDUwOShYNTA5X1NUT1JFX0NUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBY
NTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3Rh
Y2tPZlg1MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19Y
NTA5X3BvcF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgaW50IGNvdW50
KCkgeyByZXR1cm4gc2tfWDUwOV9udW0obV9jZXJ0cyk7IH0KKyAgICBYNTA5KiBpdGVtKGludCBp
KSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAg
U1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBCSU8gewor
cHVibGljOgorICAgIEJJTygpCisgICAgICAgIDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19t
ZW0oKSkgfQorICAgIHsKKyAgICB9CisKKyAgICBCSU8oWDUwOSogZGF0YSkKKyAgICAgICAgOiBt
X2JpbyB7IDo6QklPX25ldyg6OkJJT19zX21lbSgpKSB9CisgICAgeworICAgICAgICA6OlBFTV93
cml0ZV9iaW9fWDUwOShtX2JpbywgZGF0YSk7CisgICAgfQorCisgICAgQklPKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2JpbyB7IDo6QklPX25ld19tZW1fYnVmKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+QklPKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2JpbykKKyAgICAgICAgICAgIDo6QklPX2ZyZWUobV9iaW8pOwor
ICAgIH0KKworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0RGF0YUFzVmVjdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAg
IGF1dG8gbGVuZ3RoID0gOjpCSU9fZ2V0X21lbV9kYXRhKG1fYmlvLCAmZGF0YSk7CisgICAgICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgT3B0aW9uYWw8
U3RyaW5nPiBnZXREYXRhQXNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCog
ZGF0YSB7IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byBsZW5ndGggPSA6OkJJT19nZXRfbWVtX2Rh
dGEobV9iaW8sICZkYXRhKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgICAgIHJldHVybiBTdHJpbmcoZGF0YSwgbGVuZ3Ro
KTsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8WDUwOSwgZGVsZXRlcjxYNTA5Pj4gcmVh
ZFg1MDkoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxYNTA5LCBkZWxl
dGVyPFg1MDk+Pig6OlBFTV9yZWFkX2Jpb19YNTA5KG1fYmlvLCBudWxscHRyLCAwLCBudWxscHRy
KSk7CisgICAgfQorCisgICAgOjpCSU8qIGdldCgpIHsgcmV0dXJuIG1fYmlvOyB9CisKK3ByaXZh
dGU6CisgICAgOjpCSU8qIG1fYmlvIHsgbnVsbHB0ciB9OworfTsKKworCitzdGF0aWMgVmVjdG9y
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBlbURhdGFGcm9tQ3R4KFg1
MDlfU1RPUkVfQ1RYKiBjdHgpCit7CisgICAgVmVjdG9yPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKKyAgICBTdGFja09mWDUwOSBjZXJ0cyB7IGN0eCB9Owor
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3VudCgpOyBpKyspIHsKKyAgICAgICAg
QklPIGJpbyhjZXJ0cy5pdGVtKGkpKTsKKworICAgICAgICBpZiAoYXV0byBjZXJ0aWZpY2F0ZSA9
IGJpby5nZXREYXRhQXNWZWN0b3IoKSkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92
ZSgqY2VydGlmaWNhdGUpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitPcHRpb25hbDxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm8+IGNyZWF0ZUNlcnRpZmljYXRlSW5mbyhYNTA5X1NUT1JFX0NUWCogY3R4KQor
eworICAgIGlmICghY3R4KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyhYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4
KSwgcGVtRGF0YUZyb21DdHgoY3R4KSk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxTdHJpbmc+IHRv
U3RyaW5nKGNvbnN0IEFTTjFfU1RSSU5HKiBuYW1lKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRh
dGEgeyBudWxscHRyIH07CisgICAgYXV0byBsZW5ndGggPSBBU04xX1NUUklOR190b19VVEY4KCZk
YXRhLCBuYW1lKTsKKyAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisKKyAgICBTdHJpbmcgcmVzdWx0KGRhdGEsIGxlbmd0aCk7CisgICAgT1BFTlNTTF9m
cmVlKGRhdGEpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxTdHJp
bmc+IGdldENvbW1vbk5hbWUoY29uc3QgWDUwOSogeDUwOSkKK3sKKyAgICBhdXRvIHN1YmplY3RO
YW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHg1MDkpOworICAgIGlmICghc3ViamVjdE5hbWUp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBhdXRvIGluZGV4ID0gWDUwOV9O
QU1FX2dldF9pbmRleF9ieV9OSUQoc3ViamVjdE5hbWUsIE5JRF9jb21tb25OYW1lLCAtMSk7Cisg
ICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1
dG8gY29tbW9uTmFtZUVudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShzdWJqZWN0TmFtZSwgaW5k
ZXgpOworICAgIGlmICghY29tbW9uTmFtZUVudHJ5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgYXV0byBjb21tb25OYW1lRW50cnlEYXRhID0gWDUwOV9OQU1FX0VOVFJZX2dl
dF9kYXRhKGNvbW1vbk5hbWVFbnRyeSk7CisgICAgaWYgKCFjb21tb25OYW1lRW50cnlEYXRhKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIHRvU3RyaW5nKGNvbW1v
bk5hbWVFbnRyeURhdGEpOworfQorCitzdGF0aWMgT3B0aW9uYWw8U3RyaW5nPiBnZXRTdWJqZWN0
TmFtZShjb25zdCBYNTA5KiB4NTA5KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25n
IGZsYWdzID0gKEFTTjFfU1RSRkxHU19SRkMyMjUzIHwgQVNOMV9TVFJGTEdTX0VTQ19RVU9URSB8
IFhOX0ZMQUdfU0VQX0NQTFVTX1NQQyB8IFhOX0ZMQUdfRE5fUkVWIHwgWE5fRkxBR19GTl9OT05F
IHwgWE5fRkxBR19TUENfRVEpICYgfkFTTjFfU1RSRkxHU19FU0NfTVNCOworCisgICAgYXV0byBz
dWJqZWN0TmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KTsKKyAgICBpZiAoIXN1Ympl
Y3ROYW1lKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgQklPIGJpbzsKKyAg
ICBhdXRvIGxlbmd0aCA9IFg1MDlfTkFNRV9wcmludF9leChiaW8uZ2V0KCksIHN1YmplY3ROYW1l
LCAwLCBmbGFncyk7CisgICAgaWYgKGxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgcmV0dXJuIGJpby5nZXREYXRhQXNTdHJpbmcoKTsKK30KKworc3RhdGlj
IE9wdGlvbmFsPFNlY29uZHM+IGNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyhjb25zdCBBU04xX1RJ
TUUqIGFuczFUaW1lKQoreworICAgIGlmICghYW5zMVRpbWUpCisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICBpZiAoKGFuczFUaW1lLT50eXBlICE9IFZfQVNOMV9VVENUSU1FICYm
IGFuczFUaW1lLT50eXBlICE9IFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUpIHx8ICFhbnMxVGltZS0+
ZGF0YSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIFVUQ1RJTUUgICAg
ICAgICA6IFlZbW1kZEhITU1bU1NdCisgICAgLy8gR0VORVJBTElaRURUSU1FIDogWVlZWW1tZGRI
SE1NW1NTXQorICAgIGludCBkaWdpdExlbmd0aCA9IGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9V
VENUSU1FID8gMTAgOiAxMjsKKyAgICBpZiAoYW5zMVRpbWUtPmxlbmd0aCA8IGRpZ2l0TGVuZ3Ro
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBkYXRhID0gYW5zMVRp
bWUtPmRhdGE7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdExlbmd0aDsgaSsrKSB7Cisg
ICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGRhdGFbaV0pKQorICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBzdHJ1Y3QgdG0gdGltZSB7IH07CisKKyAgICBpZiAo
YW5zMVRpbWUtPnR5cGUgPT0gVl9BU04xX1VUQ1RJTUUpIHsKKyAgICAgICAgdGltZS50bV95ZWFy
ID0gKGRhdGFbMF0gLSAnMCcpICogMTAgKyAoZGF0YVsxXSAtICcwJyk7CisgICAgICAgIGlmICh0
aW1lLnRtX3llYXIgPCA1MCkKKyAgICAgICAgICAgIHRpbWUudG1feWVhciArPSAxMDA7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGltZS50bV95ZWFyID0gKGRhdGFbMF0gLSAnMCcpICogMTAwMCAr
IChkYXRhWzFdIC0gJzAnKSAqIDEwMCArIChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFbM10g
LSAnMCcpOworICAgICAgICB0aW1lLnRtX3llYXIgLT0gMTkwMDsKKyAgICB9CisKKyAgICBkYXRh
ICs9IGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FID8gMiA6IDQ7CisKKyAgICB0aW1l
LnRtX21vbiA9IChkYXRhWzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0gLSAnMCcpIC0gMTsKKyAg
ICBpZiAodGltZS50bV9tb24gPCAwIHx8IHRpbWUudG1fbW9uID4gMTEpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgdGltZS50bV9tZGF5ID0gKGRhdGFbMl0gLSAnMCcpICogMTAg
KyAoZGF0YVszXSAtICcwJyk7CisgICAgdGltZS50bV9ob3VyID0gKGRhdGFbNF0gLSAnMCcpICog
MTAgKyAoZGF0YVs1XSAtICcwJyk7CisgICAgdGltZS50bV9taW4gPSAoZGF0YVs2XSAtICcwJykg
KiAxMCArIChkYXRhWzddIC0gJzAnKTsKKworICAgIGlmICgoYW5zMVRpbWUtPmxlbmd0aCA+PSBk
aWdpdExlbmd0aCArIDIpICYmIGlzQVNDSUlEaWdpdChkYXRhWzhdKSAmJiBpc0FTQ0lJRGlnaXQo
ZGF0YVs5XSkpCisgICAgICAgIHRpbWUudG1fc2VjID0gKGRhdGFbOF0gLSAnMCcpICogMTAgKyAo
ZGF0YVs5XSAtICcwJyk7CisKKyAgICBhdXRvIGdtdFRpbWUgPSBta3RpbWUoJnRpbWUpOworICAg
IGF1dG8gbG9jYWxUaW1lT2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KGdtdFRpbWUg
KiAxMDAwLjApOworICAgIHJldHVybiBTZWNvbmRzKGdtdFRpbWUgKyAobG9jYWxUaW1lT2Zmc2V0
Lm9mZnNldCAvIDEwMDAuMCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRTdWJqZWN0QWx0TmFtZShj
b25zdCBYNTA5KiB4NTA5LCBWZWN0b3I8U3RyaW5nPiYgZG5zTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBpcEFkZHJlc3NlcykKK3sKKyAgICBTdGFja09mR2VuZXJhbE5hbWUgc2FuTGlzdCh4NTA5LCBO
SURfc3ViamVjdF9hbHRfbmFtZSk7CisgICAgaWYgKCFzYW5MaXN0KQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIG51bSA9IHNhbkxpc3QuY291bnQoKTsKKyAgICBmb3IgKGF1dG8gaSA9IDA7
IGkgPCBudW07IGkrKykgeworICAgICAgICBhdXRvKiB2YWx1ZSA9IHNhbkxpc3QuaXRlbShpKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
ICh2YWx1ZS0+dHlwZSA9PSBHRU5fRE5TKSB7CisgICAgICAgICAgICBpZiAoYXV0byBkbnNOYW1l
ID0gdG9TdHJpbmcodmFsdWUtPmQuZE5TTmFtZSkpCisgICAgICAgICAgICAgICAgZG5zTmFtZXMu
YXBwZW5kKFdURk1vdmUoKmRuc05hbWUpKTsKKyAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS0+dHlw
ZSA9PSBHRU5fSVBBREQpIHsKKyAgICAgICAgICAgIGF1dG8gZGF0YSA9IHZhbHVlLT5kLmlQQWRk
cmVzcy0+ZGF0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9
PSA0KQorICAgICAgICAgICAgICAgIGlwQWRkcmVzc2VzLmFwcGVuZChtYWtlU3RyaW5nKGRhdGFb
MF0sICIuIiwgZGF0YVsxXSwgIi4iLCBkYXRhWzJdLCAiLiIsIGRhdGFbM10pKTsKKyAgICAgICAg
ICAgIGVsc2UgaWYgKHZhbHVlLT5kLmlQQWRkcmVzcy0+bGVuZ3RoID09IDE2KSB7CisgICAgICAg
ICAgICAgICAgU3RyaW5nQnVpbGRlciBpcEFkZHJlc3M7CisgICAgICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA4OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzLmFw
cGVuZChtYWtlU3RyaW5nKGhleChkYXRhWzBdIDw8IDggfCBkYXRhWzFdLCA0KSkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoaSAhPSA3KQorICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRy
ZXNzLmFwcGVuZCgiOiIpOworICAgICAgICAgICAgICAgICAgICBkYXRhICs9IDI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlwQWRkcmVzc2VzLmFwcGVuZChpcEFkZHJlc3Mu
dG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK09wdGlv
bmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6U3VtbWFyeUluZm8+IGNyZWF0ZVN1bW1hcnlJ
bmZvKGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgcGVtKQoreworICAgIEJJTyBiaW8geyBwZW0gfTsK
KyAgICBhdXRvIHg1MDkgPSBiaW8ucmVhZFg1MDkoKTsKKyAgICBpZiAoIXg1MDkpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlN1
bW1hcnlJbmZvIHN1bW1hcnlJbmZvOworCisgICAgaWYgKGF1dG8gY29tbW9uTmFtZSA9IGdldENv
bW1vbk5hbWUoeDUwOS5nZXQoKSkpCisgICAgICAgIHN1bW1hcnlJbmZvLnN1YmplY3QgPSBXVEZN
b3ZlKCpjb21tb25OYW1lKTsKKyAgICBlbHNlIGlmIChhdXRvIHN1YmplY3ROYW1lID0gZ2V0U3Vi
amVjdE5hbWUoeDUwOS5nZXQoKSkpCisgICAgICAgIHN1bW1hcnlJbmZvLnN1YmplY3QgPSBXVEZN
b3ZlKCpzdWJqZWN0TmFtZSk7CisKKyAgICBpZiAoYXV0byBub3RCZWZvcmUgPSBjb252ZXJ0QVNO
MVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEJlZm9yZSh4NTA5LmdldCgpKSkpCisgICAgICAg
IHN1bW1hcnlJbmZvLnZhbGlkRnJvbSA9ICpub3RCZWZvcmU7CisKKyAgICBpZiAoYXV0byBub3RB
ZnRlciA9IGNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyhYNTA5X2dldDBfbm90QWZ0ZXIoeDUwOS5n
ZXQoKSkpKQorICAgICAgICBzdW1tYXJ5SW5mby52YWxpZFVudGlsID0gKm5vdEFmdGVyOworCisg
ICAgZ2V0U3ViamVjdEFsdE5hbWUoeDUwOS5nZXQoKSwgc3VtbWFyeUluZm8uZG5zTmFtZXMsIHN1
bW1hcnlJbmZvLmlwQWRkcmVzc2VzKTsKKworICAgIHJldHVybiBzdW1tYXJ5SW5mbzsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5T
U0xIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9PcGVuU1NM
SGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg1ZGFmNWI3MjBiYTcyYTI1YjY5MGExZGZhNDE0MGY1MzZj
ODEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9PcGVuU1NMSGVscGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1ZGUgPG9w
ZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgT3BlblNTTCB7CisKK09wdGlvbmFsPFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbz4gY3JlYXRlQ2VydGlmaWNhdGVJbmZvKFg1MDlfU1RPUkVfQ1RYKik7CitPcHRp
b25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlN1bW1hcnlJbmZvPiBjcmVhdGVTdW1tYXJ5
SW5mbyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHBlbSk7CisKK30gLy8gbmFtZXNwYWNlIE9wZW5T
U0wKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwppbmRleCAyNjRhMGFlZTJlMTc0ZjUzYTQwZTBkNWQwYTFlNWE5MjJhMThjMzBkLi43MDE2
YWRmMzgyYzExMTRjZjQ3OGZjMDgwZWVjMmE4Y2FhNTBjMTM0IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTktMDctMzEgIFRha2FzaGkgS29tb3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5jb20+
CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0OTgK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRm
b3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTktMDctMjcgIEFuZHJlcyBHb256YWxleiAg
PGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSB0aGUgYXJpYS1sYWJlbCBh
dHRyaWJ1dGUgZm9yIDx2aWRlbz4gZWxlbWVudHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDJiNzFjZDZlYjUyZTc5MDIy
OWVjYzUxMzUzNmQyNzIwNWJkOTg5NDUuLjkxNWQ3NjNhZWFhOGZkZmYwZjY3ZTE3N2UyZjBmYjc5
ZThlM2Q1NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9U
ZXN0RXhwZWN0YXRpb25zCkBAIC0zMzEsMyArMzMxLDcgQEAgZmFzdC9jc3MvdHJhbnNpdGlvbi1j
b2xvci11bnNwZWNpZmllZC5odG1sIFsgU2tpcCBdCiBmYXN0L2ZpbHRlci1pbWFnZS9maWx0ZXIt
aW1hZ2UtYW5pbWF0aW9uLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tb2RpZnktZnJh
bWV0cmVlLWluLWNhbGxiYWNrLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tdWx0aS1m
cmFtZXMuaHRtbCBbIFNraXAgXQorCisjIFdpbkNhaXJvIHdrMSBkb2Vzbid0IHN1cHBvcnQgaW5z
cGVjdG9yIHRlc3RzLgord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9u
ZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVk
Q2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggN2JlYzA2Mjk4NTkxYzgyZjhkY2E3NDY2ZTM5ZDE3
OGNlNWE0OTVjYi4uZTI5MGUwODlmNjhlMmQ0MWExMmRiOGQ0YmFmYWMyNDkyZTE3N2QyMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucwor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBAIC0x
MDE4LDggKzEwMTgsOCBAQCBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0
LW92ZXJyaWRlbWltZXR5cGUtY29udGVudC10eXBlLWhlYWRlci5odAogaHR0cC90ZXN0cy94bWx2
aWV3ZXIgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE5MjQwNiBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNvbm5lY3Rpb24uaHRtbCBbIFNraXAgXQotd2Vi
a2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNl
Y3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xOTE0OTggaHR0
cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbCBb
IFNraXAgXQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3Jr
L3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5vcmcv
Yi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlm
aWNhdGUuaHRtbCBbIFBhc3MgXQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBJc3N1ZSBj
YXRlZ29yaWVzIGJlbG93IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBwbGF0Zm9ybXMgKHByaW1hcmls
eSBBcHBsZVdpbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375520</attachid>
            <date>2019-08-04 22:41:21 -0700</date>
            <delta_ts>2019-08-04 23:41:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191498-20190805143741.patch</filename>
            <type>text/plain</type>
            <size>28800</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiY2ZjNzVjNDk5YWNiZjQxMDU5ZGM3
ZWEwYmM0Mzk4NjE0MDcwM2YuLmRlN2NhY2Y0ZTZmZTgwZjViZDhjMTM0ZjYzZDk5YzEwOWM5MDUx
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMDQgIFRha2FzaGkgS29tb3JpICA8VGFr
YXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZp
Y2F0ZUluZm86OnN1bW1hcnlJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBGaXhlZCBmdW5jdGlvbiB0ZW1wbGF0ZSBmb3IgZW5jb2RpbmcgdmVjdG9y
LgorCisgICAgICAgICogd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaDoKKwogMjAx
OS0wNy0yNSAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGhl
bHBlciBmb3IgaWdub3JpbmcgZGVwcmVjYXRlZCBpbXBsZW1lbnRhdGlvbiB3YXJuaW5ncwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDIxOTgzZTQ2MDU3Zjk2MjZkYzBlODZmODI4M2JhM2JmYjRkM2RhMDkuLmRkZGRl
YTYwMzY5MzQyZjY4Mzg5N2U5NTg4YjlhMTliMGE4ZDAyMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw2NCBAQAorMjAxOS0wOC0wNCAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255
LmNvbT4KKworICAgICAgICBbQ3VybF0gaW1wbGVtZW50IENlcnRpZmljYXRlSW5mbzo6c3VtbWFy
eUluZm8KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIElt
cGxlbWVudCBDZXJ0aWZpY2FlSW5mbzo6U3VtbWFyeUluZm8uCisgICAgICAgIFRoaXMgcGF0Y2gg
bWFrZXMgV2ViSW5zcGVjdG9yIHNob3cgc3VtbWFyeSBvZiBjZXJ0aWZpY2F0ZXMuCisKKyAgICAg
ICAgVGVzdHM6IGh0dHAvdGVzdHMvaW5zcGVjdG9yL25ldHdvcmsvcmVzb3VyY2Utc2VjdXJpdHkt
Y2VydGlmaWNhdGUuaHRtbAorICAgICAgICAgICAgICAgaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0
d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0v
Q3VybC5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJ
bmZvLmg6CisgICAgICAgIChXVEY6OlBlcnNpc3RlbmNlOjpDb2RlcjxXZWJDb3JlOjpDZXJ0aWZp
Y2F0ZUluZm8+OjplbmNvZGUpOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvPjo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNlcnRp
ZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8gY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q3VybFNTTFZlcmlmaWVyOjpjb2xsZWN0SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsU1NM
VmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5
OjpTdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6
flN0YWNrT2ZYNTA5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0YWNrT2ZYNTA5Ojpj
b3VudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUwOTo6aXRlbSk6IERl
bGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVy
OjpCSU9Ib2xkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjp+QklP
SG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6d3JpdGUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QklPSG9sZGVyOjphc0NlcnRpZmljYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBlbURhdGFGcm9tQ3R4KTogRGVsZXRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmg6CisgICAgICAgICog
cGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KE9wZW5TU0w6OmRlbGV0ZXI8WDUwOT46Om9wZXJhdG9yKCkpOgorICAgICAgICAoT3BlblNTTDo6
U3RhY2tPZkdlbmVyYWxOYW1lOjpTdGFja09mR2VuZXJhbE5hbWUpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZkdlbmVyYWxOYW1lOjp+U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9w
ZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChPcGVu
U1NMOjpTdGFja09mR2VuZXJhbE5hbWU6OmNvdW50KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNr
T2ZHZW5lcmFsTmFtZTo6aXRlbSk6CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6U3Rh
Y2tPZlg1MDkpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6On5TdGFja09mWDUwOSk6
CisgICAgICAgIChPcGVuU1NMOjpTdGFja09mWDUwOTo6Y291bnQpOgorICAgICAgICAoT3BlblNT
TDo6U3RhY2tPZlg1MDk6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6QklPOjpCSU8pOgorICAg
ICAgICAoT3BlblNTTDo6QklPOjp+QklPKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0
YUFzVmVjdG9yIGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6Z2V0RGF0YUFzU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6cmVhZFg1MDkpOgorICAgICAgICAoT3Bl
blNTTDo6QklPOjpnZXQpOgorICAgICAgICAoT3BlblNTTDo6cGVtRGF0YUZyb21DdHgpOgorICAg
ICAgICAoT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZvKToKKyAgICAgICAgKE9wZW5TU0w6
OnRvU3RyaW5nKToKKyAgICAgICAgKE9wZW5TU0w6OmdldENvbW1vbk5hbWUpOgorICAgICAgICAo
T3BlblNTTDo6Z2V0U3ViamVjdE5hbWUpOgorICAgICAgICAoT3BlblNTTDo6Y29udmVydEFTTjFU
aW1lVG9TZWNvbmRzKToKKyAgICAgICAgKE9wZW5TU0w6OmdldFN1YmplY3RBbHROYW1lKToKKyAg
ICAgICAgKE9wZW5TU0w6OmNyZWF0ZVN1bW1hcnlJbmZvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAuCisKIDIwMTktMDct
MjggIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgW2lP
U10gVG91Y2ggcmVnaW9ucyBvdmVybGF5IG5lZWRzIHRvIHNob3cgdG91Y2gtYWN0aW9uOm5vbmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMu
aCBiL1NvdXJjZS9XVEYvd3RmL3BlcnNpc3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaAppbmRleCBi
NDE2YWQ4NGI5MjNiZWU4MDYxNzk0NTY2NjMzZTc1YmIxMDA1YmYzLi5jN2E4NDJhZTRiZGU5OTRl
NWRlZGY2YjMyNzY2Mjc5MTYzZDdmMTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9wZXJz
aXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKKysrIGIvU291cmNlL1dURi93dGYvcGVyc2lzdGVu
Y2UvUGVyc2lzdGVudENvZGVycy5oCkBAIC0xNTAsNyArMTUwLDcgQEAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiBzdHJ1Y3QgVmVjdG9yQ29kZXI8dHJ1ZSwgVCwg
aW5saW5lQ2EKICAgICBzdGF0aWMgdm9pZCBlbmNvZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3Qg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQogICAgIHsKICAgICAgICAgZW5jb2Rl
ciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odmVjdG9yLnNpemUoKSk7Ci0gICAgICAgIGVuY29k
ZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+
KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9mKFQpLCBhbGlnbm9mKFQpKTsK
KyAgICAgICAgZW5jb2Rlci5lbmNvZGVGaXhlZExlbmd0aERhdGEocmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1aW50OF90Kj4odmVjdG9yLmRhdGEoKSksIHZlY3Rvci5zaXplKCkgKiBzaXplb2YoVCkp
OwogICAgIH0KICAgICAKICAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVjb2RlciYgZGVjb2Rlciwg
VmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwu
Y21ha2UKaW5kZXggMDA2NGFkZjBhYzRhZGU2OTJmNzE5NWViZjgwODNjYTdiNDMyYzRkZi4uYzE3
MTc4OTFmNzJlYTRiODJhZGYwMDRiZDczZTk0NjMzNGRmOWIzZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ3VybC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DdXJsLmNtYWtlCkBAIC0yNCw2ICsyNCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwCiAgICAgcGxh
dGZvcm0vbmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL05ldHdvcmtTdG9yYWdlU2Vzc2lvbkN1cmwuY3BwCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L1Byb3RlY3Rpb25TcGFjZUN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Byb3h5
U2VydmVyQ3VybC5jcHAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHVibGljU3VmZml4Q3Vy
bC5jcHAKQEAgLTUxLDExICs1MiwxNSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFByb3h5U2V0dGlu
Z3MuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdC5oCiAgICAgcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxSZXF1ZXN0Q2xpZW50LmgKKyAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9D
dXJsUmVxdWVzdFNjaGVkdWxlckNsaWVudC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1
cmxSZXNvdXJjZUhhbmRsZURlbGVnYXRlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bFJlc3BvbnNlLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTEhhbmRsZS5oCisg
ICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCisgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL0ROU1Jlc29sdmVRdWV1ZUN1cmwuaAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Eb3dubG9hZEJ1bmRsZS5oCisgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL09wZW5TU0xI
ZWxwZXIuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Qcm90ZWN0aW9uU3BhY2VDdXJsLmgK
ICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VFcnJvci5oCiAgICAgcGxhdGZvcm0v
bmV0d29yay9jdXJsL1Jlc291cmNlUmVxdWVzdC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKaW5kZXggZTU3ZjNiZDBh
NDg5MDhlNTNmZTU4YzlhZTRkNGFmNTYwMWZhMGUwMC4uMmZiNmZlY2I4ZDlmYWQwZTM0MGEwZmY2
NmViNDBjNjFjOGI5ZmM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAKICAgICBib29sIGNvbnRhaW5zTm9uUm9vdFNIQTFTaWduZWRDZXJ0aWZpY2F0ZSgpIGNvbnN0
IHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICBPcHRpb25hbDxTdW1t
YXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBX
VEY6Om51bGxvcHQ7IH0KKyAgICBPcHRpb25hbDxTdW1tYXJ5SW5mbz4gc3VtbWFyeUluZm8oKSBj
b25zdDsKIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVD
aGFpbi5pc0VtcHR5KCk7IH0KIApAQCAtNzEsMTUgKzcxLDM3IEBAIG5hbWVzcGFjZSBXVEYgewog
bmFtZXNwYWNlIFBlcnNpc3RlbmNlIHsKIAogdGVtcGxhdGU8PiBzdHJ1Y3QgQ29kZXI8V2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvPiB7Ci0gICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImLCBj
b25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyB2b2lkIGVuY29kZShF
bmNvZGVyJiBlbmNvZGVyLCBjb25zdCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGF1dG8m
IGNlcnRpZmljYXRlQ2hhaW4gPSBjZXJ0aWZpY2F0ZUluZm8uY2VydGlmaWNhdGVDaGFpbigpOwor
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVJbmZvLnZlcmlmaWNhdGlvbkVycm9yKCk7
CisgICAgICAgIGVuY29kZXIgPDwgY2VydGlmaWNhdGVDaGFpbi5zaXplKCk7CisgICAgICAgIGZv
ciAoYXV0byYgY2VydGlmaWNhdGUgOiBjZXJ0aWZpY2F0ZUNoYWluKQorICAgICAgICAgICAgZW5j
b2RlciA8PCBjZXJ0aWZpY2F0ZTsKICAgICB9CiAKLSAgICBzdGF0aWMgYm9vbCBkZWNvZGUoRGVj
b2RlciYsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYpCisgICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImIGRlY29kZXIsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJ
bmZvKQogICAgIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpbnQgdmVyaWZpY2F0aW9uRXJyb3I7CisgICAgICAgIGlmICghZGVjb2Rl
ci5kZWNvZGUodmVyaWZpY2F0aW9uRXJyb3IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIHNpemVfdCBudW1PZkNlcnQgPSAwOworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKG51bU9mQ2VydCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgV2Vi
Q29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZUNoYWluIGNlcnRpZmljYXRlQ2hhaW47
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtT2ZDZXJ0OyBpKyspIHsKKyAgICAg
ICAgICAgIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgY2VydGlmaWNhdGU7
CisgICAgICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGNlcnRpZmljYXRlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNlcnRpZmljYXRlQ2hhaW4uYXBw
ZW5kKFdURk1vdmUoY2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNlcnRpZmlj
YXRlSW5mbyA9IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyh2ZXJpZmljYXRpb25FcnJvciwgV1RG
TW92ZShjZXJ0aWZpY2F0ZUNoYWluKSk7CisgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DZXJ0
aWZpY2F0ZUluZm9DdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcAppbmRleCAwYTUzMzlmNWM1NTIzNDk0MjM4ZmE1MDlk
MjRmZjkxMTA4YTkzZTE3Li4yNzliMzZjMTljMmY2MTNkZjQxMjMwYTM4ZGEwYTYxZjg4Y2I2Nzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlm
aWNhdGVJbmZvQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHly
aWdodCAoQykgMjAxOCBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKIAorI2luY2x1ZGUgIk9wZW5T
U0xIZWxwZXIuaCIKICNpbmNsdWRlIDx3dGYvQ3Jvc3NUaHJlYWRDb3BpZXIuaD4KIAogI2lmIFVT
RShDVVJMKQpAQCAtNTAsNiArNTEsMTQgQEAgQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSBD
ZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShjb25zdCB1aW50OF90KiBidWYKICAgICBy
ZXR1cm4gY2VydGlmaWNhdGU7CiB9CiAKK09wdGlvbmFsPENlcnRpZmljYXRlSW5mbzo6U3VtbWFy
eUluZm8+IENlcnRpZmljYXRlSW5mbzo6c3VtbWFyeUluZm8oKSBjb25zdAoreworICAgIGlmICgh
bV9jZXJ0aWZpY2F0ZUNoYWluLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
KworICAgIHJldHVybiBPcGVuU1NMOjpjcmVhdGVTdW1tYXJ5SW5mbyhtX2NlcnRpZmljYXRlQ2hh
aW4uYXQoMCkpOworfQorCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAppbmRleCA4MDk0Yjkz
NTk5ODM4MmVlZjQxM2RjNGE1ZWFmYjI0ZTRlYWY3N2FlLi5iZjE0YjI4MThhYjgxZjI0MTU0ZjE5
ZjQ2N2YwMjUzYzAzYTU0MWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcApAQCAtMzAsMTEgKzMwLDkgQEAK
ICNpZiBVU0UoQ1VSTCkKICNpbmNsdWRlICJDdXJsQ29udGV4dC5oIgogI2luY2x1ZGUgIkN1cmxT
U0xIYW5kbGUuaCIKLSNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXN0YXRpYyBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0
YUZyb21DdHgoWDUwOVN0b3JlQ1RYKik7CiBzdGF0aWMgQ3VybFNTTFZlcmlmaWVyOjpTU0xDZXJ0
aWZpY2F0ZUZsYWdzIGNvbnZlcnRUb1NTTENlcnRpZmljYXRlRmxhZ3ModW5zaWduZWQpOwogCiBD
dXJsU1NMVmVyaWZpZXI6OkN1cmxTU0xWZXJpZmllcih2b2lkKiBzc2xDdHgpCkBAIC02MSwxNSAr
NTksMTYgQEAgQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIodm9pZCogc3NsQ3R4KQog
ICAgICAgICBTU0xfQ1RYX3NldDFfY3VydmVzX2xpc3QoY3R4LCBjdXJ2ZXNMaXN0LnV0ZjgoKS5k
YXRhKCkpOwogfQogCi12b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOVN0b3Jl
Q1RYKiBjdHgpCit2b2lkIEN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8oWDUwOV9TVE9SRV9D
VFgqIGN0eCkKIHsKLSAgICBtX2NlcnRpZmljYXRlSW5mbyA9IENlcnRpZmljYXRlSW5mbyB7IFg1
MDlfU1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpLCBwZW1EYXRhRnJvbUN0eChjdHgpIH07CisgICAg
aWYgKGF1dG8gY2VydGlmaWNhdGVJbmZvID0gT3BlblNTTDo6Y3JlYXRlQ2VydGlmaWNhdGVJbmZv
KGN0eCkpCisgICAgICAgIG1fY2VydGlmaWNhdGVJbmZvID0gV1RGTW92ZSgqY2VydGlmaWNhdGVJ
bmZvKTsKIAogICAgIGlmIChhdXRvIGVycm9yID0gbV9jZXJ0aWZpY2F0ZUluZm8udmVyaWZpY2F0
aW9uRXJyb3IoKSkKICAgICAgICAgbV9zc2xFcnJvcnMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnZl
cnRUb1NTTENlcnRpZmljYXRlRmxhZ3MoZXJyb3IpKTsKIH0KIAotaW50IEN1cmxTU0xWZXJpZmll
cjo6dmVyaWZ5Q2FsbGJhY2soaW50IHByZXZlcmlmaWVkLCBYNTA5U3RvcmVDVFgqIGN0eCkKK2lu
dCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOV9T
VE9SRV9DVFgqIGN0eCkKIHsKICAgICBhdXRvIHNzbCA9IHN0YXRpY19jYXN0PFNTTCo+KFg1MDlf
U1RPUkVfQ1RYX2dldF9leF9kYXRhKGN0eCwgU1NMX2dldF9leF9kYXRhX1g1MDlfU1RPUkVfQ1RY
X2lkeCgpKSk7CiAgICAgYXV0byBzc2xDdHggPSBTU0xfZ2V0X1NTTF9DVFgoc3NsKTsKQEAgLTgw
LDc1ICs3OSw2IEBAIGludCBDdXJsU1NMVmVyaWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2
ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgpCiAgICAgcmV0dXJuIHByZXZlcmlmaWVkOwogfQog
Ci1jbGFzcyBTdGFja09mWDUwOSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgU3RhY2tPZlg1MDko
WDUwOVN0b3JlQ1RYKiBjdHgpCi0gICAgICAgIDogbV9jZXJ0cyB7IFg1MDlfU1RPUkVfQ1RYX2dl
dDFfY2hhaW4oY3R4KSB9Ci0gICAgewotICAgIH0KLQotICAgIH5TdGFja09mWDUwOSgpCi0gICAg
ewotICAgICAgICBpZiAobV9jZXJ0cykKLSAgICAgICAgICAgIHNrX1g1MDlfcG9wX2ZyZWUobV9j
ZXJ0cywgWDUwOV9mcmVlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBjb3VudCgpIHsgcmV0dXJu
IHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9Ci0gICAgWDUwOSogaXRlbSh1bnNpZ25lZCBpKSB7IHJl
dHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9Ci0KLXByaXZhdGU6Ci0gICAgU1RBQ0tf
T0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Ci19OwotCi1jbGFzcyBCSU9Ib2xkZXIgewot
cHVibGljOgotICAgIEJJT0hvbGRlcigpCi0gICAgICAgIDogbV9iaW8geyBCSU9fbmV3KEJJT19z
X21lbSgpKSB9Ci0gICAgewotICAgIH0KLQotICAgIH5CSU9Ib2xkZXIoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fYmlvKQotICAgICAgICAgICAgQklPX2ZyZWUobV9iaW8pOwotICAgIH0KLQotICAg
IGJvb2wgd3JpdGUoWDUwOSogZGF0YSkgeyByZXR1cm4gUEVNX3dyaXRlX2Jpb19YNTA5KG1fYmlv
LCBkYXRhKTsgfQotICAgIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUgYXNDZXJ0aWZpY2F0
ZSgpCi0gICAgewotICAgICAgICB1aW50OF90KiBkYXRhOwotICAgICAgICBsb25nIGxlbmd0aCA9
IEJJT19nZXRfbWVtX2RhdGEobV9iaW8sICZkYXRhKTsKLSAgICAgICAgaWYgKGxlbmd0aCA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gQ2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZSgpOwotCi0g
ICAgICAgIGF1dG8gY2VydCA9IENlcnRpZmljYXRlSW5mbzo6bWFrZUNlcnRpZmljYXRlKGRhdGEs
IGxlbmd0aCk7Ci0gICAgICAgIHJldHVybiBjZXJ0OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBC
SU8qIG1fYmlvIHsgbnVsbHB0ciB9OwotfTsKLQotc3RhdGljIFZlY3RvcjxDZXJ0aWZpY2F0ZUlu
Zm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5U3RvcmVDVFgqIGN0eCkKLXsKLSAg
ICBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcmVzdWx0OwotICAgIFN0YWNr
T2ZYNTA5IGNlcnRzIHsgY3R4IH07Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjZXJ0cy5jb3Vu
dCgpOyBpKyspIHsKLSAgICAgICAgQklPSG9sZGVyIGJpbzsKLQotICAgICAgICBpZiAoIWJpby53
cml0ZShjZXJ0cy5pdGVtKGkpKSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2VydGlmaWNh
dGVJbmZvOjpDZXJ0aWZpY2F0ZT4geyB9OwotCi0gICAgICAgIGF1dG8gY2VydGlmaWNhdGUgPSBi
aW8uYXNDZXJ0aWZpY2F0ZSgpOwotICAgICAgICBpZiAoY2VydGlmaWNhdGUuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIFZlY3RvcjxDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiB7
IH07Ci0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NM
Q2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkIHNz
bEVycm9yKQogewogICAgIHN3aXRjaCAoc3NsRXJyb3IpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAppbmRleCA5ZTNi
ODAwMWI3M2ExYjk3Zjc4NDI0OTFjNDFlMDk0ZDNjZWQ4MmY1Li40NTJmNzA1ZjljYjhmZTI5MTlj
ZjI4NTZkZWU4ZDBhZDFhODE0ZjFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCkBAIC0yNywxNiArMjcsMTIgQEAK
ICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCisjaW5jbHVkZSAi
T3BlblNTTEhlbHBlci5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi1zdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3Q7Ci10eXBl
ZGVmIHN0cnVjdCB4NTA5X3N0b3JlX2N0eF9zdCBYNTA5U3RvcmVDVFg7Ci0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgQ3VybEhhbmRsZTsKLQogY2xhc3MgQ3VybFNTTFZlcmlmaWVyIHsK
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDdXJsU1NMVmVyaWZpZXIpOwogcHVibGljOgpAQCAt
NTYsMTIgKzUyLDExIEBAIHB1YmxpYzoKICAgICBjb25zdCBDZXJ0aWZpY2F0ZUluZm8mIGNlcnRp
ZmljYXRlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2VydGlmaWNhdGVJbmZvOyB9CiAKIHByaXZh
dGU6Ci0gICAgc3RhdGljIGludCB2ZXJpZnlDYWxsYmFjayhpbnQsIFg1MDlTdG9yZUNUWCopOwor
ICAgIHN0YXRpYyBpbnQgdmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5X1NUT1JFX0NUWCopOworICAg
IHZvaWQgY29sbGVjdEluZm8oWDUwOV9TVE9SRV9DVFgqKTsKIAogICAgIGludCBtX3NzbEVycm9y
cyB7IDAgfTsKICAgICBDZXJ0aWZpY2F0ZUluZm8gbV9jZXJ0aWZpY2F0ZUluZm87Ci0KLSAgICB2
b2lkIGNvbGxlY3RJbmZvKFg1MDlTdG9yZUNUWCopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU1ZmM0ODNjMGVlNDA3MmI3YTlhMGY0NWMwNTk2
OWJhZTA1MTM3OTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5jcHAKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk9wZW5TU0xIZWxwZXIuaCIK
KworI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+
CisjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgT3BlblNTTCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgZGVsZXRlcjsKK3RlbXBsYXRlPD4gc3RydWN0
IGRlbGV0ZXI8WDUwOT4geworICAgIHZvaWQgb3BlcmF0b3IoKShYNTA5KiB4NTA5KQorICAgIHsK
KyAgICAgICAgaWYgKHg1MDkpCisgICAgICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfQor
fTsKKworY2xhc3MgU3RhY2tPZkdlbmVyYWxOYW1lIHsKK3B1YmxpYzoKKyAgICBTdGFja09mR2Vu
ZXJhbE5hbWUoY29uc3QgWDUwOSogeDUwOSwgaW50IG5pZCkKKyAgICAgICAgOiBtX25hbWVzIHsg
c3RhdGljX2Nhc3Q8U1RBQ0tfT0YoR0VORVJBTF9OQU1FKSo+KFg1MDlfZ2V0X2V4dF9kMmkoeDUw
OSwgbmlkLCBudWxscHRyLCBudWxscHRyKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3RhY2tP
ZkdlbmVyYWxOYW1lKCkKKyAgICB7CisgICAgICAgIGlmIChtX25hbWVzKQorICAgICAgICAgICAg
c2tfR0VORVJBTF9OQU1FX3BvcF9mcmVlKG1fbmFtZXMsIEdFTkVSQUxfTkFNRV9mcmVlKTsKKyAg
ICB9CisKKyAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gbV9uYW1lczsgfQorCisgICAgaW50
IGNvdW50KCkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX251bShtX25hbWVzKTsgfQorICAgIEdF
TkVSQUxfTkFNRSogaXRlbShpbnQgaSkgeyByZXR1cm4gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKG1f
bmFtZXMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAgU1RBQ0tfT0YoR0VORVJBTF9OQU1FKSogbV9u
YW1lcyB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIFN0YWNrT2ZYNTA5IHsKK3B1YmxpYzoKKyAg
ICBTdGFja09mWDUwOShYNTA5X1NUT1JFX0NUWCogY3R4KQorICAgICAgICA6IG1fY2VydHMgeyBY
NTA5X1NUT1JFX0NUWF9nZXQxX2NoYWluKGN0eCkgfQorICAgIHsKKyAgICB9CisKKyAgICB+U3Rh
Y2tPZlg1MDkoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2VydHMpCisgICAgICAgICAgICBza19Y
NTA5X3BvcF9mcmVlKG1fY2VydHMsIFg1MDlfZnJlZSk7CisgICAgfQorCisgICAgaW50IGNvdW50
KCkgeyByZXR1cm4gc2tfWDUwOV9udW0obV9jZXJ0cyk7IH0KKyAgICBYNTA5KiBpdGVtKGludCBp
KSB7IHJldHVybiBza19YNTA5X3ZhbHVlKG1fY2VydHMsIGkpOyB9CisKK3ByaXZhdGU6CisgICAg
U1RBQ0tfT0YoWDUwOSkqIG1fY2VydHMgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBCSU8gewor
cHVibGljOgorICAgIEJJTygpCisgICAgICAgIDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19t
ZW0oKSkgfQorICAgIHsKKyAgICB9CisKKyAgICBCSU8oWDUwOSogZGF0YSkKKyAgICAgICAgOiBt
X2JpbyB7IDo6QklPX25ldyg6OkJJT19zX21lbSgpKSB9CisgICAgeworICAgICAgICA6OlBFTV93
cml0ZV9iaW9fWDUwOShtX2JpbywgZGF0YSk7CisgICAgfQorCisgICAgQklPKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZGF0YSkKKyAgICAgICAgOiBtX2JpbyB7IDo6QklPX25ld19tZW1fYnVmKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSkgfQorICAgIHsKKyAgICB9CisKKyAgICB+QklPKCkKKyAg
ICB7CisgICAgICAgIGlmIChtX2JpbykKKyAgICAgICAgICAgIDo6QklPX2ZyZWUobV9iaW8pOwor
ICAgIH0KKworICAgIE9wdGlvbmFsPFZlY3Rvcjx1aW50OF90Pj4gZ2V0RGF0YUFzVmVjdG9yKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHVpbnQ4X3QqIGRhdGEgeyBudWxscHRyIH07CisgICAgICAg
IGF1dG8gbGVuZ3RoID0gOjpCSU9fZ2V0X21lbV9kYXRhKG1fYmlvLCAmZGF0YSk7CisgICAgICAg
IGlmIChsZW5ndGggPCAwKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
ICAgICBWZWN0b3I8dWludDhfdD4gcmVzdWx0OworICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGEs
IGxlbmd0aCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgU3RyaW5nIGdl
dERhdGFBc1N0cmluZygpIGNvbnN0CisgICAgeworICAgICAgICB1aW50OF90KiBkYXRhIHsgbnVs
bHB0ciB9OworICAgICAgICBhdXRvIGxlbmd0aCA9IDo6QklPX2dldF9tZW1fZGF0YShtX2Jpbywg
JmRhdGEpOworICAgICAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgICAgICByZXR1cm4gU3RyaW5nKGRhdGEsIGxlbmd0aCk7CisgICAgfQorCisg
ICAgc3RkOjp1bmlxdWVfcHRyPFg1MDksIGRlbGV0ZXI8WDUwOT4+IHJlYWRYNTA5KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8WDUwOSwgZGVsZXRlcjxYNTA5Pj4oOjpQ
RU1fcmVhZF9iaW9fWDUwOShtX2JpbywgbnVsbHB0ciwgMCwgbnVsbHB0cikpOworICAgIH0KKwor
ICAgIDo6QklPKiBnZXQoKSB7IHJldHVybiBtX2JpbzsgfQorCitwcml2YXRlOgorICAgIDo6QklP
KiBtX2JpbyB7IG51bGxwdHIgfTsKK307CisKKworc3RhdGljIFZlY3RvcjxXZWJDb3JlOjpDZXJ0
aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlPiBwZW1EYXRhRnJvbUN0eChYNTA5X1NUT1JFX0NUWCog
Y3R4KQoreworICAgIFZlY3RvcjxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRl
PiByZXN1bHQ7CisgICAgU3RhY2tPZlg1MDkgY2VydHMgeyBjdHggfTsKKworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY2VydHMuY291bnQoKTsgaSsrKSB7CisgICAgICAgIEJJTyBiaW8oY2VydHMu
aXRlbShpKSk7CisKKyAgICAgICAgaWYgKGF1dG8gY2VydGlmaWNhdGUgPSBiaW8uZ2V0RGF0YUFz
VmVjdG9yKCkpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUoKmNlcnRpZmljYXRl
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvPiBj
cmVhdGVDZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFgqIGN0eCkKK3sKKyAgICBpZiAoIWN0
eCkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8oWDUwOV9TVE9SRV9DVFhfZ2V0X2Vycm9yKGN0eCksIHBlbURhdGFGcm9t
Q3R4KGN0eCkpOworfQorCitzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IEFTTjFfU1RSSU5H
KiBuYW1lKQoreworICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEgeyBudWxscHRyIH07CisgICAgYXV0
byBsZW5ndGggPSBBU04xX1NUUklOR190b19VVEY4KCZkYXRhLCBuYW1lKTsKKyAgICBpZiAobGVu
Z3RoIDw9IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIFN0cmluZyByZXN1bHQo
ZGF0YSwgbGVuZ3RoKTsKKyAgICBPUEVOU1NMX2ZyZWUoZGF0YSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworc3RhdGljIFN0cmluZyBnZXRDb21tb25OYW1lKGNvbnN0IFg1MDkqIHg1MDkpCit7
CisgICAgYXV0byBzdWJqZWN0TmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KTsKKyAg
ICBpZiAoIXN1YmplY3ROYW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBhdXRv
IGluZGV4ID0gWDUwOV9OQU1FX2dldF9pbmRleF9ieV9OSUQoc3ViamVjdE5hbWUsIE5JRF9jb21t
b25OYW1lLCAtMSk7CisgICAgaWYgKGluZGV4IDwgMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygp
OworCisgICAgYXV0byBjb21tb25OYW1lRW50cnkgPSBYNTA5X05BTUVfZ2V0X2VudHJ5KHN1Ympl
Y3ROYW1lLCBpbmRleCk7CisgICAgaWYgKCFjb21tb25OYW1lRW50cnkpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIGF1dG8gY29tbW9uTmFtZUVudHJ5RGF0YSA9IFg1MDlfTkFNRV9F
TlRSWV9nZXRfZGF0YShjb21tb25OYW1lRW50cnkpOworICAgIGlmICghY29tbW9uTmFtZUVudHJ5
RGF0YSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0dXJuIHRvU3RyaW5nKGNv
bW1vbk5hbWVFbnRyeURhdGEpOworfQorCitzdGF0aWMgU3RyaW5nIGdldFN1YmplY3ROYW1lKGNv
bnN0IFg1MDkqIHg1MDkpCit7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3Mg
PSAoQVNOMV9TVFJGTEdTX1JGQzIyNTMgfCBBU04xX1NUUkZMR1NfRVNDX1FVT1RFIHwgWE5fRkxB
R19TRVBfQ1BMVVNfU1BDIHwgWE5fRkxBR19ETl9SRVYgfCBYTl9GTEFHX0ZOX05PTkUgfCBYTl9G
TEFHX1NQQ19FUSkgJiB+QVNOMV9TVFJGTEdTX0VTQ19NU0I7CisKKyAgICBhdXRvIHN1YmplY3RO
YW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKHg1MDkpOworICAgIGlmICghc3ViamVjdE5hbWUp
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIEJJTyBiaW87CisgICAgYXV0byBsZW5n
dGggPSBYNTA5X05BTUVfcHJpbnRfZXgoYmlvLmdldCgpLCBzdWJqZWN0TmFtZSwgMCwgZmxhZ3Mp
OworICAgIGlmIChsZW5ndGggPD0gMCkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
cmV0dXJuIGJpby5nZXREYXRhQXNTdHJpbmcoKTsKK30KKworc3RhdGljIE9wdGlvbmFsPFNlY29u
ZHM+IGNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyhjb25zdCBBU04xX1RJTUUqIGFuczFUaW1lKQor
eworICAgIGlmICghYW5zMVRpbWUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAg
ICBpZiAoKGFuczFUaW1lLT50eXBlICE9IFZfQVNOMV9VVENUSU1FICYmIGFuczFUaW1lLT50eXBl
ICE9IFZfQVNOMV9HRU5FUkFMSVpFRFRJTUUpIHx8ICFhbnMxVGltZS0+ZGF0YSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIC8vIFVUQ1RJTUUgICAgICAgICA6IFlZbW1kZEhI
TU1bU1NdCisgICAgLy8gR0VORVJBTElaRURUSU1FIDogWVlZWW1tZGRISE1NW1NTXQorICAgIGlu
dCBkaWdpdExlbmd0aCA9IGFuczFUaW1lLT50eXBlID09IFZfQVNOMV9VVENUSU1FID8gMTAgOiAx
MjsKKyAgICBpZiAoYW5zMVRpbWUtPmxlbmd0aCA8IGRpZ2l0TGVuZ3RoKQorICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworCisgICAgYXV0byBkYXRhID0gYW5zMVRpbWUtPmRhdGE7CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBkaWdpdExlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmICghaXNB
U0NJSURpZ2l0KGRhdGFbaV0pKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICB9CisKKyAgICBzdHJ1Y3QgdG0gdGltZSB7IH07CisKKyAgICBpZiAoYW5zMVRpbWUtPnR5cGUg
PT0gVl9BU04xX1VUQ1RJTUUpIHsKKyAgICAgICAgdGltZS50bV95ZWFyID0gKGRhdGFbMF0gLSAn
MCcpICogMTAgKyAoZGF0YVsxXSAtICcwJyk7CisgICAgICAgIGlmICh0aW1lLnRtX3llYXIgPCA1
MCkKKyAgICAgICAgICAgIHRpbWUudG1feWVhciArPSAxMDA7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdGltZS50bV95ZWFyID0gKGRhdGFbMF0gLSAnMCcpICogMTAwMCArIChkYXRhWzFdIC0gJzAn
KSAqIDEwMCArIChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFbM10gLSAnMCcpOworICAgICAg
ICB0aW1lLnRtX3llYXIgLT0gMTkwMDsKKyAgICB9CisKKyAgICBkYXRhICs9IGFuczFUaW1lLT50
eXBlID09IFZfQVNOMV9VVENUSU1FID8gMiA6IDQ7CisKKyAgICB0aW1lLnRtX21vbiA9IChkYXRh
WzBdIC0gJzAnKSAqIDEwICsgKGRhdGFbMV0gLSAnMCcpIC0gMTsKKyAgICBpZiAodGltZS50bV9t
b24gPCAwIHx8IHRpbWUudG1fbW9uID4gMTEpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgdGltZS50bV9tZGF5ID0gKGRhdGFbMl0gLSAnMCcpICogMTAgKyAoZGF0YVszXSAtICcw
Jyk7CisgICAgdGltZS50bV9ob3VyID0gKGRhdGFbNF0gLSAnMCcpICogMTAgKyAoZGF0YVs1XSAt
ICcwJyk7CisgICAgdGltZS50bV9taW4gPSAoZGF0YVs2XSAtICcwJykgKiAxMCArIChkYXRhWzdd
IC0gJzAnKTsKKworICAgIGlmICgoYW5zMVRpbWUtPmxlbmd0aCA+PSBkaWdpdExlbmd0aCArIDIp
ICYmIGlzQVNDSUlEaWdpdChkYXRhWzhdKSAmJiBpc0FTQ0lJRGlnaXQoZGF0YVs5XSkpCisgICAg
ICAgIHRpbWUudG1fc2VjID0gKGRhdGFbOF0gLSAnMCcpICogMTAgKyAoZGF0YVs5XSAtICcwJyk7
CisKKyAgICBhdXRvIGdtdFRpbWUgPSBta3RpbWUoJnRpbWUpOworICAgIGF1dG8gbG9jYWxUaW1l
T2Zmc2V0ID0gY2FsY3VsYXRlTG9jYWxUaW1lT2Zmc2V0KGdtdFRpbWUgKiAxMDAwLjApOworICAg
IHJldHVybiBTZWNvbmRzKGdtdFRpbWUgKyAobG9jYWxUaW1lT2Zmc2V0Lm9mZnNldCAvIDEwMDAu
MCkpOworfQorCitzdGF0aWMgdm9pZCBnZXRTdWJqZWN0QWx0TmFtZShjb25zdCBYNTA5KiB4NTA5
LCBWZWN0b3I8U3RyaW5nPiYgZG5zTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBpcEFkZHJlc3NlcykK
K3sKKyAgICBTdGFja09mR2VuZXJhbE5hbWUgc2FuTGlzdCh4NTA5LCBOSURfc3ViamVjdF9hbHRf
bmFtZSk7CisgICAgaWYgKCFzYW5MaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIG51
bSA9IHNhbkxpc3QuY291bnQoKTsKKyAgICBmb3IgKGF1dG8gaSA9IDA7IGkgPCBudW07IGkrKykg
eworICAgICAgICBhdXRvKiB2YWx1ZSA9IHNhbkxpc3QuaXRlbShpKTsKKyAgICAgICAgaWYgKCF2
YWx1ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICh2YWx1ZS0+dHlwZSA9
PSBHRU5fRE5TKSB7CisgICAgICAgICAgICBhdXRvIGRuc05hbWUgPSB0b1N0cmluZyh2YWx1ZS0+
ZC5kTlNOYW1lKTsKKyAgICAgICAgICAgIGlmICghZG5zTmFtZS5pc051bGwoKSkKKyAgICAgICAg
ICAgICAgICBkbnNOYW1lcy5hcHBlbmQoV1RGTW92ZShkbnNOYW1lKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUtPnR5cGUgPT0gR0VOX0lQQUREKSB7CisgICAgICAgICAgICBhdXRvIGRhdGEg
PSB2YWx1ZS0+ZC5pUEFkZHJlc3MtPmRhdGE7CisgICAgICAgICAgICBpZiAodmFsdWUtPmQuaVBB
ZGRyZXNzLT5sZW5ndGggPT0gNCkKKyAgICAgICAgICAgICAgICBpcEFkZHJlc3Nlcy5hcHBlbmQo
bWFrZVN0cmluZyhkYXRhWzBdLCAiLiIsIGRhdGFbMV0sICIuIiwgZGF0YVsyXSwgIi4iLCBkYXRh
WzNdKSk7CisgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9
PSAxNikgeworICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgaXBBZGRyZXNzOworICAgICAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlwQWRkcmVzcy5hcHBlbmQobWFrZVN0cmluZyhoZXgoZGF0YVswXSA8PCA4IHwgZGF0YVsx
XSwgNCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gNykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlwQWRkcmVzcy5hcHBlbmQoIjoiKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YSArPSAyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpcEFkZHJlc3Nlcy5h
cHBlbmQoaXBBZGRyZXNzLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCitPcHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlN1bW1hcnlJbmZv
PiBjcmVhdGVTdW1tYXJ5SW5mbyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHBlbSkKK3sKKyAgICBC
SU8gYmlvIHsgcGVtIH07CisgICAgYXV0byB4NTA5ID0gYmlvLnJlYWRYNTA5KCk7CisgICAgaWYg
KCF4NTA5KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgV2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbyBzdW1tYXJ5SW5mbzsKKworICAgIHN1bW1hcnlJbmZv
LnN1YmplY3QgPSBnZXRDb21tb25OYW1lKHg1MDkuZ2V0KCkpOworICAgIGlmIChzdW1tYXJ5SW5m
by5zdWJqZWN0LmlzTnVsbCgpKQorICAgICAgICBzdW1tYXJ5SW5mby5zdWJqZWN0ID0gZ2V0U3Vi
amVjdE5hbWUoeDUwOS5nZXQoKSk7CisKKyAgICBpZiAoYXV0byBub3RCZWZvcmUgPSBjb252ZXJ0
QVNOMVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEJlZm9yZSh4NTA5LmdldCgpKSkpCisgICAg
ICAgIHN1bW1hcnlJbmZvLnZhbGlkRnJvbSA9ICpub3RCZWZvcmU7CisKKyAgICBpZiAoYXV0byBu
b3RBZnRlciA9IGNvbnZlcnRBU04xVGltZVRvU2Vjb25kcyhYNTA5X2dldDBfbm90QWZ0ZXIoeDUw
OS5nZXQoKSkpKQorICAgICAgICBzdW1tYXJ5SW5mby52YWxpZFVudGlsID0gKm5vdEFmdGVyOwor
CisgICAgZ2V0U3ViamVjdEFsdE5hbWUoeDUwOS5nZXQoKSwgc3VtbWFyeUluZm8uZG5zTmFtZXMs
IHN1bW1hcnlJbmZvLmlwQWRkcmVzc2VzKTsKKworICAgIHJldHVybiBzdW1tYXJ5SW5mbzsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL09w
ZW5TU0xIZWxwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9PcGVu
U1NMSGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTg1ZGFmNWI3MjBiYTcyYTI1YjY5MGExZGZhNDE0MGY1
MzZjODEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9PcGVuU1NMSGVscGVyLmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1ZGUg
PG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgT3BlblNTTCB7CisKK09wdGlvbmFsPFdlYkNvcmU6OkNl
cnRpZmljYXRlSW5mbz4gY3JlYXRlQ2VydGlmaWNhdGVJbmZvKFg1MDlfU1RPUkVfQ1RYKik7CitP
cHRpb25hbDxXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OlN1bW1hcnlJbmZvPiBjcmVhdGVTdW1t
YXJ5SW5mbyhjb25zdCBWZWN0b3I8dWludDhfdD4mIHBlbSk7CisKK30gLy8gbmFtZXNwYWNlIE9w
ZW5TU0wKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCAyNjRhMGFlZTJlMTc0ZjUzYTQwZTBkNWQwYTFlNWE5MjJhMThjMzBkLi42
ZWE2NGIxMmIyOTlhODUwYzFkYTEyOTJmMTZkMTA0MzRhMzYwMjMxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTktMDgtMDQgIFRha2FzaGkgS29tb3JpICA8VGFrYXNoaS5Lb21vcmlAc29ueS5j
b20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJ
bmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0
OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBsYXRmb3Jt
L3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTktMDctMjcgIEFuZHJlcyBHb256YWxl
eiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSB0aGUgYXJpYS1sYWJl
bCBhdHRyaWJ1dGUgZm9yIDx2aWRlbz4gZWxlbWVudHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDJiNzFjZDZlYjUyZTc5
MDIyOWVjYzUxMzUzNmQyNzIwNWJkOTg5NDUuLjkxNWQ3NjNhZWFhOGZkZmYwZjY3ZTE3N2UyZjBm
Yjc5ZThlM2Q1NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdr
MS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdr
MS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zMzEsMyArMzMxLDcgQEAgZmFzdC9jc3MvdHJhbnNpdGlv
bi1jb2xvci11bnNwZWNpZmllZC5odG1sIFsgU2tpcCBdCiBmYXN0L2ZpbHRlci1pbWFnZS9maWx0
ZXItaW1hZ2UtYW5pbWF0aW9uLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tb2RpZnkt
ZnJhbWV0cmVlLWluLWNhbGxiYWNrLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9tdWx0
aS1mcmFtZXMuaHRtbCBbIFNraXAgXQorCisjIFdpbkNhaXJvIHdrMSBkb2Vzbid0IHN1cHBvcnQg
aW5zcGVjdG9yIHRlc3RzLgord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxp
emVkQ2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dp
bmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggN2JlYzA2Mjk4NTkxYzgyZjhkY2E3NDY2ZTM5
ZDE3OGNlNWE0OTVjYi4uZTI5MGUwODlmNjhlMmQ0MWExMmRiOGQ0YmFmYWMyNDkyZTE3N2QyMCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRpb25zCkBA
IC0xMDE4LDggKzEwMTgsOCBAQCBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1
ZXN0LW92ZXJyaWRlbWltZXR5cGUtY29udGVudC10eXBlLWhlYWRlci5odAogaHR0cC90ZXN0cy94
bWx2aWV3ZXIgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE5MjQwNiBodHRwL3Rlc3RzL2luc3Bl
Y3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNvbm5lY3Rpb24uaHRtbCBbIFNraXAgXQot
d2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNl
LXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8xOTE0OTgg
aHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRt
bCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3
b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBQYXNzIF0KK3dlYmtpdC5v
cmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2Vy
dGlmaWNhdGUuaHRtbCBbIFBhc3MgXQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBJc3N1
ZSBjYXRlZ29yaWVzIGJlbG93IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBwbGF0Zm9ybXMgKHByaW1h
cmlseSBBcHBsZVdpbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375522</attachid>
            <date>2019-08-04 23:42:00 -0700</date>
            <delta_ts>2019-08-05 00:34:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-191498-20190805153821.patch</filename>
            <type>text/plain</type>
            <size>28806</size>
            <attacher name="Takashi Komori">takashi.komori</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDdiY2ZjNzVjNDk5YWNiZjQxMDU5ZGM3
ZWEwYmM0Mzk4NjE0MDcwM2YuLmMyNjM0MmFlMzVkMTJiMWFlMmJhZTE4NTE5OTU5NjgzNzQ4MzNj
M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMDQgIFRha2FzaGkgS29tb3JpICA8VGFr
YXNoaS5Lb21vcmlAc29ueS5jb20+CisKKyAgICAgICAgW0N1cmxdIGltcGxlbWVudCBDZXJ0aWZp
Y2F0ZUluZm86OnN1bW1hcnlJbmZvCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTE0OTgKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVu
c2VuLgorCisgICAgICAgIEZpeGVkIGZ1bmN0aW9uIHRlbXBsYXRlIGZvciBlbmNvZGluZyB2ZWN0
b3IuCisKKyAgICAgICAgKiB3dGYvcGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oOgorCiAy
MDE5LTA3LTI1ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQg
aGVscGVyIGZvciBpZ25vcmluZyBkZXByZWNhdGVkIGltcGxlbWVudGF0aW9uIHdhcm5pbmdzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKaW5kZXggMjE5ODNlNDYwNTdmOTYyNmRjMGU4NmY4MjgzYmEzYmZiNGQzZGEwOS4uOTFk
MDQyYjcwOTMwOTY3ZTUxNWZkZmY4MjA0YmQxYmUzMDdhZGQwNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDY0IEBACisyMDE5LTA4LTA0ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBpbXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1t
YXJ5SW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkxNDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICBJbXBsZW1lbnQgQ2VydGlmaWNhZUluZm86OlN1bW1hcnlJbmZvLgorICAgICAgICBUaGlzIHBh
dGNoIG1ha2VzIFdlYkluc3BlY3RvciBzaG93IHN1bW1hcnkgb2YgY2VydGlmaWNhdGVzLgorCisg
ICAgICAgIFRlc3RzOiBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3Vy
aXR5LWNlcnRpZmljYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGh0dHAvdGVzdHMvaW5zcGVjdG9y
L25ldHdvcmsvZ2V0U2VyaWFsaXplZENlcnRpZmljYXRlLmh0bWwKKworICAgICAgICAqIHBsYXRm
b3JtL0N1cmwuY21ha2U6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmlj
YXRlSW5mby5oOgorICAgICAgICAoV1RGOjpQZXJzaXN0ZW5jZTo6Q29kZXI8V2ViQ29yZTo6Q2Vy
dGlmaWNhdGVJbmZvPjo6ZW5jb2RlKToKKyAgICAgICAgKFdURjo6UGVyc2lzdGVuY2U6OkNvZGVy
PFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbz46OmRlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZvIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZvIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkN1cmxTU0xWZXJpZmllcjo6Y29sbGVjdEluZm8pOgorICAgICAgICAoV2ViQ29yZTo6Q3Vy
bFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTdGFja09m
WDUwOTo6U3RhY2tPZlg1MDkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tPZlg1
MDk6On5TdGFja09mWDUwOSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGFja09mWDUw
OTo6Y291bnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhY2tPZlg1MDk6Oml0ZW0p
OiBEZWxldGVkLgorICAgICAgICAoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hv
bGRlcjo6QklPSG9sZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6
fkJJT0hvbGRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpCSU9Ib2xkZXI6OndyaXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkJJT0hvbGRlcjo6YXNDZXJ0aWZpY2F0ZSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpwZW1EYXRhRnJvbUN0eCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9PcGVuU1NMSGVscGVyLmNwcDogQWRkZWQuCisgICAg
ICAgIChPcGVuU1NMOjpkZWxldGVyPFg1MDk+OjpvcGVyYXRvcigpKToKKyAgICAgICAgKE9wZW5T
U0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6U3RhY2tPZkdlbmVyYWxOYW1lKToKKyAgICAgICAgKE9w
ZW5TU0w6OlN0YWNrT2ZHZW5lcmFsTmFtZTo6flN0YWNrT2ZHZW5lcmFsTmFtZSk6CisgICAgICAg
IChPcGVuU1NMOjpTdGFja09mR2VuZXJhbE5hbWU6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
T3BlblNTTDo6U3RhY2tPZkdlbmVyYWxOYW1lOjpjb3VudCk6CisgICAgICAgIChPcGVuU1NMOjpT
dGFja09mR2VuZXJhbE5hbWU6Oml0ZW0pOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6
OlN0YWNrT2ZYNTA5KToKKyAgICAgICAgKE9wZW5TU0w6OlN0YWNrT2ZYNTA5Ojp+U3RhY2tPZlg1
MDkpOgorICAgICAgICAoT3BlblNTTDo6U3RhY2tPZlg1MDk6OmNvdW50KToKKyAgICAgICAgKE9w
ZW5TU0w6OlN0YWNrT2ZYNTA5OjppdGVtKToKKyAgICAgICAgKE9wZW5TU0w6OkJJTzo6QklPKToK
KyAgICAgICAgKE9wZW5TU0w6OkJJTzo6fkJJTyk6CisgICAgICAgIChPcGVuU1NMOjpCSU86Omdl
dERhdGFBc1ZlY3RvciBjb25zdCk6CisgICAgICAgIChPcGVuU1NMOjpCSU86OmdldERhdGFBc1N0
cmluZyBjb25zdCk6CisgICAgICAgIChPcGVuU1NMOjpCSU86OnJlYWRYNTA5KToKKyAgICAgICAg
KE9wZW5TU0w6OkJJTzo6Z2V0KToKKyAgICAgICAgKE9wZW5TU0w6OnBlbURhdGFGcm9tQ3R4KToK
KyAgICAgICAgKE9wZW5TU0w6OmNyZWF0ZUNlcnRpZmljYXRlSW5mbyk6CisgICAgICAgIChPcGVu
U1NMOjp0b1N0cmluZyk6CisgICAgICAgIChPcGVuU1NMOjpnZXRDb21tb25OYW1lKToKKyAgICAg
ICAgKE9wZW5TU0w6OmdldFN1YmplY3ROYW1lKToKKyAgICAgICAgKE9wZW5TU0w6OmNvbnZlcnRB
U04xVGltZVRvU2Vjb25kcyk6CisgICAgICAgIChPcGVuU1NMOjpnZXRTdWJqZWN0QWx0TmFtZSk6
CisgICAgICAgIChPcGVuU1NMOjpjcmVhdGVTdW1tYXJ5SW5mbyk6CisgICAgICAgICogcGxhdGZv
cm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mb0N1cmwuY3BwLgorCiAyMDE5
LTA3LTI4ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAg
IFtpT1NdIFRvdWNoIHJlZ2lvbnMgb3ZlcmxheSBuZWVkcyB0byBzaG93IHRvdWNoLWFjdGlvbjpu
b25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29k
ZXJzLmggYi9Tb3VyY2UvV1RGL3d0Zi9wZXJzaXN0ZW5jZS9QZXJzaXN0ZW50Q29kZXJzLmgKaW5k
ZXggYjQxNmFkODRiOTIzYmVlODA2MTc5NDU2NjYzM2U3NWJiMTAwNWJmMy4uYzdhODQyYWU0YmRl
OTk0ZTVkZWRmNmIzMjc2NjI3OTE2M2Q3ZjE0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYv
cGVyc2lzdGVuY2UvUGVyc2lzdGVudENvZGVycy5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL3BlcnNp
c3RlbmNlL1BlcnNpc3RlbnRDb2RlcnMuaApAQCAtMTUwLDcgKzE1MCw3IEBAIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gc3RydWN0IFZlY3RvckNvZGVyPHRydWUs
IFQsIGlubGluZUNhCiAgICAgc3RhdGljIHZvaWQgZW5jb2RlKEVuY29kZXImIGVuY29kZXIsIGNv
bnN0IFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKICAgICB7CiAgICAgICAgIGVu
Y29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHZlY3Rvci5zaXplKCkpOwotICAgICAgICBl
bmNvZGVyLmVuY29kZUZpeGVkTGVuZ3RoRGF0YShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4
X3QqPih2ZWN0b3IuZGF0YSgpKSwgdmVjdG9yLnNpemUoKSAqIHNpemVvZihUKSwgYWxpZ25vZihU
KSk7CisgICAgICAgIGVuY29kZXIuZW5jb2RlRml4ZWRMZW5ndGhEYXRhKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDhfdCo+KHZlY3Rvci5kYXRhKCkpLCB2ZWN0b3Iuc2l6ZSgpICogc2l6ZW9m
KFQpKTsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJvb2wgZGVjb2RlKERlY29kZXImIGRlY29k
ZXIsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9D
dXJsLmNtYWtlCmluZGV4IDAwNjRhZGYwYWM0YWRlNjkyZjcxOTVlYmY4MDgzY2E3YjQzMmM0ZGYu
LmMxNzE3ODkxZjcyZWE0YjgyYWRmMDA0YmQ3M2U5NDYzMzRkZjliM2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0N1cmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vQ3VybC5jbWFrZQpAQCAtMjQsNiArMjQsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmNwcAogICAg
IHBsYXRmb3JtL25ldHdvcmsvY3VybC9ETlNSZXNvbHZlUXVldWVDdXJsLmNwcAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9OZXR3b3JrU3RvcmFnZVNlc3Npb25DdXJsLmNwcAorICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9PcGVuU1NMSGVscGVyLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9Qcm90ZWN0aW9uU3BhY2VDdXJsLmNwcAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Q
cm94eVNlcnZlckN1cmwuY3BwCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1B1YmxpY1N1ZmZp
eEN1cmwuY3BwCkBAIC01MSwxMSArNTIsMTUgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRF
X0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxQcm94eVNl
dHRpbmdzLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFJlcXVlc3QuaAogICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9DdXJsUmVxdWVzdENsaWVudC5oCisgICAgcGxhdGZvcm0vbmV0
d29yay9jdXJsL0N1cmxSZXF1ZXN0U2NoZWR1bGVyLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvQ3VybFJlcXVlc3RTY2hlZHVsZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL25ldHdvcmsvY3Vy
bC9DdXJsUmVzb3VyY2VIYW5kbGVEZWxlZ2F0ZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJs
L0N1cmxSZXNwb25zZS5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xIYW5kbGUu
aAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaAorICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9ETlNSZXNvbHZlUXVldWVDdXJsLmgKICAgICBwbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvRG93bmxvYWRCdW5kbGUuaAorICAgIHBsYXRmb3JtL25ldHdvcmsvY3VybC9PcGVu
U1NMSGVscGVyLmgKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUHJvdGVjdGlvblNwYWNlQ3Vy
bC5oCiAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlRXJyb3IuaAogICAgIHBsYXRm
b3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZVJlcXVlc3QuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0NlcnRpZmljYXRlSW5mby5oCmluZGV4IGU1N2Yz
YmQwYTQ4OTA4ZTUzZmU1OGM5YWU0ZDRhZjU2MDFmYTBlMDAuLjJmYjZmZWNiOGQ5ZmFkMGUzNDBh
MGZmNjZlYjQwYzYxYzhiOWZjODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DZXJ0aWZpY2F0ZUluZm8uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvQ2VydGlmaWNhdGVJbmZvLmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogCiAgICAgYm9vbCBjb250YWluc05vblJvb3RTSEExU2lnbmVkQ2VydGlmaWNhdGUoKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQogCi0gICAgT3B0aW9uYWw8
U3VtbWFyeUluZm8+IHN1bW1hcnlJbmZvKCkgY29uc3QgeyBub3RJbXBsZW1lbnRlZCgpOyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CisgICAgT3B0aW9uYWw8U3VtbWFyeUluZm8+IHN1bW1hcnlJbmZv
KCkgY29uc3Q7CiAKICAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmlj
YXRlQ2hhaW4uaXNFbXB0eSgpOyB9CiAKQEAgLTcxLDE1ICs3MSwzNyBAQCBuYW1lc3BhY2UgV1RG
IHsKIG5hbWVzcGFjZSBQZXJzaXN0ZW5jZSB7CiAKIHRlbXBsYXRlPD4gc3RydWN0IENvZGVyPFdl
YkNvcmU6OkNlcnRpZmljYXRlSW5mbz4gewotICAgIHN0YXRpYyB2b2lkIGVuY29kZShFbmNvZGVy
JiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJikKKyAgICBzdGF0aWMgdm9pZCBlbmNv
ZGUoRW5jb2RlciYgZW5jb2RlciwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiBjZXJ0
aWZpY2F0ZUluZm8pCiAgICAgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBh
dXRvJiBjZXJ0aWZpY2F0ZUNoYWluID0gY2VydGlmaWNhdGVJbmZvLmNlcnRpZmljYXRlQ2hhaW4o
KTsKKworICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlSW5mby52ZXJpZmljYXRpb25FcnJv
cigpOworICAgICAgICBlbmNvZGVyIDw8IGNlcnRpZmljYXRlQ2hhaW4uc2l6ZSgpOworICAgICAg
ICBmb3IgKGF1dG8mIGNlcnRpZmljYXRlIDogY2VydGlmaWNhdGVDaGFpbikKKyAgICAgICAgICAg
IGVuY29kZXIgPDwgY2VydGlmaWNhdGU7CiAgICAgfQogCi0gICAgc3RhdGljIGJvb2wgZGVjb2Rl
KERlY29kZXImLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mKQorICAgIHN0YXRpYyBib29sIGRl
Y29kZShEZWNvZGVyJiBkZWNvZGVyLCBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8mIGNlcnRpZmlj
YXRlSW5mbykKICAgICB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaW50IHZlcmlmaWNhdGlvbkVycm9yOworICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZlcmlmaWNhdGlvbkVycm9yKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBzaXplX3QgbnVtT2ZDZXJ0ID0gMDsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShudW1PZkNlcnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGVDaGFpbiBjZXJ0aWZpY2F0ZUNo
YWluOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bU9mQ2VydDsgaSsrKSB7Cisg
ICAgICAgICAgICBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlIGNlcnRpZmlj
YXRlOworICAgICAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShjZXJ0aWZpY2F0ZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBjZXJ0aWZpY2F0ZUNoYWlu
LmFwcGVuZChXVEZNb3ZlKGNlcnRpZmljYXRlKSk7CisgICAgICAgIH0KKworICAgICAgICBjZXJ0
aWZpY2F0ZUluZm8gPSBXZWJDb3JlOjpDZXJ0aWZpY2F0ZUluZm8odmVyaWZpY2F0aW9uRXJyb3Is
IFdURk1vdmUoY2VydGlmaWNhdGVDaGFpbikpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
Q2VydGlmaWNhdGVJbmZvQ3VybC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvQ2VydGlmaWNhdGVJbmZvQ3VybC5jcHAKaW5kZXggMGE1MzM5ZjVjNTUyMzQ5NDIzOGZh
NTA5ZDI0ZmY5MTEwOGE5M2UxNy4uMjc5YjM2YzE5YzJmNjEzZGY0MTIzMGEzOGRhMGE2MWY4OGNi
Njc5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0Nl
cnRpZmljYXRlSW5mb0N1cmwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9DZXJ0aWZpY2F0ZUluZm9DdXJsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTggU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAq
IENvcHlyaWdodCAoQykgMjAxOSBTb255IEludGVyYWN0aXZlIEVudGVydGFpbm1lbnQgSW5jLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2VydGlmaWNhdGVJbmZvLmgiCiAKKyNpbmNsdWRlICJP
cGVuU1NMSGVscGVyLmgiCiAjaW5jbHVkZSA8d3RmL0Nyb3NzVGhyZWFkQ29waWVyLmg+CiAKICNp
ZiBVU0UoQ1VSTCkKQEAgLTUwLDYgKzUxLDE0IEBAIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNh
dGUgQ2VydGlmaWNhdGVJbmZvOjptYWtlQ2VydGlmaWNhdGUoY29uc3QgdWludDhfdCogYnVmCiAg
ICAgcmV0dXJuIGNlcnRpZmljYXRlOwogfQogCitPcHRpb25hbDxDZXJ0aWZpY2F0ZUluZm86OlN1
bW1hcnlJbmZvPiBDZXJ0aWZpY2F0ZUluZm86OnN1bW1hcnlJbmZvKCkgY29uc3QKK3sKKyAgICBp
ZiAoIW1fY2VydGlmaWNhdGVDaGFpbi5zaXplKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gT3BlblNTTDo6Y3JlYXRlU3VtbWFyeUluZm8obV9jZXJ0aWZpY2F0
ZUNoYWluLmF0KDApKTsKK30KKwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKaW5kZXggODA5
NGI5MzU5OTgzODJlZWY0MTNkYzRhNWVhZmIyNGU0ZWFmNzdhZS4uYmYxNGIyODE4YWI4MWYyNDE1
NGYxOWY0NjdmMDI1M2MwM2E1NDFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5jcHAKQEAgLTMwLDExICszMCw5
IEBACiAjaWYgVVNFKENVUkwpCiAjaW5jbHVkZSAiQ3VybENvbnRleHQuaCIKICNpbmNsdWRlICJD
dXJsU1NMSGFuZGxlLmgiCi0jaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHBl
bURhdGFGcm9tQ3R4KFg1MDlTdG9yZUNUWCopOwogc3RhdGljIEN1cmxTU0xWZXJpZmllcjo6U1NM
Q2VydGlmaWNhdGVGbGFncyBjb252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKHVuc2lnbmVkKTsK
IAogQ3VybFNTTFZlcmlmaWVyOjpDdXJsU1NMVmVyaWZpZXIodm9pZCogc3NsQ3R4KQpAQCAtNjEs
MTUgKzU5LDE2IEBAIEN1cmxTU0xWZXJpZmllcjo6Q3VybFNTTFZlcmlmaWVyKHZvaWQqIHNzbEN0
eCkKICAgICAgICAgU1NMX0NUWF9zZXQxX2N1cnZlc19saXN0KGN0eCwgY3VydmVzTGlzdC51dGY4
KCkuZGF0YSgpKTsKIH0KIAotdm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKFg1MDlT
dG9yZUNUWCogY3R4KQordm9pZCBDdXJsU1NMVmVyaWZpZXI6OmNvbGxlY3RJbmZvKFg1MDlfU1RP
UkVfQ1RYKiBjdHgpCiB7Ci0gICAgbV9jZXJ0aWZpY2F0ZUluZm8gPSBDZXJ0aWZpY2F0ZUluZm8g
eyBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4KSwgcGVtRGF0YUZyb21DdHgoY3R4KSB9Owor
ICAgIGlmIChhdXRvIGNlcnRpZmljYXRlSW5mbyA9IE9wZW5TU0w6OmNyZWF0ZUNlcnRpZmljYXRl
SW5mbyhjdHgpKQorICAgICAgICBtX2NlcnRpZmljYXRlSW5mbyA9IFdURk1vdmUoKmNlcnRpZmlj
YXRlSW5mbyk7CiAKICAgICBpZiAoYXV0byBlcnJvciA9IG1fY2VydGlmaWNhdGVJbmZvLnZlcmlm
aWNhdGlvbkVycm9yKCkpCiAgICAgICAgIG1fc3NsRXJyb3JzID0gc3RhdGljX2Nhc3Q8aW50Pihj
b252ZXJ0VG9TU0xDZXJ0aWZpY2F0ZUZsYWdzKGVycm9yKSk7CiB9CiAKLWludCBDdXJsU1NMVmVy
aWZpZXI6OnZlcmlmeUNhbGxiYWNrKGludCBwcmV2ZXJpZmllZCwgWDUwOVN0b3JlQ1RYKiBjdHgp
CitpbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQgcHJldmVyaWZpZWQsIFg1
MDlfU1RPUkVfQ1RYKiBjdHgpCiB7CiAgICAgYXV0byBzc2wgPSBzdGF0aWNfY2FzdDxTU0wqPihY
NTA5X1NUT1JFX0NUWF9nZXRfZXhfZGF0YShjdHgsIFNTTF9nZXRfZXhfZGF0YV9YNTA5X1NUT1JF
X0NUWF9pZHgoKSkpOwogICAgIGF1dG8gc3NsQ3R4ID0gU1NMX2dldF9TU0xfQ1RYKHNzbCk7CkBA
IC04MCw3NSArNzksNiBAQCBpbnQgQ3VybFNTTFZlcmlmaWVyOjp2ZXJpZnlDYWxsYmFjayhpbnQg
cHJldmVyaWZpZWQsIFg1MDlTdG9yZUNUWCogY3R4KQogICAgIHJldHVybiBwcmV2ZXJpZmllZDsK
IH0KIAotY2xhc3MgU3RhY2tPZlg1MDkgewotcHVibGljOgotICAgIGV4cGxpY2l0IFN0YWNrT2ZY
NTA5KFg1MDlTdG9yZUNUWCogY3R4KQotICAgICAgICA6IG1fY2VydHMgeyBYNTA5X1NUT1JFX0NU
WF9nZXQxX2NoYWluKGN0eCkgfQotICAgIHsKLSAgICB9Ci0KLSAgICB+U3RhY2tPZlg1MDkoKQot
ICAgIHsKLSAgICAgICAgaWYgKG1fY2VydHMpCi0gICAgICAgICAgICBza19YNTA5X3BvcF9mcmVl
KG1fY2VydHMsIFg1MDlfZnJlZSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgY291bnQoKSB7IHJl
dHVybiBza19YNTA5X251bShtX2NlcnRzKTsgfQotICAgIFg1MDkqIGl0ZW0odW5zaWduZWQgaSkg
eyByZXR1cm4gc2tfWDUwOV92YWx1ZShtX2NlcnRzLCBpKTsgfQotCi1wcml2YXRlOgotICAgIFNU
QUNLX09GKFg1MDkpKiBtX2NlcnRzIHsgbnVsbHB0ciB9OwotfTsKLQotY2xhc3MgQklPSG9sZGVy
IHsKLXB1YmxpYzoKLSAgICBCSU9Ib2xkZXIoKQotICAgICAgICA6IG1fYmlvIHsgQklPX25ldyhC
SU9fc19tZW0oKSkgfQotICAgIHsKLSAgICB9Ci0KLSAgICB+QklPSG9sZGVyKCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX2JpbykKLSAgICAgICAgICAgIEJJT19mcmVlKG1fYmlvKTsKLSAgICB9Ci0K
LSAgICBib29sIHdyaXRlKFg1MDkqIGRhdGEpIHsgcmV0dXJuIFBFTV93cml0ZV9iaW9fWDUwOSht
X2JpbywgZGF0YSk7IH0KLSAgICBDZXJ0aWZpY2F0ZUluZm86OkNlcnRpZmljYXRlIGFzQ2VydGlm
aWNhdGUoKQotICAgIHsKLSAgICAgICAgdWludDhfdCogZGF0YTsKLSAgICAgICAgbG9uZyBsZW5n
dGggPSBCSU9fZ2V0X21lbV9kYXRhKG1fYmlvLCAmZGF0YSk7Ci0gICAgICAgIGlmIChsZW5ndGgg
PCAwKQotICAgICAgICAgICAgcmV0dXJuIENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGUoKTsK
LQotICAgICAgICBhdXRvIGNlcnQgPSBDZXJ0aWZpY2F0ZUluZm86Om1ha2VDZXJ0aWZpY2F0ZShk
YXRhLCBsZW5ndGgpOwotICAgICAgICByZXR1cm4gY2VydDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0g
ICAgQklPKiBtX2JpbyB7IG51bGxwdHIgfTsKLX07Ci0KLXN0YXRpYyBWZWN0b3I8Q2VydGlmaWNh
dGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0YUZyb21DdHgoWDUwOVN0b3JlQ1RYKiBjdHgpCi17
Ci0gICAgVmVjdG9yPENlcnRpZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHJlc3VsdDsKLSAgICBT
dGFja09mWDUwOSBjZXJ0cyB7IGN0eCB9OwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2VydHMu
Y291bnQoKTsgaSsrKSB7Ci0gICAgICAgIEJJT0hvbGRlciBiaW87Ci0KLSAgICAgICAgaWYgKCFi
aW8ud3JpdGUoY2VydHMuaXRlbShpKSkpCi0gICAgICAgICAgICByZXR1cm4gVmVjdG9yPENlcnRp
ZmljYXRlSW5mbzo6Q2VydGlmaWNhdGU+IHsgfTsKLQotICAgICAgICBhdXRvIGNlcnRpZmljYXRl
ID0gYmlvLmFzQ2VydGlmaWNhdGUoKTsKLSAgICAgICAgaWYgKGNlcnRpZmljYXRlLmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJldHVybiBWZWN0b3I8Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0
ZT4geyB9OwotCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShjZXJ0aWZpY2F0ZSkpOwot
ICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHN0YXRpYyBDdXJsU1NMVmVyaWZpZXI6
OlNTTENlcnRpZmljYXRlRmxhZ3MgY29udmVydFRvU1NMQ2VydGlmaWNhdGVGbGFncyh1bnNpZ25l
ZCBzc2xFcnJvcikKIHsKICAgICBzd2l0Y2ggKHNzbEVycm9yKSB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybFNTTFZlcmlmaWVyLmgKaW5kZXgg
OWUzYjgwMDFiNzNhMWI5N2Y3ODQyNDkxYzQxZTA5NGQzY2VkODJmNS4uNDUyZjcwNWY5Y2I4ZmUy
OTE5Y2YyODU2ZGVlOGQwYWQxYTgxNGYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL0N1cmxTU0xWZXJpZmllci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsU1NMVmVyaWZpZXIuaApAQCAtMjcsMTYgKzI3LDEy
IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1
ZGUgIk9wZW5TU0xIZWxwZXIuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotc3RydWN0IHg1MDlfc3RvcmVfY3R4X3N0Owot
dHlwZWRlZiBzdHJ1Y3QgeDUwOV9zdG9yZV9jdHhfc3QgWDUwOVN0b3JlQ1RYOwotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIEN1cmxIYW5kbGU7Ci0KIGNsYXNzIEN1cmxTU0xWZXJpZmll
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ3VybFNTTFZlcmlmaWVyKTsKIHB1YmxpYzoK
QEAgLTU2LDEyICs1MiwxMSBAQCBwdWJsaWM6CiAgICAgY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBj
ZXJ0aWZpY2F0ZUluZm8oKSBjb25zdCB7IHJldHVybiBtX2NlcnRpZmljYXRlSW5mbzsgfQogCiBw
cml2YXRlOgotICAgIHN0YXRpYyBpbnQgdmVyaWZ5Q2FsbGJhY2soaW50LCBYNTA5U3RvcmVDVFgq
KTsKKyAgICBzdGF0aWMgaW50IHZlcmlmeUNhbGxiYWNrKGludCwgWDUwOV9TVE9SRV9DVFgqKTsK
KyAgICB2b2lkIGNvbGxlY3RJbmZvKFg1MDlfU1RPUkVfQ1RYKik7CiAKICAgICBpbnQgbV9zc2xF
cnJvcnMgeyAwIH07CiAgICAgQ2VydGlmaWNhdGVJbmZvIG1fY2VydGlmaWNhdGVJbmZvOwotCi0g
ICAgdm9pZCBjb2xsZWN0SW5mbyhYNTA5U3RvcmVDVFgqKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9PcGVuU1NMSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9PcGVuU1NMSGVscGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWZjNDgzYzBlZTQwNzJiN2E5YTBmNDVj
MDU5NjliYWUwNTEzNzk4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9jdXJsL09wZW5TU0xIZWxwZXIuY3BwCkBAIC0wLDAgKzEsMzI2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE5IFNvbnkgSW50ZXJhY3RpdmUgRW50ZXJ0YWlubWVudCBJbmMu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJPcGVuU1NMSGVscGVy
LmgiCisKKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPHd0Zi9EYXRlTWF0
aC5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2Vjb25kcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIE9wZW5T
U0wgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IGRlbGV0ZXI7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBkZWxldGVyPFg1MDk+IHsKKyAgICB2b2lkIG9wZXJhdG9yKCkoWDUwOSogeDUwOSkKKyAg
ICB7CisgICAgICAgIGlmICh4NTA5KQorICAgICAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAg
IH0KK307CisKK2NsYXNzIFN0YWNrT2ZHZW5lcmFsTmFtZSB7CitwdWJsaWM6CisgICAgU3RhY2tP
ZkdlbmVyYWxOYW1lKGNvbnN0IFg1MDkqIHg1MDksIGludCBuaWQpCisgICAgICAgIDogbV9uYW1l
cyB7IHN0YXRpY19jYXN0PFNUQUNLX09GKEdFTkVSQUxfTkFNRSkqPihYNTA5X2dldF9leHRfZDJp
KHg1MDksIG5pZCwgbnVsbHB0ciwgbnVsbHB0cikpIH0KKyAgICB7CisgICAgfQorCisgICAgflN0
YWNrT2ZHZW5lcmFsTmFtZSgpCisgICAgeworICAgICAgICBpZiAobV9uYW1lcykKKyAgICAgICAg
ICAgIHNrX0dFTkVSQUxfTkFNRV9wb3BfZnJlZShtX25hbWVzLCBHRU5FUkFMX05BTUVfZnJlZSk7
CisgICAgfQorCisgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIG1fbmFtZXM7IH0KKworICAg
IGludCBjb3VudCgpIHsgcmV0dXJuIHNrX0dFTkVSQUxfTkFNRV9udW0obV9uYW1lcyk7IH0KKyAg
ICBHRU5FUkFMX05BTUUqIGl0ZW0oaW50IGkpIHsgcmV0dXJuIHNrX0dFTkVSQUxfTkFNRV92YWx1
ZShtX25hbWVzLCBpKTsgfQorCitwcml2YXRlOgorICAgIFNUQUNLX09GKEdFTkVSQUxfTkFNRSkq
IG1fbmFtZXMgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBTdGFja09mWDUwOSB7CitwdWJsaWM6
CisgICAgU3RhY2tPZlg1MDkoWDUwOV9TVE9SRV9DVFgqIGN0eCkKKyAgICAgICAgOiBtX2NlcnRz
IHsgWDUwOV9TVE9SRV9DVFhfZ2V0MV9jaGFpbihjdHgpIH0KKyAgICB7CisgICAgfQorCisgICAg
flN0YWNrT2ZYNTA5KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NlcnRzKQorICAgICAgICAgICAg
c2tfWDUwOV9wb3BfZnJlZShtX2NlcnRzLCBYNTA5X2ZyZWUpOworICAgIH0KKworICAgIGludCBj
b3VudCgpIHsgcmV0dXJuIHNrX1g1MDlfbnVtKG1fY2VydHMpOyB9CisgICAgWDUwOSogaXRlbShp
bnQgaSkgeyByZXR1cm4gc2tfWDUwOV92YWx1ZShtX2NlcnRzLCBpKTsgfQorCitwcml2YXRlOgor
ICAgIFNUQUNLX09GKFg1MDkpKiBtX2NlcnRzIHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgQklP
IHsKK3B1YmxpYzoKKyAgICBCSU8oKQorICAgICAgICA6IG1fYmlvIHsgOjpCSU9fbmV3KDo6QklP
X3NfbWVtKCkpIH0KKyAgICB7CisgICAgfQorCisgICAgQklPKFg1MDkqIGRhdGEpCisgICAgICAg
IDogbV9iaW8geyA6OkJJT19uZXcoOjpCSU9fc19tZW0oKSkgfQorICAgIHsKKyAgICAgICAgOjpQ
RU1fd3JpdGVfYmlvX1g1MDkobV9iaW8sIGRhdGEpOworICAgIH0KKworICAgIEJJTyhjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEpCisgICAgICAgIDogbV9iaW8geyA6OkJJT19uZXdfbWVtX2J1
ZihkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpIH0KKyAgICB7CisgICAgfQorCisgICAgfkJJTygp
CisgICAgeworICAgICAgICBpZiAobV9iaW8pCisgICAgICAgICAgICA6OkJJT19mcmVlKG1fYmlv
KTsKKyAgICB9CisKKyAgICBPcHRpb25hbDxWZWN0b3I8dWludDhfdD4+IGdldERhdGFBc1ZlY3Rv
cigpIGNvbnN0CisgICAgeworICAgICAgICB1aW50OF90KiBkYXRhIHsgbnVsbHB0ciB9OworICAg
ICAgICBhdXRvIGxlbmd0aCA9IDo6QklPX2dldF9tZW1fZGF0YShtX2JpbywgJmRhdGEpOworICAg
ICAgICBpZiAobGVuZ3RoIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisK
KyAgICAgICAgVmVjdG9yPHVpbnQ4X3Q+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChk
YXRhLCBsZW5ndGgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFN0cmlu
ZyBnZXREYXRhQXNTdHJpbmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgdWludDhfdCogZGF0YSB7
IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byBsZW5ndGggPSA6OkJJT19nZXRfbWVtX2RhdGEobV9i
aW8sICZkYXRhKTsKKyAgICAgICAgaWYgKGxlbmd0aCA8IDApCisgICAgICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CisKKyAgICAgICAgcmV0dXJuIFN0cmluZyhkYXRhLCBsZW5ndGgpOworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxYNTA5LCBkZWxldGVyPFg1MDk+PiByZWFkWDUwOSgpCisg
ICAgeworICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFg1MDksIGRlbGV0ZXI8WDUwOT4+
KDo6UEVNX3JlYWRfYmlvX1g1MDkobV9iaW8sIG51bGxwdHIsIDAsIG51bGxwdHIpKTsKKyAgICB9
CisKKyAgICA6OkJJTyogZ2V0KCkgeyByZXR1cm4gbV9iaW87IH0KKworcHJpdmF0ZToKKyAgICA6
OkJJTyogbV9iaW8geyBudWxscHRyIH07Cit9OworCisKK3N0YXRpYyBWZWN0b3I8V2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZpY2F0ZT4gcGVtRGF0YUZyb21DdHgoWDUwOV9TVE9SRV9D
VFgqIGN0eCkKK3sKKyAgICBWZWN0b3I8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpDZXJ0aWZp
Y2F0ZT4gcmVzdWx0OworICAgIFN0YWNrT2ZYNTA5IGNlcnRzIHsgY3R4IH07CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNlcnRzLmNvdW50KCk7IGkrKykgeworICAgICAgICBCSU8gYmlvKGNl
cnRzLml0ZW0oaSkpOworCisgICAgICAgIGlmIChhdXRvIGNlcnRpZmljYXRlID0gYmlvLmdldERh
dGFBc1ZlY3RvcigpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3ZlKCpjZXJ0aWZp
Y2F0ZSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK09wdGlvbmFsPFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
bz4gY3JlYXRlQ2VydGlmaWNhdGVJbmZvKFg1MDlfU1RPUkVfQ1RYKiBjdHgpCit7CisgICAgaWYg
KCFjdHgpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gV2ViQ29y
ZTo6Q2VydGlmaWNhdGVJbmZvKFg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcihjdHgpLCBwZW1EYXRh
RnJvbUN0eChjdHgpKTsKK30KKworc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBBU04xX1NU
UklORyogbmFtZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyKiBkYXRhIHsgbnVsbHB0ciB9OworICAg
IGF1dG8gbGVuZ3RoID0gQVNOMV9TVFJJTkdfdG9fVVRGOCgmZGF0YSwgbmFtZSk7CisgICAgaWYg
KGxlbmd0aCA8PSAwKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJpbmcgcmVz
dWx0KGRhdGEsIGxlbmd0aCk7CisgICAgT1BFTlNTTF9mcmVlKGRhdGEpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0Q29tbW9uTmFtZShjb25zdCBYNTA5KiB4NTA5
KQoreworICAgIGF1dG8gc3ViamVjdE5hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUoeDUwOSk7
CisgICAgaWYgKCFzdWJqZWN0TmFtZSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAg
YXV0byBpbmRleCA9IFg1MDlfTkFNRV9nZXRfaW5kZXhfYnlfTklEKHN1YmplY3ROYW1lLCBOSURf
Y29tbW9uTmFtZSwgLTEpOworICAgIGlmIChpbmRleCA8IDApCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIGF1dG8gY29tbW9uTmFtZUVudHJ5ID0gWDUwOV9OQU1FX2dldF9lbnRyeShz
dWJqZWN0TmFtZSwgaW5kZXgpOworICAgIGlmICghY29tbW9uTmFtZUVudHJ5KQorICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CisKKyAgICBhdXRvIGNvbW1vbk5hbWVFbnRyeURhdGEgPSBYNTA5X05B
TUVfRU5UUllfZ2V0X2RhdGEoY29tbW9uTmFtZUVudHJ5KTsKKyAgICBpZiAoIWNvbW1vbk5hbWVF
bnRyeURhdGEpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiB0b1N0cmlu
Zyhjb21tb25OYW1lRW50cnlEYXRhKTsKK30KKworc3RhdGljIFN0cmluZyBnZXRTdWJqZWN0TmFt
ZShjb25zdCBYNTA5KiB4NTA5KQoreworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGZs
YWdzID0gKEFTTjFfU1RSRkxHU19SRkMyMjUzIHwgQVNOMV9TVFJGTEdTX0VTQ19RVU9URSB8IFhO
X0ZMQUdfU0VQX0NQTFVTX1NQQyB8IFhOX0ZMQUdfRE5fUkVWIHwgWE5fRkxBR19GTl9OT05FIHwg
WE5fRkxBR19TUENfRVEpICYgfkFTTjFfU1RSRkxHU19FU0NfTVNCOworCisgICAgYXV0byBzdWJq
ZWN0TmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh4NTA5KTsKKyAgICBpZiAoIXN1YmplY3RO
YW1lKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBCSU8gYmlvOworICAgIGF1dG8g
bGVuZ3RoID0gWDUwOV9OQU1FX3ByaW50X2V4KGJpby5nZXQoKSwgc3ViamVjdE5hbWUsIDAsIGZs
YWdzKTsKKyAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHJldHVybiBiaW8uZ2V0RGF0YUFzU3RyaW5nKCk7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxT
ZWNvbmRzPiBjb252ZXJ0QVNOMVRpbWVUb1NlY29uZHMoY29uc3QgQVNOMV9USU1FKiBhbnMxVGlt
ZSkKK3sKKyAgICBpZiAoIWFuczFUaW1lKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CisgICAgaWYgKChhbnMxVGltZS0+dHlwZSAhPSBWX0FTTjFfVVRDVElNRSAmJiBhbnMxVGltZS0+
dHlwZSAhPSBWX0FTTjFfR0VORVJBTElaRURUSU1FKSB8fCAhYW5zMVRpbWUtPmRhdGEpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICAvLyBVVENUSU1FICAgICAgICAgOiBZWW1t
ZGRISE1NW1NTXQorICAgIC8vIEdFTkVSQUxJWkVEVElNRSA6IFlZWVltbWRkSEhNTVtTU10KKyAg
ICBpbnQgZGlnaXRMZW5ndGggPSBhbnMxVGltZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSA/IDEw
IDogMTI7CisgICAgaWYgKGFuczFUaW1lLT5sZW5ndGggPCBkaWdpdExlbmd0aCkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGF1dG8gZGF0YSA9IGFuczFUaW1lLT5kYXRhOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGlnaXRMZW5ndGg7IGkrKykgeworICAgICAgICBpZiAo
IWlzQVNDSUlEaWdpdChkYXRhW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgfQorCisgICAgc3RydWN0IHRtIHRpbWUgeyB9OworCisgICAgaWYgKGFuczFUaW1lLT50
eXBlID09IFZfQVNOMV9VVENUSU1FKSB7CisgICAgICAgIHRpbWUudG1feWVhciA9IChkYXRhWzBd
IC0gJzAnKSAqIDEwICsgKGRhdGFbMV0gLSAnMCcpOworICAgICAgICBpZiAodGltZS50bV95ZWFy
IDwgNTApCisgICAgICAgICAgICB0aW1lLnRtX3llYXIgKz0gMTAwOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRpbWUudG1feWVhciA9IChkYXRhWzBdIC0gJzAnKSAqIDEwMDAgKyAoZGF0YVsxXSAt
ICcwJykgKiAxMDAgKyAoZGF0YVsyXSAtICcwJykgKiAxMCArIChkYXRhWzNdIC0gJzAnKTsKKyAg
ICAgICAgdGltZS50bV95ZWFyIC09IDE5MDA7CisgICAgfQorCisgICAgZGF0YSArPSBhbnMxVGlt
ZS0+dHlwZSA9PSBWX0FTTjFfVVRDVElNRSA/IDIgOiA0OworCisgICAgdGltZS50bV9tb24gPSAo
ZGF0YVswXSAtICcwJykgKiAxMCArIChkYXRhWzFdIC0gJzAnKSAtIDE7CisgICAgaWYgKHRpbWUu
dG1fbW9uIDwgMCB8fCB0aW1lLnRtX21vbiA+IDExKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIHRpbWUudG1fbWRheSA9IChkYXRhWzJdIC0gJzAnKSAqIDEwICsgKGRhdGFbM10g
LSAnMCcpOworICAgIHRpbWUudG1faG91ciA9IChkYXRhWzRdIC0gJzAnKSAqIDEwICsgKGRhdGFb
NV0gLSAnMCcpOworICAgIHRpbWUudG1fbWluID0gKGRhdGFbNl0gLSAnMCcpICogMTAgKyAoZGF0
YVs3XSAtICcwJyk7CisKKyAgICBpZiAoKGFuczFUaW1lLT5sZW5ndGggPj0gZGlnaXRMZW5ndGgg
KyAyKSAmJiBpc0FTQ0lJRGlnaXQoZGF0YVs4XSkgJiYgaXNBU0NJSURpZ2l0KGRhdGFbOV0pKQor
ICAgICAgICB0aW1lLnRtX3NlYyA9IChkYXRhWzhdIC0gJzAnKSAqIDEwICsgKGRhdGFbOV0gLSAn
MCcpOworCisgICAgYXV0byBnbXRUaW1lID0gbWt0aW1lKCZ0aW1lKTsKKyAgICBhdXRvIGxvY2Fs
VGltZU9mZnNldCA9IGNhbGN1bGF0ZUxvY2FsVGltZU9mZnNldChnbXRUaW1lICogMTAwMC4wKTsK
KyAgICByZXR1cm4gU2Vjb25kcyhnbXRUaW1lICsgKGxvY2FsVGltZU9mZnNldC5vZmZzZXQgLyAx
MDAwLjApKTsKK30KKworc3RhdGljIHZvaWQgZ2V0U3ViamVjdEFsdE5hbWUoY29uc3QgWDUwOSog
eDUwOSwgVmVjdG9yPFN0cmluZz4mIGRuc05hbWVzLCBWZWN0b3I8U3RyaW5nPiYgaXBBZGRyZXNz
ZXMpCit7CisgICAgU3RhY2tPZkdlbmVyYWxOYW1lIHNhbkxpc3QoeDUwOSwgTklEX3N1YmplY3Rf
YWx0X25hbWUpOworICAgIGlmICghc2FuTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0
byBudW0gPSBzYW5MaXN0LmNvdW50KCk7CisgICAgZm9yIChhdXRvIGkgPSAwOyBpIDwgbnVtOyBp
KyspIHsKKyAgICAgICAgYXV0byogdmFsdWUgPSBzYW5MaXN0Lml0ZW0oaSk7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAodmFsdWUtPnR5
cGUgPT0gR0VOX0ROUykgeworICAgICAgICAgICAgYXV0byBkbnNOYW1lID0gdG9TdHJpbmcodmFs
dWUtPmQuZE5TTmFtZSk7CisgICAgICAgICAgICBpZiAoIWRuc05hbWUuaXNOdWxsKCkpCisgICAg
ICAgICAgICAgICAgZG5zTmFtZXMuYXBwZW5kKFdURk1vdmUoZG5zTmFtZSkpOworICAgICAgICB9
IGVsc2UgaWYgKHZhbHVlLT50eXBlID09IEdFTl9JUEFERCkgeworICAgICAgICAgICAgYXV0byBk
YXRhID0gdmFsdWUtPmQuaVBBZGRyZXNzLT5kYXRhOworICAgICAgICAgICAgaWYgKHZhbHVlLT5k
LmlQQWRkcmVzcy0+bGVuZ3RoID09IDQpCisgICAgICAgICAgICAgICAgaXBBZGRyZXNzZXMuYXBw
ZW5kKG1ha2VTdHJpbmcoZGF0YVswXSwgIi4iLCBkYXRhWzFdLCAiLiIsIGRhdGFbMl0sICIuIiwg
ZGF0YVszXSkpOworICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUtPmQuaVBBZGRyZXNzLT5sZW5n
dGggPT0gMTYpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGlwQWRkcmVzczsKKyAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICAgICAg
ICAgICAgICBpcEFkZHJlc3MuYXBwZW5kKG1ha2VTdHJpbmcoaGV4KGRhdGFbMF0gPDwgOCB8IGRh
dGFbMV0sIDQpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpICE9IDcpCisgICAgICAgICAg
ICAgICAgICAgICAgICBpcEFkZHJlc3MuYXBwZW5kKCI6Iik7CisgICAgICAgICAgICAgICAgICAg
IGRhdGEgKz0gMjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXBBZGRyZXNz
ZXMuYXBwZW5kKGlwQWRkcmVzcy50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5
SW5mbz4gY3JlYXRlU3VtbWFyeUluZm8oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZW0pCit7Cisg
ICAgQklPIGJpbyB7IHBlbSB9OworICAgIGF1dG8geDUwOSA9IGJpby5yZWFkWDUwOSgpOworICAg
IGlmICgheDUwOSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIFdlYkNvcmU6
OkNlcnRpZmljYXRlSW5mbzo6U3VtbWFyeUluZm8gc3VtbWFyeUluZm87CisKKyAgICBzdW1tYXJ5
SW5mby5zdWJqZWN0ID0gZ2V0Q29tbW9uTmFtZSh4NTA5LmdldCgpKTsKKyAgICBpZiAoc3VtbWFy
eUluZm8uc3ViamVjdC5pc051bGwoKSkKKyAgICAgICAgc3VtbWFyeUluZm8uc3ViamVjdCA9IGdl
dFN1YmplY3ROYW1lKHg1MDkuZ2V0KCkpOworCisgICAgaWYgKGF1dG8gbm90QmVmb3JlID0gY29u
dmVydEFTTjFUaW1lVG9TZWNvbmRzKFg1MDlfZ2V0MF9ub3RCZWZvcmUoeDUwOS5nZXQoKSkpKQor
ICAgICAgICBzdW1tYXJ5SW5mby52YWxpZEZyb20gPSAqbm90QmVmb3JlOworCisgICAgaWYgKGF1
dG8gbm90QWZ0ZXIgPSBjb252ZXJ0QVNOMVRpbWVUb1NlY29uZHMoWDUwOV9nZXQwX25vdEFmdGVy
KHg1MDkuZ2V0KCkpKSkKKyAgICAgICAgc3VtbWFyeUluZm8udmFsaWRVbnRpbCA9ICpub3RBZnRl
cjsKKworICAgIGdldFN1YmplY3RBbHROYW1lKHg1MDkuZ2V0KCksIHN1bW1hcnlJbmZvLmRuc05h
bWVzLCBzdW1tYXJ5SW5mby5pcEFkZHJlc3Nlcyk7CisKKyAgICByZXR1cm4gc3VtbWFyeUluZm87
Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9PcGVuU1NMSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
T3BlblNTTEhlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4NWRhZjViNzIwYmE3MmEyNWI2OTBhMWRmYTQx
NDBmNTM2YzgxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2N1cmwvT3BlblNTTEhlbHBlci5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTkgU29ueSBJbnRlcmFjdGl2ZSBFbnRlcnRhaW5tZW50IEluYy4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDZXJ0aWZpY2F0ZUluZm8uaCIKKyNpbmNs
dWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIE9wZW5TU0wgeworCitPcHRpb25hbDxXZWJDb3Jl
OjpDZXJ0aWZpY2F0ZUluZm8+IGNyZWF0ZUNlcnRpZmljYXRlSW5mbyhYNTA5X1NUT1JFX0NUWCop
OworT3B0aW9uYWw8V2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvOjpTdW1tYXJ5SW5mbz4gY3JlYXRl
U3VtbWFyeUluZm8oY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBwZW0pOworCit9IC8vIG5hbWVzcGFj
ZSBPcGVuU1NMCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggMjY0YTBhZWUyZTE3NGY1M2E0MGUwZDVkMGExZTVhOTIyYTE4YzMw
ZC4uYzU1ZDhhZjc1Nzg5MjliY2E1ZTI4NGJiZTBjMWU4ZDE4NDg1Y2Q4YiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDE5LTA4LTA0ICBUYWthc2hpIEtvbW9yaSAgPFRha2FzaGkuS29tb3JpQHNv
bnkuY29tPgorCisgICAgICAgIFtDdXJsXSBpbXBsZW1lbnQgQ2VydGlmaWNhdGVJbmZvOjpzdW1t
YXJ5SW5mbworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTkxNDk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAg
ICAqIHBsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zOgorICAgICAgICAqIHBs
YXRmb3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnM6CisKIDIwMTktMDctMjcgIEFuZHJlcyBH
b256YWxleiAgPGFuZHJlc2dfMjJAYXBwbGUuY29tPgogCiAgICAgICAgIEV4cG9zZSB0aGUgYXJp
YS1sYWJlbCBhdHRyaWJ1dGUgZm9yIDx2aWRlbz4gZWxlbWVudHMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby13azEvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3dpbmNhaXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDJiNzFjZDZl
YjUyZTc5MDIyOWVjYzUxMzUzNmQyNzIwNWJkOTg5NDUuLjkxNWQ3NjNhZWFhOGZkZmYwZjY3ZTE3
N2UyZjBmYjc5ZThlM2Q1NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3dpbmNh
aXJvLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC0zMzEsMyArMzMxLDcgQEAgZmFzdC9jc3MvdHJh
bnNpdGlvbi1jb2xvci11bnNwZWNpZmllZC5odG1sIFsgU2tpcCBdCiBmYXN0L2ZpbHRlci1pbWFn
ZS9maWx0ZXItaW1hZ2UtYW5pbWF0aW9uLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZlci9t
b2RpZnktZnJhbWV0cmVlLWluLWNhbGxiYWNrLmh0bWwgWyBTa2lwIF0KIHJlc2l6ZS1vYnNlcnZl
ci9tdWx0aS1mcmFtZXMuaHRtbCBbIFNraXAgXQorCisjIFdpbkNhaXJvIHdrMSBkb2Vzbid0IHN1
cHBvcnQgaW5zcGVjdG9yIHRlc3RzLgord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2lu
c3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lw
IF0KK3dlYmtpdC5vcmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRT
ZXJpYWxpemVkQ2VydGlmaWNhdGUuaHRtbCBbIFNraXAgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3dpbmNhaXJvL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggN2JlYzA2Mjk4NTkxYzgyZjhkY2E3
NDY2ZTM5ZDE3OGNlNWE0OTVjYi4uZTI5MGUwODlmNjhlMmQ0MWExMmRiOGQ0YmFmYWMyNDkyZTE3
N2QyMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vd2luY2Fpcm8vVGVzdEV4cGVj
dGF0aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS93aW5jYWlyby9UZXN0RXhwZWN0YXRp
b25zCkBAIC0xMDE4LDggKzEwMTgsOCBAQCBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0
dHByZXF1ZXN0LW92ZXJyaWRlbWltZXR5cGUtY29udGVudC10eXBlLWhlYWRlci5odAogaHR0cC90
ZXN0cy94bWx2aWV3ZXIgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzE5MjQwNiBodHRwL3Rlc3Rz
L2luc3BlY3Rvci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNvbm5lY3Rpb24uaHRtbCBbIFNr
aXAgXQotd2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rvci9uZXR3b3JrL3Jl
c291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBTa2lwIF0KLXdlYmtpdC5vcmcvYi8x
OTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxpemVkQ2VydGlmaWNh
dGUuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzE5MTQ5OCBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9uZXR3b3JrL3Jlc291cmNlLXNlY3VyaXR5LWNlcnRpZmljYXRlLmh0bWwgWyBQYXNzIF0KK3dl
YmtpdC5vcmcvYi8xOTE0OTggaHR0cC90ZXN0cy9pbnNwZWN0b3IvbmV0d29yay9nZXRTZXJpYWxp
emVkQ2VydGlmaWNhdGUuaHRtbCBbIFBhc3MgXQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwog
IyBJc3N1ZSBjYXRlZ29yaWVzIGJlbG93IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBwbGF0Zm9ybXMg
KHByaW1hcmlseSBBcHBsZVdpbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>