<?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>128741</bug_id>
          
          <creation_ts>2014-02-13 06:47:13 -0800</creation_ts>
          <short_desc>[curl] Basic SocketStream implementation for libcurl backend</short_desc>
          <delta_ts>2022-03-01 02:26:56 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mátyás Mustoha">mmatyas</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>basuke</cc>
    
    <cc>commit-queue</cc>
    
    <cc>galpeter</cc>
    
    <cc>peavo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>980285</commentid>
    <comment_count>0</comment_count>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-02-13 06:47:13 -0800</bug_when>
    <thetext>Add SocketStream implementation for libcurl backend, using POSIX function calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980289</commentid>
    <comment_count>1</comment_count>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-02-13 06:57:34 -0800</bug_when>
    <thetext>This patch is working on the Nix port, but</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980292</commentid>
    <comment_count>2</comment_count>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-02-13 07:18:05 -0800</bug_when>
    <thetext>This patch works fine on Nix, but I couldn&apos;t try it out on EFL.
Could you test it, peavo?

For example, on http://websocketstest.com/ or on http://www.websocket.org/echo.html it should work fine, except the SSL/TSL support, which might not behave correctly yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980696</commentid>
    <comment_count>3</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-02-14 01:37:44 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; This patch works fine on Nix, but I couldn&apos;t try it out on EFL.
&gt; Could you test it, peavo?
&gt; 
&gt; For example, on http://websocketstest.com/ or on http://www.websocket.org/echo.html it should work fine, except the SSL/TSL support, which might not behave correctly yet.

I will test it, but I cannot find the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980722</commentid>
    <comment_count>4</comment_count>
      <attachid>224191</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-02-14 03:05:47 -0800</bug_when>
    <thetext>Created attachment 224191
Proposed patch

Sorry, somehow I forgot to upload it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980725</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-14 03:07:28 -0800</bug_when>
    <thetext>Attachment 224191 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:86:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:88:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:92:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:132:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:76:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:79:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:98:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:105:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:119:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 11 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>980770</commentid>
    <comment_count>6</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-02-14 05:51:12 -0800</bug_when>
    <thetext>There seems to be some include errors compiling WinCairo:

1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(43): fatal error C1083: Cannot open include file: &apos;arpa/inet.h&apos;: No such file or directory

The same goes for &lt;netdb.h&gt;, and &lt;sys/socket.h&gt;

1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(34): fatal error C1083: Cannot open include file: &apos;sys/socket.h&apos;: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>981340</commentid>
    <comment_count>7</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2014-02-16 23:35:01 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; There seems to be some include errors compiling WinCairo:
&gt; 
&gt; 1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(43): fatal error C1083: Cannot open include file: &apos;arpa/inet.h&apos;: No such file or directory
&gt; 
&gt; The same goes for &lt;netdb.h&gt;, and &lt;sys/socket.h&gt;
&gt; 
&gt; 1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(34): fatal error C1083: Cannot open include file: &apos;sys/socket.h&apos;: No such file or directory

maybe we need the windows.h and winsock2.h includes on windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983917</commentid>
    <comment_count>8</comment_count>
      <attachid>225069</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-02-24 08:33:07 -0800</bug_when>
    <thetext>Created attachment 225069
Proposed patch 2

I&apos;ve added the Windows headers, this might fix the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983919</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-02-24 08:35:34 -0800</bug_when>
    <thetext>Attachment 225069 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.h:37:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:91:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:93:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:97:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:137:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:82:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:104:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:111:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:125:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:125:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 11 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983933</commentid>
    <comment_count>10</comment_count>
      <attachid>225069</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-02-24 09:44:41 -0800</bug_when>
    <thetext>Comment on attachment 225069
Proposed patch 2

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

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:3
&gt; + * Copyright (C) 2014 University of Szeged
&gt; + * All rights reserved.

Just a nit: Please use same copyright in all files - Copyright (C) 2014 University of Szeged. All rights reserved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986770</commentid>
    <comment_count>11</comment_count>
      <attachid>225767</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-03-04 04:36:42 -0800</bug_when>
    <thetext>Created attachment 225767
Proposed patch 3

I&apos;ve updated the ChangeLog and fixed the license problem.
Peavo, did the Windows includes fix the build errors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986771</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-04 04:38:56 -0800</bug_when>
    <thetext>Attachment 225767 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:136:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:82:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:85:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:125:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:125:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>987266</commentid>
    <comment_count>13</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-03-05 08:24:12 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=225767) [details]
&gt; Proposed patch 3
&gt; 
&gt; I&apos;ve updated the ChangeLog and fixed the license problem.
&gt; Peavo, did the Windows includes fix the build errors?

Maybe include &lt;Ws2tcpip.h&gt; ?

1&gt;  SocketStreamHandleCurl.cpp
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(75): error C2039: &apos;getaddrinfo&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(75): error C3861: &apos;getaddrinfo&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(85): error C2039: &apos;getnameinfo&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(85): error C3861: &apos;getnameinfo&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(104): error C2039: &apos;close&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(104): error C3861: &apos;close&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleCurl.cpp(130): error C3861: &apos;freeaddrinfo&apos;: identifier not found

1&gt;  SocketStreamHandleManager.cpp
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(34): fatal error C1083: Cannot open include file: &apos;sys/socket.h&apos;: No such file or directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>989331</commentid>
    <comment_count>14</comment_count>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-03-11 02:55:42 -0700</bug_when>
    <thetext>That&apos;s odd, &apos;sys/socket.h&apos; shouldn&apos;t be included on Windows.
There are guards in order to use its Windows equivalents.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>990519</commentid>
    <comment_count>15</comment_count>
    <who name="">peavo</who>
    <bug_when>2014-03-14 09:39:21 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; That&apos;s odd, &apos;sys/socket.h&apos; shouldn&apos;t be included on Windows.
&gt; There are guards in order to use its Windows equivalents.

My mistake, somehow I didn&apos;t manage to completely apply the patch :)

1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(90): error C2039: &apos;close&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(90): error C3861: &apos;close&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(102): error C2065: &apos;ssize_t&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(102): error C2146: syntax error : missing &apos;;&apos; before identifier &apos;readCount&apos;
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(102): error C2065: &apos;readCount&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(102): error C2039: &apos;read&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(102): error C3861: &apos;read&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(104): error C2065: &apos;readCount&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(110): error C2065: &apos;readCount&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(111): error C2065: &apos;readCount&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(114): error C2065: &apos;readCount&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(126): error C2065: &apos;ssize_t&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(126): error C2146: syntax error : missing &apos;;&apos; before identifier &apos;sent&apos;
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(126): error C2065: &apos;sent&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(126): error C2039: &apos;write&apos; : is not a member of &apos;`global namespace&apos;&apos;
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(126): error C3861: &apos;write&apos;: identifier not found
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(128): error C2065: &apos;sent&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(134): error C2065: &apos;sent&apos; : undeclared identifier
1&gt;..\platform\network\curl\SocketStreamHandleManager.cpp(135): error C2065: &apos;sent&apos; : undeclared identifier</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993784</commentid>
    <comment_count>16</comment_count>
      <attachid>227640</attachid>
    <who name="Mátyás Mustoha">mmatyas</who>
    <bug_when>2014-03-24 06:31:14 -0700</bug_when>
    <thetext>Created attachment 227640
Proposed patch 4

Sorry for the late reply, this patch should solve the problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>993785</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-24 06:32:49 -0700</bug_when>
    <thetext>Attachment 227640 did not pass style-queue:


ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.h:36:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:145:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:84:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:87:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:127:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:127:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 6 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001259</commentid>
    <comment_count>18</comment_count>
      <attachid>227640</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-04-16 12:10:37 -0700</bug_when>
    <thetext>Comment on attachment 227640
Proposed patch 4

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

Thanks for working on this!  I see a few memory leaks in the code, so I think it needs a bit of work before we proceed.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:65
&gt; +    memset(&amp;hints, 0, sizeof(struct addrinfo));

Can&apos;t this just be sizeof(hints)? Less likely to break in the future if the type of hints is changed.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:75
&gt; +    const char* port = fastStrDup(portString.latin1().data());

I don&apos;t understand why we need to copy these strings. Are we concerned hostnameString and portString won&apos;t be around long enough to make the function call?

This is also leaking memory.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:79
&gt; +        return nullptr;

We just leaked hostname and port here.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:95
&gt; +static int tryConnection(struct addrinfo* server)

Is it ever appropriate for &apos;server&apos; to be null? If it is, you should check for it and handle it.  If not, make it a reference.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:113
&gt; +void SocketStreamHandle::dispatchConnectionOnMainThread(void* context)

Is it ever possible for context to be null? If not, make it a reference. If it is, handle that case.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:127
&gt; +    for (; server != NULL; server = server-&gt;ai_next) {

We don&apos;t use NULL in our code. This should be &quot;server != nullptr&quot;

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleCurl.cpp:128
&gt; +        if ((socketFD = tryConnection(server)))

server cannot be null, so why not just pass a const reference?

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:62
&gt; +    DEFINE_STATIC_LOCAL(Mutex, mutex, ());

This is deprecated nwo (DEFINE_DEPRECATED_STATIC_LOCAL). You might want to use the &quot;NeverDeleted&lt;&gt;&quot; template.

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:73
&gt; +    for (auto entry : m_streamHandleMap) {

You are copying your map entries as you iterate.  You probably want &quot;for (auto&amp; entry : m_streamHandleMap)

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:82
&gt; +void SocketStreamHandleManager::add(SocketStreamHandle* stream)

These methods all take a pointer, which implies you need to check for nullptr. But I don&apos;t think you ever enter this code with a nullptr, so why not just use references?

&gt; Source/WebCore/platform/network/curl/SocketStreamHandleManager.cpp:84
&gt; +    Mutex* mutex = SocketStreamHandleManager::sharedMutex();

It seems weird to return a pointer to the mutex. Why not just have an API like &quot;SocketStreamHandleManager::sharedMutex().lock() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611541</commentid>
    <comment_count>19</comment_count>
    <who name="Basuke Suzuki">basuke</who>
    <bug_when>2020-01-27 13:12:12 -0800</bug_when>
    <thetext>This was implemented on WinCairo curl backend.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>224191</attachid>
            <date>2014-02-14 03:05:47 -0800</date>
            <delta_ts>2014-02-24 08:33:07 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>v6.diff</filename>
            <type>text/plain</type>
            <size>26654</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzQwNzExLi5lNTZlY2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDItMTMgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQmFzaWMgU29ja2V0U3RyZWFtIGltcGxlbWVudGF0aW9uIGZv
ciBsaWJjdXJsIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyODc0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBTb2NrZXRTdHJlYW0gaW1wbGVtZW50YXRpb24gZm9yIGxpYmN1cmwgYmFj
a2VuZCwKKyAgICAgICAgdXNpbmcgUE9TSVggZnVuY3Rpb24gY2FsbHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUVy
cm9yOjpTb2NrZXRTdHJlYW1FcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hh
cmVkTXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjp+U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVhbVJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtV3JpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJD
YWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaDogQWRkZWQuCisKIDIwMTQtMDItMTMgIFhhYmllciBSb2RyaWd1ZXogQ2Fs
dmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBNRURJQV9DT05UUk9M
U19TQ1JJUFQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKaW5kZXggZDZjNWNiYS4uZjIzZmE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC04NDQyLDYgKzg0NDIsMTYgQEAK
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3
b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAiPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmNwcCI+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0xOTQ0MCw2ICsxOTQ1MCwyNiBA
QAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmgiPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+Cisg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29j
a2V0U3RyZWFtSGFuZGxlLmgiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Cisg
ICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmgiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGM3OWMxYjIuLjgzNzBhZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKQEAgLTE5MjAsNiArMTkyMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3Vy
bFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3Jt
XG5ldHdvcmtcY3VybDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXFNTTEhhbmRsZS5jcHAiPgogICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
QEAgLTE1MDMyLDYgKzE1MDM1LDE1IEBACiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcUmVzb3VyY2VSZXNwb25zZS5oIj4KICAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+
CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxc
U29ja2V0U3RyZWFtRXJyb3IuaCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3Vy
bDwvRmlsdGVyPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWlsZFN0ZXAg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXFNvY2tldFN0cmVhbUhhbmRsZS5oIj4K
KyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0
b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NM
SGFuZGxlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4K
ICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1FcnJvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUVycm9yLmgKaW5kZXggZjk2NDFhZC4uYTFm
ZmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUVycm9yLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsMTIgKzM4LDE5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNvY2tldFN0cmVhbUVycm9yIDogcHVibGljIFNv
Y2tldFN0cmVhbUVycm9yQmFzZSB7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIHsKKyAgICAg
ICAgICAgIFJlc29sdmVFcnJvciA9IDEsCisgICAgICAgICAgICBDb25uZWN0RXJyb3IsCisgICAg
ICAgICAgICBSZWFkRXJyb3IsCisgICAgICAgICAgICBXcml0ZUVycm9yLAorICAgICAgICAgICAg
RkRFcnJvcgorICAgICAgICB9OworCiAgICAgICAgIFNvY2tldFN0cmVhbUVycm9yKCkgeyB9CiAg
ICAgICAgIGV4cGxpY2l0IFNvY2tldFN0cmVhbUVycm9yKGludCBlcnJvckNvZGUpCiAgICAgICAg
ICAgICA6IFNvY2tldFN0cmVhbUVycm9yQmFzZShlcnJvckNvZGUpCiAgICAgICAgIHsKICAgICAg
ICAgfQotCiAgICAgfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUu
aAppbmRleCBhODIzMTlmLi44NTYwMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00
MiwxMCArNDMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENyZWRlbnRpYWw7CiAgICAgY2xhc3MgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50OworICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAK
ICAgICBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2NrZXRT
dHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShpbnQgc29ja2V0
RkQsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHNvY2tldEZELCBjbGllbnQpKTsgfQogCiAgICAgICAgIHZp
cnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwogCkBAIC01NSwxMiArNTgsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOworICAgICAgICBTb2NrZXRT
dHJlYW1IYW5kbGUoaW50IHNvY2tldEZELCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqKTsKIAog
ICAgICAgICAvLyBObyBhdXRoZW50aWNhdGlvbiBmb3Igc3RyZWFtcyBwZXIgc2UsIGJ1dCBwcm94
eSBtYXkgYXNrIGZvciBjcmVkZW50aWFscy4KICAgICAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAg
ICAgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250
aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAg
ICAgICAgIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKTsKKworICAgICAgICBpbnQgbV9zb2NrZXRGRDsKKworICAgICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENvbm5lY3Rpb25Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAgICAgfTsKIAogfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAppbmRleCA3
OWFkYzMwLi4xNjI3ZDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTM1LDM1ICszNiwxNDMgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgPGFycGEvaW5ldC5o
PgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBzdHJ1Y3QgYWRk
cmluZm8qIHJlc29sdmVVUkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgc3RydWN0IGFkZHJpbmZv
IGhpbnRzOworICAgIHN0cnVjdCBhZGRyaW5mbyogcmVzdWx0OworCisgICAgbWVtc2V0KCZoaW50
cywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFG
X1VOU1BFQzsgLyogQWxsb3cgSVB2NCBvciBJUHY2ICovCisgICAgaGludHMuYWlfc29ja3R5cGUg
PSBTT0NLX1NUUkVBTTsKKyAgICBoaW50cy5haV9mbGFncyA9IDA7CisgICAgaGludHMuYWlfcHJv
dG9jb2wgPSBJUFBST1RPX1RDUDsKKworICAgIHVuc2lnbmVkIHBvcnROdW1iZXIgPSB1cmwuaGFz
UG9ydCgpID8gdXJsLnBvcnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4MCk7
CisgICAgY29uc3QgU3RyaW5nJiBob3N0bmFtZVN0cmluZyA9IHVybC5ob3N0KCk7CisgICAgY29u
c3QgU3RyaW5nJiBwb3J0U3RyaW5nID0gU3RyaW5nOjpudW1iZXIocG9ydE51bWJlcik7CisgICAg
Y29uc3QgY2hhciogaG9zdG5hbWUgPSBmYXN0U3RyRHVwKGhvc3RuYW1lU3RyaW5nLmxhdGluMSgp
LmRhdGEoKSk7CisgICAgY29uc3QgY2hhciogcG9ydCA9IGZhc3RTdHJEdXAocG9ydFN0cmluZy5s
YXRpbjEoKS5kYXRhKCkpOworCisgICAgaW50IGZhaWwgPSA6OmdldGFkZHJpbmZvKGhvc3RuYW1l
LCBwb3J0LCAmaGludHMsICZyZXN1bHQpOworICAgIGlmIChmYWlsKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworI2lmbmRlZiBOREVCVUcKKyAgICBzdHJ1Y3QgYWRkcmluZm8qIHJwOworICAg
IExPRyhOZXR3b3JrLCAiUmVzb2x2ZWQgYWRkcmVzc2VzIGZvciAlczolcyA6IiwgaG9zdG5hbWUs
IHBvcnQpOworICAgIGZvciAocnAgPSByZXN1bHQ7IHJwICE9IDA7IHJwID0gcnAtPmFpX25leHQp
IHsKKyAgICAgICAgTE9HKE5ldHdvcmssICIgRmFtaWx5OiAlWCBTb2NrZXR0eXBlOiAlWCBQcm90
b2NvbDogJXgiLCBycC0+YWlfZmFtaWx5LCBycC0+YWlfc29ja3R5cGUsIHJwLT5haV9wcm90b2Nv
bCk7CisgICAgICAgIGNoYXIgaG9zdFtOSV9NQVhIT1NUXSwgcG9ydFtOSV9NQVhTRVJWXTsKKyAg
ICAgICAgaWYgKDo6Z2V0bmFtZWluZm8ocnAtPmFpX2FkZHIsIHJwLT5haV9hZGRybGVuLCBob3N0
LCBzaXplb2YoaG9zdCksIHBvcnQsIHNpemVvZihwb3J0KSwgTklfTlVNRVJJQ0hPU1QgfCBOSV9O
VU1FUklDU0VSVikgPT0gMCkKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiIGhvc3Q9JXMsIHNl
cnZpY2U9JXMiLCBob3N0LCBwb3J0KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ5Q29ubmVjdGlvbihzdHJ1Y3QgYWRkcmluZm8qIHNlcnZl
cikKK3sKKyAgICBpbnQgc29ja2V0RkQgPSA6OnNvY2tldChzZXJ2ZXItPmFpX2ZhbWlseSwgU09D
S19TVFJFQU0sIHNlcnZlci0+YWlfcHJvdG9jb2wpOworCisgICAgaWYgKHNvY2tldEZEID09IC0x
KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlIGZhaWxlZCB0byBj
cmVhdGUgc29ja2V0LiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoOjpj
b25uZWN0KHNvY2tldEZELCBzZXJ2ZXItPmFpX2FkZHIsIHNlcnZlci0+YWlfYWRkcmxlbikgPCAw
KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlIGZhaWxlZCB0byBj
b25uZWN0IHRvIHNlcnZlci4iKTsKKyAgICAgICAgOjpjbG9zZShzb2NrZXRGRCk7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKworICAgIHJldHVybiBzb2NrZXRGRDsKK30KKwordm9pZCBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCh2b2lkKiBjb250
ZXh0KQoreworICAgIFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtID0gcmVpbnRlcnByZXRfY2Fz
dDxTb2NrZXRTdHJlYW1IYW5kbGUqPihjb250ZXh0KTsKKworICAgIHN0cnVjdCBhZGRyaW5mbyog
c2VydmVyID0gcmVzb2x2ZVVSTChzdHJlYW0tPm1fdXJsKTsKKyAgICBpZiAoIXNlcnZlcikgewor
ICAgICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSBjb3VsZCBub3QgcmVzb2x2
ZTogJXMuIiwgc3RyZWFtLT5tX3VybC5ob3N0KCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAg
aWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRG
YWlsU29ja2V0U3RyZWFtKHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJy
b3I6OlJlc29sdmVFcnJvcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2Un
bGwgaXRlcmF0ZSBvdmVyIHRoZSByZXNvbHZlZCBhZGRyZXNzZXMgYW5kIHRyeSB0aGUgY29ubmVj
dGlvbi4KKyAgICBpbnQgc29ja2V0RkQ7CisgICAgZm9yICg7IHNlcnZlciAhPSBOVUxMOyBzZXJ2
ZXIgPSBzZXJ2ZXItPmFpX25leHQpIHsKKyAgICAgICAgaWYgKChzb2NrZXRGRCA9IHRyeUNvbm5l
Y3Rpb24oc2VydmVyKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmVlYWRk
cmluZm8oc2VydmVyKTsKKworICAgIGlmICghc29ja2V0RkQpIHsKKyAgICAgICAgaWYgKHN0cmVh
bS0+Y2xpZW50KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0
U3RyZWFtKHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OkNvbm5l
Y3RFcnJvcikpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW0tPm1fc29j
a2V0RkQgPSBzb2NrZXRGRDsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRJ
bnN0YW5jZSgpLmFkZChzdHJlYW0pOworICAgIHN0cmVhbS0+bV9zdGF0ZSA9IE9wZW47CisgICAg
c3RyZWFtLT5tX2NsaWVudC0+ZGlkT3BlblNvY2tldFN0cmVhbShzdHJlYW0pOworfQorCiBTb2Nr
ZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
KHVybCwgY2xpZW50KQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVw
IG5ldyBjbGllbnQgJXAiLCB0aGlzLCBtX2NsaWVudCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KworICAgIGNhbGxPbk1haW5UaHJlYWQoJmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCwg
dGhpcyk7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGludCBz
b2NrZXRGRCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpCisgICAgOiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlKFVSTCgpLCBjbGllbnQpCisgICAgLCBtX3NvY2tldEZEKHNvY2tldEZE
KQoreworICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQg
JXAgRkQ6ICVkIiwgdGhpcywgbV9jbGllbnQsIG1fc29ja2V0RkQpOworCisgICAgU29ja2V0U3Ry
ZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS5hZGQodGhpcyk7CisgICAgbV9zdGF0
ZSA9IE9wZW47CisgICAgbV9jbGllbnQtPmRpZE9wZW5Tb2NrZXRTdHJlYW0odGhpcyk7CiB9CiAK
IFNvY2tldFN0cmVhbUhhbmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCiB7CiAgICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7CiAgICAgc2V0Q2xp
ZW50KDApOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1IYW5k
bGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiwgaW50KQoraW50IFNvY2tldFN0cmVhbUhhbmRs
ZTo6cGxhdGZvcm1TZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgTE9H
KE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhpcyk7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBMT0coTmV0d29yaywgIlNv
Y2tldFN0cmVhbUhhbmRsZSAlcCBwbGF0Zm9ybVNlbmQgJWQgYnl0ZXMiLCB0aGlzLCBsZW5ndGgp
OworICAgIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkuaGFuZGxl
U3RyZWFtV3JpdGUodGhpcywgZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbGVuZ3RoOwogfQog
CiB2b2lkIFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiB7CiAgICAgTE9HKE5l
dHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOwotICAg
IG5vdEltcGxlbWVudGVkKCk7CisKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFy
ZWRJbnN0YW5jZSgpLmNhbmNlbCh0aGlzKTsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZSYpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0MTAyYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2Vy
LmNwcApAQCAtMCwwICsxLDIxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIgorCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCisjaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+
CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBI
YXNoTWFwPGludCwgU29ja2V0U3RyZWFtSGFuZGxlKj46OktleVZhbHVlUGFpclR5cGUgU3RyZWFt
SGFuZGxlTWFwUGFpclR5cGU7CisKK1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIFNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgU29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlciBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5z
dGFuY2U7Cit9CisKK011dGV4KiBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRNdXRl
eCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICBy
ZXR1cm4gJm11dGV4OworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyKCkKKyAgICA6IG1fdGltZXIodGhpcywgJlNvY2tldFN0cmVhbUhhbmRs
ZU1hbmFnZXI6OnN0cmVhbVRpbWVyQ2FsbGJhY2spCit7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRs
ZU1hbmFnZXI6On5Tb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8g
ZW50cnkgOiBtX3N0cmVhbUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUq
IHN0cmVhbSA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0KK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQoU29ja2V0U3RyZWFtSGFuZGxlKiBz
dHJlYW0pCit7CisgICAgTXV0ZXgqIG11dGV4ID0gU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
c2hhcmVkTXV0ZXgoKTsKKyAgICBtdXRleC0+bG9jaygpOworICAgIG1fc3RyZWFtSGFuZGxlTWFw
LnNldChzdHJlYW0tPm1fc29ja2V0RkQsIHN0cmVhbSk7CisgICAgbXV0ZXgtPnVubG9jaygpOwor
CisgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IEFkZGVkLiIsIHN0cmVhbS0+bV9zb2NrZXRG
RCk7CisKKyAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdGFy
dE9uZVNob3QoMC4wNSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2Fu
Y2VsKFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtKQoreworICAgIExPRyhOZXR3b3JrLCAiU3Ry
ZWFtICVkOiBDYW5jZWxsZWQuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICBtX3JlbW92ZUxp
c3QuYWRkKHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgOjpjbG9zZShzdHJlYW0tPm1fc29ja2V0
RkQpOworCisgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50
KCktPmRpZENsb3NlU29ja2V0U3RyZWFtKHN0cmVhbSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtUmVhZChTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVh
bSkKK3sKKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0KHN0cmVhbSk7Cisg
ICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSAxNiAqIDEwMjQ7CisgICAgY2hhciBidWZmZXJb
YnVmZmVyU2l6ZV07CisKKyAgICBzc2l6ZV90IHJlYWRDb3VudCA9IDo6cmVhZChzdHJlYW0tPm1f
c29ja2V0RkQsIGJ1ZmZlciwgYnVmZmVyU2l6ZSk7CisKKyAgICBpZiAocmVhZENvdW50IDwgMCkg
eworICAgICAgICBMT0coTmV0d29yaywgIlN0cmVhbSAlZDogRXJyb3IgZHVyaW5nIHJlYWQuIiwg
c3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAg
ICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFtKHN0cmVhbSwgU29j
a2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OlJlYWRFcnJvcikpOworCisgICAgICAg
IHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0gZWxzZSBpZiAocmVhZENvdW50ID4gMCkgewor
ICAgICAgICBMT0coTmV0d29yaywgIlN0cmVhbSAlZDogUmVhZCAlbGQgYnl0ZXMuIiwgc3RyZWFt
LT5tX3NvY2tldEZELCByZWFkQ291bnQpOworCisgICAgICAgIGlmIChzdHJlYW0tPmNsaWVudCgp
KQorICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURh
dGEoc3RyZWFtLCBidWZmZXIsIHJlYWRDb3VudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9H
KE5ldHdvcmssICJTdHJlYW0gJWQ6IFJlYWQgcmV0dXJuZWQgMCwgY2xvc2luZyBjb25uZWN0aW9u
LiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOwor
ICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpoYW5kbGVTdHJlYW1X
cml0ZShTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbSwgY29uc3QgY2hhciogZGF0YSwgaW50IGJ5
dGVzVG9TZW5kKQoreworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Qoc3Ry
ZWFtKTsKKyAgICBMT0coTmV0d29yaywgIlN0cmVhbSAlZDogVHJ5aW5nIHRvIHNlbmQgJWQgYnl0
ZXMuIiwgc3RyZWFtLT5tX3NvY2tldEZELCBieXRlc1RvU2VuZCk7CisKKyAgICBzc2l6ZV90IHNl
bnQgPSA6OndyaXRlKHN0cmVhbS0+bV9zb2NrZXRGRCwgZGF0YSwgYnl0ZXNUb1NlbmQpOworCisg
ICAgaWYgKHNlbnQgPCAwKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBFcnJv
ciB3cml0aW5nIGRhdGEuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgaWYgKHN0cmVh
bS0+Y2xpZW50KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0
U3RyZWFtKHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OldyaXRl
RXJyb3IpKTsKKworICAgICAgICBzdHJlYW0tPmRpc2Nvbm5lY3QoKTsKKyAgICB9IGVsc2UgaWYg
KHNlbnQgPiAwKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBTZW50ICVsZCBi
eXRlcy4iLCBzdHJlYW0tPm1fc29ja2V0RkQsIHNlbnQpOworICAgIH0gZWxzZQorICAgICAgICBM
T0coTmV0d29yaywgIlN0cmVhbSAlZDogTm90aGluZyBzZW50LiIsIHN0cmVhbS0+bV9zb2NrZXRG
RCk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJDYWxs
YmFjayhUaW1lcjxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyPiopCit7CisgICAgTXV0ZXgqIG11
dGV4ID0gU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkTXV0ZXgoKTsKKyAgICBmZF9z
ZXQgZmRyZWFkOworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IDA7CisKKyAg
ICBzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0
aW1lb3V0LnR2X3VzZWMgPSAyICogMTAwMDsgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcwor
CisgICAgbXV0ZXgtPmxvY2soKTsKKyAgICAvLyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50
ZXJydXB0ZWQgYnkgYSBwcm9jZXNzIHNpZ25hbC4KKyAgICBpbnQgcmMgPSAwOworICAgIGRvIHsK
KyAgICAgICAgRkRfWkVSTygmZmRyZWFkKTsKKyAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisK
KyAgICAgICAgZm9yIChjb25zdCBTdHJlYW1IYW5kbGVNYXBQYWlyVHlwZSYgZW50cnkgOiBtX3N0
cmVhbUhhbmRsZU1hcCkgeworICAgICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW0g
PSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIGlmICghc3RyZWFtKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgICAgICBGRF9TRVQoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRy
ZWFkKTsKKyAgICAgICAgICAgIEZEX1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZmZGV4Y2VwKTsK
KworICAgICAgICAgICAgaWYgKHN0cmVhbS0+bV9zb2NrZXRGRCA+IG1heGZkKQorICAgICAgICAg
ICAgICAgIG1heGZkID0gc3RyZWFtLT5tX3NvY2tldEZEOworICAgICAgICB9CisKKyAgICAgICAg
cmMgPSA6OnNlbGVjdChtYXhmZCArIDEsICZmZHJlYWQsIDAsICZmZGV4Y2VwLCAmdGltZW91dCk7
CisgICAgfSB3aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgaWYgKC0x
ID09IHJjKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtIGhhbmRsaW5nIGVy
cm9yOiBzZWxlY3QgcmV0dXJuZWQgLTEiKTsKKyAgICAgICAgbXV0ZXgtPnVubG9jaygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChjb25zdCBTdHJlYW1IYW5kbGVNYXBQYWly
VHlwZSYgZW50cnkgOiBtX3N0cmVhbUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1I
YW5kbGUqIHN0cmVhbSA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkgeworICAg
ICAgICAgICAgbV9yZW1vdmVMaXN0LmFkZChlbnRyeS5rZXkpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRkRfSVNTRVQoc3RyZWFtLT5tX3NvY2tldEZE
LCAmZmRyZWFkKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IFJlYWR5
IGZvciByZWFkLiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgICAgICAgICBGRF9DTFIoc3Ry
ZWFtLT5tX3NvY2tldEZELCAmZmRyZWFkKTsKKyAgICAgICAgICAgIGhhbmRsZVN0cmVhbVJlYWQo
c3RyZWFtKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGRF9JU1NFVChzdHJlYW0tPm1fc29j
a2V0RkQsICZmZGV4Y2VwKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6
IEZpbGUgZGVzY3JpcHRvciBlcnJvci4iLCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgICAgICAg
ICAgRkRfQ0xSKHN0cmVhbS0+bV9zb2NrZXRGRCwgJmZkZXhjZXApOworICAgICAgICAgICAgaWYg
KHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlk
RmFpbFNvY2tldFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNvY2tldFN0cmVhbUVy
cm9yOjpGREVycm9yKSk7CisKKyAgICAgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAg
ICAgICB9CisgICAgfQorICAgIG11dGV4LT51bmxvY2soKTsKKworICAgIGZvciAoaW50IHNvY2tl
dElkIDogbV9yZW1vdmVMaXN0KSB7CisgICAgICAgIC8vIEJ5IHRoaXMgcG9pbnQgaXQgaXMgY2Vy
dGFpbiB0aGF0IHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICBtX3N0cmVhbUhhbmRsZU1h
cC5yZW1vdmUoc29ja2V0SWQpOworICAgIH0KKworICAgIG1fcmVtb3ZlTGlzdC5jbGVhcigpOwor
CisgICAgaWYgKCFtX3RpbWVyLmlzQWN0aXZlKCkgJiYgbV9zdHJlYW1IYW5kbGVNYXAuc2l6ZSgp
KQorICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwLjA1KTsKK30KKworfSAvLyBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NjQzMjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaApAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU29ja2V0U3RyZWFtSGFuZGxl
TWFuYWdlcl9oCisjZGVmaW5lIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXJfaAorCisjaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RhdGljIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIHNoYXJlZEluc3Rh
bmNlKCk7CisKKyAgICAgICAgc3RhdGljIE11dGV4KiBzaGFyZWRNdXRleCgpOworICAgICAgICB2
b2lkIGFkZChTb2NrZXRTdHJlYW1IYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoU29ja2V0
U3RyZWFtSGFuZGxlKik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVTdHJlYW1SZWFkKFNvY2tldFN0
cmVhbUhhbmRsZSopOworICAgICAgICB2b2lkIGhhbmRsZVN0cmVhbVdyaXRlKFNvY2tldFN0cmVh
bUhhbmRsZSosIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgICAgICB2b2lkIHN0
cmVhbVRpbWVyQ2FsbGJhY2soVGltZXI8U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcj4qKTsKKwor
ICAgIHByaXZhdGU6CisgICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIoKTsKKyAgICAg
ICAgflNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIoKTsKKworCisgICAgICAgIFRpbWVyPFNvY2tl
dFN0cmVhbUhhbmRsZU1hbmFnZXI+IG1fdGltZXI7CisKKyAgICAgICAgSGFzaE1hcDxpbnQsIFNv
Y2tldFN0cmVhbUhhbmRsZSo+IG1fc3RyZWFtSGFuZGxlTWFwOworICAgICAgICBIYXNoU2V0PGlu
dD4gbV9yZW1vdmVMaXN0OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225069</attachid>
            <date>2014-02-24 08:33:07 -0800</date>
            <delta_ts>2014-03-04 04:36:42 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>v7.diff</filename>
            <type>text/plain</type>
            <size>26810</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2MzQwNzExLi5jYThiMmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDItMTMgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQmFzaWMgU29ja2V0U3RyZWFtIGltcGxlbWVudGF0aW9uIGZv
ciBsaWJjdXJsIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyODc0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBTb2NrZXRTdHJlYW0gaW1wbGVtZW50YXRpb24gZm9yIGxpYmN1cmwgYmFj
a2VuZCwKKyAgICAgICAgdXNpbmcgUE9TSVggZnVuY3Rpb24gY2FsbHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUVy
cm9yOjpTb2NrZXRTdHJlYW1FcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hh
cmVkTXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjp+U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVhbVJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtV3JpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJD
YWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaDogQWRkZWQuCisKIDIwMTQtMDItMTMgIFhhYmllciBSb2RyaWd1ZXogQ2Fs
dmFyICA8Y2FsdmFyaXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBNRURJQV9DT05UUk9M
U19TQ1JJUFQgc3VwcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKaW5kZXggZDZjNWNiYS4uZjIzZmE3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC04NDQyLDYgKzg0NDIsMTYgQEAK
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAg
ICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3
b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAiPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21C
dWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2
NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMici
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmNwcCI+CiAgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0xOTQ0MCw2ICsxOTQ1MCwyNiBA
QAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxk
PgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8
JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
ICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4u
XHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmgiPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxF
eGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0p
Jz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVi
dWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0Rl
YnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVs
ZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFz
ZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258
eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+Cisg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29j
a2V0U3RyZWFtSGFuZGxlLmgiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZy
b21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJh
dGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+Cisg
ICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxw
bGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmgiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2lu
MzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBD
b25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGM3OWMxYjIuLjgzNzBhZWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52
Y3hwcm9qLmZpbHRlcnMKQEAgLTE5MjAsNiArMTkyMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAi
PgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0Ns
Q29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3Vy
bFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3Jt
XG5ldHdvcmtcY3VybDwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXFNTTEhhbmRsZS5jcHAiPgogICAgICAg
PEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
QEAgLTE1MDMyLDYgKzE1MDM1LDE1IEBACiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIu
LlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcUmVzb3VyY2VSZXNwb25zZS5oIj4KICAgICAgIDxGaWx0
ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+
CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxc
U29ja2V0U3RyZWFtRXJyb3IuaCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3Vy
bDwvRmlsdGVyPgorICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWlsZFN0ZXAg
SW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXFNvY2tldFN0cmVhbUhhbmRsZS5oIj4K
KyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0
b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxu
ZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NM
SGFuZGxlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4K
ICAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1FcnJvci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUVycm9yLmgKaW5kZXggZjk2NDFhZC4uYTFm
ZmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUVycm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUVycm9yLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsMTIgKzM4LDE5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNvY2tldFN0cmVhbUVycm9yIDogcHVibGljIFNv
Y2tldFN0cmVhbUVycm9yQmFzZSB7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIHsKKyAgICAg
ICAgICAgIFJlc29sdmVFcnJvciA9IDEsCisgICAgICAgICAgICBDb25uZWN0RXJyb3IsCisgICAg
ICAgICAgICBSZWFkRXJyb3IsCisgICAgICAgICAgICBXcml0ZUVycm9yLAorICAgICAgICAgICAg
RkRFcnJvcgorICAgICAgICB9OworCiAgICAgICAgIFNvY2tldFN0cmVhbUVycm9yKCkgeyB9CiAg
ICAgICAgIGV4cGxpY2l0IFNvY2tldFN0cmVhbUVycm9yKGludCBlcnJvckNvZGUpCiAgICAgICAg
ICAgICA6IFNvY2tldFN0cmVhbUVycm9yQmFzZShlcnJvckNvZGUpCiAgICAgICAgIHsKICAgICAg
ICAgfQotCiAgICAgfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUu
aAppbmRleCBhODIzMTlmLi44NTYwMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCkBAIC0xLDYgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00
MiwxMCArNDMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlOwogICAgIGNsYXNzIENyZWRlbnRpYWw7CiAgICAgY2xhc3MgU29ja2V0U3Ry
ZWFtSGFuZGxlQ2xpZW50OworICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAK
ICAgICBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2NrZXRT
dHJlYW1IYW5kbGU+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShj
b25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBTb2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShpbnQgc29ja2V0
RkQsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihu
ZXcgU29ja2V0U3RyZWFtSGFuZGxlKHNvY2tldEZELCBjbGllbnQpKTsgfQogCiAgICAgICAgIHZp
cnR1YWwgflNvY2tldFN0cmVhbUhhbmRsZSgpOwogCkBAIC01NSwxMiArNTgsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxl
KGNvbnN0IFVSTCYsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCopOworICAgICAgICBTb2NrZXRT
dHJlYW1IYW5kbGUoaW50IHNvY2tldEZELCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqKTsKIAog
ICAgICAgICAvLyBObyBhdXRoZW50aWNhdGlvbiBmb3Igc3RyZWFtcyBwZXIgc2UsIGJ1dCBwcm94
eSBtYXkgYXNrIGZvciBjcmVkZW50aWFscy4KICAgICAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAg
ICAgdm9pZCByZWNlaXZlZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
LCBjb25zdCBDcmVkZW50aWFsJik7CiAgICAgICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250
aW51ZVdpdGhvdXRDcmVkZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAg
ICAgICAgIHZvaWQgcmVjZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UmKTsKKworICAgICAgICBpbnQgbV9zb2NrZXRGRDsKKworICAgICAgICBzdGF0aWMgdm9p
ZCBkaXNwYXRjaENvbm5lY3Rpb25Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisKKyAgICAg
ICAgZnJpZW5kIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAgICAgfTsKIAogfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAppbmRleCA3
OWFkYzMwLi5iMjE3Y2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKQEAgLTM1LDM1ICszNiwxNDkgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJMb2dn
aW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJl
YW1FcnJvci5oIgogI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1
ZGUgIlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaCIKKworI2lmIE9TKFdJTkRPV1MpCisjaW5j
bHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2luY2x1ZGUg
PGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVh
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvKiByZXNvbHZlVVJMKGNvbnN0IFVSTCYgdXJsKQor
eworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50czsKKyAgICBzdHJ1Y3QgYWRkcmluZm8qIHJlc3Vs
dDsKKworICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKKyAg
ICBoaW50cy5haV9mYW1pbHkgPSBBRl9VTlNQRUM7IC8qIEFsbG93IElQdjQgb3IgSVB2NiAqLwor
ICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07CisgICAgaGludHMuYWlfZmxhZ3Mg
PSAwOworICAgIGhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisKKyAgICB1bnNpZ25l
ZCBwb3J0TnVtYmVyID0gdXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29s
SXMoIndzcyIpID8gNDQzIDogODApOworICAgIGNvbnN0IFN0cmluZyYgaG9zdG5hbWVTdHJpbmcg
PSB1cmwuaG9zdCgpOworICAgIGNvbnN0IFN0cmluZyYgcG9ydFN0cmluZyA9IFN0cmluZzo6bnVt
YmVyKHBvcnROdW1iZXIpOworICAgIGNvbnN0IGNoYXIqIGhvc3RuYW1lID0gZmFzdFN0ckR1cCho
b3N0bmFtZVN0cmluZy5sYXRpbjEoKS5kYXRhKCkpOworICAgIGNvbnN0IGNoYXIqIHBvcnQgPSBm
YXN0U3RyRHVwKHBvcnRTdHJpbmcubGF0aW4xKCkuZGF0YSgpKTsKKworICAgIGludCBmYWlsID0g
OjpnZXRhZGRyaW5mbyhob3N0bmFtZSwgcG9ydCwgJmhpbnRzLCAmcmVzdWx0KTsKKyAgICBpZiAo
ZmFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3Ry
dWN0IGFkZHJpbmZvKiBycDsKKyAgICBMT0coTmV0d29yaywgIlJlc29sdmVkIGFkZHJlc3NlcyBm
b3IgJXM6JXMgOiIsIGhvc3RuYW1lLCBwb3J0KTsKKyAgICBmb3IgKHJwID0gcmVzdWx0OyBycCAh
PSAwOyBycCA9IHJwLT5haV9uZXh0KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiIEZhbWlseTog
JVggU29ja2V0dHlwZTogJVggUHJvdG9jb2w6ICV4IiwgcnAtPmFpX2ZhbWlseSwgcnAtPmFpX3Nv
Y2t0eXBlLCBycC0+YWlfcHJvdG9jb2wpOworICAgICAgICBjaGFyIGhvc3RbTklfTUFYSE9TVF0s
IHBvcnRbTklfTUFYU0VSVl07CisgICAgICAgIGlmICg6OmdldG5hbWVpbmZvKHJwLT5haV9hZGRy
LCBycC0+YWlfYWRkcmxlbiwgaG9zdCwgc2l6ZW9mKGhvc3QpLCBwb3J0LCBzaXplb2YocG9ydCks
IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlYpID09IDApCisgICAgICAgICAgICBMT0co
TmV0d29yaywgIiBob3N0PSVzLCBzZXJ2aWNlPSVzIiwgaG9zdCwgcG9ydCk7CisgICAgfQorI2Vu
ZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHRyeUNvbm5lY3Rpb24o
c3RydWN0IGFkZHJpbmZvKiBzZXJ2ZXIpCit7CisgICAgaW50IHNvY2tldEZEID0gOjpzb2NrZXQo
c2VydmVyLT5haV9mYW1pbHksIFNPQ0tfU1RSRUFNLCBzZXJ2ZXItPmFpX3Byb3RvY29sKTsKKwor
ICAgIGlmIChzb2NrZXRGRCA9PSAtMSkgeworICAgICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0
cmVhbUhhbmRsZSBmYWlsZWQgdG8gY3JlYXRlIHNvY2tldC4iKTsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgaWYgKDo6Y29ubmVjdChzb2NrZXRGRCwgc2VydmVyLT5haV9hZGRyLCBz
ZXJ2ZXItPmFpX2FkZHJsZW4pIDwgMCkgeworICAgICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0
cmVhbUhhbmRsZSBmYWlsZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXIuIik7CisgICAgICAgIDo6Y2xv
c2Uoc29ja2V0RkQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc29j
a2V0RkQ7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNwYXRjaENvbm5lY3Rpb25P
bk1haW5UaHJlYWQodm9pZCogY29udGV4dCkKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0
cmVhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY29udGV4dCk7CisK
KyAgICBzdHJ1Y3QgYWRkcmluZm8qIHNlcnZlciA9IHJlc29sdmVVUkwoc3RyZWFtLT5tX3VybCk7
CisgICAgaWYgKCFzZXJ2ZXIpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1I
YW5kbGUgY291bGQgbm90IHJlc29sdmU6ICVzLiIsIHN0cmVhbS0+bV91cmwuaG9zdCgpLmxhdGlu
MSgpLmRhdGEoKSk7CisgICAgICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICAgICAg
c3RyZWFtLT5jbGllbnQoKS0+ZGlkRmFpbFNvY2tldFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVh
bUVycm9yKFNvY2tldFN0cmVhbUVycm9yOjpSZXNvbHZlRXJyb3IpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIFdlJ2xsIGl0ZXJhdGUgb3ZlciB0aGUgcmVzb2x2ZWQgYWRkcmVz
c2VzIGFuZCB0cnkgdGhlIGNvbm5lY3Rpb24uCisgICAgaW50IHNvY2tldEZEOworICAgIGZvciAo
OyBzZXJ2ZXIgIT0gTlVMTDsgc2VydmVyID0gc2VydmVyLT5haV9uZXh0KSB7CisgICAgICAgIGlm
ICgoc29ja2V0RkQgPSB0cnlDb25uZWN0aW9uKHNlcnZlcikpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgZnJlZWFkZHJpbmZvKHNlcnZlcik7CisKKyAgICBpZiAoIXNvY2tldEZE
KSB7CisgICAgICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICAgICAgc3RyZWFtLT5j
bGllbnQoKS0+ZGlkRmFpbFNvY2tldFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNv
Y2tldFN0cmVhbUVycm9yOjpDb25uZWN0RXJyb3IpKTsKKworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc3RyZWFtLT5tX3NvY2tldEZEID0gc29ja2V0RkQ7CisgICAgU29ja2V0U3RyZWFt
SGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS5hZGQoc3RyZWFtKTsKKyAgICBzdHJlYW0t
Pm1fc3RhdGUgPSBPcGVuOworICAgIHN0cmVhbS0+bV9jbGllbnQtPmRpZE9wZW5Tb2NrZXRTdHJl
YW0oc3RyZWFtKTsKK30KKwogU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUo
Y29uc3QgVVJMJiB1cmwsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQogICAgIDog
U29ja2V0U3RyZWFtSGFuZGxlQmFzZSh1cmwsIGNsaWVudCkKIHsKICAgICBMT0coTmV0d29yaywg
IlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgbV9jbGllbnQpOwot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKCZkaXNwYXRjaENv
bm5lY3Rpb25Pbk1haW5UaHJlYWQsIHRoaXMpOworfQorCitTb2NrZXRTdHJlYW1IYW5kbGU6OlNv
Y2tldFN0cmVhbUhhbmRsZShpbnQgc29ja2V0RkQsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCog
Y2xpZW50KQorICAgIDogU29ja2V0U3RyZWFtSGFuZGxlQmFzZShVUkwoKSwgY2xpZW50KQorICAg
ICwgbV9zb2NrZXRGRChzb2NrZXRGRCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVh
bUhhbmRsZSAlcCBuZXcgY2xpZW50ICVwIEZEOiAlZCIsIHRoaXMsIG1fY2xpZW50LCBtX3NvY2tl
dEZEKTsKKworICAgIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCku
YWRkKHRoaXMpOworICAgIG1fc3RhdGUgPSBPcGVuOworICAgIG1fY2xpZW50LT5kaWRPcGVuU29j
a2V0U3RyZWFtKHRoaXMpOwogfQogCiBTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1I
YW5kbGUoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0
ZSIsIHRoaXMpOwogICAgIHNldENsaWVudCgwKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci1pbnQgU29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciosIGludCkK
K2ludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoKQogewotICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBs
YXRmb3JtU2VuZCIsIHRoaXMpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
CisgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kICVk
IGJ5dGVzIiwgdGhpcywgbGVuZ3RoKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpz
aGFyZWRJbnN0YW5jZSgpLmhhbmRsZVN0cmVhbVdyaXRlKHRoaXMsIGRhdGEsIGxlbmd0aCk7Cisg
ICAgcmV0dXJuIGxlbmd0aDsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3Jt
Q2xvc2UoKQogewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRm
b3JtQ2xvc2UiLCB0aGlzKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgU29ja2V0U3Ry
ZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKS5jYW5jZWwodGhpcyk7CiB9CiAKIHZv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1h
bmFnZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDVmZjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29j
a2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJT
SVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJ
VFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaCIKKworI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRT
dHJlYW1FcnJvci5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCisj
aWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBIYXNoTWFwPGludCwgU29j
a2V0U3RyZWFtSGFuZGxlKj46OktleVZhbHVlUGFpclR5cGUgU3RyZWFtSGFuZGxlTWFwUGFpclR5
cGU7CisKK1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFn
ZXI6OnNoYXJlZEluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgU29ja2V0U3RyZWFtSGFuZGxlTWFu
YWdlciBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5zdGFuY2U7Cit9CisKK011
dGV4KiBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRNdXRleCgpCit7CisgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICByZXR1cm4gJm11dGV4Owor
fQorCitTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2Vy
KCkKKyAgICA6IG1fdGltZXIodGhpcywgJlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OnN0cmVh
bVRpbWVyQ2FsbGJhY2spCit7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6On5Tb2Nr
ZXRTdHJlYW1IYW5kbGVNYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N0cmVh
bUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbSA9IGVudHJ5
LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0KK30KKwordm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjphZGQoU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW0pCit7CisgICAg
TXV0ZXgqIG11dGV4ID0gU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkTXV0ZXgoKTsK
KyAgICBtdXRleC0+bG9jaygpOworICAgIG1fc3RyZWFtSGFuZGxlTWFwLnNldChzdHJlYW0tPm1f
c29ja2V0RkQsIHN0cmVhbSk7CisgICAgbXV0ZXgtPnVubG9jaygpOworCisgICAgTE9HKE5ldHdv
cmssICJTdHJlYW0gJWQ6IEFkZGVkLiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7CisKKyAgICBpZiAo
IW1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMC4wNSk7
Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKFNvY2tldFN0cmVh
bUhhbmRsZSogc3RyZWFtKQoreworICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBDYW5jZWxs
ZWQuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICBtX3JlbW92ZUxpc3QuYWRkKHN0cmVhbS0+
bV9zb2NrZXRGRCk7CisgICAgOjpjbG9zZShzdHJlYW0tPm1fc29ja2V0RkQpOworCisgICAgaWYg
KHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZENsb3NlU29j
a2V0U3RyZWFtKHN0cmVhbSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
aGFuZGxlU3RyZWFtUmVhZChTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbSkKK3sKKyAgICBSZWZQ
dHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0KHN0cmVhbSk7CisgICAgY29uc3Qgc2l6ZV90
IGJ1ZmZlclNpemUgPSAxNiAqIDEwMjQ7CisgICAgY2hhciBidWZmZXJbYnVmZmVyU2l6ZV07CisK
KyAgICBzc2l6ZV90IHJlYWRDb3VudCA9IDo6cmVhZChzdHJlYW0tPm1fc29ja2V0RkQsIGJ1ZmZl
ciwgYnVmZmVyU2l6ZSk7CisKKyAgICBpZiAocmVhZENvdW50IDwgMCkgeworICAgICAgICBMT0co
TmV0d29yaywgIlN0cmVhbSAlZDogRXJyb3IgZHVyaW5nIHJlYWQuIiwgc3RyZWFtLT5tX3NvY2tl
dEZEKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgICAgICBzdHJlYW0t
PmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFtKHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3Io
U29ja2V0U3RyZWFtRXJyb3I6OlJlYWRFcnJvcikpOworCisgICAgICAgIHN0cmVhbS0+ZGlzY29u
bmVjdCgpOworICAgIH0gZWxzZSBpZiAocmVhZENvdW50ID4gMCkgeworICAgICAgICBMT0coTmV0
d29yaywgIlN0cmVhbSAlZDogUmVhZCAlbGQgYnl0ZXMuIiwgc3RyZWFtLT5tX3NvY2tldEZELCBy
ZWFkQ291bnQpOworCisgICAgICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICAgICAg
c3RyZWFtLT5jbGllbnQoKS0+ZGlkUmVjZWl2ZVNvY2tldFN0cmVhbURhdGEoc3RyZWFtLCBidWZm
ZXIsIHJlYWRDb3VudCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTdHJl
YW0gJWQ6IFJlYWQgcmV0dXJuZWQgMCwgY2xvc2luZyBjb25uZWN0aW9uLiIsIHN0cmVhbS0+bV9z
b2NrZXRGRCk7CisgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0KK30KKwordm9p
ZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpoYW5kbGVTdHJlYW1Xcml0ZShTb2NrZXRTdHJl
YW1IYW5kbGUqIHN0cmVhbSwgY29uc3QgY2hhciogZGF0YSwgaW50IGJ5dGVzVG9TZW5kKQorewor
ICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Qoc3RyZWFtKTsKKyAgICBMT0co
TmV0d29yaywgIlN0cmVhbSAlZDogVHJ5aW5nIHRvIHNlbmQgJWQgYnl0ZXMuIiwgc3RyZWFtLT5t
X3NvY2tldEZELCBieXRlc1RvU2VuZCk7CisKKyAgICBzc2l6ZV90IHNlbnQgPSA6OndyaXRlKHN0
cmVhbS0+bV9zb2NrZXRGRCwgZGF0YSwgYnl0ZXNUb1NlbmQpOworCisgICAgaWYgKHNlbnQgPCAw
KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBFcnJvciB3cml0aW5nIGRhdGEu
Iiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisg
ICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFtKHN0cmVhbSwg
U29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OldyaXRlRXJyb3IpKTsKKworICAg
ICAgICBzdHJlYW0tPmRpc2Nvbm5lY3QoKTsKKyAgICB9IGVsc2UgaWYgKHNlbnQgPiAwKSB7Cisg
ICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBTZW50ICVsZCBieXRlcy4iLCBzdHJlYW0t
Pm1fc29ja2V0RkQsIHNlbnQpOworICAgIH0gZWxzZQorICAgICAgICBMT0coTmV0d29yaywgIlN0
cmVhbSAlZDogTm90aGluZyBzZW50LiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7Cit9CisKK3ZvaWQg
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJDYWxsYmFjayhUaW1lcjxTb2Nr
ZXRTdHJlYW1IYW5kbGVNYW5hZ2VyPiopCit7CisgICAgTXV0ZXgqIG11dGV4ID0gU29ja2V0U3Ry
ZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkTXV0ZXgoKTsKKyAgICBmZF9zZXQgZmRyZWFkOworICAg
IGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IDA7CisKKyAgICBzdHJ1Y3QgdGltZXZh
bCB0aW1lb3V0OworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2X3VzZWMg
PSAyICogMTAwMDsgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcworCisgICAgbXV0ZXgtPmxv
Y2soKTsKKyAgICAvLyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQgYnkgYSBw
cm9jZXNzIHNpZ25hbC4KKyAgICBpbnQgcmMgPSAwOworICAgIGRvIHsKKyAgICAgICAgRkRfWkVS
TygmZmRyZWFkKTsKKyAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICAgICAgZm9yIChj
b25zdCBTdHJlYW1IYW5kbGVNYXBQYWlyVHlwZSYgZW50cnkgOiBtX3N0cmVhbUhhbmRsZU1hcCkg
eworICAgICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW0gPSBlbnRyeS52YWx1ZTsK
KyAgICAgICAgICAgIGlmICghc3RyZWFtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgICAgICBGRF9TRVQoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRyZWFkKTsKKyAgICAgICAg
ICAgIEZEX1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZmZGV4Y2VwKTsKKworICAgICAgICAgICAg
aWYgKHN0cmVhbS0+bV9zb2NrZXRGRCA+IG1heGZkKQorICAgICAgICAgICAgICAgIG1heGZkID0g
c3RyZWFtLT5tX3NvY2tldEZEOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSA6OnNlbGVjdCht
YXhmZCArIDEsICZmZHJlYWQsIDAsICZmZGV4Y2VwLCAmdGltZW91dCk7CisgICAgfSB3aGlsZSAo
cmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgaWYgKC0xID09IHJjKSB7CisgICAg
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtIGhhbmRsaW5nIGVycm9yOiBzZWxlY3QgcmV0
dXJuZWQgLTEiKTsKKyAgICAgICAgbXV0ZXgtPnVubG9jaygpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgZm9yIChjb25zdCBTdHJlYW1IYW5kbGVNYXBQYWlyVHlwZSYgZW50cnkgOiBt
X3N0cmVhbUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbSA9
IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICAgICAgbV9yZW1v
dmVMaXN0LmFkZChlbnRyeS5rZXkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoRkRfSVNTRVQoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRyZWFkKSkgewor
ICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IFJlYWR5IGZvciByZWFkLiIsIHN0
cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgICAgICAgICBGRF9DTFIoc3RyZWFtLT5tX3NvY2tldEZE
LCAmZmRyZWFkKTsKKyAgICAgICAgICAgIGhhbmRsZVN0cmVhbVJlYWQoc3RyZWFtKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChGRF9JU1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZmZGV4Y2Vw
KSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IEZpbGUgZGVzY3JpcHRv
ciBlcnJvci4iLCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgICAgICAgICAgRkRfQ0xSKHN0cmVh
bS0+bV9zb2NrZXRGRCwgJmZkZXhjZXApOworICAgICAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50
KCkpCisgICAgICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkRmFpbFNvY2tldFN0cmVh
bShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNvY2tldFN0cmVhbUVycm9yOjpGREVycm9yKSk7
CisKKyAgICAgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgICAgICB9CisgICAgfQor
ICAgIG11dGV4LT51bmxvY2soKTsKKworICAgIGZvciAoaW50IHNvY2tldElkIDogbV9yZW1vdmVM
aXN0KSB7CisgICAgICAgIC8vIEJ5IHRoaXMgcG9pbnQgaXQgaXMgY2VydGFpbiB0aGF0IHRoZSBz
dHJlYW0gaXMgY2xvc2VkLgorICAgICAgICBtX3N0cmVhbUhhbmRsZU1hcC5yZW1vdmUoc29ja2V0
SWQpOworICAgIH0KKworICAgIG1fcmVtb3ZlTGlzdC5jbGVhcigpOworCisgICAgaWYgKCFtX3Rp
bWVyLmlzQWN0aXZlKCkgJiYgbV9zdHJlYW1IYW5kbGVNYXAuc2l6ZSgpKQorICAgICAgICBtX3Rp
bWVyLnN0YXJ0T25lU2hvdCgwLjA1KTsKK30KKworfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFu
YWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUhhbmRsZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjQz
MjZhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaApAQCAtMCwwICsxLDYyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5J
VkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklW
RVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcl9oCisjZGVm
aW5lIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXJfaAorCisjaW5jbHVkZSAiU29ja2V0U3RyZWFt
SGFuZGxlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNs
YXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3Rh
dGljIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIHNoYXJlZEluc3RhbmNlKCk7CisKKyAgICAg
ICAgc3RhdGljIE11dGV4KiBzaGFyZWRNdXRleCgpOworICAgICAgICB2b2lkIGFkZChTb2NrZXRT
dHJlYW1IYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoU29ja2V0U3RyZWFtSGFuZGxlKik7
CisKKyAgICAgICAgdm9pZCBoYW5kbGVTdHJlYW1SZWFkKFNvY2tldFN0cmVhbUhhbmRsZSopOwor
ICAgICAgICB2b2lkIGhhbmRsZVN0cmVhbVdyaXRlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgICAgICB2b2lkIHN0cmVhbVRpbWVyQ2FsbGJh
Y2soVGltZXI8U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcj4qKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIoKTsKKyAgICAgICAgflNvY2tldFN0cmVh
bUhhbmRsZU1hbmFnZXIoKTsKKworCisgICAgICAgIFRpbWVyPFNvY2tldFN0cmVhbUhhbmRsZU1h
bmFnZXI+IG1fdGltZXI7CisKKyAgICAgICAgSGFzaE1hcDxpbnQsIFNvY2tldFN0cmVhbUhhbmRs
ZSo+IG1fc3RyZWFtSGFuZGxlTWFwOworICAgICAgICBIYXNoU2V0PGludD4gbV9yZW1vdmVMaXN0
OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXJfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225767</attachid>
            <date>2014-03-04 04:36:42 -0800</date>
            <delta_ts>2014-03-24 06:31:14 -0700</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>v9.diff</filename>
            <type>text/plain</type>
            <size>26824</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZDA3MmY4Li45NDc4ZjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDMtMDQgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQmFzaWMgU29ja2V0U3RyZWFtIGltcGxlbWVudGF0aW9uIGZv
ciBsaWJjdXJsIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyODc0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBTb2NrZXRTdHJlYW0gaW1wbGVtZW50YXRpb24gZm9yIGxpYmN1cmwgYmFj
a2VuZCwKKyAgICAgICAgdXNpbmcgUE9TSVggZnVuY3Rpb24gY2FsbHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUVy
cm9yOjpTb2NrZXRTdHJlYW1FcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hh
cmVkTXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjp+U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVhbVJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtV3JpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJD
YWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaDogQWRkZWQuCisKIDIwMTQtMDMtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgRG9uJ3Qgc3luY2hyb25pemUgYXR0cmlidXRlcyBpbiBy
ZWZsZWN0IHNldHRlcnMgd2hlbiB3ZSBkb24ndCBuZWVkIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagppbmRleCA5NDJhNDA1Li4zYTRlNzliIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKQEAg
LTg0MzAsNiArODQzMCwxNiBAQAogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmNw
cCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgor
ICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQ
bGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8
RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3Jt
KSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhj
bHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9
PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVk
RnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJv
ZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0NsQ29tcGlsZT4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTU0xIYW5k
bGUuY3BwIj4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3Vy
YXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KQEAg
LTE5NDA4LDYgKzE5NDE4LDI2IEBACiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufFdpbjMyJyI+dHJ1
ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9u
PSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQcm9kdWN0aW9ufHg2NCciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21C
dWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxhdGZvcm1cbmV0d29ya1xjdXJsXFNvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaCI+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChD
b25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1
aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9u
KXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+
CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwk
KFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAg
ICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0
Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGUuaCI+CisgICAgICA8RXhjbHVkZWRG
cm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1
Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1
aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z1N1ZmZpeHxXaW4z
MiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENv
bmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8eDY0
JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29u
ZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+
dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0
aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnxXaW4zMiciPnRydWU8
L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUHJvZHVjdGlvbnx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KICAgICA8Q3VzdG9tQnVp
bGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTU0xIYW5kbGUuaCI+CiAg
ICAgICA8RXhjbHVkZWRGcm9tQnVpbGQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBs
YXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKaW5k
ZXggMzBjOTU4OS4uMzdkZjg2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMTkyNiw2ICsxOTI2LDkgQEAK
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRT
dHJlYW1IYW5kbGVDdXJsLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3Vy
bDwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
cGxhdGZvcm1cbmV0d29ya1xjdXJsXFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DbENvbXBp
bGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NM
SGFuZGxlLmNwcCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3VybDwvRmlsdGVy
PgogICAgIDwvQ2xDb21waWxlPgpAQCAtMTQ5OTMsNiArMTQ5OTYsMTUgQEAKICAgICA8Q3VzdG9t
QnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxSZXNvdXJjZVJlc3Bv
bnNlLmgiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAg
ICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBs
YXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1FcnJvci5oIj4KKyAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+Cisg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29j
a2V0U3RyZWFtSGFuZGxlLmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8
L0ZpbHRlcj4KKyAgICA8L0N1c3RvbUJ1aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIElu
Y2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2Vy
LmgiPgorICAgICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KKyAgICA8
L0N1c3RvbUJ1aWxkU3RlcD4KICAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRm
b3JtXG5ldHdvcmtcY3VybFxTU0xIYW5kbGUuaCI+CiAgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5l
dHdvcmtcY3VybDwvRmlsdGVyPgogICAgIDwvQ3VzdG9tQnVpbGRTdGVwPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUVycm9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtRXJyb3Iu
aAppbmRleCBmOTY0MWFkLi5hMWZmZGI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtRXJyb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtRXJyb3IuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0z
NywxMiArMzgsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU29ja2V0U3Ry
ZWFtRXJyb3IgOiBwdWJsaWMgU29ja2V0U3RyZWFtRXJyb3JCYXNlIHsKICAgICBwdWJsaWM6Cisg
ICAgICAgIGVudW0geworICAgICAgICAgICAgUmVzb2x2ZUVycm9yID0gMSwKKyAgICAgICAgICAg
IENvbm5lY3RFcnJvciwKKyAgICAgICAgICAgIFJlYWRFcnJvciwKKyAgICAgICAgICAgIFdyaXRl
RXJyb3IsCisgICAgICAgICAgICBGREVycm9yCisgICAgICAgIH07CisKICAgICAgICAgU29ja2V0
U3RyZWFtRXJyb3IoKSB7IH0KICAgICAgICAgZXhwbGljaXQgU29ja2V0U3RyZWFtRXJyb3IoaW50
IGVycm9yQ29kZSkKICAgICAgICAgICAgIDogU29ja2V0U3RyZWFtRXJyb3JCYXNlKGVycm9yQ29k
ZSkKICAgICAgICAgewogICAgICAgICB9Ci0KICAgICB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oCmluZGV4IGE4MjMxOWYuLjg1NjAwMTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJz
aXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTQyLDEwICs0MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2U7CiAgICAgY2xhc3MgQ3JlZGVudGlhbDsK
ICAgICBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQ7CisgICAgY2xhc3MgU29ja2V0U3Ry
ZWFtSGFuZGxlTWFuYWdlcjsKIAogICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPFNvY2tldFN0cmVhbUhhbmRsZT4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5k
bGVCYXNlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNvY2tldFN0
cmVhbUhhbmRsZT4gY3JlYXRlKGNvbnN0IFVSTCYgdXJsLCBTb2NrZXRTdHJlYW1IYW5kbGVDbGll
bnQqIGNsaWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNvY2tldFN0cmVhbUhhbmRsZSh1cmws
IGNsaWVudCkpOyB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRs
ZT4gY3JlYXRlKGludCBzb2NrZXRGRCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTb2NrZXRTdHJlYW1IYW5kbGUoc29ja2V0RkQsIGNsaWVu
dCkpOyB9CiAKICAgICAgICAgdmlydHVhbCB+U29ja2V0U3RyZWFtSGFuZGxlKCk7CiAKQEAgLTU1
LDEyICs1OCwxOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiwgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
Kik7CisgICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZShpbnQgc29ja2V0RkQsIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCopOwogCiAgICAgICAgIC8vIE5vIGF1dGhlbnRpY2F0aW9uIGZvciBzdHJl
YW1zIHBlciBzZSwgYnV0IHByb3h5IG1heSBhc2sgZm9yIGNyZWRlbnRpYWxzLgogICAgICAgICB2
b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZSYpOwogICAgICAgICB2b2lkIHJlY2VpdmVkQ3JlZGVudGlhbChjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYsIGNvbnN0IENyZWRlbnRpYWwmKTsKICAgICAgICAgdm9pZCBy
ZWNlaXZlZFJlcXVlc3RUb0NvbnRpbnVlV2l0aG91dENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdm9pZCByZWNlaXZlZENhbmNlbGxhdGlvbihjb25z
dCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCisgICAgICAgIGludCBtX3NvY2tldEZEOwor
CisgICAgICAgIHN0YXRpYyB2b2lkIGRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCh2b2lk
KiBjb250ZXh0KTsKKworICAgICAgICBmcmllbmQgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlTWFu
YWdlcjsKICAgICB9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZUN1cmwuY3BwCmluZGV4IDc5YWRjMzAuLmIyMTdjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlQ3VybC5jcHAKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEJy
ZW50IEZ1bGdoYW0uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0
IFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzUsMzUgKzM2LDE0OSBAQAogI2luY2x1ZGUgIlVS
TC5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIgorCisj
aWYgT1MoV0lORE9XUykKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNlbHNlCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNp
bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3N0YXRpYyBzdHJ1Y3QgYWRkcmluZm8qIHJlc29sdmVV
UkwoY29uc3QgVVJMJiB1cmwpCit7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOworICAgIHN0
cnVjdCBhZGRyaW5mbyogcmVzdWx0OworCisgICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKHN0
cnVjdCBhZGRyaW5mbykpOworICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsgLyogQWxs
b3cgSVB2NCBvciBJUHY2ICovCisgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsK
KyAgICBoaW50cy5haV9mbGFncyA9IDA7CisgICAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RP
X1RDUDsKKworICAgIHVuc2lnbmVkIHBvcnROdW1iZXIgPSB1cmwuaGFzUG9ydCgpID8gdXJsLnBv
cnQoKSA6ICh1cmwucHJvdG9jb2xJcygid3NzIikgPyA0NDMgOiA4MCk7CisgICAgY29uc3QgU3Ry
aW5nJiBob3N0bmFtZVN0cmluZyA9IHVybC5ob3N0KCk7CisgICAgY29uc3QgU3RyaW5nJiBwb3J0
U3RyaW5nID0gU3RyaW5nOjpudW1iZXIocG9ydE51bWJlcik7CisgICAgY29uc3QgY2hhciogaG9z
dG5hbWUgPSBmYXN0U3RyRHVwKGhvc3RuYW1lU3RyaW5nLmxhdGluMSgpLmRhdGEoKSk7CisgICAg
Y29uc3QgY2hhciogcG9ydCA9IGZhc3RTdHJEdXAocG9ydFN0cmluZy5sYXRpbjEoKS5kYXRhKCkp
OworCisgICAgaW50IGZhaWwgPSA6OmdldGFkZHJpbmZvKGhvc3RuYW1lLCBwb3J0LCAmaGludHMs
ICZyZXN1bHQpOworICAgIGlmIChmYWlsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworI2lm
bmRlZiBOREVCVUcKKyAgICBzdHJ1Y3QgYWRkcmluZm8qIHJwOworICAgIExPRyhOZXR3b3JrLCAi
UmVzb2x2ZWQgYWRkcmVzc2VzIGZvciAlczolcyA6IiwgaG9zdG5hbWUsIHBvcnQpOworICAgIGZv
ciAocnAgPSByZXN1bHQ7IHJwICE9IDA7IHJwID0gcnAtPmFpX25leHQpIHsKKyAgICAgICAgTE9H
KE5ldHdvcmssICIgRmFtaWx5OiAlWCBTb2NrZXR0eXBlOiAlWCBQcm90b2NvbDogJXgiLCBycC0+
YWlfZmFtaWx5LCBycC0+YWlfc29ja3R5cGUsIHJwLT5haV9wcm90b2NvbCk7CisgICAgICAgIGNo
YXIgaG9zdFtOSV9NQVhIT1NUXSwgcG9ydFtOSV9NQVhTRVJWXTsKKyAgICAgICAgaWYgKDo6Z2V0
bmFtZWluZm8ocnAtPmFpX2FkZHIsIHJwLT5haV9hZGRybGVuLCBob3N0LCBzaXplb2YoaG9zdCks
IHBvcnQsIHNpemVvZihwb3J0KSwgTklfTlVNRVJJQ0hPU1QgfCBOSV9OVU1FUklDU0VSVikgPT0g
MCkKKyAgICAgICAgICAgIExPRyhOZXR3b3JrLCAiIGhvc3Q9JXMsIHNlcnZpY2U9JXMiLCBob3N0
LCBwb3J0KTsKKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRp
YyBpbnQgdHJ5Q29ubmVjdGlvbihzdHJ1Y3QgYWRkcmluZm8qIHNlcnZlcikKK3sKKyAgICBpbnQg
c29ja2V0RkQgPSA6OnNvY2tldChzZXJ2ZXItPmFpX2ZhbWlseSwgU09DS19TVFJFQU0sIHNlcnZl
ci0+YWlfcHJvdG9jb2wpOworCisgICAgaWYgKHNvY2tldEZEID09IC0xKSB7CisgICAgICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlIGZhaWxlZCB0byBjcmVhdGUgc29ja2V0LiIp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoOjpjb25uZWN0KHNvY2tldEZE
LCBzZXJ2ZXItPmFpX2FkZHIsIHNlcnZlci0+YWlfYWRkcmxlbikgPCAwKSB7CisgICAgICAgIExP
RyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlIGZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZl
ci4iKTsKKyAgICAgICAgOjpjbG9zZShzb2NrZXRGRCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIHJldHVybiBzb2NrZXRGRDsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6
OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCh2b2lkKiBjb250ZXh0KQoreworICAgIFNv
Y2tldFN0cmVhbUhhbmRsZSogc3RyZWFtID0gcmVpbnRlcnByZXRfY2FzdDxTb2NrZXRTdHJlYW1I
YW5kbGUqPihjb250ZXh0KTsKKworICAgIHN0cnVjdCBhZGRyaW5mbyogc2VydmVyID0gcmVzb2x2
ZVVSTChzdHJlYW0tPm1fdXJsKTsKKyAgICBpZiAoIXNlcnZlcikgeworICAgICAgICBMT0coTmV0
d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSBjb3VsZCBub3QgcmVzb2x2ZTogJXMuIiwgc3RyZWFt
LT5tX3VybC5ob3N0KCkubGF0aW4xKCkuZGF0YSgpKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xp
ZW50KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFt
KHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OlJlc29sdmVFcnJv
cikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UnbGwgaXRlcmF0ZSBvdmVy
IHRoZSByZXNvbHZlZCBhZGRyZXNzZXMgYW5kIHRyeSB0aGUgY29ubmVjdGlvbi4KKyAgICBpbnQg
c29ja2V0RkQ7CisgICAgZm9yICg7IHNlcnZlciAhPSBOVUxMOyBzZXJ2ZXIgPSBzZXJ2ZXItPmFp
X25leHQpIHsKKyAgICAgICAgaWYgKChzb2NrZXRGRCA9IHRyeUNvbm5lY3Rpb24oc2VydmVyKSkp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBmcmVlYWRkcmluZm8oc2VydmVyKTsK
KworICAgIGlmICghc29ja2V0RkQpIHsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisg
ICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFtKHN0cmVhbSwg
U29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OkNvbm5lY3RFcnJvcikpOworCisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzdHJlYW0tPm1fc29ja2V0RkQgPSBzb2NrZXRG
RDsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLmFkZChz
dHJlYW0pOworICAgIHN0cmVhbS0+bV9zdGF0ZSA9IE9wZW47CisgICAgc3RyZWFtLT5tX2NsaWVu
dC0+ZGlkT3BlblNvY2tldFN0cmVhbShzdHJlYW0pOworfQorCiBTb2NrZXRTdHJlYW1IYW5kbGU6
OlNvY2tldFN0cmVhbUhhbmRsZShjb25zdCBVUkwmIHVybCwgU29ja2V0U3RyZWFtSGFuZGxlQ2xp
ZW50KiBjbGllbnQpCiAgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlKHVybCwgY2xpZW50KQog
ewogICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAi
LCB0aGlzLCBtX2NsaWVudCk7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoJmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCwgdGhpcyk7Cit9CisKK1Nv
Y2tldFN0cmVhbUhhbmRsZTo6U29ja2V0U3RyZWFtSGFuZGxlKGludCBzb2NrZXRGRCwgU29ja2V0
U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpCisgICAgOiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNl
KFVSTCgpLCBjbGllbnQpCisgICAgLCBtX3NvY2tldEZEKHNvY2tldEZEKQoreworICAgIExPRyhO
ZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIG5ldyBjbGllbnQgJXAgRkQ6ICVkIiwgdGhp
cywgbV9jbGllbnQsIG1fc29ja2V0RkQpOworCisgICAgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdl
cjo6c2hhcmVkSW5zdGFuY2UoKS5hZGQodGhpcyk7CisgICAgbV9zdGF0ZSA9IE9wZW47CisgICAg
bV9jbGllbnQtPmRpZE9wZW5Tb2NrZXRTdHJlYW0odGhpcyk7CiB9CiAKIFNvY2tldFN0cmVhbUhh
bmRsZTo6flNvY2tldFN0cmVhbUhhbmRsZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRT
dHJlYW1IYW5kbGUgJXAgZGVsZXRlIiwgdGhpcyk7CiAgICAgc2V0Q2xpZW50KDApOwotICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLWludCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtU2Vu
ZChjb25zdCBjaGFyKiwgaW50KQoraW50IFNvY2tldFN0cmVhbUhhbmRsZTo6cGxhdGZvcm1TZW5k
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgTE9HKE5ldHdvcmssICJTb2Nr
ZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kIiwgdGhpcyk7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRs
ZSAlcCBwbGF0Zm9ybVNlbmQgJWQgYnl0ZXMiLCB0aGlzLCBsZW5ndGgpOworICAgIFNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkuaGFuZGxlU3RyZWFtV3JpdGUodGhp
cywgZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gbGVuZ3RoOwogfQogCiB2b2lkIFNvY2tldFN0
cmVhbUhhbmRsZTo6cGxhdGZvcm1DbG9zZSgpCiB7CiAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRT
dHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1DbG9zZSIsIHRoaXMpOwotICAgIG5vdEltcGxlbWVudGVk
KCk7CisKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgpLmNh
bmNlbCh0aGlzKTsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OmRpZFJlY2VpdmVBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFt
SGFuZGxlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwv
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOTQ4NmZjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmNwcApAQCAtMCwwICsx
LDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIgorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgor
I2luY2x1ZGUgIlNvY2tldFN0cmVhbUVycm9yLmgiCisjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFu
ZGxlQ2xpZW50LmgiCisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNp
bmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0eXBlZGVm
IEhhc2hNYXA8aW50LCBTb2NrZXRTdHJlYW1IYW5kbGUqPjo6S2V5VmFsdWVQYWlyVHlwZSBTdHJl
YW1IYW5kbGVNYXBQYWlyVHlwZTsKKworU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlciYgU29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBTb2Nr
ZXRTdHJlYW1IYW5kbGVNYW5hZ2VyIHNoYXJlZEluc3RhbmNlOworICAgIHJldHVybiBzaGFyZWRJ
bnN0YW5jZTsKK30KKworTXV0ZXgqIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZE11
dGV4KCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE11dGV4LCBtdXRleCwgKCkpOworICAg
IHJldHVybiAmbXV0ZXg7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OlNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXIoKQorICAgIDogbV90aW1lcih0aGlzLCAmU29ja2V0U3RyZWFtSGFu
ZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJDYWxsYmFjaykKK3sKK30KKworU29ja2V0U3RyZWFtSGFu
ZGxlTWFuYWdlcjo6flNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIoKQoreworICAgIGZvciAoYXV0
byBlbnRyeSA6IG1fc3RyZWFtSGFuZGxlTWFwKSB7CisgICAgICAgIFNvY2tldFN0cmVhbUhhbmRs
ZSogc3RyZWFtID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmICghc3RyZWFtKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgc3RyZWFtLT5kaXNjb25uZWN0KCk7CisgICAgfQorfQor
Cit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmFkZChTb2NrZXRTdHJlYW1IYW5kbGUq
IHN0cmVhbSkKK3sKKyAgICBNdXRleCogbXV0ZXggPSBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2Vy
OjpzaGFyZWRNdXRleCgpOworICAgIG11dGV4LT5sb2NrKCk7CisgICAgbV9zdHJlYW1IYW5kbGVN
YXAuc2V0KHN0cmVhbS0+bV9zb2NrZXRGRCwgc3RyZWFtKTsKKyAgICBtdXRleC0+dW5sb2NrKCk7
CisKKyAgICBMT0coTmV0d29yaywgIlN0cmVhbSAlZDogQWRkZWQuIiwgc3RyZWFtLT5tX3NvY2tl
dEZEKTsKKworICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3RpbWVyLnN0
YXJ0T25lU2hvdCgwLjA1KTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpj
YW5jZWwoU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW0pCit7CisgICAgTE9HKE5ldHdvcmssICJT
dHJlYW0gJWQ6IENhbmNlbGxlZC4iLCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgIG1fcmVtb3Zl
TGlzdC5hZGQoc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICA6OmNsb3NlKHN0cmVhbS0+bV9zb2Nr
ZXRGRCk7CisKKyAgICBpZiAoc3RyZWFtLT5jbGllbnQoKSkKKyAgICAgICAgc3RyZWFtLT5jbGll
bnQoKS0+ZGlkQ2xvc2VTb2NrZXRTdHJlYW0oc3RyZWFtKTsKK30KKwordm9pZCBTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjpoYW5kbGVTdHJlYW1SZWFkKFNvY2tldFN0cmVhbUhhbmRsZSogc3Ry
ZWFtKQoreworICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IHByb3RlY3Qoc3RyZWFtKTsK
KyAgICBjb25zdCBzaXplX3QgYnVmZmVyU2l6ZSA9IDE2ICogMTAyNDsKKyAgICBjaGFyIGJ1ZmZl
cltidWZmZXJTaXplXTsKKworICAgIHNzaXplX3QgcmVhZENvdW50ID0gOjpyZWFkKHN0cmVhbS0+
bV9zb2NrZXRGRCwgYnVmZmVyLCBidWZmZXJTaXplKTsKKworICAgIGlmIChyZWFkQ291bnQgPCAw
KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBFcnJvciBkdXJpbmcgcmVhZC4i
LCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgICAgICBpZiAoc3RyZWFtLT5jbGllbnQoKSkKKyAg
ICAgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZEZhaWxTb2NrZXRTdHJlYW0oc3RyZWFtLCBT
b2NrZXRTdHJlYW1FcnJvcihTb2NrZXRTdHJlYW1FcnJvcjo6UmVhZEVycm9yKSk7CisKKyAgICAg
ICAgc3RyZWFtLT5kaXNjb25uZWN0KCk7CisgICAgfSBlbHNlIGlmIChyZWFkQ291bnQgPiAwKSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBSZWFkICVsZCBieXRlcy4iLCBzdHJl
YW0tPm1fc29ja2V0RkQsIHJlYWRDb3VudCk7CisKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50
KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRSZWNlaXZlU29ja2V0U3RyZWFt
RGF0YShzdHJlYW0sIGJ1ZmZlciwgcmVhZENvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBM
T0coTmV0d29yaywgIlN0cmVhbSAlZDogUmVhZCByZXR1cm5lZCAwLCBjbG9zaW5nIGNvbm5lY3Rp
b24uIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgc3RyZWFtLT5kaXNjb25uZWN0KCk7
CisgICAgfQorfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVh
bVdyaXRlKFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
Ynl0ZXNUb1NlbmQpCit7CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdChz
dHJlYW0pOworICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBUcnlpbmcgdG8gc2VuZCAlZCBi
eXRlcy4iLCBzdHJlYW0tPm1fc29ja2V0RkQsIGJ5dGVzVG9TZW5kKTsKKworICAgIHNzaXplX3Qg
c2VudCA9IDo6d3JpdGUoc3RyZWFtLT5tX3NvY2tldEZELCBkYXRhLCBieXRlc1RvU2VuZCk7CisK
KyAgICBpZiAoc2VudCA8IDApIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IEVy
cm9yIHdyaXRpbmcgZGF0YS4iLCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgICAgICBpZiAoc3Ry
ZWFtLT5jbGllbnQoKSkKKyAgICAgICAgICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZEZhaWxTb2Nr
ZXRTdHJlYW0oc3RyZWFtLCBTb2NrZXRTdHJlYW1FcnJvcihTb2NrZXRTdHJlYW1FcnJvcjo6V3Jp
dGVFcnJvcikpOworCisgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0gZWxzZSBp
ZiAoc2VudCA+IDApIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IFNlbnQgJWxk
IGJ5dGVzLiIsIHN0cmVhbS0+bV9zb2NrZXRGRCwgc2VudCk7CisgICAgfSBlbHNlCisgICAgICAg
IExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBOb3RoaW5nIHNlbnQuIiwgc3RyZWFtLT5tX3NvY2tl
dEZEKTsKK30KKwordm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzdHJlYW1UaW1lckNh
bGxiYWNrKFRpbWVyPFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI+KikKK3sKKyAgICBNdXRleCog
bXV0ZXggPSBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRNdXRleCgpOworICAgIGZk
X3NldCBmZHJlYWQ7CisgICAgZmRfc2V0IGZkZXhjZXA7CisgICAgaW50IG1heGZkID0gMDsKKwor
ICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisgICAgdGltZW91dC50dl9zZWMgPSAwOworICAg
IHRpbWVvdXQudHZfdXNlYyA9IDIgKiAxMDAwOyAvLyBzZWxlY3Qgd2FpdHMgbWljcm9zZWNvbmRz
CisKKyAgICBtdXRleC0+bG9jaygpOworICAgIC8vIFJldHJ5ICdzZWxlY3QnIGlmIGl0IHdhcyBp
bnRlcnJ1cHRlZCBieSBhIHByb2Nlc3Mgc2lnbmFsLgorICAgIGludCByYyA9IDA7CisgICAgZG8g
eworICAgICAgICBGRF9aRVJPKCZmZHJlYWQpOworICAgICAgICBGRF9aRVJPKCZmZGV4Y2VwKTsK
KworICAgICAgICBmb3IgKGNvbnN0IFN0cmVhbUhhbmRsZU1hcFBhaXJUeXBlJiBlbnRyeSA6IG1f
c3RyZWFtSGFuZGxlTWFwKSB7CisgICAgICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVh
bSA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgaWYgKCFzdHJlYW0pCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgICAgIEZEX1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZm
ZHJlYWQpOworICAgICAgICAgICAgRkRfU0VUKHN0cmVhbS0+bV9zb2NrZXRGRCwgJmZkZXhjZXAp
OworCisgICAgICAgICAgICBpZiAoc3RyZWFtLT5tX3NvY2tldEZEID4gbWF4ZmQpCisgICAgICAg
ICAgICAgICAgbWF4ZmQgPSBzdHJlYW0tPm1fc29ja2V0RkQ7CisgICAgICAgIH0KKworICAgICAg
ICByYyA9IDo6c2VsZWN0KG1heGZkICsgMSwgJmZkcmVhZCwgMCwgJmZkZXhjZXAsICZ0aW1lb3V0
KTsKKyAgICB9IHdoaWxlIChyYyA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICBpZiAo
LTEgPT0gcmMpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW0gaGFuZGxpbmcg
ZXJyb3I6IHNlbGVjdCByZXR1cm5lZCAtMSIpOworICAgICAgICBtdXRleC0+dW5sb2NrKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKGNvbnN0IFN0cmVhbUhhbmRsZU1hcFBh
aXJUeXBlJiBlbnRyeSA6IG1fc3RyZWFtSGFuZGxlTWFwKSB7CisgICAgICAgIFNvY2tldFN0cmVh
bUhhbmRsZSogc3RyZWFtID0gZW50cnkudmFsdWU7CisgICAgICAgIGlmICghc3RyZWFtKSB7Cisg
ICAgICAgICAgICBtX3JlbW92ZUxpc3QuYWRkKGVudHJ5LmtleSk7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChGRF9JU1NFVChzdHJlYW0tPm1fc29ja2V0
RkQsICZmZHJlYWQpKSB7CisgICAgICAgICAgICBMT0coTmV0d29yaywgIlN0cmVhbSAlZDogUmVh
ZHkgZm9yIHJlYWQuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgICAgIEZEX0NMUihz
dHJlYW0tPm1fc29ja2V0RkQsICZmZHJlYWQpOworICAgICAgICAgICAgaGFuZGxlU3RyZWFtUmVh
ZChzdHJlYW0pOworICAgICAgICB9CisKKyAgICAgICAgaWYgKEZEX0lTU0VUKHN0cmVhbS0+bV9z
b2NrZXRGRCwgJmZkZXhjZXApKSB7CisgICAgICAgICAgICBMT0coTmV0d29yaywgIlN0cmVhbSAl
ZDogRmlsZSBkZXNjcmlwdG9yIGVycm9yLiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgICAg
ICAgICBGRF9DTFIoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRleGNlcCk7CisgICAgICAgICAgICBp
ZiAoc3RyZWFtLT5jbGllbnQoKSkKKyAgICAgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5k
aWRGYWlsU29ja2V0U3RyZWFtKHN0cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFt
RXJyb3I6OkZERXJyb3IpKTsKKworICAgICAgICAgICAgc3RyZWFtLT5kaXNjb25uZWN0KCk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgbXV0ZXgtPnVubG9jaygpOworCisgICAgZm9yIChpbnQgc29j
a2V0SWQgOiBtX3JlbW92ZUxpc3QpIHsKKyAgICAgICAgLy8gQnkgdGhpcyBwb2ludCBpdCBpcyBj
ZXJ0YWluIHRoYXQgdGhlIHN0cmVhbSBpcyBjbG9zZWQuCisgICAgICAgIG1fc3RyZWFtSGFuZGxl
TWFwLnJlbW92ZShzb2NrZXRJZCk7CisgICAgfQorCisgICAgbV9yZW1vdmVMaXN0LmNsZWFyKCk7
CisKKyAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSAmJiBtX3N0cmVhbUhhbmRsZU1hcC5zaXpl
KCkpCisgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90KDAuMDUpOworfQorCit9IC8vIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2Nr
ZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmM5ODVjMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTb2NrZXRTdHJlYW1IYW5kbGVN
YW5hZ2VyX2gKKyNkZWZpbmUgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcl9oCisKKyNpbmNsdWRl
ICJTb2NrZXRTdHJlYW1IYW5kbGUuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisgICAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlciB7CisgICAgcHVibGlj
OgorICAgICAgICBzdGF0aWMgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlciYgc2hhcmVkSW5zdGFu
Y2UoKTsKKworICAgICAgICBzdGF0aWMgTXV0ZXgqIHNoYXJlZE11dGV4KCk7CisgICAgICAgIHZv
aWQgYWRkKFNvY2tldFN0cmVhbUhhbmRsZSopOworICAgICAgICB2b2lkIGNhbmNlbChTb2NrZXRT
dHJlYW1IYW5kbGUqKTsKKworICAgICAgICB2b2lkIGhhbmRsZVN0cmVhbVJlYWQoU29ja2V0U3Ry
ZWFtSGFuZGxlKik7CisgICAgICAgIHZvaWQgaGFuZGxlU3RyZWFtV3JpdGUoU29ja2V0U3RyZWFt
SGFuZGxlKiwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAgICAgIHZvaWQgc3Ry
ZWFtVGltZXJDYWxsYmFjayhUaW1lcjxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyPiopOworCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcigpOworICAgICAg
ICB+U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcigpOworCisKKyAgICAgICAgVGltZXI8U29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlcj4gbV90aW1lcjsKKworICAgICAgICBIYXNoTWFwPGludCwgU29j
a2V0U3RyZWFtSGFuZGxlKj4gbV9zdHJlYW1IYW5kbGVNYXA7CisgICAgICAgIEhhc2hTZXQ8aW50
PiBtX3JlbW92ZUxpc3Q7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227640</attachid>
            <date>2014-03-24 06:31:14 -0700</date>
            <delta_ts>2022-03-01 02:26:56 -0800</delta_ts>
            <desc>Proposed patch 4</desc>
            <filename>v10.diff</filename>
            <type>text/plain</type>
            <size>26984</size>
            <attacher name="Mátyás Mustoha">mmatyas</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0ZjcxMjlkLi42YzIyNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkg
QEAKKzIwMTQtMDMtMjQgIE3DoXR5w6FzIE11c3RvaGEgIDxtbWF0eWFzQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBbY3VybF0gQmFzaWMgU29ja2V0U3RyZWFtIGltcGxlbWVudGF0aW9uIGZv
ciBsaWJjdXJsIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyODc0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBTb2NrZXRTdHJlYW0gaW1wbGVtZW50YXRpb24gZm9yIGxpYmN1cmwgYmFj
a2VuZCwKKyAgICAgICAgdXNpbmcgUE9TSVggZnVuY3Rpb24gY2FsbHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qOgorICAgICAgICAqIFdlYkNvcmUudmN4cHJv
ai9XZWJDb3JlLnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtRXJyb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNvY2tldFN0cmVhbUVy
cm9yOjpTb2NrZXRTdHJlYW1FcnJvcik6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJs
L1NvY2tldFN0cmVhbUhhbmRsZS5oOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFu
ZGxlOjpjcmVhdGUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJl
YW1IYW5kbGVDdXJsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6dHJ5Q29ubmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGU6OmRpc3BhdGNoQ29ubmVjdGlvbk9uTWFpblRocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlOjpwbGF0Zm9ybUNsb3NlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkSW5z
dGFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hh
cmVkTXV0ZXgpOgorICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChXZWJDb3JlOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyOjp+U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQpOgorICAgICAgICAoV2ViQ29y
ZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2FuY2VsKToKKyAgICAgICAgKFdlYkNvcmU6
OlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVhbVJlYWQpOgorICAgICAgICAo
V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtV3JpdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJD
YWxsYmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhh
bmRsZU1hbmFnZXIuaDogQWRkZWQuCisKIDIwMTQtMDMtMjQgIEphdmllciBGZXJuYW5kZXogIDxq
ZmVybmFuZGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW0NTUyBHcmlkIExheW91dF0gVXBkYXRl
IG5hbWVkIDxncmlkLWxpbmU+IHN5bnRheCB0byB0aGUgbGFzdCB2ZXJzaW9uIG9mIHRoZSBzcGVj
cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKaW5k
ZXggMWI0YzgwMC4uOWUyY2NkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHBy
b2ovV2ViQ29yZS52Y3hwcm9qCkBAIC04NTkzLDYgKzg1OTMsMTYgQEAKICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CiAgICAgPC9DbENvbXBpbGU+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlci5jcHAiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVl
PC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249
IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1
ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29u
ZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVk
RnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmln
dXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21C
dWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRp
b24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVp
bGQ+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmNwcCI+CiAgICAgICA8RXhjbHVkZWRGcm9tQnVpbGQg
Q29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMici
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+dHJ1ZTwv
RXhjbHVkZWRGcm9tQnVpbGQ+CkBAIC0xOTYxMCw2ICsxOTYyMCwyNiBAQAogICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UHJvZHVjdGlvbnxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgogICAgICAgPEV4Y2x1
ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0n
UHJvZHVjdGlvbnx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KICAgICA8L0N1c3RvbUJ1
aWxkU3RlcD4KKyAgICA8Q3VzdG9tQnVpbGRTdGVwIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdv
cmtcY3VybFxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyLmgiPgorICAgICAgPEV4Y2x1ZGVkRnJv
bUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8
V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWls
ZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWdTdWZmaXh8V2luMzIn
Ij50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25k
aXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnU3VmZml4fHg2NCci
PnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRp
dGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPnRy
dWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlv
bj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258V2luMzInIj50cnVlPC9F
eGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249Iick
KENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1Byb2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhj
bHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1aWxk
U3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxl
LmgiPgorICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlv
bil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4K
KyAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQo
UGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nRGVidWdTdWZmaXh8V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAg
IDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZv
cm0pJz09J0RlYnVnU3VmZml4fHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAg
PEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9y
bSknPT0nUmVsZWFzZXxXaW4zMiciPnRydWU8L0V4Y2x1ZGVkRnJvbUJ1aWxkPgorICAgICAgPEV4
Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSkn
PT0nUmVsZWFzZXx4NjQnIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258V2luMzInIj50cnVlPC9FeGNsdWRlZEZyb21CdWlsZD4KKyAgICAgIDxFeGNsdWRl
ZEZyb21CdWlsZCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1By
b2R1Y3Rpb258eDY0JyI+dHJ1ZTwvRXhjbHVkZWRGcm9tQnVpbGQ+CisgICAgPC9DdXN0b21CdWls
ZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3Jr
XGN1cmxcU1NMSGFuZGxlLmgiPgogICAgICAgPEV4Y2x1ZGVkRnJvbUJ1aWxkIENvbmRpdGlvbj0i
JyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj50cnVlPC9FeGNs
dWRlZEZyb21CdWlsZD4KICAgICAgIDxFeGNsdWRlZEZyb21CdWlsZCBDb25kaXRpb249IickKENv
bmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciPnRydWU8L0V4Y2x1ZGVkRnJv
bUJ1aWxkPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNv
cmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDlkMjA0YTAuLjdlNzBhOWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMK
QEAgLTE5MTcsNiArMTkxNyw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxwbGF0Zm9y
bVxuZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtSGFuZGxlQ3VybC5jcHAiPgogICAgICAgPEZpbHRl
cj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHBsYXRmb3JtXG5ldHdvcmtcY3VybFxTb2NrZXRTdHJlYW1I
YW5kbGVNYW5hZ2VyLmNwcCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3VybDwv
RmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cbmV0d29ya1xjdXJsXFNTTEhhbmRsZS5jcHAiPgogICAgICAgPEZpbHRlcj5wbGF0Zm9y
bVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KQEAgLTE1MDc1LDYgKzE1
MDc4LDE1IEBACiAgICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3
b3JrXGN1cmxcUmVzb3VyY2VSZXNwb25zZS5oIj4KICAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0
d29ya1xjdXJsPC9GaWx0ZXI+CiAgICAgPC9DdXN0b21CdWlsZFN0ZXA+CisgICAgPEN1c3RvbUJ1
aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29ja2V0U3RyZWFtRXJy
b3IuaCI+CisgICAgICA8RmlsdGVyPnBsYXRmb3JtXG5ldHdvcmtcY3VybDwvRmlsdGVyPgorICAg
IDwvQ3VzdG9tQnVpbGRTdGVwPgorICAgIDxDdXN0b21CdWlsZFN0ZXAgSW5jbHVkZT0iLi5ccGxh
dGZvcm1cbmV0d29ya1xjdXJsXFNvY2tldFN0cmVhbUhhbmRsZS5oIj4KKyAgICAgIDxGaWx0ZXI+
cGxhdGZvcm1cbmV0d29ya1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+Cisg
ICAgPEN1c3RvbUJ1aWxkU3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU29j
a2V0U3RyZWFtSGFuZGxlTWFuYWdlci5oIj4KKyAgICAgIDxGaWx0ZXI+cGxhdGZvcm1cbmV0d29y
a1xjdXJsPC9GaWx0ZXI+CisgICAgPC9DdXN0b21CdWlsZFN0ZXA+CiAgICAgPEN1c3RvbUJ1aWxk
U3RlcCBJbmNsdWRlPSIuLlxwbGF0Zm9ybVxuZXR3b3JrXGN1cmxcU1NMSGFuZGxlLmgiPgogICAg
ICAgPEZpbHRlcj5wbGF0Zm9ybVxuZXR3b3JrXGN1cmw8L0ZpbHRlcj4KICAgICA8L0N1c3RvbUJ1
aWxkU3RlcD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3Vy
bC9Tb2NrZXRTdHJlYW1FcnJvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9j
dXJsL1NvY2tldFN0cmVhbUVycm9yLmgKaW5kZXggZjk2NDFhZC4uYTFmZmRiOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUVycm9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVh
bUVycm9yLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2ds
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZl
cnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQpAQCAtMzcsMTIgKzM4LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIFNvY2tldFN0cmVhbUVycm9yIDogcHVibGljIFNvY2tldFN0cmVhbUVycm9y
QmFzZSB7CiAgICAgcHVibGljOgorICAgICAgICBlbnVtIHsKKyAgICAgICAgICAgIFJlc29sdmVF
cnJvciA9IDEsCisgICAgICAgICAgICBDb25uZWN0RXJyb3IsCisgICAgICAgICAgICBSZWFkRXJy
b3IsCisgICAgICAgICAgICBXcml0ZUVycm9yLAorICAgICAgICAgICAgRkRFcnJvcgorICAgICAg
ICB9OworCiAgICAgICAgIFNvY2tldFN0cmVhbUVycm9yKCkgeyB9CiAgICAgICAgIGV4cGxpY2l0
IFNvY2tldFN0cmVhbUVycm9yKGludCBlcnJvckNvZGUpCiAgICAgICAgICAgICA6IFNvY2tldFN0
cmVhbUVycm9yQmFzZShlcnJvckNvZGUpCiAgICAgICAgIHsKICAgICAgICAgfQotCiAgICAgfTsK
IAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGUuaAppbmRleCBhODIzMTlm
Li44NTYwMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1
cmwvU29ja2V0U3RyZWFtSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZS5oCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC00MiwxMCArNDMsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwog
ICAgIGNsYXNzIENyZWRlbnRpYWw7CiAgICAgY2xhc3MgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50
OworICAgIGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAKICAgICBjbGFzcyBTb2Nr
ZXRTdHJlYW1IYW5kbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxTb2NrZXRTdHJlYW1IYW5kbGU+LCBw
dWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQmFzZSB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShjb25zdCBVUkwmIHVybCwg
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50KiBjbGllbnQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBT
b2NrZXRTdHJlYW1IYW5kbGUodXJsLCBjbGllbnQpKTsgfQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IGNyZWF0ZShpbnQgc29ja2V0RkQsIFNvY2tldFN0cmVh
bUhhbmRsZUNsaWVudCogY2xpZW50KSB7IHJldHVybiBhZG9wdFJlZihuZXcgU29ja2V0U3RyZWFt
SGFuZGxlKHNvY2tldEZELCBjbGllbnQpKTsgfQogCiAgICAgICAgIHZpcnR1YWwgflNvY2tldFN0
cmVhbUhhbmRsZSgpOwogCkBAIC01NSwxMiArNTgsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKGNvbnN0IFVSTCYsIFNv
Y2tldFN0cmVhbUhhbmRsZUNsaWVudCopOworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUoaW50
IHNvY2tldEZELCBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQqKTsKIAogICAgICAgICAvLyBObyBh
dXRoZW50aWNhdGlvbiBmb3Igc3RyZWFtcyBwZXIgc2UsIGJ1dCBwcm94eSBtYXkgYXNrIGZvciBj
cmVkZW50aWFscy4KICAgICAgICAgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKICAgICAgICAgdm9pZCByZWNlaXZl
ZENyZWRlbnRpYWwoY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmLCBjb25zdCBDcmVkZW50
aWFsJik7CiAgICAgICAgIHZvaWQgcmVjZWl2ZWRSZXF1ZXN0VG9Db250aW51ZVdpdGhvdXRDcmVk
ZW50aWFsKGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CiAgICAgICAgIHZvaWQgcmVj
ZWl2ZWRDYW5jZWxsYXRpb24oY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKKworICAg
ICAgICBpbnQgbV9zb2NrZXRGRDsKKworICAgICAgICBzdGF0aWMgdm9pZCBkaXNwYXRjaENvbm5l
Y3Rpb25Pbk1haW5UaHJlYWQodm9pZCogY29udGV4dCk7CisKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI7CiAgICAgfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9T
b2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY3VybC9Tb2NrZXRTdHJlYW1IYW5kbGVDdXJsLmNwcAppbmRleCA0ZjI2NmRiLi45YjcxZmZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0
U3RyZWFtSGFuZGxlQ3VybC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZUN1cmwuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAwOSBCcmVudCBGdWxnaGFtLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTM3LDM1ICsz
OCwxNDkgQEAKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgogI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVh
bUhhbmRsZU1hbmFnZXIuaCIKKworI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSA8d2luZG93cy5o
PgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZWxzZQorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgor
I2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgc3Ry
dWN0IGFkZHJpbmZvKiByZXNvbHZlVVJMKGNvbnN0IFVSTCYgdXJsKQoreworICAgIHN0cnVjdCBh
ZGRyaW5mbyBoaW50czsKKyAgICBzdHJ1Y3QgYWRkcmluZm8qIHJlc3VsdDsKKworICAgIG1lbXNl
dCgmaGludHMsIDAsIHNpemVvZihzdHJ1Y3QgYWRkcmluZm8pKTsKKyAgICBoaW50cy5haV9mYW1p
bHkgPSBBRl9VTlNQRUM7IC8qIEFsbG93IElQdjQgb3IgSVB2NiAqLworICAgIGhpbnRzLmFpX3Nv
Y2t0eXBlID0gU09DS19TVFJFQU07CisgICAgaGludHMuYWlfZmxhZ3MgPSAwOworICAgIGhpbnRz
LmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7CisKKyAgICB1bnNpZ25lZCBwb3J0TnVtYmVyID0g
dXJsLmhhc1BvcnQoKSA/IHVybC5wb3J0KCkgOiAodXJsLnByb3RvY29sSXMoIndzcyIpID8gNDQz
IDogODApOworICAgIGNvbnN0IFN0cmluZyYgaG9zdG5hbWVTdHJpbmcgPSB1cmwuaG9zdCgpOwor
ICAgIGNvbnN0IFN0cmluZyYgcG9ydFN0cmluZyA9IFN0cmluZzo6bnVtYmVyKHBvcnROdW1iZXIp
OworICAgIGNvbnN0IGNoYXIqIGhvc3RuYW1lID0gZmFzdFN0ckR1cChob3N0bmFtZVN0cmluZy5s
YXRpbjEoKS5kYXRhKCkpOworICAgIGNvbnN0IGNoYXIqIHBvcnQgPSBmYXN0U3RyRHVwKHBvcnRT
dHJpbmcubGF0aW4xKCkuZGF0YSgpKTsKKworICAgIGludCBmYWlsID0gOjpnZXRhZGRyaW5mbyho
b3N0bmFtZSwgcG9ydCwgJmhpbnRzLCAmcmVzdWx0KTsKKyAgICBpZiAoZmFpbCkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc3RydWN0IGFkZHJpbmZvKiBy
cDsKKyAgICBMT0coTmV0d29yaywgIlJlc29sdmVkIGFkZHJlc3NlcyBmb3IgJXM6JXMgOiIsIGhv
c3RuYW1lLCBwb3J0KTsKKyAgICBmb3IgKHJwID0gcmVzdWx0OyBycCAhPSAwOyBycCA9IHJwLT5h
aV9uZXh0KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiIEZhbWlseTogJVggU29ja2V0dHlwZTog
JVggUHJvdG9jb2w6ICV4IiwgcnAtPmFpX2ZhbWlseSwgcnAtPmFpX3NvY2t0eXBlLCBycC0+YWlf
cHJvdG9jb2wpOworICAgICAgICBjaGFyIGhvc3RbTklfTUFYSE9TVF0sIHBvcnRbTklfTUFYU0VS
Vl07CisgICAgICAgIGlmICg6OmdldG5hbWVpbmZvKHJwLT5haV9hZGRyLCBycC0+YWlfYWRkcmxl
biwgaG9zdCwgc2l6ZW9mKGhvc3QpLCBwb3J0LCBzaXplb2YocG9ydCksIE5JX05VTUVSSUNIT1NU
IHwgTklfTlVNRVJJQ1NFUlYpID09IDApCisgICAgICAgICAgICBMT0coTmV0d29yaywgIiBob3N0
PSVzLCBzZXJ2aWNlPSVzIiwgaG9zdCwgcG9ydCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHRyeUNvbm5lY3Rpb24oc3RydWN0IGFkZHJpbmZv
KiBzZXJ2ZXIpCit7CisgICAgaW50IHNvY2tldEZEID0gOjpzb2NrZXQoc2VydmVyLT5haV9mYW1p
bHksIFNPQ0tfU1RSRUFNLCBzZXJ2ZXItPmFpX3Byb3RvY29sKTsKKworICAgIGlmIChzb2NrZXRG
RCA9PSAtMSkgeworICAgICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSBmYWls
ZWQgdG8gY3JlYXRlIHNvY2tldC4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
aWYgKDo6Y29ubmVjdChzb2NrZXRGRCwgc2VydmVyLT5haV9hZGRyLCBzZXJ2ZXItPmFpX2FkZHJs
ZW4pIDwgMCkgeworICAgICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSBmYWls
ZWQgdG8gY29ubmVjdCB0byBzZXJ2ZXIuIik7CisgICAgICAgIDo6Y2xvc2Uoc29ja2V0RkQpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gc29ja2V0RkQ7Cit9CisKK3Zv
aWQgU29ja2V0U3RyZWFtSGFuZGxlOjpkaXNwYXRjaENvbm5lY3Rpb25Pbk1haW5UaHJlYWQodm9p
ZCogY29udGV4dCkKK3sKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVhbSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8U29ja2V0U3RyZWFtSGFuZGxlKj4oY29udGV4dCk7CisKKyAgICBzdHJ1Y3QgYWRk
cmluZm8qIHNlcnZlciA9IHJlc29sdmVVUkwoc3RyZWFtLT5tX3VybCk7CisgICAgaWYgKCFzZXJ2
ZXIpIHsKKyAgICAgICAgTE9HKE5ldHdvcmssICJTb2NrZXRTdHJlYW1IYW5kbGUgY291bGQgbm90
IHJlc29sdmU6ICVzLiIsIHN0cmVhbS0+bV91cmwuaG9zdCgpLmxhdGluMSgpLmRhdGEoKSk7Cisg
ICAgICAgIGlmIChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQo
KS0+ZGlkRmFpbFNvY2tldFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNvY2tldFN0
cmVhbUVycm9yOjpSZXNvbHZlRXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIFdlJ2xsIGl0ZXJhdGUgb3ZlciB0aGUgcmVzb2x2ZWQgYWRkcmVzc2VzIGFuZCB0cnkgdGhl
IGNvbm5lY3Rpb24uCisgICAgaW50IHNvY2tldEZEOworICAgIGZvciAoOyBzZXJ2ZXIgIT0gTlVM
TDsgc2VydmVyID0gc2VydmVyLT5haV9uZXh0KSB7CisgICAgICAgIGlmICgoc29ja2V0RkQgPSB0
cnlDb25uZWN0aW9uKHNlcnZlcikpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
ZnJlZWFkZHJpbmZvKHNlcnZlcik7CisKKyAgICBpZiAoIXNvY2tldEZEKSB7CisgICAgICAgIGlm
IChzdHJlYW0tPmNsaWVudCgpKQorICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkRmFp
bFNvY2tldFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNvY2tldFN0cmVhbUVycm9y
OjpDb25uZWN0RXJyb3IpKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc3RyZWFt
LT5tX3NvY2tldEZEID0gc29ja2V0RkQ7CisgICAgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
c2hhcmVkSW5zdGFuY2UoKS5hZGQoc3RyZWFtKTsKKyAgICBzdHJlYW0tPm1fc3RhdGUgPSBPcGVu
OworICAgIHN0cmVhbS0+bV9jbGllbnQtPmRpZE9wZW5Tb2NrZXRTdHJlYW0oc3RyZWFtKTsKK30K
KwogU29ja2V0U3RyZWFtSGFuZGxlOjpTb2NrZXRTdHJlYW1IYW5kbGUoY29uc3QgVVJMJiB1cmws
IFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQogICAgIDogU29ja2V0U3RyZWFtSGFu
ZGxlQmFzZSh1cmwsIGNsaWVudCkKIHsKICAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhh
bmRsZSAlcCBuZXcgY2xpZW50ICVwIiwgdGhpcywgbV9jbGllbnQpOwotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKCZkaXNwYXRjaENvbm5lY3Rpb25Pbk1haW5U
aHJlYWQsIHRoaXMpOworfQorCitTb2NrZXRTdHJlYW1IYW5kbGU6OlNvY2tldFN0cmVhbUhhbmRs
ZShpbnQgc29ja2V0RkQsIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCogY2xpZW50KQorICAgIDog
U29ja2V0U3RyZWFtSGFuZGxlQmFzZShVUkwoKSwgY2xpZW50KQorICAgICwgbV9zb2NrZXRGRChz
b2NrZXRGRCkKK3sKKyAgICBMT0coTmV0d29yaywgIlNvY2tldFN0cmVhbUhhbmRsZSAlcCBuZXcg
Y2xpZW50ICVwIEZEOiAlZCIsIHRoaXMsIG1fY2xpZW50LCBtX3NvY2tldEZEKTsKKworICAgIFNv
Y2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkuYWRkKHRoaXMpOworICAg
IG1fc3RhdGUgPSBPcGVuOworICAgIG1fY2xpZW50LT5kaWRPcGVuU29ja2V0U3RyZWFtKHRoaXMp
OwogfQogCiBTb2NrZXRTdHJlYW1IYW5kbGU6On5Tb2NrZXRTdHJlYW1IYW5kbGUoKQogewogICAg
IExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIGRlbGV0ZSIsIHRoaXMpOwogICAg
IHNldENsaWVudCgwKTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1pbnQgU29ja2V0U3Ry
ZWFtSGFuZGxlOjpwbGF0Zm9ybVNlbmQoY29uc3QgY2hhciosIGludCkKK2ludCBTb2NrZXRTdHJl
YW1IYW5kbGU6OnBsYXRmb3JtU2VuZChjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewot
ICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtU2VuZCIsIHRo
aXMpOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgTE9HKE5ldHdv
cmssICJTb2NrZXRTdHJlYW1IYW5kbGUgJXAgcGxhdGZvcm1TZW5kICVkIGJ5dGVzIiwgdGhpcywg
bGVuZ3RoKTsKKyAgICBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRJbnN0YW5jZSgp
LmhhbmRsZVN0cmVhbVdyaXRlKHRoaXMsIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIGxlbmd0
aDsKIH0KIAogdm9pZCBTb2NrZXRTdHJlYW1IYW5kbGU6OnBsYXRmb3JtQ2xvc2UoKQogewogICAg
IExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtSGFuZGxlICVwIHBsYXRmb3JtQ2xvc2UiLCB0aGlz
KTsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworCisgICAgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdl
cjo6c2hhcmVkSW5zdGFuY2UoKS5jYW5jZWwodGhpcyk7CiB9CiAKIHZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlOjpkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTg0NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFuZGxl
TWFuYWdlci5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQg
VW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaCIKKwor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTb2NrZXRTdHJlYW1FcnJvci5oIgorI2lu
Y2x1ZGUgIlNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIgorCisjaWYgT1MoV0lORE9XUykKKyNp
bmNsdWRlIDx3aW5kb3dzLmg+CisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbHNlCisjaW5jbHVk
ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKK3N0YXRpYyBp
bmxpbmUgaW50IGNsb3NlKGludCBzb2NrZXRJRCkKK3sKKyNpZiBPUyhXSU5ET1dTKQorICAgIHJl
dHVybiA6OmNsb3Nlc29ja2V0KHNvY2tldElEKTsKKyNlbHNlCisgICAgcmV0dXJuIDo6Y2xvc2Uo
c29ja2V0SUQpOworI2VuZGlmCit9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBI
YXNoTWFwPGludCwgU29ja2V0U3RyZWFtSGFuZGxlKj46OktleVZhbHVlUGFpclR5cGUgU3RyZWFt
SGFuZGxlTWFwUGFpclR5cGU7CisKK1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIFNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXI6OnNoYXJlZEluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgU29ja2V0
U3RyZWFtSGFuZGxlTWFuYWdlciBzaGFyZWRJbnN0YW5jZTsKKyAgICByZXR1cm4gc2hhcmVkSW5z
dGFuY2U7Cit9CisKK011dGV4KiBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpzaGFyZWRNdXRl
eCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChNdXRleCwgbXV0ZXgsICgpKTsKKyAgICBy
ZXR1cm4gJm11dGV4OworfQorCitTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjpTb2NrZXRTdHJl
YW1IYW5kbGVNYW5hZ2VyKCkKKyAgICA6IG1fdGltZXIodGhpcywgJlNvY2tldFN0cmVhbUhhbmRs
ZU1hbmFnZXI6OnN0cmVhbVRpbWVyQ2FsbGJhY2spCit7Cit9CisKK1NvY2tldFN0cmVhbUhhbmRs
ZU1hbmFnZXI6On5Tb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyKCkKK3sKKyAgICBmb3IgKGF1dG8g
ZW50cnkgOiBtX3N0cmVhbUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUq
IHN0cmVhbSA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgIH0KK30KKwor
dm9pZCBTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyOjphZGQoU29ja2V0U3RyZWFtSGFuZGxlKiBz
dHJlYW0pCit7CisgICAgTXV0ZXgqIG11dGV4ID0gU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6
c2hhcmVkTXV0ZXgoKTsKKyAgICBtdXRleC0+bG9jaygpOworICAgIG1fc3RyZWFtSGFuZGxlTWFw
LnNldChzdHJlYW0tPm1fc29ja2V0RkQsIHN0cmVhbSk7CisgICAgbXV0ZXgtPnVubG9jaygpOwor
CisgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IEFkZGVkLiIsIHN0cmVhbS0+bV9zb2NrZXRG
RCk7CisKKyAgICBpZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdGFy
dE9uZVNob3QoMC4wNSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6Y2Fu
Y2VsKFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtKQoreworICAgIExPRyhOZXR3b3JrLCAiU3Ry
ZWFtICVkOiBDYW5jZWxsZWQuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICBtX3JlbW92ZUxp
c3QuYWRkKHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgOjpjbG9zZShzdHJlYW0tPm1fc29ja2V0
RkQpOworCisgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisgICAgICAgIHN0cmVhbS0+Y2xpZW50
KCktPmRpZENsb3NlU29ja2V0U3RyZWFtKHN0cmVhbSk7Cit9CisKK3ZvaWQgU29ja2V0U3RyZWFt
SGFuZGxlTWFuYWdlcjo6aGFuZGxlU3RyZWFtUmVhZChTb2NrZXRTdHJlYW1IYW5kbGUqIHN0cmVh
bSkKK3sKKyAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFuZGxlPiBwcm90ZWN0KHN0cmVhbSk7Cisg
ICAgY29uc3Qgc2l6ZV90IGJ1ZmZlclNpemUgPSAxNiAqIDEwMjQ7CisgICAgY2hhciBidWZmZXJb
YnVmZmVyU2l6ZV07CisKKyAgICBpbnQgcmVhZENvdW50ID0gOjpyZWN2KHN0cmVhbS0+bV9zb2Nr
ZXRGRCwgYnVmZmVyLCBidWZmZXJTaXplKTsKKworICAgIGlmIChyZWFkQ291bnQgPCAwKSB7Cisg
ICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBFcnJvciBkdXJpbmcgcmVhZC4iLCBzdHJl
YW0tPm1fc29ja2V0RkQpOworICAgICAgICBpZiAoc3RyZWFtLT5jbGllbnQoKSkKKyAgICAgICAg
ICAgIHN0cmVhbS0+Y2xpZW50KCktPmRpZEZhaWxTb2NrZXRTdHJlYW0oc3RyZWFtLCBTb2NrZXRT
dHJlYW1FcnJvcihTb2NrZXRTdHJlYW1FcnJvcjo6UmVhZEVycm9yKSk7CisKKyAgICAgICAgc3Ry
ZWFtLT5kaXNjb25uZWN0KCk7CisgICAgfSBlbHNlIGlmIChyZWFkQ291bnQgPiAwKSB7CisgICAg
ICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBSZWFkICVsZCBieXRlcy4iLCBzdHJlYW0tPm1f
c29ja2V0RkQsIHJlYWRDb3VudCk7CisKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50KCkpCisg
ICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRSZWNlaXZlU29ja2V0U3RyZWFtRGF0YShz
dHJlYW0sIGJ1ZmZlciwgcmVhZENvdW50KTsKKyAgICB9IGVsc2UgeworICAgICAgICBMT0coTmV0
d29yaywgIlN0cmVhbSAlZDogUmVhZCByZXR1cm5lZCAwLCBjbG9zaW5nIGNvbm5lY3Rpb24uIiwg
c3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgc3RyZWFtLT5kaXNjb25uZWN0KCk7CisgICAg
fQorfQorCit2b2lkIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXI6OmhhbmRsZVN0cmVhbVdyaXRl
KFNvY2tldFN0cmVhbUhhbmRsZSogc3RyZWFtLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgYnl0ZXNU
b1NlbmQpCit7CisgICAgUmVmUHRyPFNvY2tldFN0cmVhbUhhbmRsZT4gcHJvdGVjdChzdHJlYW0p
OworICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBUcnlpbmcgdG8gc2VuZCAlZCBieXRlcy4i
LCBzdHJlYW0tPm1fc29ja2V0RkQsIGJ5dGVzVG9TZW5kKTsKKworICAgIGludCBzZW50ID0gOjpz
ZW5kKHN0cmVhbS0+bV9zb2NrZXRGRCwgZGF0YSwgYnl0ZXNUb1NlbmQpOworCisgICAgaWYgKHNl
bnQgPCAwKSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBFcnJvciB3cml0aW5n
IGRhdGEuIiwgc3RyZWFtLT5tX3NvY2tldEZEKTsKKyAgICAgICAgaWYgKHN0cmVhbS0+Y2xpZW50
KCkpCisgICAgICAgICAgICBzdHJlYW0tPmNsaWVudCgpLT5kaWRGYWlsU29ja2V0U3RyZWFtKHN0
cmVhbSwgU29ja2V0U3RyZWFtRXJyb3IoU29ja2V0U3RyZWFtRXJyb3I6OldyaXRlRXJyb3IpKTsK
KworICAgICAgICBzdHJlYW0tPmRpc2Nvbm5lY3QoKTsKKyAgICB9IGVsc2UgaWYgKHNlbnQgPiAw
KSB7CisgICAgICAgIExPRyhOZXR3b3JrLCAiU3RyZWFtICVkOiBTZW50ICVsZCBieXRlcy4iLCBz
dHJlYW0tPm1fc29ja2V0RkQsIHNlbnQpOworICAgIH0gZWxzZQorICAgICAgICBMT0coTmV0d29y
aywgIlN0cmVhbSAlZDogTm90aGluZyBzZW50LiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7Cit9CisK
K3ZvaWQgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c3RyZWFtVGltZXJDYWxsYmFjayhUaW1l
cjxTb2NrZXRTdHJlYW1IYW5kbGVNYW5hZ2VyPiopCit7CisgICAgTXV0ZXgqIG11dGV4ID0gU29j
a2V0U3RyZWFtSGFuZGxlTWFuYWdlcjo6c2hhcmVkTXV0ZXgoKTsKKyAgICBmZF9zZXQgZmRyZWFk
OworICAgIGZkX3NldCBmZGV4Y2VwOworICAgIGludCBtYXhmZCA9IDA7CisKKyAgICBzdHJ1Y3Qg
dGltZXZhbCB0aW1lb3V0OworICAgIHRpbWVvdXQudHZfc2VjID0gMDsKKyAgICB0aW1lb3V0LnR2
X3VzZWMgPSAyICogMTAwMDsgLy8gc2VsZWN0IHdhaXRzIG1pY3Jvc2Vjb25kcworCisgICAgbXV0
ZXgtPmxvY2soKTsKKyAgICAvLyBSZXRyeSAnc2VsZWN0JyBpZiBpdCB3YXMgaW50ZXJydXB0ZWQg
YnkgYSBwcm9jZXNzIHNpZ25hbC4KKyAgICBpbnQgcmMgPSAwOworICAgIGRvIHsKKyAgICAgICAg
RkRfWkVSTygmZmRyZWFkKTsKKyAgICAgICAgRkRfWkVSTygmZmRleGNlcCk7CisKKyAgICAgICAg
Zm9yIChjb25zdCBTdHJlYW1IYW5kbGVNYXBQYWlyVHlwZSYgZW50cnkgOiBtX3N0cmVhbUhhbmRs
ZU1hcCkgeworICAgICAgICAgICAgU29ja2V0U3RyZWFtSGFuZGxlKiBzdHJlYW0gPSBlbnRyeS52
YWx1ZTsKKyAgICAgICAgICAgIGlmICghc3RyZWFtKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgICAgICBGRF9TRVQoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRyZWFkKTsKKyAg
ICAgICAgICAgIEZEX1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZmZGV4Y2VwKTsKKworICAgICAg
ICAgICAgaWYgKHN0cmVhbS0+bV9zb2NrZXRGRCA+IG1heGZkKQorICAgICAgICAgICAgICAgIG1h
eGZkID0gc3RyZWFtLT5tX3NvY2tldEZEOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSA6OnNl
bGVjdChtYXhmZCArIDEsICZmZHJlYWQsIDAsICZmZGV4Y2VwLCAmdGltZW91dCk7CisgICAgfSB3
aGlsZSAocmMgPT0gLTEgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgaWYgKC0xID09IHJjKSB7
CisgICAgICAgIExPRyhOZXR3b3JrLCAiU29ja2V0U3RyZWFtIGhhbmRsaW5nIGVycm9yOiBzZWxl
Y3QgcmV0dXJuZWQgLTEiKTsKKyAgICAgICAgbXV0ZXgtPnVubG9jaygpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgZm9yIChjb25zdCBTdHJlYW1IYW5kbGVNYXBQYWlyVHlwZSYgZW50
cnkgOiBtX3N0cmVhbUhhbmRsZU1hcCkgeworICAgICAgICBTb2NrZXRTdHJlYW1IYW5kbGUqIHN0
cmVhbSA9IGVudHJ5LnZhbHVlOworICAgICAgICBpZiAoIXN0cmVhbSkgeworICAgICAgICAgICAg
bV9yZW1vdmVMaXN0LmFkZChlbnRyeS5rZXkpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoRkRfSVNTRVQoc3RyZWFtLT5tX3NvY2tldEZELCAmZmRyZWFk
KSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IFJlYWR5IGZvciByZWFk
LiIsIHN0cmVhbS0+bV9zb2NrZXRGRCk7CisgICAgICAgICAgICBGRF9DTFIoc3RyZWFtLT5tX3Nv
Y2tldEZELCAmZmRyZWFkKTsKKyAgICAgICAgICAgIGhhbmRsZVN0cmVhbVJlYWQoc3RyZWFtKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChGRF9JU1NFVChzdHJlYW0tPm1fc29ja2V0RkQsICZm
ZGV4Y2VwKSkgeworICAgICAgICAgICAgTE9HKE5ldHdvcmssICJTdHJlYW0gJWQ6IEZpbGUgZGVz
Y3JpcHRvciBlcnJvci4iLCBzdHJlYW0tPm1fc29ja2V0RkQpOworICAgICAgICAgICAgRkRfQ0xS
KHN0cmVhbS0+bV9zb2NrZXRGRCwgJmZkZXhjZXApOworICAgICAgICAgICAgaWYgKHN0cmVhbS0+
Y2xpZW50KCkpCisgICAgICAgICAgICAgICAgc3RyZWFtLT5jbGllbnQoKS0+ZGlkRmFpbFNvY2tl
dFN0cmVhbShzdHJlYW0sIFNvY2tldFN0cmVhbUVycm9yKFNvY2tldFN0cmVhbUVycm9yOjpGREVy
cm9yKSk7CisKKyAgICAgICAgICAgIHN0cmVhbS0+ZGlzY29ubmVjdCgpOworICAgICAgICB9Cisg
ICAgfQorICAgIG11dGV4LT51bmxvY2soKTsKKworICAgIGZvciAoaW50IHNvY2tldElkIDogbV9y
ZW1vdmVMaXN0KSB7CisgICAgICAgIC8vIEJ5IHRoaXMgcG9pbnQgaXQgaXMgY2VydGFpbiB0aGF0
IHRoZSBzdHJlYW0gaXMgY2xvc2VkLgorICAgICAgICBtX3N0cmVhbUhhbmRsZU1hcC5yZW1vdmUo
c29ja2V0SWQpOworICAgIH0KKworICAgIG1fcmVtb3ZlTGlzdC5jbGVhcigpOworCisgICAgaWYg
KCFtX3RpbWVyLmlzQWN0aXZlKCkgJiYgbV9zdHJlYW1IYW5kbGVNYXAuc2l6ZSgpKQorICAgICAg
ICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwLjA1KTsKK30KKworfSAvLyBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvU29ja2V0U3RyZWFtSGFu
ZGxlTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1NvY2tl
dFN0cmVhbUhhbmRsZU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5jOTg1YzI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9jdXJsL1NvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIuaApAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBV
TklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcl9oCisj
ZGVmaW5lIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXJfaAorCisjaW5jbHVkZSAiU29ja2V0U3Ry
ZWFtSGFuZGxlLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAg
IGNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
c3RhdGljIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXImIHNoYXJlZEluc3RhbmNlKCk7CisKKyAg
ICAgICAgc3RhdGljIE11dGV4KiBzaGFyZWRNdXRleCgpOworICAgICAgICB2b2lkIGFkZChTb2Nr
ZXRTdHJlYW1IYW5kbGUqKTsKKyAgICAgICAgdm9pZCBjYW5jZWwoU29ja2V0U3RyZWFtSGFuZGxl
Kik7CisKKyAgICAgICAgdm9pZCBoYW5kbGVTdHJlYW1SZWFkKFNvY2tldFN0cmVhbUhhbmRsZSop
OworICAgICAgICB2b2lkIGhhbmRsZVN0cmVhbVdyaXRlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworICAgICAgICB2b2lkIHN0cmVhbVRpbWVyQ2Fs
bGJhY2soVGltZXI8U29ja2V0U3RyZWFtSGFuZGxlTWFuYWdlcj4qKTsKKworICAgIHByaXZhdGU6
CisgICAgICAgIFNvY2tldFN0cmVhbUhhbmRsZU1hbmFnZXIoKTsKKyAgICAgICAgflNvY2tldFN0
cmVhbUhhbmRsZU1hbmFnZXIoKTsKKworCisgICAgICAgIFRpbWVyPFNvY2tldFN0cmVhbUhhbmRs
ZU1hbmFnZXI+IG1fdGltZXI7CisKKyAgICAgICAgSGFzaE1hcDxpbnQsIFNvY2tldFN0cmVhbUhh
bmRsZSo+IG1fc3RyZWFtSGFuZGxlTWFwOworICAgICAgICBIYXNoU2V0PGludD4gbV9yZW1vdmVM
aXN0OworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFNvY2tl
dFN0cmVhbUhhbmRsZU1hbmFnZXJfaAo=
</data>
<flag name="review"
          id="251881"
          type_id="1"
          status="-"
          setter="bfulgham"
    />
          </attachment>
      

    </bug>

</bugzilla>