<?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>72952</bug_id>
          
          <creation_ts>2011-11-22 06:42:42 -0800</creation_ts>
          <short_desc>[GTK] Implement DownloadClient in WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-01-24 01:45:49 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>
          <dependson>72499</dependson>
    
    <dependson>72949</dependson>
          <blocked>73662</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>507579</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 06:42:42 -0800</bug_when>
    <thetext>To implement the WKDownloadClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507585</commentid>
    <comment_count>1</comment_count>
      <attachid>116218</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 06:51:31 -0800</bug_when>
    <thetext>Created attachment 116218
Patch

This is the downlaod client implementation. Unit tests are part of the following patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507588</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-22 06:57:37 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507620</commentid>
    <comment_count>3</comment_count>
      <attachid>116229</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 08:23:25 -0800</bug_when>
    <thetext>Created attachment 116229
New patch

I&apos;ve tried to split the patches to make the review easier, bit it&apos;s not possible without breaking the build, so this is the previous patch merged with the WebContext API for start a download and including unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507622</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 08:24:43 -0800</bug_when>
    <thetext>This depends on bug #72499, or it will crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507960</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-22 23:37:02 -0800</bug_when>
    <thetext>Btw, I followed the approach of using a public client for consistency with the loader client, but I don&apos;t really like it. For downloads, I think the API would be easier to use following the approach I did for the UI client, keeping the client private and moving the relevant signals to WebContext and Download objects as signals or properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508168</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-23 08:46:11 -0800</bug_when>
    <thetext>My proposal is something like: 

WebKitDownloadClient::started -&gt; WebKitWebContext::download-started
WebKitDownloadClient::received-response -&gt; WebKitDownload:response
WebKitDownloadClient::received-data -&gt; WebKitDownload:bytes-received (or current-size, I&apos;m not sure about the name)
WebKitDownloadClient::finished -&gt; WebKitDownload::finished
WebKitDownloadClient::failed -&gt;  WebKitDownload::failed
WebKitDownloadClient::decide-destination -&gt; WebKitDownload::decide-destination
WebKitDownloadClient::created-destination -&gt; WebKitDownload::created-destination
And make destination a property of WEbKitDownload so that it can be monitored.

The code would be mostly the same we just move the signals to download and web context objects. This way the API user have everything in the download object and doesn&apos;t need to keep a map of download objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508188</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-23 09:24:48 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; My proposal is something like: 
&gt; 
&gt; WebKitDownloadClient::started -&gt; WebKitWebContext::download-started
&gt; WebKitDownloadClient::received-response -&gt; WebKitDownload:response
&gt; WebKitDownloadClient::received-data -&gt; WebKitDownload:bytes-received (or current-size, I&apos;m not sure about the name)
&gt; WebKitDownloadClient::finished -&gt; WebKitDownload::finished
&gt; WebKitDownloadClient::failed -&gt;  WebKitDownload::failed
&gt; WebKitDownloadClient::decide-destination -&gt; WebKitDownload::decide-destination
&gt; WebKitDownloadClient::created-destination -&gt; WebKitDownload::created-destination
&gt; And make destination a property of WEbKitDownload so that it can be monitored.

I think this is a great proposal. The only thing I would change is WebKitDownloadClient::received-response  into WebKitDownloadClient::response-received.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508189</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-23 09:25:28 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; I think this is a great proposal. The only thing I would change is WebKitDownloadClient::received-response  into WebKitDownloadClient::response-received.

I think I also prefer &quot;data&quot; to &quot;bytes,&quot; but that&apos;s not a strong preference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511023</commentid>
    <comment_count>9</comment_count>
      <attachid>117025</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-29 12:51:33 -0800</bug_when>
    <thetext>Created attachment 117025
New patch

I&apos;ve removed the download client object and moved the code to the web context object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511692</commentid>
    <comment_count>10</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-11-30 06:10:17 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think this is a great proposal. The only thing I would change is WebKitDownloadClient::received-response  into WebKitDownloadClient::response-received.

What do you guys think of going with names similar to those used by soup? like got-response, or something? I think it makes sense to use &quot;destination-created&quot; to be consistent, too, and maybe &quot;destination-requested&quot;? Is the object implementing those signals in a different patch, btw?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511703</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-11-30 06:26:24 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #7)
&gt; &gt; I think this is a great proposal. The only thing I would change is WebKitDownloadClient::received-response  into WebKitDownloadClient::response-received.
&gt; 
&gt; What do you guys think of going with names similar to those used by soup? like got-response, or something? I think it makes sense to use &quot;destination-created&quot; to be consistent, too, and maybe &quot;destination-requested&quot;? Is the object implementing those signals in a different patch, btw?

This names are consistent with current web loader client, received-server-redirect, for example, but I don&apos;t mind changing the loader client if you think it&apos;s better.

See also bug #72949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511704</commentid>
    <comment_count>12</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-30 06:28:18 -0800</bug_when>
    <thetext>(In reply to comment #11)

&gt; This names are consistent with current web loader client, received-server-redirect, for example, but I don&apos;t mind changing the loader client if you think it&apos;s better.
&gt; 
&gt; See also bug #72949

How closely we follow WebKit2 C API naming conventions might be a good topic for the WebKit2 API review session.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512368</commentid>
    <comment_count>13</comment_count>
      <attachid>117025</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-11-30 19:43:26 -0800</bug_when>
    <thetext>Comment on attachment 117025
New patch

Attachment 117025 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/10696450</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512610</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-01 01:16:39 -0800</bug_when>
    <thetext>The patch fails because it depends on bug #72949</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521607</commentid>
    <comment_count>15</comment_count>
      <attachid>117025</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-12-14 20:27:07 -0800</bug_when>
    <thetext>Comment on attachment 117025
New patch

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

I tried running the tests for this patch and they seemed to freeze. Has it grown stale?

I have a couple comments below. This isn&apos;t a full review, but a few things I noticed when testing this patch.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:219
&gt; +    WKRetainPtr&lt;WKDownloadRef&gt; wkDownload = WKContextDownloadURLRequest(priv-&gt;context.get(), wkRequest.get());
&gt; +    GRefPtr&lt;WebKitDownload&gt; download = webkitDownloadCreate(wkDownload.get());

If a reference counted object is &quot;just passing through&quot; you don&apos;t need to use a smart pointer. You can just keep it in a raw pointer.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:49
&gt; +    static void receivedResponseCallback(WebKitDownload* download, GParamSpec *, DownloadTest* test)

There&apos;s an exra space here after GParamSpec.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:185
&gt; +    static const char* webkit1TestResoucesDir = &quot;Source/WebKit/gtk/tests/resources&quot;;
&gt; +    GRefPtr&lt;GFile&gt; file = adoptGRef(g_file_new_for_path(WEBKIT_EXEC_PATH));
&gt; +    GRefPtr&lt;GFile&gt; parent = adoptGRef(g_file_get_parent(file.get()));
&gt; +    file = g_file_get_parent(parent.get());
&gt; +    GOwnPtr&lt;char&gt; rootDir(g_file_get_path(file.get()));
&gt; +    GOwnPtr&lt;char&gt; resourcesDir(g_build_filename(rootDir.get(), webkit1TestResoucesDir, NULL));
&gt; +    return resourcesDir.get();

I think this is actually written as if things are built into WebKitBuild directly, instead of WebKitBuild/Release. :) Hard-coding the relative path to this file will fail on somebody&apos;s system. For instance, Xan even builds on the other end of symmlink. I think a safer approach here is to just write a file into the temporary directory you create for the test. For the test, give the URL to that file you&apos;ve written.

I like the tests in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521608</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-12-14 20:28:24 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 117025 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117025&amp;action=review

Ah, one more comment. Do you mind moving the DownloadClient to a seperate file? I think it will keep things cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527188</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-26 04:19:31 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 117025 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117025&amp;action=review
&gt; 
&gt; I tried running the tests for this patch and they seemed to freeze. Has it grown stale?

It seems r101607 broke it, see bug #75225.

&gt; I have a couple comments below. This isn&apos;t a full review, but a few things I noticed when testing this patch.

Thanks for looking at it!

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:219
&gt; &gt; +    WKRetainPtr&lt;WKDownloadRef&gt; wkDownload = WKContextDownloadURLRequest(priv-&gt;context.get(), wkRequest.get());
&gt; &gt; +    GRefPtr&lt;WebKitDownload&gt; download = webkitDownloadCreate(wkDownload.get());
&gt; 
&gt; If a reference counted object is &quot;just passing through&quot; you don&apos;t need to use a smart pointer. You can just keep it in a raw pointer.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:49
&gt; &gt; +    static void receivedResponseCallback(WebKitDownload* download, GParamSpec *, DownloadTest* test)
&gt; 
&gt; There&apos;s an exra space here after GParamSpec.

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:185
&gt; &gt; +    static const char* webkit1TestResoucesDir = &quot;Source/WebKit/gtk/tests/resources&quot;;
&gt; &gt; +    GRefPtr&lt;GFile&gt; file = adoptGRef(g_file_new_for_path(WEBKIT_EXEC_PATH));
&gt; &gt; +    GRefPtr&lt;GFile&gt; parent = adoptGRef(g_file_get_parent(file.get()));
&gt; &gt; +    file = g_file_get_parent(parent.get());
&gt; &gt; +    GOwnPtr&lt;char&gt; rootDir(g_file_get_path(file.get()));
&gt; &gt; +    GOwnPtr&lt;char&gt; resourcesDir(g_build_filename(rootDir.get(), webkit1TestResoucesDir, NULL));
&gt; &gt; +    return resourcesDir.get();
&gt; 
&gt; I think this is actually written as if things are built into WebKitBuild directly, instead of WebKitBuild/Release. :) Hard-coding the relative path to this file will fail on somebody&apos;s system. For instance, Xan even builds on the other end of symmlink. I think a safer approach here is to just write a file into the temporary directory you create for the test. For the test, give the URL to that file you&apos;ve written.

Ok, I&apos;ll try to create a custom file for this.

&gt; I like the tests in this patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527189</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-26 04:20:08 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 117025 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117025&amp;action=review
&gt; 
&gt; Ah, one more comment. Do you mind moving the DownloadClient to a seperate file? I think it will keep things cleaner.

Sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527202</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-26 05:49:33 -0800</bug_when>
    <thetext>(In reply to comment #15)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:185
&gt; &gt; +    static const char* webkit1TestResoucesDir = &quot;Source/WebKit/gtk/tests/resources&quot;;
&gt; &gt; +    GRefPtr&lt;GFile&gt; file = adoptGRef(g_file_new_for_path(WEBKIT_EXEC_PATH));
&gt; &gt; +    GRefPtr&lt;GFile&gt; parent = adoptGRef(g_file_get_parent(file.get()));
&gt; &gt; +    file = g_file_get_parent(parent.get());
&gt; &gt; +    GOwnPtr&lt;char&gt; rootDir(g_file_get_path(file.get()));
&gt; &gt; +    GOwnPtr&lt;char&gt; resourcesDir(g_build_filename(rootDir.get(), webkit1TestResoucesDir, NULL));
&gt; &gt; +    return resourcesDir.get();
&gt; 
&gt; I think this is actually written as if things are built into WebKitBuild directly, instead of WebKitBuild/Release. :) Hard-coding the relative path to this file will fail on somebody&apos;s system. For instance, Xan even builds on the other end of symmlink. I think a safer approach here is to just write a file into the temporary directory you create for the test. For the test, give the URL to that file you&apos;ve written.

WEBKIT_EXEC_PATH already contains Relese/Debug, so it should work. Maybe we should move test resources to another common dir, but I think it&apos;s useful to use real files, maybe not for download tests, but we will need it for mime handling tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>527203</commentid>
    <comment_count>20</comment_count>
      <attachid>120552</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-12-26 06:04:18 -0800</bug_when>
    <thetext>Created attachment 120552
New patch

Moved download client impl to its own file, and addressed other review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540518</commentid>
    <comment_count>21</comment_count>
      <attachid>123552</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-23 06:46:10 -0800</bug_when>
    <thetext>Created attachment 123552
Updated patch

Updated to apply on current git master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540978</commentid>
    <comment_count>22</comment_count>
      <attachid>123552</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-23 16:50:31 -0800</bug_when>
    <thetext>Comment on attachment 123552
Updated patch

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

Looks good. Please make the following fixes before landing. Using WEBKIT_TOP_LEVEL instead of walking up the directory chain is probably the most important thing below.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:214
&gt; +    WebKitDownload* download = webkitDownloadCreate(wkDownload.get());
&gt; +    downloadsMap().set(wkDownload.get(), download);

Could you use webkitWebContextGetOrCreateDownload here?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:226
&gt; +    return download.get();

I would ASSERT(download) here instead of doing it a bunch of times above.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:40
&gt; +    enum DownloadEvents {

Nit: This should probably be called DownloadEvent intead of DownloadEvents.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:154
&gt; +    void waitUntilDownloadFinished()

Nit: waitUntilDownloadFinishes or waitUntilDownloadIsFinished.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:159
&gt; +    void checkDestinationAndDelete(WebKitDownload* download, const char* expectedName)

I&apos;d probably call this checkDestinationAndDeleteFile, just to be clear.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:178
&gt; +    static const char* webkit1TestResoucesDir = &quot;Source/WebKit/gtk/tests/resources&quot;;

Merge this into the g_build_filename call below to avoid using Unixy slashes.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:181
&gt; +    GRefPtr&lt;GFile&gt; file = adoptGRef(g_file_new_for_path(WEBKIT_EXEC_PATH));
&gt; +    GRefPtr&lt;GFile&gt; parent = adoptGRef(g_file_get_parent(file.get()));
&gt; +    file = g_file_get_parent(parent.get());

It&apos;s probably better to use the WEBKIT_TOP_LEVEL approach that we use in WKTR and DumpRenderTree. Xan, for example, builds WebKit onto the other side of a symlink, so this test will fail for him.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:207
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), ==, 1.);

No need for the trailing . on 1. This is only necessary when forcing floating point division. This is a peculiarity of the WebKit style guide.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:211
&gt; +class DownloadTestError: public DownloadTest {

Nit: Probably better to call this DownloadErrorTest.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:234
&gt; +        g_assert(g_error_matches(error, WEBKIT_DOWNLOAD_ERROR, m_expectedError));

I think you should try to move this assertion out of the fixture. It&apos;s better to have the assertion in the body of the test since you can see exactly what the test is testing. What you could do is to have the fixture record the error it saw.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:263
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

No need for the . on 1.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:280
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:295
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:364
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

No need for the . in 1.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:378
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

Ditto.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestDownloads.cpp:393
&gt; +    g_assert_cmpfloat(webkit_download_get_estimated_progress(download.get()), &lt;, 1.);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541169</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-24 00:55:02 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 123552 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=123552&amp;action=review
&gt; 
&gt; Looks good. Please make the following fixes before landing. Using WEBKIT_TOP_LEVEL instead of walking up the directory chain is probably the most important thing below.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:214
&gt; &gt; +    WebKitDownload* download = webkitDownloadCreate(wkDownload.get());
&gt; &gt; +    downloadsMap().set(wkDownload.get(), download);
&gt; 
&gt; Could you use webkitWebContextGetOrCreateDownload here?

It&apos;s a new download, so we don&apos;t need to check whether it&apos;s in the map.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541172</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-24 00:58:14 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 123552 [details])
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:226
&gt; &gt; +    return download.get();
&gt; 
&gt; I would ASSERT(download) here instead of doing it a bunch of times above.
&gt; 

hmm, actually the ASSERT can just be removed, webkitWebContextGetOrCreateDownload will always return a valid pointer (well, expect in case OOM that we are not handling anyway).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>541181</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-01-24 01:45:49 -0800</bug_when>
    <thetext>Committed r105708: &lt;http://trac.webkit.org/changeset/105708&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116218</attachid>
            <date>2011-11-22 06:51:31 -0800</date>
            <delta_ts>2011-11-22 08:23:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-download-client.diff</filename>
            <type>text/plain</type>
            <size>31254</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ZTk4YWE3Li5mNDg5NDU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDgg
QEAKKzIwMTEtMTEtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXREb3dubG9hZENsaWVudCB0byBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKGRpZFN0YXJ0KTogRW1pdCBXZWJLaXREb3dubG9hZENsaWVudDo6c3RhcnRlZCBzaWduYWwu
CisgICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2UpOiBDcmVhdGUgYSBXZWJLaXROZXR3b3JrUmVz
cG9uc2Ugd2l0aCB0aGUKKyAgICAgICAgcmVjZWl2ZWQgUmVzb3VyY2VSZXNwb25zZSBmb3IgdGhl
IGRvd25sb2FkIGFuZCBlbWl0CisgICAgICAgIFdlYktpdERvd25sb2FkQ2xpZW50OjpyZWNlaXZl
ZC1yZXNwb25zZSBzaWduYWwuCisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6IEVtaXQgV2ViS2l0
RG93bmxvYWRDbGllbnQ6OnJlY2VpdmVkLWRhdGEuCisgICAgICAgIChkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6IEVtaXQKKyAgICAgICAgV2ViS2l0RG93bmxvYWRDbGll
bnQ6OmRlY2lkZS1kZXN0aW5hdGlvbi4KKyAgICAgICAgKGRpZENyZWF0ZURlc3RpbmF0aW9uKTog
RW1pdAorICAgICAgICBXZWJLaXREb3dubG9hZENsaWVudDo6Y3JlYXRlZC1kZXN0aW5hdGlvbi4K
KyAgICAgICAgKHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQpOiBFbWl0CisgICAg
ICAgIFdlYktpdERvd25sb2FkQ2xpZW50OjpmYWlsZWQgZm9yIHRoZSBnaXZlbiBlcnJvci4KKyAg
ICAgICAgKHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRDYW5jZWxsZWQpOiBFbWl0CisgICAg
ICAgIFdlYktpdERvd25sb2FkQ2xpZW50OjpmYWlsZWQgd2l0aCBhCisgICAgICAgIFdFQktJVF9E
T1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiBlcnJvci4KKyAgICAgICAgKGRpZEZhaWwp
OiBDYWxsIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQoKSBvcgorICAgICAgICB3
ZWJraXREb3dubG9hZENsaWVudERvd25sb2FkQ2FuY2VsbGVkKCkgaWYgdGhlIGRvd25sb2FkIHdh
cworICAgICAgICBjYW5jZWxsZWQuCisgICAgICAgIChkaWRDYW5jZWwpOiBDYWxsIHdlYmtpdERv
d25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQoKS4KKyAgICAgICAgKGRpZEZpbmlzaCk6IEVtaXQg
V2ViS2l0RG93bmxvYWRDbGllbnQ6OmZpbmlzaGVkLgorICAgICAgICAod2Via2l0RG93bmxvYWRD
bGllbnRBdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4dCk6IEFkZAorICAgICAgICBpbXBsZW1l
bnRhdGlvbnMgZm9yIHRoZSBXS0Rvd25sb2FkQ2xpZW50IGludGVyZmFjZS4KKyAgICAgICAgKHdl
YmtpdERvd25sb2FkQ2xpZW50RGVjaWRlRGVzdGluYXRpb24pOiBEZWZhdWx0IGltcGxlbWVudGF0
aW9uIG9mCisgICAgICAgIFdlYktpdERvd25sb2FkQ2xpZW50OjpkZWNpZGUtZGVzdGluYXRpb24g
c2lnbmFsLgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2NsaWVudF9pbml0KToKKyAgICAgICAg
KHdlYmtpdF9kb3dubG9hZF9jbGllbnRfY2xhc3NfaW5pdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnRQcml2YXRlLmg6IEFkZGVkLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDoKKyAgICAgICAgKHdlYmtpdF9k
b3dubG9hZF9lcnJvcl9xdWFyayk6IEFkZCBkb3dubG9hZCBxdWFyayBmb3IgZG93bmxvYWQKKyAg
ICAgICAgZXJyb3JzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmg6
IEFkZCBkb3dubG9hZCBlcnJvcnMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogQWRkIFdlYktpdERvd25sb2FkQ2xpZW50LmguCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdDogQWRkIHNpZ25hdHVy
ZXMgZm9yIG5ldworICAgICAgICBtYXJzaGFsbGVycy4KKwogMjAxMS0xMS0yMSAgQWxleGlzIE1l
bmFyZCAgPGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbUXRdW1dLMl0g
UkVHUkVTU0lPTigxMDA0ODMpOiBJdCBtYWRlIDIgQVBJIHRlc3RzIGZhaWwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZp
bGUuYW0KaW5kZXggODcyZWU0Yi4uZWRlODA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTc5
LDYgKzc5LDcgQEAgd2Via2l0Mmd0a19oZWFkZXJzID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0QmFja0ZvcndhcmRMaXN0SXRlbS5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERlZmluZXMuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXREb3dubG9hZC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdERvd25sb2FkQ2xpZW50LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROZXR3b3Jr
UmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5ldHdvcmtS
ZXNwb25zZS5oIFwKQEAgLTUwNSw2ICs1MDYsOSBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtf
QVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQog
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmggXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNw
cCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGll
bnQuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRD
bGllbnRQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEVycm9yLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmV0d29ya1Jl
cXVlc3QuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iM2Q2YzkyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwCkBAIC0wLDAgKzEsMzgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKiBQb3J0aW9ucyBDb3B5cmln
aHQgKGMpIDIwMTEgTW90b3JvbGEgTW9iaWxpdHksIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZENsaWVudC5oIgor
CisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkVycm9yLmgiCisjaW5jbHVk
ZSAiV2ViS2l0RG93bmxvYWRDbGllbnRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxv
YWRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0RXJyb3IuaCIKKyNpbmNsdWRlICJXZWJLaXRN
YXJzaGFsLmgiCisjaW5jbHVkZSAiV2ViS2l0TmV0d29ya1Jlc3BvbnNlUHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FcnJv
cnNHdGsuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorI2luY2x1ZGUgPFdlYktpdDIv
V0tTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVt
IHsKKyAgICBTVEFSVEVELAorICAgIFJFQ0VJVkVEX1JFU1BPTlNFLAorICAgIFJFQ0VJVkVEX0RB
VEEsCisgICAgRklOSVNIRUQsCisgICAgRkFJTEVELAorICAgIERFQ0lERV9ERVNUSU5BVElPTiwK
KyAgICBDUkVBVEVEX0RFU1RJTkFUSU9OLAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK3N0YXRp
YyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJTkVfVFlQRShX
ZWJLaXREb3dubG9hZENsaWVudCwgd2Via2l0X2Rvd25sb2FkX2NsaWVudCwgR19UWVBFX09CSkVD
VCkKKworc3RhdGljIHZvaWQgZGlkU3RhcnQoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRE
b3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3
a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIHdlYmtpdERvd25sb2FkU3Rh
cnRlZChkb3dubG9hZC5nZXQoKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19z
aWduYWxfZW1pdChXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW1NU
QVJURURdLCAwLCBkb3dubG9hZC5nZXQoKSwgJnJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25s
b2FkLCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250
ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQp
OworICAgIGlmICh3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdldCgpKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gbWVzc2FnZSh0b0ltcGwo
d2tSZXNwb25zZSktPnJlc291cmNlUmVzcG9uc2UoKS50b1NvdXBNZXNzYWdlKCkpOworICAgIEdS
ZWZQdHI8V2ViS2l0TmV0d29ya1Jlc3BvbnNlPiByZXNwb25zZSh3ZWJraXROZXR3b3JrUmVzcG9u
c2VDcmVhdGVGb3JTb3VwTWVzc2FnZShtZXNzYWdlLmdldCgpKSk7CisgICAgaWYgKCFzb3VwX21l
c3NhZ2VfaGVhZGVyc19nZXRfY29udGVudF9sZW5ndGgobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVy
cykpCisgICAgICAgIHdlYmtpdE5ldHdvcmtSZXNwb25zZVNldENvbnRlbnRMZW5ndGgocmVzcG9u
c2UuZ2V0KCksIHRvSW1wbCh3a1Jlc3BvbnNlKS0+cmVzb3VyY2VSZXNwb25zZSgpLmV4cGVjdGVk
Q29udGVudExlbmd0aCgpKTsKKyAgICB3ZWJraXREb3dubG9hZFNldFJlc3BvbnNlKGRvd25sb2Fk
LmdldCgpLCByZXNwb25zZS5nZXQoKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAg
Z19zaWduYWxfZW1pdChXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxz
W1JFQ0VJVkVEX1JFU1BPTlNFXSwgMCwgZG93bmxvYWQuZ2V0KCksIHJlc3BvbnNlLmdldCgpLCAm
cmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRS
ZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
d2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNT
RVJUKGRvd25sb2FkKTsKKyAgICBpZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3dubG9h
ZC5nZXQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIHdlYmtpdERvd25sb2FkTm90aWZ5UHJv
Z3Jlc3MoZG93bmxvYWQuZ2V0KCksIGxlbmd0aCk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7
CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBz
aWduYWxzW1JFQ0VJVkVEX0RBVEFdLCAwLCBkb3dubG9hZC5nZXQoKSwgbGVuZ3RoLCAmcmV0dXJu
VmFsdWUpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdL
U3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtp
dFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisgICAgaWYgKHdlYmtpdERvd25sb2FkSXNDYW5jZWxsZWQoZG93bmxvYWQuZ2V0
KCkpKQorICAgICAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpOwor
CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfRE9X
TkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW0RFQ0lERV9ERVNUSU5BVElPTl0sIDAs
IGRvd25sb2FkLmdldCgpLAorICAgICAgICAgICAgICAgICAgdG9JbXBsKGZpbGVuYW1lKS0+c3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgJnJldHVyblZhbHVlKTsKKyAgICByZXR1cm4gV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3du
bG9hZC5nZXQoKSkpOworfQorCitzdGF0aWMgdm9pZCBkaWRDcmVhdGVEZXN0aW5hdGlvbihXS0Nv
bnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgcGF0aCwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3du
bG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOwor
ICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgaWYgKHdlYmtpdERvd25sb2FkSXNDYW5jZWxsZWQo
ZG93bmxvYWQuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBnYm9vbGVhbiByZXR1cm5W
YWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9ET1dOTE9BRF9DTElFTlQoY2xpZW50SW5m
byksIHNpZ25hbHNbQ1JFQVRFRF9ERVNUSU5BVElPTl0sIDAsIGRvd25sb2FkLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgdG9JbXBsKHBhdGgpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmcmV0
dXJuVmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXREb3dubG9hZENsaWVudERvd25sb2Fk
RmFpbGVkKFdlYktpdERvd25sb2FkQ2xpZW50KiBkb3dubG9hZENsaWVudCwgV2ViS2l0RG93bmxv
YWQqIGRvd25sb2FkLCBjb25zdCBSZXNvdXJjZUVycm9yJiByZXNvdXJjZUVycm9yKQoreworICAg
IEdPd25QdHI8R0Vycm9yPiB3ZWJFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJv
bV9zdHJpbmcocmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9yLmVy
cm9yQ29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc291cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSk7
CisgICAgd2Via2l0RG93bmxvYWRGaW5pc2hlZChkb3dubG9hZCk7CisgICAgZ2Jvb2xlYW4gcmV0
dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChkb3dubG9hZENsaWVudCwgc2lnbmFsc1tGQUlM
RURdLCAwLCBkb3dubG9hZCwgd2ViRXJyb3IuZ2V0KCksICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRDYW5jZWxsZWQoV2ViS2l0RG93
bmxvYWRDbGllbnQqIGRvd25sb2FkQ2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3dubG9hZF9n
ZXRfcmVzcG9uc2UoZG93bmxvYWQpOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlID0gcmVzcG9u
c2UgPyB3ZWJraXROZXR3b3JrUmVzcG9uc2VHZXRTb3VwTWVzc2FnZShyZXNwb25zZSkgOiAwOwor
ICAgIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQoZG93bmxvYWRDbGllbnQsIGRv
d25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bmxvYWRD
YW5jZWxsZWRCeVVzZXJFcnJvcihtZXNzYWdlID8gUmVzb3VyY2VSZXNwb25zZShtZXNzYWdlKSA6
IFJlc291cmNlUmVzcG9uc2UoKSkpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2
b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2Fk
ID0gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAg
QVNTRVJUKGRvd25sb2FkKTsKKyAgICBpZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3du
bG9hZC5nZXQoKSkpIHsKKyAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIHRha2VzIHByZWNlZGVuY2Ug
b3ZlciBvdGhlciBlcnJvcnMuCisgICAgICAgIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRD
YW5jZWxsZWQoV0VCS0lUX0RPV05MT0FEX0NMSUVOVChjbGllbnRJbmZvKSwgZG93bmxvYWQuZ2V0
KCkpOworICAgIH0gZWxzZQorICAgICAgICB3ZWJraXREb3dubG9hZENsaWVudERvd25sb2FkRmFp
bGVkKFdFQktJVF9ET1dOTE9BRF9DTElFTlQoY2xpZW50SW5mbyksIGRvd25sb2FkLmdldCgpLCB0
b0ltcGwoZXJyb3IpLT5wbGF0Zm9ybUVycm9yKCkpOworICAgIHdlYmtpdFdlYkNvbnRleHREb3du
bG9hZEZpbmlzaGVkKHdrRG93bmxvYWQpOworfQorCitzdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJD
b250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxv
YWQpOworICAgIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRDYW5jZWxsZWQoV0VCS0lUX0RP
V05MT0FEX0NMSUVOVChjbGllbnRJbmZvKSwgZG93bmxvYWQuZ2V0KCkpOworICAgIHdlYmtpdFdl
YkNvbnRleHREb3dubG9hZEZpbmlzaGVkKHdrRG93bmxvYWQpOworfQorCitzdGF0aWMgdm9pZCBk
aWRGaW5pc2goV0tDb250ZXh0UmVmIHdrQ29udGV4dCwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
LCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+
IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9h
ZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBpZiAod2Via2l0RG93bmxvYWRJc0NhbmNl
bGxlZChkb3dubG9hZC5nZXQoKSkpIHsKKyAgICAgICAgLy8gU2luY2UgY2FuY2VsbGF0aW9uIGlz
IGFzeW5jaHJvbm91cywgZGlkRmluaXNoIG1pZ2h0IGJlIGNhbGxlZCBldmVuCisgICAgICAgIC8v
IGlmIHRoZSBkb3dubG9hZCB3YXMgY2FuY2VsbGVkLiBVc2VyIGNhbmNlbGxlZCB0aGUgZG93bmxv
YWQsCisgICAgICAgIC8vIHNvIHdlIHNob3VsZCBmYWlsIHdpdGggY2FuY2VsbGVkIGVycm9yIGV2
ZW4gaWYgdGhlIGRvd25sb2FkCisgICAgICAgIC8vIGFjdHVhbGx5IGZpbmlzaGVkIHN1Y2Nlc3Nm
dWxseS4KKyAgICAgICAgZGlkQ2FuY2VsKHdrQ29udGV4dCwgd2tEb3dubG9hZCwgY2xpZW50SW5m
byk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgd2Via2l0RG93bmxvYWRGaW5pc2hlZChk
b3dubG9hZC5nZXQoKSk7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxf
ZW1pdChXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBzaWduYWxzW0ZJTklTSEVE
XSwgMCwgZG93bmxvYWQuZ2V0KCksICZyZXR1cm5WYWx1ZSk7CisgICAgd2Via2l0V2ViQ29udGV4
dERvd25sb2FkRmluaXNoZWQod2tEb3dubG9hZCk7Cit9CisKK3ZvaWQgd2Via2l0RG93bmxvYWRD
bGllbnRBdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4dChXZWJLaXREb3dubG9hZENsaWVudCog
ZG93bmxvYWRDbGllbnQsIFdLQ29udGV4dFJlZiB3a0NvbnRleHQpCit7CisgICAgV0tDb250ZXh0
RG93bmxvYWRDbGllbnQgd2tEb3dubG9hZENsaWVudCA9IHsKKyAgICAgICAga1dLQ29udGV4dERv
d25sb2FkQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIGRvd25sb2FkQ2xpZW50LCAvLyBD
bGllbnRJbmZvCisgICAgICAgIGRpZFN0YXJ0LAorICAgICAgICAwLCAvLyBkaWRSZWNlaXZlQXV0
aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgZGlkUmVjZWl2ZVJlc3BvbnNlLAorICAgICAg
ICBkaWRSZWNlaXZlRGF0YSwKKyAgICAgICAgMCwgLy8gc2hvdWxkRGVjb2RlU291cmNlRGF0YU9m
TUlNRVR5cGUKKyAgICAgICAgZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUs
CisgICAgICAgIGRpZENyZWF0ZURlc3RpbmF0aW9uLAorICAgICAgICBkaWRGaW5pc2gsCisgICAg
ICAgIGRpZEZhaWwsCisgICAgICAgIGRpZENhbmNlbCwKKyAgICAgICAgMCwgLy8gcHJvY2Vzc0Rp
ZENyYXNoCisgICAgfTsKKyAgICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudCh3a0NvbnRleHQs
ICZ3a0Rvd25sb2FkQ2xpZW50KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdERvd25sb2Fk
Q2xpZW50RGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWRDbGllbnQqIGNsaWVudCwgV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCit7
CisgICAgaWYgKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVp
bGRfZmlsZW5hbWUoZ19nZXRfdXNlcl9zcGVjaWFsX2RpcihHX1VTRVJfRElSRUNUT1JZX0RPV05M
T0FEKSwgc3VnZ2VzdGVkRmlsZW5hbWUsIE5VTEwpKTsKKyAgICBHT3duUHRyPGNoYXI+IGRlc3Rp
bmF0aW9uVVJJKGdfZmlsZW5hbWVfdG9fdXJpKGRlc3RpbmF0aW9uLmdldCgpLCAwLCAwKSk7Cisg
ICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25V
UkkuZ2V0KCkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG93
bmxvYWRfY2xpZW50X2luaXQoV2ViS2l0RG93bmxvYWRDbGllbnQqIGNsaWVudCkKK3sKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X2Rvd25sb2FkX2NsaWVudF9jbGFzc19pbml0KFdlYktpdERvd25s
b2FkQ2xpZW50Q2xhc3MqIGNsaWVudENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0
Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhjbGllbnRDbGFzcyk7CisKKyAgICBjbGllbnRDbGFzcy0+
ZGVjaWRlX2Rlc3RpbmF0aW9uID0gd2Via2l0RG93bmxvYWRDbGllbnREZWNpZGVEZXN0aW5hdGlv
bjsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2FkQ2xpZW50OjpzdGFydGVkOgorICAg
ICAqIEBkb3dubG9hZF9jbGllbnQ6IHRoZSAjV2ViS2l0RG93bmxvYWRDbGllbnQKKyAgICAgKiBA
ZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZXZlbnQK
KyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhIG5ldyBkb3dubG9h
ZCByZXF1ZXN0IGlzIG1hZGUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9w
IG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAq
ICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBz
aWduYWxzW1NUQVJURURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJzdGFydGVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MsIHN0YXJ0ZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ET1dOTE9BRCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9h
ZENsaWVudDo6cmVjZWl2ZWQtcmVzcG9uc2U6CisgICAgICogQGRvd25sb2FkX2NsaWVudDogdGhl
ICNXZWJLaXREb3dubG9hZENsaWVudAorICAgICAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3du
bG9hZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAqIEByZXNwb25zZTogdGhlICNX
ZWJLaXROZXR3b3JrUmVzcG9uc2UgcmVjZWl2ZWQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFs
IGlzIGVtaXR0ZWQgYWZ0ZXIgI1dlYktpdERvd25sb2FkQ2xpZW50OjpzdGFydGVkLCB3aGVuIGEK
KyAgICAgKiAjV2ViS2l0TmV0d29ya1Jlc3BvbnNlIGlzIHJlY2VpdmVkIGJ1dCBhY3R1YWwgZGF0
YSB0cmFuc2ZlciBoYXNuJ3QKKyAgICAgKiBzdGFydGVkIHlldC4KKyAgICAgKgorICAgICAqIFJl
dHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZv
ciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0
aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbUkVDRUlWRURfUkVTUE9OU0VdID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJyZWNlaXZlZC1yZXNwb25zZSIsCisgICAgICAgICAgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJ
R05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXREb3dubG9hZENsaWVudENsYXNzLCByZWNlaXZlZF9yZXNwb25zZSksCisgICAgICAgICAgICAg
ICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAg
ICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfT0JKRUNULAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIsCisgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBF
X05FVFdPUktfUkVTUE9OU0UpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWRDbGll
bnQ6OnJlY2VpdmVkLWRhdGE6CisgICAgICogQGRvd25sb2FkX2NsaWVudDogdGhlICNXZWJLaXRE
b3dubG9hZENsaWVudAorICAgICAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAqIEBkYXRhX2xlbmd0aDogdGhlIGxlbmd0aCBv
ZiBkYXRhIHJlY2VpdmVkIGluIGJ5dGVzCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIGFmdGVyICNXZWJLaXREb3dubG9hZENsaWVudDo6cmVjZWl2ZWQtcmVzcG9uc2UsCisg
ICAgICogZXZlcnkgdGltZSBuZXcgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBkZXN0aW5h
dGlvbi4gSXQncworICAgICAqIHVzZWZ1bCB0byBrbm93IHRoZSBwcm9ncmVzcyBvZiB0aGUgZG93
bmxvYWQgb3BlcmF0aW9uLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBv
dGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAg
ICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisgICAgc2ln
bmFsc1tSRUNFSVZFRF9EQVRBXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygicmVjZWl2ZWQtZGF0
YSIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyks
CisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsaWVudENsYXNzLCByZWNlaXZl
ZF9kYXRhKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVf
aGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xF
QU5fX09CSkVDVF9VSU5UNjQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwg
MiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPV05MT0FELAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3du
bG9hZENsaWVudDo6ZmluaXNoZWQ6CisgICAgICogQGRvd25sb2FkX2NsaWVudDogdGhlICNXZWJL
aXREb3dubG9hZENsaWVudAorICAgICAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMg
ZW1pdHRlZCB3aGVuIGEgZG93bmxvYWQgY29tcGxldGVzLiBJbiBjYXNlIG9mIGVycm9ycywKKyAg
ICAgKiB0aGUgZG93bmxvYWQgZmluaXNoZXMgd2hlbiAjV2ViS2l0RG93bmxvYWRDbGllbnQ6OmZh
aWxlZCBzaWduYWwgaXMKKyAgICAgKiBlbWl0dGVkLgorICAgICAqCisgICAgICogUmV0dXJuczog
JVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBl
dmVudC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisg
ICAgICovCisgICAgc2lnbmFsc1tGSU5JU0hFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImZp
bmlzaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENs
YXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAg
ICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MsIGZp
bmlzaGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVf
aGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xF
QU5fX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAxLAorICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpOworCisgICAgLyoqCisgICAg
ICogV2ViS2l0RG93bmxvYWRDbGllbnQ6OmZhaWxlZDoKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50
OiB0aGUgI1dlYktpdERvd25sb2FkQ2xpZW50CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktp
dERvd25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50CisgICAgICogQGVycm9yOiB0aGUg
I0dFcnJvciB0aGF0IHdhcyB0cmlnZ2VyZWQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlz
IGVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1cnMgZHVyaW5nIGEgZG93bmxvYWQKKyAgICAgKiBv
cGVyYXRpb24uIFRoZSBnaXZlbiBAZXJyb3IsIG9mIHRoZSBkb21haW4gJVdFQktJVF9ET1dOTE9B
RF9FUlJPUiwKKyAgICAgKiBjb250YWlucyBmdXJ0aGVyIGRldGFpbHMgb2YgdGhlIGZhaWx1cmUu
IElmIGEgZG93bmxvYWQgaXMgY2FuY2VsbGVkCisgICAgICogd2l0aCB3ZWJraXRfZG93bmxvYWRf
Y2FuY2VsKCksIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2l0aCBlcnJvcgorICAgICAqICVXRUJL
SVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIuCisgICAgICoKKyAgICAgKiBSZXR1
cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3Ig
dGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhl
ci4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZBSUxFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXco
ImZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RD
bGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXREb3dubG9hZENsaWVudENsYXNzLCBm
YWlsZWQpLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9o
YW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVB
Tl9fT0JKRUNUX1BPSU5URVIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwg
MiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPV05MT0FELAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93
bmxvYWRDbGllbnQ6OmRlY2lkZS1kZXN0aW5hdGlvbjoKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50
OiB0aGUgI1dlYktpdERvd25sb2FkQ2xpZW50CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktp
dERvd25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50CisgICAgICogQHN1Z2dlc3RlZF9m
aWxlbmFtZTogdGhlIGZpbGVuYW1lIHN1Z2dlc3RlZCBmb3IgdGhlIGRvd25sb2FkCisgICAgICoK
KyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGFmdGVyICNXZWJLaXREb3dubG9hZENsaWVu
dDo6cmVjZWl2ZWQtcmVzcG9uc2UgdG8KKyAgICAgKiBkZWNpZGUgYSBkZXN0aW5hdGlvbiBVUkkg
Zm9yIHRoZSBkb3dubG9hZC4gSWYgdGhpcyBzaWduYWwgaXMgbm90CisgICAgICogaGFuZGxlZCB0
aGUgZmlsZSB3aWxsIGJlIGRvd25sb2FkZWQgdG8gJUdfVVNFUl9ESVJFQ1RPUllfRE9XTkxPQUQK
KyAgICAgKiBkaXJlY3RvcnkgdXNpbmcgQHN1Z2dlc3RlZF9maWxlbmFtZS4KKyAgICAgKgorICAg
ICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZv
a2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVu
dCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbREVDSURFX0RFU1RJTkFUSU9OXSA9Cisg
ICAgICAgIGdfc2lnbmFsX25ldygiZGVjaWRlLWRlc3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAg
ICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MsIGRlY2lkZV9kZXN0aW5hdGlvbiksCisgICAg
ICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEws
CisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfU1RS
SU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIsCisgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9TVFJJTkcpOworCisgICAgLyoqCisgICAgICogV2ViS2l0RG93bmxvYWRDbGllbnQ6OmNy
ZWF0ZWQtZGVzdGluYXRpb246CisgICAgICogQGRvd25sb2FkX2NsaWVudDogdGhlICNXZWJLaXRE
b3dubG9hZENsaWVudAorICAgICAqIEBkb3dubG9hZDogdGhlICNXZWJLaXREb3dubG9hZCBhc3Nv
Y2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAqIEBkZXN0aW5hdGlvbjogdGhlIGRlc3RpbmF0
aW9uIFVSSQorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2Vi
S2l0RG93bmxvYWRDbGllbnQ6OmRlY2lkZS1kZXN0aW5hdGlvbiB0bworICAgICAqIG5vdGlmeSB0
aGF0IGRlc3RpbmF0aW9uIGZpbGUgaGFzIGJlZW4gY3JlYXRlZCBzdWNjZXNzZnVsbHkgYXQgQGRl
c3RpbmF0aW9uLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBo
YW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICVGQUxT
RSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisKKyAgICBzaWduYWxz
W0NSRUFURURfREVTVElOQVRJT05dID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJjcmVhdGVkLWRl
c3RpbmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVj
dENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAg
ICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3Ms
IGNyZWF0ZWRfZGVzdGluYXRpb24pLAorICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfYWNj
dW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0
X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9CT09MRUFOLCAyLAorICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxP
QUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfU1RSSU5HKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ODliMTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENs
aWVudC5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJL
SVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJl
IGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdERvd25sb2FkQ2xp
ZW50X2gKKyNkZWZpbmUgV2ViS2l0RG93bmxvYWRDbGllbnRfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJL
SVRfVFlQRV9ET1dOTE9BRF9DTElFTlQgICAgICAgICAgICAod2Via2l0X2Rvd25sb2FkX2NsaWVu
dF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKG9iaikgICAgICAg
ICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX0RPV05M
T0FEX0NMSUVOVCwgV2ViS2l0RG93bmxvYWRDbGllbnQpKQorI2RlZmluZSBXRUJLSVRfSVNfRE9X
TkxPQURfQ0xJRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCkpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9B
RF9DTElFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfRE9XTkxPQURfQ0xJRU5ULCBXZWJLaXREb3dubG9hZENsaWVudENsYXNz
KSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEX0NMSUVOVF9DTEFTUyhrbGFzcykgKEdfVFlQ
RV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET1dOTE9BRF9DTElFTlQp
KQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xJRU5UX0dFVF9DTEFTUyhvYmopICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCwg
V2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXREb3du
bG9hZENsaWVudCBXZWJLaXREb3dubG9hZENsaWVudDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRE
b3dubG9hZENsaWVudENsYXNzIFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3M7CisKK3N0cnVjdCBf
V2ViS2l0RG93bmxvYWRDbGllbnQgeworICAgIEdPYmplY3QgcGFyZW50OworfTsKKworc3RydWN0
IF9XZWJLaXREb3dubG9hZENsaWVudENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2Ns
YXNzOworCisgICAgLyogdmlydHVhbCB0YWJsZSAqLworICAgIGdib29sZWFuICgqIHN0YXJ0ZWQp
ICAgICAgICAgICAgIChXZWJLaXREb3dubG9hZENsaWVudCAgKmRvd25sb2FkX2NsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAg
ICpkb3dubG9hZCk7CisgICAgZ2Jvb2xlYW4gKCogcmVjZWl2ZWRfcmVzcG9uc2UpICAgKFdlYktp
dERvd25sb2FkQ2xpZW50ICAqZG93bmxvYWRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXREb3dubG9hZCAgICAgICAgKmRvd25sb2FkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXROZXR3b3JrUmVzcG9uc2UgKnJl
c3BvbnNlKTsKKyAgICBnYm9vbGVhbiAoKiByZWNlaXZlZF9kYXRhKSAgICAgICAoV2ViS2l0RG93
bmxvYWRDbGllbnQgICpkb3dubG9hZF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYktpdERvd25sb2FkICAgICAgICAqZG93bmxvYWQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50NjQgICAgICAgICAgICAgICAgZGF0YV9s
ZW5ndGgpOworICAgIGdib29sZWFuICgqIGZpbmlzaGVkKSAgICAgICAgICAgIChXZWJLaXREb3du
bG9hZENsaWVudCAgKmRvd25sb2FkX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAgICpkb3dubG9hZCk7CisgICAgZ2Jvb2xl
YW4gKCogZmFpbGVkKSAgICAgICAgICAgICAgKFdlYktpdERvd25sb2FkQ2xpZW50ICAqZG93bmxv
YWRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRE
b3dubG9hZCAgICAgICAgKmRvd25sb2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgKmVycm9yKTsKKyAgICBnYm9vbGVhbiAoKiBk
ZWNpZGVfZGVzdGluYXRpb24pICAoV2ViS2l0RG93bmxvYWRDbGllbnQgICpkb3dubG9hZF9jbGll
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2Fk
ICAgICAgICAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAqc3VnZ2VzdGVkX2ZpbGVuYW1lKTsKKyAgICBnYm9vbGVh
biAoKiBjcmVhdGVkX2Rlc3RpbmF0aW9uKSAoV2ViS2l0RG93bmxvYWRDbGllbnQgICpkb3dubG9h
ZF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERv
d25sb2FkICAgICAgICAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAqZGVzdGluYXRpb24pOworfTsKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2Rvd25sb2FkX2NsaWVudF9nZXRfdHlwZSAodm9pZCk7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudFByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmJlMDA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnRQcml2YXRl
LmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYktpdERvd25sb2FkQ2xpZW50UHJpdmF0ZV9oCisjZGVm
aW5lIFdlYktpdERvd25sb2FkQ2xpZW50UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXREb3du
bG9hZENsaWVudC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tDb250ZXh0Lmg+CisKK3ZvaWQgd2Vi
a2l0RG93bmxvYWRDbGllbnRBdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4dChXZWJLaXREb3du
bG9hZENsaWVudCosIFdLQ29udGV4dFJlZik7CisKKyNlbmRpZiAvLyBXZWJLaXREb3dubG9hZENs
aWVudFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuY3BwCmluZGV4IDZjMjRhYTEuLmFkZGNmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKQEAgLTU3LDMgKzU3LDEyIEBA
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJPUl9DQU5OT1Rf
TE9BRF9QTFVHSU4sIFBsdWdpbkVycm9yCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdF
QktJVF9QTFVHSU5fRVJST1JfSkFWQV9VTkFWQUlMQUJMRSwgUGx1Z2luRXJyb3JKYXZhVW5hdmFp
bGFibGUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VSUk9S
X0NPTk5FQ1RJT05fQ0FOQ0VMTEVELCBQbHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VSUk9SX1dJTExfSEFO
RExFX0xPQUQsIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQpOworCitHUXVhcmsgd2Via2l0X2Rv
d25sb2FkX2Vycm9yX3F1YXJrKCkKK3sKKyAgICByZXR1cm4gZ19xdWFya19mcm9tX3N0YXRpY19z
dHJpbmcoV2ViQ29yZTo6ZXJyb3JEb21haW5Eb3dubG9hZCk7Cit9CisKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUkssIERvd25sb2FkRXJy
b3JOZXR3b3JrKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FE
X0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OLCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgKaW5kZXggM2NlMGUyMC4uOWIwZTYzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oCkBAIC0z
Miw2ICszMiw3IEBAIEdfQkVHSU5fREVDTFMKICNkZWZpbmUgV0VCS0lUX05FVFdPUktfRVJST1Ig
d2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgKCkKICNkZWZpbmUgV0VCS0lUX1BPTElDWV9FUlJP
UiAgd2Via2l0X3BvbGljeV9lcnJvcl9xdWFyayAoKQogI2RlZmluZSBXRUJLSVRfUExVR0lOX0VS
Uk9SICB3ZWJraXRfcGx1Z2luX2Vycm9yX3F1YXJrICgpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9B
RF9FUlJPUiB3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsgKCkKIAogLyoqCiAgKiBXZWJLaXRO
ZXR3b3JrRXJyb3I6CkBAIC04OSwxNCArOTAsMzEgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJL
SVRfUExVR0lOX0VSUk9SX1dJTExfSEFORExFX0xPQUQgPSAyMDQsCiB9IFdlYktpdFBsdWdpbkVy
cm9yOwogCisvKioKKyAqIFdlYktpdERvd25sb2FkRXJyb3I6CisgKiBAV0VCS0lUX0RPV05MT0FE
X0VSUk9SX05FVFdPUks6IERvd25sb2FkIGZhaWx1cmUgZHVlIHRvIG5ldHdvcmsgZXJyb3IKKyAq
IEBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI6IERvd25sb2FkIHdhcyBj
YW5jZWxsZWQgYnkgdXNlcgorICogQFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjog
RG93bmxvYWQgZmFpbHVyZSBkdWUgdG8gZGVzdGluYXRpb24gZXJyb3IKKyAqCisgKiBFbnVtIHZh
bHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBkb3dubG9hZCBlcnJvcnMuCisgKi8KK3R5
cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksgPSA0OTksCisg
ICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSID0gNDAwLAorICAgIFdF
QktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiA9IDQwMQorfSBXZWJLaXREb3dubG9hZEVy
cm9yOworCitXRUJLSVRfQVBJIEdRdWFyaword2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgICh2
b2lkKTsKKwogV0VCS0lUX0FQSSBHUXVhcmsKLXdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrICh2
b2lkKTsKK3dlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsgICAodm9pZCk7CiAKIFdFQktJVF9BUEkg
R1F1YXJrCi13ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrICAodm9pZCk7Cit3ZWJraXRfcGx1Z2lu
X2Vycm9yX3F1YXJrICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEdRdWFyawotd2Via2l0X3BsdWdp
bl9lcnJvcl9xdWFyayAgKHZvaWQpOword2Via2l0X2Rvd25sb2FkX2Vycm9yX3F1YXJrICh2b2lk
KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggZjVmZmIx
Yi4uNTZkMjI5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0yOTUsMTUgKzI5NSwz
NSBAQCB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8
RklMRT5XZWJLaXREb3dubG9hZENsaWVudDwvRklMRT4KK1dlYktpdERvd25sb2FkQ2xpZW50CisK
KzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcworV0VCS0lU
X1RZUEVfRE9XTkxPQURfQ0xJRU5UCitXRUJLSVRfRE9XTkxPQURfQ0xJRU5UCitXRUJLSVRfSVNf
RE9XTkxPQURfQ0xJRU5UCitXRUJLSVRfRE9XTkxPQURfQ0xJRU5UX0NMQVNTCitXRUJLSVRfSVNf
RE9XTkxPQURfQ0xJRU5UX0NMQVNTCitXRUJLSVRfRE9XTkxPQURfQ0xJRU5UX0dFVF9DTEFTUwor
Cis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0X2Rvd25sb2FkX2NsaWVudF9nZXRfdHlwZQor
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEVycm9yPC9GSUxFPgogV0VCS0lU
X05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJST1IKIFdFQktJVF9QT0xJQ1lfRVJST1IK
K1dFQktJVF9ET1dOTE9BRF9FUlJPUgogV2ViS2l0TmV0d29ya0Vycm9yCiBXZWJLaXRQbHVnaW5F
cnJvcgogV2ViS2l0UG9saWN5RXJyb3IKK1dlYktpdERvd25sb2FkRXJyb3IKIHdlYmtpdF9uZXR3
b3JrX2Vycm9yX3F1YXJrCiB3ZWJraXRfcGx1Z2luX2Vycm9yX3F1YXJrCiB3ZWJraXRfcG9saWN5
X2Vycm9yX3F1YXJrCit3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsKIDwvU0VDVElPTj4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmluZGV4IDJjYTg3Yzgu
Ljc3ZGY1NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dl
YmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgK
QEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEJhY2tGb3J3YXJkTGlz
dEl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9h
ZENsaWVudC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RW51bVR5cGVzLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRFcnJvci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0TmV0d29y
a1JlcXVlc3QuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDJtYXJzaGFsLmxpc3QgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQybWFyc2hhbC5saXN0CmluZGV4IGI3MDY5YTcuLmQyNThmYjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdApAQCAt
MSw1ICsxLDkgQEAKIEJPT0xFQU46T0JKRUNULFNUUklORyxQT0lOVEVSCiBCT09MRUFOOk9CSkVD
VAorQk9PTEVBTjpPQkpFQ1QsT0JKRUNUCitCT09MRUFOOk9CSkVDVCxQT0lOVEVSCitCT09MRUFO
Ok9CSkVDVCxTVFJJTkcKK0JPT0xFQU46T0JKRUNULFVJTlQ2NAogQk9PTEVBTjpWT0lECiBWT0lE
Ok9CSkVDVCxQT0lOVEVSCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116229</attachid>
            <date>2011-11-22 08:23:25 -0800</date>
            <delta_ts>2011-11-29 12:51:33 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-downloads-api.diff</filename>
            <type>text/plain</type>
            <size>60151</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4ZTk4YWE3Li4yZjY3ZDhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzUg
QEAKKzIwMTEtMTEtMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBXZWJLaXREb3dubG9hZENsaWVudCB0byBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKGRpZFN0YXJ0KTogRW1pdCBXZWJLaXREb3dubG9hZENsaWVudDo6c3RhcnRlZCBzaWduYWwu
CisgICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2UpOiBDcmVhdGUgYSBXZWJLaXROZXR3b3JrUmVz
cG9uc2Ugd2l0aCB0aGUKKyAgICAgICAgcmVjZWl2ZWQgUmVzb3VyY2VSZXNwb25zZSBmb3IgdGhl
IGRvd25sb2FkIGFuZCBlbWl0CisgICAgICAgIFdlYktpdERvd25sb2FkQ2xpZW50OjpyZWNlaXZl
ZC1yZXNwb25zZSBzaWduYWwuCisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6IEVtaXQgV2ViS2l0
RG93bmxvYWRDbGllbnQ6OnJlY2VpdmVkLWRhdGEuCisgICAgICAgIChkZWNpZGVEZXN0aW5hdGlv
bldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6IEVtaXQKKyAgICAgICAgIFdlYktpdERvd25sb2FkQ2xp
ZW50OjpkZWNpZGUtZGVzdGluYXRpb24uCisgICAgICAgIChkaWRDcmVhdGVEZXN0aW5hdGlvbik6
IEVtaXQKKyAgICAgICAgV2ViS2l0RG93bmxvYWRDbGllbnQ6OmNyZWF0ZWQtZGVzdGluYXRpb24u
CisgICAgICAgICh3ZWJraXREb3dubG9hZENsaWVudERvd25sb2FkRmFpbGVkKTogRW1pdAorICAg
ICAgICBXZWJLaXREb3dubG9hZENsaWVudDo6ZmFpbGVkIGZvciB0aGUgZ2l2ZW4gZXJyb3IuCisg
ICAgICAgICh3ZWJraXREb3dubG9hZENsaWVudERvd25sb2FkQ2FuY2VsbGVkKTogRW1pdAorICAg
ICAgICBXZWJLaXREb3dubG9hZENsaWVudDo6ZmFpbGVkIHdpdGggYQorICAgICAgICBXRUJLSVRf
RE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIgZXJyb3IuCisgICAgICAgIChkaWRGYWls
KTogQ2FsbCB3ZWJraXREb3dubG9hZENsaWVudERvd25sb2FkRmFpbGVkKCkgb3IKKyAgICAgICAg
d2Via2l0RG93bmxvYWRDbGllbnREb3dubG9hZENhbmNlbGxlZCgpIGlmIHRoZSBkb3dubG9hZCB3
YXMKKyAgICAgICAgY2FuY2VsbGVkLgorICAgICAgICAoZGlkQ2FuY2VsKTogQ2FsbCB3ZWJraXRE
b3dubG9hZENsaWVudERvd25sb2FkRmFpbGVkKCkuCisgICAgICAgIChkaWRGaW5pc2gpOiBFbWl0
IFdlYktpdERvd25sb2FkQ2xpZW50OjpmaW5pc2hlZC4KKyAgICAgICAgKHdlYmtpdERvd25sb2Fk
Q2xpZW50QXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRleHQpOiBBZGQKKyAgICAgICAgaW1wbGVt
ZW50YXRpb25zIGZvciB0aGUgV0tEb3dubG9hZENsaWVudCBpbnRlcmZhY2UuCisgICAgICAgICh3
ZWJraXREb3dubG9hZENsaWVudERlY2lkZURlc3RpbmF0aW9uKTogRGVmYXVsdCBpbXBsZW1lbnRh
dGlvbiBvZgorICAgICAgICBXZWJLaXREb3dubG9hZENsaWVudDo6ZGVjaWRlLWRlc3RpbmF0aW9u
IHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9jbGllbnRfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfZG93bmxvYWRfY2xpZW50X2NsYXNzX2luaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50UHJpdmF0ZS5oOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb3dubG9h
ZF9lcnJvcl9xdWFyayk6IEFkZCBxdWFyayBmb3IgZG93bmxvYWQgZXJyb3JzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmg6IEFkZCBkb3dubG9hZCBlcnJvcnMuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAg
IChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6IEluaXRpYWxpemUgdGhlIGRvd25sb2FkIGNsaWVu
dC4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZG93bmxvYWRfY2xpZW50KTogUmV0
dXJuIHRoZSBjdWVycmVudAorICAgICAgICBkb3dubG9hZCBjbGllbnQgb2YgdGhlIHdlYiBjb250
ZXh0LgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X3NldF9kb3dubG9hZF9jbGllbnQpOiBT
ZXQgYSBuZXcgZG93bmxvYWQKKyAgICAgICAgY2xpZW50IGZvciB0aGUgd2ViIGNvbnRleHQuCisg
ICAgICAgIChkb3dubG9hZHNNYXApOiBIYXNoTWFwIGNvbnRhaW5pbmcgZG93bmxvYWQgb2JqZWN0
cyBmb3IgYWxsCisgICAgICAgIG9uZ29pbmcgZG93bmxvYWQgb3BlcmF0aW9ucy4KKyAgICAgICAg
KHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkpOiBTdGFydHMgYSBuZXcgZG93bmxvYWQg
Zm9yIHRoZQorICAgICAgICBnaXZlbiBVUkkuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0R2V0
T3JDcmVhdGVEb3dubG9hZCk6IEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYQorICAgICAgICBu
ZXcgZG93bmxvYWQgb2JqZWN0IG9yIHJldHVybiB0aGUgZXhpc3Rpbmcgb25lIGZyb20gdGhlIGRv
d25sb2FkcyBtYXAuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRGaW5pc2hlZCk6
IFJlbW92ZSB0aGUgZG93bmxvYWQgb2JqZWN0CisgICAgICAgIGZyb20gdGhlIGRvd25sb2FkcyBt
YXAgd2hlbiB0aGUgb3BlcmF0aW9uIGZpbmlzaGVzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQ6IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXM6IEFkZAorICAgICAgICB3ZWJraXRf
ZG93bmxvYWRfY2xpZW50X2dldF90eXBlKCkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdCBmb3IgZG93bmxvYWRzLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIpOgorICAgICAgICAodGVzdERvd25sb2Fk
TG9jYWxGaWxlKToKKyAgICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKToKKyAgICAg
ICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOgor
ICAgICAgICAodGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mi5oOiBBZGQgV2ViS2l0RG93bmxvYWRDbGllbnQuaC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0OiBBZGQgc2lnbmF0dXJlcyBmb3IgbmV3CisgICAg
ICAgIG1hcnNoYWxsZXJzLgorCiAyMDExLTExLTIxICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1l
bmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBSRUdSRVNTSU9OKDEwMDQ4
Myk6IEl0IG1hZGUgMiBBUEkgdGVzdHMgZmFpbApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCA4NzJl
ZTRiLi5lZGU4MDc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNzksNiArNzksNyBAQCB3ZWJr
aXQyZ3RrX2hlYWRlcnMgPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRC
YWNrRm9yd2FyZExpc3RJdGVtLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RGVmaW5lcy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25s
b2FkLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGll
bnQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oIFwKIAkk
KFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE5ldHdvcmtSZXF1ZXN0LmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0TmV0d29ya1Jlc3BvbnNlLmggXApAQCAt
NTA1LDYgKzUwNiw5IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lP
TkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5oIFwKKwlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudFByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXROZXR3b3JrUmVxdWVzdC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRD
bGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxv
YWRDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDZjOTIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZENsaWVudC5jcHAKQEAgLTAsMCArMSwzODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxMSBNb3Rv
cm9sYSBNb2JpbGl0eSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJD
b250ZXh0LmgiCisjaW5jbHVkZSAiV2ViRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJLaXREb3dubG9h
ZENsaWVudFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRFcnJvci5oIgorI2luY2x1ZGUgIldlYktpdE1hcnNoYWwuaCIKKyNpbmNs
dWRlICJXZWJLaXROZXR3b3JrUmVzcG9uc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAi
V2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Vycm9yc0d0ay5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgorI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAgIFNUQVJURUQs
CisgICAgUkVDRUlWRURfUkVTUE9OU0UsCisgICAgUkVDRUlWRURfREFUQSwKKyAgICBGSU5JU0hF
RCwKKyAgICBGQUlMRUQsCisgICAgREVDSURFX0RFU1RJTkFUSU9OLAorICAgIENSRUFURURfREVT
VElOQVRJT04sCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNb
TEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdERvd25sb2FkQ2xp
ZW50LCB3ZWJraXRfZG93bmxvYWRfY2xpZW50LCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9p
ZCBkaWRTdGFydChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9h
ZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAg
IEFTU0VSVChkb3dubG9hZCk7CisgICAgd2Via2l0RG93bmxvYWRTdGFydGVkKGRvd25sb2FkLmdl
dCgpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJ
VF9ET1dOTE9BRF9DTElFTlQoY2xpZW50SW5mbyksIHNpZ25hbHNbU1RBUlRFRF0sIDAsIGRvd25s
b2FkLmdldCgpLCAmcmV0dXJuVmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2UoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVzcG9u
c2VSZWYgd2tSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURv
d25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgaWYgKHdlYmtp
dERvd25sb2FkSXNDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBtZXNzYWdlKHRvSW1wbCh3a1Jlc3BvbnNlKS0+cmVz
b3VyY2VSZXNwb25zZSgpLnRvU291cE1lc3NhZ2UoKSk7CisgICAgR1JlZlB0cjxXZWJLaXROZXR3
b3JrUmVzcG9uc2U+IHJlc3BvbnNlKHdlYmtpdE5ldHdvcmtSZXNwb25zZUNyZWF0ZUZvclNvdXBN
ZXNzYWdlKG1lc3NhZ2UuZ2V0KCkpKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9jb250ZW50X2xlbmd0aChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzKSkKKyAgICAgICAgd2Vi
a2l0TmV0d29ya1Jlc3BvbnNlU2V0Q29udGVudExlbmd0aChyZXNwb25zZS5nZXQoKSwgdG9JbXBs
KHdrUmVzcG9uc2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCkp
OworICAgIHdlYmtpdERvd25sb2FkU2V0UmVzcG9uc2UoZG93bmxvYWQuZ2V0KCksIHJlc3BvbnNl
LmdldCgpKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdF
QktJVF9ET1dOTE9BRF9DTElFTlQoY2xpZW50SW5mbyksIHNpZ25hbHNbUkVDRUlWRURfUkVTUE9O
U0VdLCAwLCBkb3dubG9hZC5nZXQoKSwgcmVzcG9uc2UuZ2V0KCksICZyZXR1cm5WYWx1ZSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7
CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0
R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOwor
ICAgIGlmICh3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdldCgpKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2Via2l0RG93bmxvYWROb3RpZnlQcm9ncmVzcyhkb3dubG9hZC5n
ZXQoKSwgbGVuZ3RoKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9l
bWl0KFdFQktJVF9ET1dOTE9BRF9DTElFTlQoY2xpZW50SW5mbyksIHNpZ25hbHNbUkVDRUlWRURf
REFUQV0sIDAsIGRvd25sb2FkLmdldCgpLCBsZW5ndGgsICZyZXR1cm5WYWx1ZSk7Cit9CisKK3N0
YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShX
S0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5h
bWUsIGJvb2wqIGFsbG93T3ZlcndyaXRlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBp
ZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3dubG9hZC5nZXQoKSkpCisgICAgICAgIHJl
dHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiIik7CisKKyAgICBnYm9vbGVhbiBy
ZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9ET1dOTE9BRF9DTElFTlQoY2xp
ZW50SW5mbyksIHNpZ25hbHNbREVDSURFX0RFU1RJTkFUSU9OXSwgMCwgZG93bmxvYWQuZ2V0KCks
CisgICAgICAgICAgICAgICAgICB0b0ltcGwoZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpLCAmcmV0dXJuVmFsdWUpOworICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tEb3du
bG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBwYXRoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2Vi
Q29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25s
b2FkKTsKKyAgICBpZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3dubG9hZC5nZXQoKSkp
CisgICAgICAgIHJldHVybjsKKworICAgIGdib29sZWFuIHJldHVyblZhbHVlOworICAgIGdfc2ln
bmFsX2VtaXQoV0VCS0lUX0RPV05MT0FEX0NMSUVOVChjbGllbnRJbmZvKSwgc2lnbmFsc1tDUkVB
VEVEX0RFU1RJTkFUSU9OXSwgMCwgZG93bmxvYWQuZ2V0KCksCisgICAgICAgICAgICAgICAgICB0
b0ltcGwocGF0aCktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICZyZXR1cm5WYWx1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQoV2ViS2l0RG93
bmxvYWRDbGllbnQqIGRvd25sb2FkQ2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IpCit7CisgICAgR093blB0cjxHRXJyb3I+
IHdlYkVycm9yKGdfZXJyb3JfbmV3X2xpdGVyYWwoZ19xdWFya19mcm9tX3N0cmluZyhyZXNvdXJj
ZUVycm9yLmRvbWFpbigpLnV0ZjgoKS5kYXRhKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlRXJyb3IuZXJyb3JDb2RlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VFcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB3ZWJraXREb3du
bG9hZEZpbmlzaGVkKGRvd25sb2FkKTsKKyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBn
X3NpZ25hbF9lbWl0KGRvd25sb2FkQ2xpZW50LCBzaWduYWxzW0ZBSUxFRF0sIDAsIGRvd25sb2Fk
LCB3ZWJFcnJvci5nZXQoKSwgJnJldHVyblZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
RG93bmxvYWRDbGllbnREb3dubG9hZENhbmNlbGxlZChXZWJLaXREb3dubG9hZENsaWVudCogZG93
bmxvYWRDbGllbnQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBXZWJLaXROZXR3
b3JrUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShkb3du
bG9hZCk7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2UgPSByZXNwb25zZSA/IHdlYmtpdE5ldHdv
cmtSZXNwb25zZUdldFNvdXBNZXNzYWdlKHJlc3BvbnNlKSA6IDA7CisgICAgd2Via2l0RG93bmxv
YWRDbGllbnREb3dubG9hZEZhaWxlZChkb3dubG9hZENsaWVudCwgZG93bmxvYWQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZENhbmNlbGxlZEJ5VXNlckVy
cm9yKG1lc3NhZ2UgPyBSZXNvdXJjZVJlc3BvbnNlKG1lc3NhZ2UpIDogUmVzb3VyY2VSZXNwb25z
ZSgpKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2Fk
UmVmIHdrRG93bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8p
Cit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250
ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQp
OworICAgIGlmICh3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdldCgpKSkgewor
ICAgICAgICAvLyBDYW5jZWxsYXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG90aGVyIGVycm9y
cy4KKyAgICAgICAgd2Via2l0RG93bmxvYWRDbGllbnREb3dubG9hZENhbmNlbGxlZChXRUJLSVRf
RE9XTkxPQURfQ0xJRU5UKGNsaWVudEluZm8pLCBkb3dubG9hZC5nZXQoKSk7CisgICAgfSBlbHNl
CisgICAgICAgIHdlYmtpdERvd25sb2FkQ2xpZW50RG93bmxvYWRGYWlsZWQoV0VCS0lUX0RPV05M
T0FEX0NMSUVOVChjbGllbnRJbmZvKSwgZG93bmxvYWQuZ2V0KCksIHRvSW1wbChlcnJvciktPnBs
YXRmb3JtRXJyb3IoKSk7CisgICAgd2Via2l0V2ViQ29udGV4dERvd25sb2FkRmluaXNoZWQod2tE
b3dubG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0
ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgd2Via2l0
RG93bmxvYWRDbGllbnREb3dubG9hZENhbmNlbGxlZChXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKGNs
aWVudEluZm8pLCBkb3dubG9hZC5nZXQoKSk7CisgICAgd2Via2l0V2ViQ29udGV4dERvd25sb2Fk
RmluaXNoZWQod2tEb3dubG9hZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRl
eHRSZWYgd2tDb250ZXh0LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJr
aXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQo
ZG93bmxvYWQpOworICAgIGlmICh3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdl
dCgpKSkgeworICAgICAgICAvLyBTaW5jZSBjYW5jZWxsYXRpb24gaXMgYXN5bmNocm9ub3VzLCBk
aWRGaW5pc2ggbWlnaHQgYmUgY2FsbGVkIGV2ZW4KKyAgICAgICAgLy8gaWYgdGhlIGRvd25sb2Fk
IHdhcyBjYW5jZWxsZWQuIFVzZXIgY2FuY2VsbGVkIHRoZSBkb3dubG9hZCwKKyAgICAgICAgLy8g
c28gd2Ugc2hvdWxkIGZhaWwgd2l0aCBjYW5jZWxsZWQgZXJyb3IgZXZlbiBpZiB0aGUgZG93bmxv
YWQKKyAgICAgICAgLy8gYWN0dWFsbHkgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAgICBk
aWRDYW5jZWwod2tDb250ZXh0LCB3a0Rvd25sb2FkLCBjbGllbnRJbmZvKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICB3ZWJraXREb3dubG9hZEZpbmlzaGVkKGRvd25sb2FkLmdldCgpKTsK
KyAgICBnYm9vbGVhbiByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9ET1dO
TE9BRF9DTElFTlQoY2xpZW50SW5mbyksIHNpZ25hbHNbRklOSVNIRURdLCAwLCBkb3dubG9hZC5n
ZXQoKSwgJnJldHVyblZhbHVlKTsKKyAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRGaW5pc2hl
ZCh3a0Rvd25sb2FkKTsKK30KKwordm9pZCB3ZWJraXREb3dubG9hZENsaWVudEF0dGFjaERvd25s
b2FkQ2xpZW50VG9Db250ZXh0KFdlYktpdERvd25sb2FkQ2xpZW50KiBkb3dubG9hZENsaWVudCwg
V0tDb250ZXh0UmVmIHdrQ29udGV4dCkKK3sKKyAgICBXS0NvbnRleHREb3dubG9hZENsaWVudCB3
a0Rvd25sb2FkQ2xpZW50ID0geworICAgICAgICBrV0tDb250ZXh0RG93bmxvYWRDbGllbnRDdXJy
ZW50VmVyc2lvbiwKKyAgICAgICAgZG93bmxvYWRDbGllbnQsIC8vIENsaWVudEluZm8KKyAgICAg
ICAgZGlkU3RhcnQsCisgICAgICAgIDAsIC8vIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZQorICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UsCisgICAgICAgIGRpZFJlY2VpdmVEYXRh
LAorICAgICAgICAwLCAvLyBzaG91bGREZWNvZGVTb3VyY2VEYXRhT2ZNSU1FVHlwZQorICAgICAg
ICBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSwKKyAgICAgICAgZGlkQ3Jl
YXRlRGVzdGluYXRpb24sCisgICAgICAgIGRpZEZpbmlzaCwKKyAgICAgICAgZGlkRmFpbCwKKyAg
ICAgICAgZGlkQ2FuY2VsLAorICAgICAgICAwLCAvLyBwcm9jZXNzRGlkQ3Jhc2gKKyAgICB9Owor
ICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50KHdrQ29udGV4dCwgJndrRG93bmxvYWRDbGll
bnQpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0RG93bmxvYWRDbGllbnREZWNpZGVEZXN0
aW5hdGlvbihXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBpZiAod2Via2l0
X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShnX2dl
dF91c2VyX3NwZWNpYWxfZGlyKEdfVVNFUl9ESVJFQ1RPUllfRE9XTkxPQUQpLCBzdWdnZXN0ZWRG
aWxlbmFtZSwgTlVMTCkpOworICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19maWxl
bmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAsIDApKTsKKyAgICB3ZWJraXRfZG93bmxv
YWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGllbnRfaW5p
dChXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50KQoreworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfZG93bmxvYWRfY2xpZW50X2NsYXNzX2luaXQoV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcyog
Y2xpZW50Q2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNU
X0NMQVNTKGNsaWVudENsYXNzKTsKKworICAgIGNsaWVudENsYXNzLT5kZWNpZGVfZGVzdGluYXRp
b24gPSB3ZWJraXREb3dubG9hZENsaWVudERlY2lkZURlc3RpbmF0aW9uOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0RG93bmxvYWRDbGllbnQ6OnN0YXJ0ZWQ6CisgICAgICogQGRvd25sb2FkX2Ns
aWVudDogdGhlICNXZWJLaXREb3dubG9hZENsaWVudAorICAgICAqIEBkb3dubG9hZDogdGhlICNX
ZWJLaXREb3dubG9hZCBhc3NvY2lhdGVkIHdpdGggdGhpcyBldmVudAorICAgICAqCisgICAgICog
VGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGEgbmV3IGRvd25sb2FkIHJlcXVlc3QgaXMgbWFk
ZS4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMg
ZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAgICogICAlRkFMU0UgdG8gcHJv
cGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbU1RBUlRFRF0g
PQorICAgICAgICBnX3NpZ25hbF9uZXcoInN0YXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19T
SUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2Vi
S2l0RG93bmxvYWRDbGllbnRDbGFzcywgc3RhcnRlZCksCisgICAgICAgICAgICAgICAgICAgICBn
X3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfQk9PTEVBTiwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RP
V05MT0FEKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2FkQ2xpZW50OjpyZWNlaXZl
ZC1yZXNwb25zZToKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50OiB0aGUgI1dlYktpdERvd25sb2Fk
Q2xpZW50CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkIGFzc29jaWF0ZWQg
d2l0aCB0aGlzIGV2ZW50CisgICAgICogQHJlc3BvbnNlOiB0aGUgI1dlYktpdE5ldHdvcmtSZXNw
b25zZSByZWNlaXZlZAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRl
ciAjV2ViS2l0RG93bmxvYWRDbGllbnQ6OnN0YXJ0ZWQsIHdoZW4gYQorICAgICAqICNXZWJLaXRO
ZXR3b3JrUmVzcG9uc2UgaXMgcmVjZWl2ZWQgYnV0IGFjdHVhbCBkYXRhIHRyYW5zZmVyIGhhc24n
dAorICAgICAqIHN0YXJ0ZWQgeWV0LgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8g
c3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAg
ICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICovCisg
ICAgc2lnbmFsc1tSRUNFSVZFRF9SRVNQT05TRV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInJl
Y2VpdmVkLXJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50
Q2xhc3MsIHJlY2VpdmVkX3Jlc3BvbnNlKSwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFs
X2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgIHdl
YmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAg
ICBHX1RZUEVfQk9PTEVBTiwgMiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RP
V05MT0FELAorICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfTkVUV09SS19SRVNQT05T
RSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZENsaWVudDo6cmVjZWl2ZWQtZGF0
YToKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50OiB0aGUgI1dlYktpdERvd25sb2FkQ2xpZW50Cisg
ICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGV2ZW50CisgICAgICogQGRhdGFfbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIGRhdGEgcmVjZWl2ZWQg
aW4gYnl0ZXMKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYWZ0ZXIgI1dl
YktpdERvd25sb2FkQ2xpZW50OjpyZWNlaXZlZC1yZXNwb25zZSwKKyAgICAgKiBldmVyeSB0aW1l
IG5ldyBkYXRhIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGRlc3RpbmF0aW9uLiBJdCdzCisgICAg
ICogdXNlZnVsIHRvIGtub3cgdGhlIHByb2dyZXNzIG9mIHRoZSBkb3dubG9hZCBvcGVyYXRpb24u
CisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZy
b20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3Bh
Z2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWduYWxzW1JFQ0VJVkVEX0RB
VEFdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJyZWNlaXZlZC1kYXRhIiwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1Rf
T0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MsIHJlY2VpdmVkX2RhdGEpLAorICAgICAg
ICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNUX1VJTlQ2
NCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAyLAorICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfVUlOVDY0KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdERvd25sb2FkQ2xpZW50OjpmaW5p
c2hlZDoKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50OiB0aGUgI1dlYktpdERvd25sb2FkQ2xpZW50
CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0
aGlzIGV2ZW50CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIHdoZW4gYSBk
b3dubG9hZCBjb21wbGV0ZXMuIEluIGNhc2Ugb2YgZXJyb3JzLAorICAgICAqIHRoZSBkb3dubG9h
ZCBmaW5pc2hlcyB3aGVuICNXZWJLaXREb3dubG9hZENsaWVudDo6ZmFpbGVkIHNpZ25hbCBpcwor
ICAgICAqIGVtaXR0ZWQuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90
aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAg
JUZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKyAgICBzaWdu
YWxzW0ZJTklTSEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmluaXNoZWQiLAorICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAg
ICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcywgZmluaXNoZWQpLAorICAgICAg
ICAgICAgICAgICAgICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCBOVUxMLAor
ICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCisgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9ET1dOTE9BRCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9h
ZENsaWVudDo6ZmFpbGVkOgorICAgICAqIEBkb3dubG9hZF9jbGllbnQ6IHRoZSAjV2ViS2l0RG93
bmxvYWRDbGllbnQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgZXZlbnQKKyAgICAgKiBAZXJyb3I6IHRoZSAjR0Vycm9yIHRoYXQgd2Fz
IHRyaWdnZXJlZAorICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIGFu
IGVycm9yIG9jY3VycyBkdXJpbmcgYSBkb3dubG9hZAorICAgICAqIG9wZXJhdGlvbi4gVGhlIGdp
dmVuIEBlcnJvciwgb2YgdGhlIGRvbWFpbiAlV0VCS0lUX0RPV05MT0FEX0VSUk9SLAorICAgICAq
IGNvbnRhaW5zIGZ1cnRoZXIgZGV0YWlscyBvZiB0aGUgZmFpbHVyZS4gSWYgYSBkb3dubG9hZCBp
cyBjYW5jZWxsZWQKKyAgICAgKiB3aXRoIHdlYmtpdF9kb3dubG9hZF9jYW5jZWwoKSwgdGhpcyBz
aWduYWwgaXMgZW1pdHRlZCB3aXRoIGVycm9yCisgICAgICogJVdFQktJVF9ET1dOTE9BRF9FUlJP
Ul9DQU5DRUxMRURfQllfVVNFUi4KKyAgICAgKgorICAgICAqIFJldHVybnM6ICVUUlVFIHRvIHN0
b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZlbnQuCisgICAg
ICogICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAg
IHNpZ25hbHNbRkFJTEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmFpbGVkIiwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MsIGZhaWxlZCksCisgICAgICAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIE5VTEwsCisg
ICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19PQkpFQ1RfUE9JTlRF
UiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLCAyLAorICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfUE9JTlRFUik7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZENsaWVudDo6ZGVj
aWRlLWRlc3RpbmF0aW9uOgorICAgICAqIEBkb3dubG9hZF9jbGllbnQ6IHRoZSAjV2ViS2l0RG93
bmxvYWRDbGllbnQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2Np
YXRlZCB3aXRoIHRoaXMgZXZlbnQKKyAgICAgKiBAc3VnZ2VzdGVkX2ZpbGVuYW1lOiB0aGUgZmls
ZW5hbWUgc3VnZ2VzdGVkIGZvciB0aGUgZG93bmxvYWQKKyAgICAgKgorICAgICAqIFRoaXMgc2ln
bmFsIGlzIGVtaXR0ZWQgYWZ0ZXIgI1dlYktpdERvd25sb2FkQ2xpZW50OjpyZWNlaXZlZC1yZXNw
b25zZSB0bworICAgICAqIGRlY2lkZSBhIGRlc3RpbmF0aW9uIFVSSSBmb3IgdGhlIGRvd25sb2Fk
LiBJZiB0aGlzIHNpZ25hbCBpcyBub3QKKyAgICAgKiBoYW5kbGVkIHRoZSBmaWxlIHdpbGwgYmUg
ZG93bmxvYWRlZCB0byAlR19VU0VSX0RJUkVDVE9SWV9ET1dOTE9BRAorICAgICAqIGRpcmVjdG9y
eSB1c2luZyBAc3VnZ2VzdGVkX2ZpbGVuYW1lLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRS
VUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVu
dC4KKyAgICAgKiAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAg
ICovCisgICAgc2lnbmFsc1tERUNJREVfREVTVElOQVRJT05dID0KKyAgICAgICAgZ19zaWduYWxf
bmV3KCJkZWNpZGUtZGVzdGluYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVO
X0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0RG93bmxv
YWRDbGllbnRDbGFzcywgZGVjaWRlX2Rlc3RpbmF0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAg
IGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFuZGxlZCwgTlVMTCwKKyAgICAgICAgICAgICAg
ICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX09CSkVDVF9TVFJJTkcsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9UWVBFX0RPV05MT0FELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXREb3dubG9hZENsaWVudDo6Y3JlYXRlZC1kZXN0aW5hdGlv
bjoKKyAgICAgKiBAZG93bmxvYWRfY2xpZW50OiB0aGUgI1dlYktpdERvd25sb2FkQ2xpZW50Cisg
ICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2FkIGFzc29jaWF0ZWQgd2l0aCB0aGlz
IGV2ZW50CisgICAgICogQGRlc3RpbmF0aW9uOiB0aGUgZGVzdGluYXRpb24gVVJJCisgICAgICoK
KyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0dGVkIGFmdGVyICNXZWJLaXREb3dubG9hZENsaWVu
dDo6ZGVjaWRlLWRlc3RpbmF0aW9uIHRvCisgICAgICogbm90aWZ5IHRoYXQgZGVzdGluYXRpb24g
ZmlsZSBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseSBhdCBAZGVzdGluYXRpb24uCisgICAg
ICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVp
bmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LgorICAgICAqICAgJUZBTFNFIHRvIHByb3BhZ2F0ZSB0
aGUgZXZlbnQgZnVydGhlci4KKyAgICAgKi8KKworICAgIHNpZ25hbHNbQ1JFQVRFRF9ERVNUSU5B
VElPTl0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNyZWF0ZWQtZGVzdGluYXRpb24iLAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3MpLAorICAgICAg
ICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICBH
X1NUUlVDVF9PRkZTRVQoV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcywgY3JlYXRlZF9kZXN0aW5h
dGlvbiksCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hh
bmRsZWQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFO
X19PQkpFQ1RfU1RSSU5HLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDIs
CisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9ET1dOTE9BRCwKKyAgICAgICAgICAg
ICAgICAgICAgIEdfVFlQRV9TVFJJTkcpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4OWIxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmgKQEAgLTAsMCAr
MSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04p
CisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0RG93bmxvYWRDbGllbnRfaAorI2RlZmluZSBX
ZWJLaXREb3dubG9hZENsaWVudF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93
bmxvYWQuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0RPV05MT0FE
X0NMSUVOVCAgICAgICAgICAgICh3ZWJraXRfZG93bmxvYWRfY2xpZW50X2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9ET1dOTE9BRF9DTElFTlQob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfRE9XTkxPQURfQ0xJRU5ULCBXZWJL
aXREb3dubG9hZENsaWVudCkpCisjZGVmaW5lIFdFQktJVF9JU19ET1dOTE9BRF9DTElFTlQob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
RE9XTkxPQURfQ0xJRU5UKSkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0NMSUVOVF9DTEFTUyhr
bGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9E
T1dOTE9BRF9DTElFTlQsIFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfRE9XTkxPQURfQ0xJRU5UX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET1dOTE9BRF9DTElFTlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfRE9XTkxPQURfQ0xJRU5ULCBXZWJLaXREb3dubG9hZENs
aWVudENsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkQ2xpZW50IFdlYktp
dERvd25sb2FkQ2xpZW50OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdERvd25sb2FkQ2xpZW50Q2xh
c3MgV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzczsKKworc3RydWN0IF9XZWJLaXREb3dubG9hZENs
aWVudCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3QgX1dlYktpdERvd25sb2Fk
Q2xpZW50Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiB2
aXJ0dWFsIHRhYmxlICovCisgICAgZ2Jvb2xlYW4gKCogc3RhcnRlZCkgICAgICAgICAgICAgKFdl
YktpdERvd25sb2FkQ2xpZW50ICAqZG93bmxvYWRfY2xpZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXREb3dubG9hZCAgICAgICAgKmRvd25sb2FkKTsKKyAg
ICBnYm9vbGVhbiAoKiByZWNlaXZlZF9yZXNwb25zZSkgICAoV2ViS2l0RG93bmxvYWRDbGllbnQg
ICpkb3dubG9hZF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYktpdERvd25sb2FkICAgICAgICAqZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdE5ldHdvcmtSZXNwb25zZSAqcmVzcG9uc2UpOworICAgIGdi
b29sZWFuICgqIHJlY2VpdmVkX2RhdGEpICAgICAgIChXZWJLaXREb3dubG9hZENsaWVudCAgKmRv
d25sb2FkX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
S2l0RG93bmxvYWQgICAgICAgICpkb3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQ2NCAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCk7CisgICAgZ2Jv
b2xlYW4gKCogZmluaXNoZWQpICAgICAgICAgICAgKFdlYktpdERvd25sb2FkQ2xpZW50ICAqZG93
bmxvYWRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXREb3dubG9hZCAgICAgICAgKmRvd25sb2FkKTsKKyAgICBnYm9vbGVhbiAoKiBmYWlsZWQpICAg
ICAgICAgICAgICAoV2ViS2l0RG93bmxvYWRDbGllbnQgICpkb3dubG9hZF9jbGllbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdERvd25sb2FkICAgICAgICAq
ZG93bmxvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgICAqZXJyb3IpOworICAgIGdib29sZWFuICgqIGRlY2lkZV9kZXN0aW5hdGlv
bikgIChXZWJLaXREb3dubG9hZENsaWVudCAgKmRvd25sb2FkX2NsaWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAgICpkb3dubG9h
ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAgICAgICpzdWdnZXN0ZWRfZmlsZW5hbWUpOworICAgIGdib29sZWFuICgqIGNyZWF0ZWRfZGVz
dGluYXRpb24pIChXZWJLaXREb3dubG9hZENsaWVudCAgKmRvd25sb2FkX2NsaWVudCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0RG93bmxvYWQgICAgICAgICpk
b3dubG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICpkZXN0aW5hdGlvbik7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfZG93bmxvYWRfY2xpZW50X2dldF90eXBlICh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZENsaWVudFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdERvd25sb2FkQ2xpZW50UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY2YmUwMDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudFByaXZhdGUuaApAQCAtMCwwICsxLDM0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgV2ViS2l0RG93bmxvYWRDbGllbnRQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0RG93bmxv
YWRDbGllbnRQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4KKwordm9pZCB3ZWJraXREb3dubG9hZENsaWVu
dEF0dGFjaERvd25sb2FkQ2xpZW50VG9Db250ZXh0KFdlYktpdERvd25sb2FkQ2xpZW50KiwgV0tD
b250ZXh0UmVmKTsKKworI2VuZGlmIC8vIFdlYktpdERvd25sb2FkQ2xpZW50UHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKaW5k
ZXggNmMyNGFhMS4uYWRkY2YxYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEVycm9yLmNwcApAQCAtNTcsMyArNTcsMTIgQEAgQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VSUk9SX0NBTk5PVF9MT0FEX1BMVUdJTiwgUGx1
Z2luRXJyb3IKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJP
Ul9KQVZBX1VOQVZBSUxBQkxFLCBQbHVnaW5FcnJvckphdmFVbmF2YWlsYWJsZSk7CiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9QTFVHSU5fRVJST1JfQ09OTkVDVElPTl9DQU5D
RUxMRUQsIFBsdWdpbkVycm9yQ29ubmVjdGlvbkNhbmNlbGxlZCk7CiBDT01QSUxFX0FTU0VSVF9N
QVRDSElOR19FTlVNKFdFQktJVF9QTFVHSU5fRVJST1JfV0lMTF9IQU5ETEVfTE9BRCwgUGx1Z2lu
RXJyb3JXaWxsSGFuZGxlTG9hZCk7CisKK0dRdWFyayB3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVh
cmsoKQoreworICAgIHJldHVybiBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyhXZWJDb3JlOjpl
cnJvckRvbWFpbkRvd25sb2FkKTsKK30KKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
RUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSywgRG93bmxvYWRFcnJvck5ldHdvcmspOworQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVE
X0JZX1VTRVIsIERvd25sb2FkRXJyb3JDYW5jZWxsZWRCeVVzZXIpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIERvd25sb2Fk
RXJyb3JEZXN0aW5hdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RXJyb3IuaAppbmRleCAzY2UwZTIwLi45YjBlNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgKQEAgLTMyLDYgKzMyLDcgQEAgR19C
RUdJTl9ERUNMUwogI2RlZmluZSBXRUJLSVRfTkVUV09SS19FUlJPUiB3ZWJraXRfbmV0d29ya19l
cnJvcl9xdWFyayAoKQogI2RlZmluZSBXRUJLSVRfUE9MSUNZX0VSUk9SICB3ZWJraXRfcG9saWN5
X2Vycm9yX3F1YXJrICgpCiAjZGVmaW5lIFdFQktJVF9QTFVHSU5fRVJST1IgIHdlYmtpdF9wbHVn
aW5fZXJyb3JfcXVhcmsgKCkKKyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0VSUk9SIHdlYmtpdF9k
b3dubG9hZF9lcnJvcl9xdWFyayAoKQogCiAvKioKICAqIFdlYktpdE5ldHdvcmtFcnJvcjoKQEAg
LTg5LDE0ICs5MCwzMSBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9QTFVHSU5fRVJST1Jf
V0lMTF9IQU5ETEVfTE9BRCA9IDIwNCwKIH0gV2ViS2l0UGx1Z2luRXJyb3I7CiAKKy8qKgorICog
V2ViS2l0RG93bmxvYWRFcnJvcjoKKyAqIEBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzog
RG93bmxvYWQgZmFpbHVyZSBkdWUgdG8gbmV0d29yayBlcnJvcgorICogQFdFQktJVF9ET1dOTE9B
RF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjogRG93bmxvYWQgd2FzIGNhbmNlbGxlZCBieSB1c2Vy
CisgKiBAV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOiBEb3dubG9hZCBmYWlsdXJl
IGR1ZSB0byBkZXN0aW5hdGlvbiBlcnJvcgorICoKKyAqIEVudW0gdmFsdWVzIHVzZWQgdG8gZGVu
b3RlIHRoZSB2YXJpb3VzIGRvd25sb2FkIGVycm9ycy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAg
ICBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSyA9IDQ5OSwKKyAgICBXRUJLSVRfRE9XTkxP
QURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIgPSA0MDAsCisgICAgV0VCS0lUX0RPV05MT0FEX0VS
Uk9SX0RFU1RJTkFUSU9OID0gNDAxCit9IFdlYktpdERvd25sb2FkRXJyb3I7CisKK1dFQktJVF9B
UEkgR1F1YXJrCit3ZWJraXRfbmV0d29ya19lcnJvcl9xdWFyayAgKHZvaWQpOworCiBXRUJLSVRf
QVBJIEdRdWFyawotd2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgKHZvaWQpOword2Via2l0X3Bv
bGljeV9lcnJvcl9xdWFyayAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBHUXVhcmsKLXdlYmtpdF9w
b2xpY3lfZXJyb3JfcXVhcmsgICh2b2lkKTsKK3dlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsgICAo
dm9pZCk7CiAKIFdFQktJVF9BUEkgR1F1YXJrCi13ZWJraXRfcGx1Z2luX2Vycm9yX3F1YXJrICAo
dm9pZCk7Cit3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsgKHZvaWQpOwogCiBHX0VORF9ERUNM
UwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkNvbnRleHQuY3BwCmluZGV4IDFmOTU5MGMuLmUwNzI4NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yMCwx
MyArMjAsMTkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250
ZXh0LmgiCiAKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZENsaWVudFByaXZhdGUuaCIKKyNpbmNs
dWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0
UHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYktpdDIvV0tDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tUeXBlLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CiAKIHN0
cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4
dFJlZj4gY29udGV4dDsKKworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWRDbGllbnQ+IGRvd25s
b2FkQ2xpZW50OwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJDb250ZXh0LCB3ZWJraXRf
d2ViX2NvbnRleHQsIEdfVFlQRV9PQkpFQ1QpCkBAIC01OCw2ICs2NCwxMSBAQCBzdGF0aWMgZ3Bv
aW50ZXIgY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQoZ3BvaW50ZXIpCiAgICAgV2ViS2l0V2ViQ29u
dGV4dCogd2ViQ29udGV4dCA9IFdFQktJVF9XRUJfQ09OVEVYVChnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX0NPTlRFWFQsIE5VTEwpKTsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0
ID0gV0tDb250ZXh0R2V0U2hhcmVkUHJvY2Vzc0NvbnRleHQoKTsKICAgICBXS0NvbnRleHRTZXRD
YWNoZU1vZGVsKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksIGtXS0NhY2hlTW9kZWxQ
cmltYXJ5V2ViQnJvd3Nlcik7CisKKyAgICBzdGF0aWMgR1JlZlB0cjxXZWJLaXREb3dubG9hZENs
aWVudD4gZGVmYXVsdERvd25sb2FkQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9ET1dOTE9BRF9D
TElFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCwgTlVMTCkpKTsK
KyAgICB3ZWJDb250ZXh0LT5wcml2LT5kb3dubG9hZENsaWVudCA9IGRlZmF1bHREb3dubG9hZENs
aWVudC5nZXQoKTsKKyAgICB3ZWJraXREb3dubG9hZENsaWVudEF0dGFjaERvd25sb2FkQ2xpZW50
VG9Db250ZXh0KGRlZmF1bHREb3dubG9hZENsaWVudC5nZXQoKSwgd2ViQ29udGV4dC0+cHJpdi0+
Y29udGV4dC5nZXQoKSk7CisKICAgICByZXR1cm4gd2ViQ29udGV4dDsKIH0KIApAQCAtMTUyLDYg
KzE2Myw5NCBAQCBXZWJLaXRDYWNoZU1vZGVsIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVf
bW9kZWwoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1cm4gV0VCS0lUX0NBQ0hF
X01PREVMX1dFQl9CUk9XU0VSOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZG93bmxvYWRfY2xpZW50OgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqCisg
KiBSZXR1cm5zIHRoZSAjV2ViS2l0RG93bmxvYWRDbGllbnQgb2YgQGNvbnRleHQuIFlvdSBjYW4g
dXNlIGl0CisgKiB0byBtb25pdG9yIHRoZSBzdGF0dXMgb2YgZG93bmxvYWQgb3BlcmF0aW9ucyBo
YXBwZW5pbmcgb24gQGNvbnRleHQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0
aGUgI1dlYktpdERvd25sb2FkQ2xpZW50IG9mIEBjb250ZXh0LgorICovCitXZWJLaXREb3dubG9h
ZENsaWVudCogd2Via2l0X3dlYl9jb250ZXh0X2dldF9kb3dubG9hZF9jbGllbnQoV2ViS2l0V2Vi
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0NPTlRFWFQoY29udGV4dCksIDApOworCisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPmRv
d25sb2FkQ2xpZW50LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRf
ZG93bmxvYWRfY2xpZW50OgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIEBk
b3dubG9hZF9jbGllbnQ6IGEgI1dlYktpdERvd25sb2FkQ2xpZW50CisgKgorICogU2V0cyB0aGUg
I1dlYktpdERvd25sb2FkQ2xpZW50IHRoYXQgQGNvbnRleHQgd2lsbCB1c2UgZHVyaW5nCisgKiBk
b3dubG9hZCBvcGVyYXRpb25zLgorICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZG93
bmxvYWRfY2xpZW50KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkQ2xp
ZW50KiBkb3dubG9hZENsaWVudCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfQ09OVEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfRE9X
TkxPQURfQ0xJRU5UKGRvd25sb2FkQ2xpZW50KSk7CisKKyAgICBXZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgaWYgKHByaXYtPmRvd25sb2FkQ2xpZW50
LmdldCgpID09IGRvd25sb2FkQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICB3ZWJraXRE
b3dubG9hZENsaWVudEF0dGFjaERvd25sb2FkQ2xpZW50VG9Db250ZXh0KGRvd25sb2FkQ2xpZW50
LCBwcml2LT5jb250ZXh0LmdldCgpKTsKK30KKwordHlwZWRlZiBIYXNoTWFwPFdLRG93bmxvYWRS
ZWYsIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+ID4gRG93bmxvYWRzTWFwOworCitzdGF0aWMgRG93
bmxvYWRzTWFwJiBkb3dubG9hZHNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRG93
bmxvYWRzTWFwLCBkb3dubG9hZHMsICgpKTsKKyAgICByZXR1cm4gZG93bmxvYWRzOworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmk6CisgKiBAY29udGV4dDogYSAj
V2ViS2l0V2ViQ29udGV4dAorICogQHVyaTogdGhlIFVSSSB0byBkb3dubG9hZAorICoKKyAqIFJl
cXVlc3RzIGRvd25sb2FkaW5nIG9mIHRoZSBzcGVjaWZpZWQgVVJJIHN0cmluZy4KKyAqIFlvdSBj
YW4gbW9uaXRvciB0aGUgc3RhdHVzIG9mIHRoZSBkb3dubG9hZCBvcGVyYXRpb24gdXNpbmcgdGhl
CisgKiAjV2ViS2l0RG93bmxvYWRDbGllbnQgb2YgQGNvbnRleHQuIFNlZSBhbHNvIHdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZG93bmxvYWRfY2xpZW50KCkuCisgKgorICogUmV0dXJuczogKHRyYW5z
ZmVyIGZ1bGwpOiBhIG5ldyAjV2ViS2l0RG93bmxvYWQgcmVwcmVzZW50aW5nIHRoZQorICogICAg
dGhlIGRvd25sb2FkIG9wZXJhdGlvbi4KKyAqLworV2ViS2l0RG93bmxvYWQqIHdlYmtpdF93ZWJf
Y29udGV4dF9kb3dubG9hZF91cmkoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2No
YXIqIHVyaSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRF
WFQoY29udGV4dCksIDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgMCk7CisKKyAg
ICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHVyaSkpOworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gd2tSZXF1ZXN0KEFk
b3B0V0ssIFdLVVJMUmVxdWVzdENyZWF0ZVdpdGhXS1VSTCh3a1VSTC5nZXQoKSkpOworICAgIFdL
UmV0YWluUHRyPFdLRG93bmxvYWRSZWY+IHdrRG93bmxvYWQgPSBXS0NvbnRleHREb3dubG9hZFVS
TFJlcXVlc3QocHJpdi0+Y29udGV4dC5nZXQoKSwgd2tSZXF1ZXN0LmdldCgpKTsKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdERvd25sb2FkQ3JlYXRlKHdrRG93
bmxvYWQuZ2V0KCkpOworICAgIGRvd25sb2Fkc01hcCgpLnNldCh3a0Rvd25sb2FkLmdldCgpLCBk
b3dubG9hZC5nZXQoKSk7CisKKyAgICByZXR1cm4gZG93bmxvYWQuZ2V0KCk7Cit9CisKK1dlYktp
dERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChXS0Rvd25sb2Fk
UmVmIHdrRG93bmxvYWQpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQg
PSBkb3dubG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CisgICAgaWYgKGRvd25sb2FkKQorICAg
ICAgICByZXR1cm4gZG93bmxvYWQuZ2V0KCk7CisKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3
ZWJraXREb3dubG9hZENyZWF0ZSh3a0Rvd25sb2FkKSk7CisgICAgZG93bmxvYWRzTWFwKCkuc2V0
KHdrRG93bmxvYWQsIGRvd25sb2FkLmdldCgpKTsKKyAgICByZXR1cm4gZG93bmxvYWQuZ2V0KCk7
Cit9CisKK3ZvaWQgd2Via2l0V2ViQ29udGV4dERvd25sb2FkRmluaXNoZWQoV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
ZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQpOworICAgIGRvd25sb2Fkc01hcCgpLnJlbW92
ZSh3a0Rvd25sb2FkKTsKK30KKwogV0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRHZXRXS0Nv
bnRleHQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIHsKICAgICBnX2Fzc2VydChXRUJLSVRf
SVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDJmMzhkYmMyLi5iNmIzMTQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RG93bmxvYWRDbGllbnQuaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC03OCwxNiArNzksMjYgQEAg
c3RydWN0IF9XZWJLaXRXZWJDb250ZXh0Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQot
d2Via2l0X3dlYl9jb250ZXh0X2dldF90eXBlICAgICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3R5cGUgICAgICAgICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2Vi
Q29udGV4dCAqCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQgICAgICh2b2lkKTsKK3dl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQ
SSB2b2lkCi13ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsIChXZWJLaXRXZWJDb250
ZXh0ICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
Q2FjaGVNb2RlbCAgY2FjaGVfbW9kZWwpOword2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9t
b2RlbCAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENhY2hlTW9kZWwgICAgICBjYWNoZV9tb2Rl
bCk7CiBXRUJLSVRfQVBJIFdlYktpdENhY2hlTW9kZWwKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRf
Y2FjaGVfbW9kZWwgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQpOword2Via2l0X3dlYl9jb250
ZXh0X2dldF9jYWNoZV9tb2RlbCAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICpjb250ZXh0KTsK
KworV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZENsaWVudCAqCit3ZWJraXRfd2ViX2NvbnRleHRf
Z2V0X2Rvd25sb2FkX2NsaWVudCAoV2ViS2l0V2ViQ29udGV4dCAgICAgKmNvbnRleHQpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRfZG93bmxvYWRfY2xpZW50IChX
ZWJLaXRXZWJDb250ZXh0ICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJLaXREb3dubG9hZENsaWVudCAqZG93bmxvYWRfY2xpZW50KTsKK1dF
QktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3Vy
aSAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICp1cmkpOwogCiBH
X0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAppbmRleCA4NmQ3ZGVjLi5jN2E0ZTZhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHRQcml2YXRlLmgKQEAgLTMyLDYgKzMyLDggQEAKIEdfQkVHSU5fREVDTFMKIAog
V0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQoV2ViS2l0V2ViQ29udGV4
dCopOworV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2Fk
KFdLRG93bmxvYWRSZWYpOwordm9pZCB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRGaW5pc2hlZChX
S0Rvd25sb2FkUmVmKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQK
aW5kZXggZjVmZmIxYi4uYjRjNTQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0y
Nyw2ICsyNyw5IEBAIFdlYktpdENhY2hlTW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdAogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbAogd2Via2l0X3dlYl9jb250
ZXh0X3NldF9jYWNoZV9tb2RlbAord2Via2l0X3dlYl9jb250ZXh0X2dldF9kb3dubG9hZF9jbGll
bnQKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRfZG93bmxvYWRfY2xpZW50Cit3ZWJraXRfd2ViX2Nv
bnRleHRfZG93bmxvYWRfdXJpCiAKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViQ29u
dGV4dENsYXNzCkBAIC0yOTUsMTUgKzI5OCwzNSBAQCB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUK
IDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXREb3dubG9hZENsaWVudDwvRklM
RT4KK1dlYktpdERvd25sb2FkQ2xpZW50CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0
RG93bmxvYWRDbGllbnRDbGFzcworV0VCS0lUX1RZUEVfRE9XTkxPQURfQ0xJRU5UCitXRUJLSVRf
RE9XTkxPQURfQ0xJRU5UCitXRUJLSVRfSVNfRE9XTkxPQURfQ0xJRU5UCitXRUJLSVRfRE9XTkxP
QURfQ0xJRU5UX0NMQVNTCitXRUJLSVRfSVNfRE9XTkxPQURfQ0xJRU5UX0NMQVNTCitXRUJLSVRf
RE9XTkxPQURfQ0xJRU5UX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgord2Via2l0
X2Rvd25sb2FkX2NsaWVudF9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxF
PldlYktpdEVycm9yPC9GSUxFPgogV0VCS0lUX05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5f
RVJST1IKIFdFQktJVF9QT0xJQ1lfRVJST1IKK1dFQktJVF9ET1dOTE9BRF9FUlJPUgogV2ViS2l0
TmV0d29ya0Vycm9yCiBXZWJLaXRQbHVnaW5FcnJvcgogV2ViS2l0UG9saWN5RXJyb3IKK1dlYktp
dERvd25sb2FkRXJyb3IKIHdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrCiB3ZWJraXRfcGx1Z2lu
X2Vycm9yX3F1YXJrCiB3ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrCit3ZWJraXRfZG93bmxvYWRf
ZXJyb3JfcXVhcmsKIDwvU0VDVElPTj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IGY1MjU0MDguLjk2ZTI1
NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGsudHlwZXMKQEAgLTgsMyArOCw0IEBAIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlz
dF9pdGVtX2dldF90eXBlCiB3ZWJraXRfc2V0dGluZ3NfZ2V0X3R5cGUKIHdlYmtpdF9uZXR3b3Jr
X3Jlc3BvbnNlX2dldF90eXBlCiB3ZWJraXRfZG93bmxvYWRfZ2V0X3R5cGUKK3dlYmtpdF9kb3du
bG9hZF9jbGllbnRfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXggZDkxMmI2NS4uODNkNDM1MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZp
bGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFr
ZWZpbGUuYW0KQEAgLTMsNyArMyw4IEBAIFRFU1RfUFJPR1MgKz0gXAogCVByb2dyYW1zL1dlYktp
dDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViVmlldyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3Rz
L1Rlc3RXZWJLaXRXZWJMb2FkZXJDbGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9U
ZXN0V2ViS2l0U2V0dGluZ3MgXAotCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0Zv
cndhcmRMaXN0CisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RCYWNrRm9yd2FyZExpc3Qg
XAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzCiAKIG5vaW5zdF9QUk9H
UkFNUyArPSAkKFRFU1RfUFJPR1MpCiB3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzID0gXApAQCAtNzYs
MyArNzcsOCBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRl
c3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCiBQ
cm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREZMQUdTID0gJCh3
ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0RG93
bmxvYWRzX1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVz
dERvd25sb2Fkc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1z
X1dlYktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5lMzAwOGMxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKQEAgLTAsMCArMSw0
MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2Vy
dmVyLmgiCisjaW5jbHVkZSA8Z2xpYi9nc3RkaW8uaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitzdGF0aWMgY2hhcioga1RlbXBEaXJlY3Rv
cnk7CisKK2NsYXNzIERvd25sb2FkVGVzdDogcHVibGljIFRlc3QgeworcHVibGljOgorICAgIE1B
S0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0KTsKKworICAgIGVudW0gRG93bmxvYWRF
dmVudHMgeworICAgICAgICBTdGFydGVkLAorICAgICAgICBSZWNlaXZlZFJlc3BvbnNlLAorICAg
ICAgICBDcmVhdGVkRGVzdGluYXRpb24sCisgICAgICAgIFJlY2VpdmVkRGF0YSwKKyAgICAgICAg
RmluaXNoZWQsCisgICAgICAgIEZhaWxlZAorICAgIH07CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4g
c3RhcnRlZENhbGxiYWNrKFdlYktpdERvd25sb2FkQ2xpZW50KiBjbGllbnQsIFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3Nl
cnQoZG93bmxvYWQpOworICAgICAgICB0ZXN0LT5zdGFydGVkKGNsaWVudCwgZG93bmxvYWQpOwor
ICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2
ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERvd25sb2FkQ2xpZW50KiBjbGllbnQsIFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSwgRG93bmxv
YWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZG93bmxvYWQpOworICAgICAg
ICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSA9PSByZXNw
b25zZSk7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoY2xpZW50LCBkb3dubG9hZCwg
cmVzcG9uc2UpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gY3JlYXRlZERlc3RpbmF0aW9uQ2FsbGJhY2soV2ViS2l0RG93bmxvYWRDbGllbnQqIGNs
aWVudCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogZGVzdGluYXRpb24s
IERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGRvd25sb2FkKTsK
KyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9h
ZCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5h
dGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHRlc3QtPmNyZWF0ZWRE
ZXN0aW5hdGlvbihjbGllbnQsIGRvd25sb2FkLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVy
biBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZlZERhdGFDYWxsYmFj
ayhXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGd1aW50NjQgZGF0YUxlbmd0aCwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAg
Z19hc3NlcnQoZG93bmxvYWQpOworICAgICAgICB0ZXN0LT5yZWNlaXZlZERhdGEoY2xpZW50LCBk
b3dubG9hZCwgZGF0YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkQ2xpZW50KiBj
bGllbnQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAg
IHsKKyAgICAgICAgZ19hc3NlcnQoZG93bmxvYWQpOworICAgICAgICB0ZXN0LT5maW5pc2hlZChj
bGllbnQsIGRvd25sb2FkKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3Rh
dGljIGdib29sZWFuIGZhaWxlZENhbGxiYWNrKFdlYktpdERvd25sb2FkQ2xpZW50KiBjbGllbnQs
IFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgR0Vycm9yKiBlcnJvciwgRG93bmxvYWRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZG93bmxvYWQpOworICAgICAgICBnX2Fzc2Vy
dChlcnJvcik7CisgICAgICAgIHRlc3QtPmZhaWxlZChjbGllbnQsIGRvd25sb2FkLCBlcnJvcik7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZWNp
ZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkQ2xpZW50KiBjbGllbnQsIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBEb3du
bG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChkb3dubG9hZCk7CisgICAg
ICAgIGdfYXNzZXJ0KHN1Z2dlc3RlZEZpbGVuYW1lKTsKKyAgICAgICAgdGVzdC0+ZGVjaWRlRGVz
dGluYXRpb24oY2xpZW50LCBkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBEb3dubG9hZFRlc3QoKQorICAgICAgICA6IG1fd2Vi
Q29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgLCBtX21h
aW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAgLCBtX2Rvd25sb2FkU2l6
ZSgwKQorICAgIHsKKyAgICAgICAgV2ViS2l0RG93bmxvYWRDbGllbnQqIGNsaWVudCA9IHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfZG93bmxvYWRfY2xpZW50KG1fd2ViQ29udGV4dCk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAic3RhcnRlZCIsIEdfQ0FMTEJBQ0soc3RhcnRlZENh
bGxiYWNrKSwgdGhpcyk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicmVjZWl2
ZWQtcmVzcG9uc2UiLCBHX0NBTExCQUNLKHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImNyZWF0ZWQtZGVzdGluYXRpb24i
LCBHX0NBTExCQUNLKGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGhpcyk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QoY2xpZW50LCAicmVjZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVj
ZWl2ZWREYXRhQ2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChjbGll
bnQsICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZmluaXNoZWRDYWxsYmFjayksIHRoaXMpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGNsaWVudCwgImZhaWxlZCIsIEdfQ0FMTEJBQ0soZmFpbGVk
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChjbGllbnQsICJkZWNp
ZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJhY2spLCB0
aGlzKTsKKyAgICB9CisKKyAgICB+RG93bmxvYWRUZXN0KCkKKyAgICB7CisgICAgICAgIFdlYktp
dERvd25sb2FkQ2xpZW50KiBjbGllbnQgPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Rvd25sb2Fk
X2NsaWVudChtX3dlYkNvbnRleHQpOworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQoY2xpZW50LCBHX1NJR05BTF9NQVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlz
KTsKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYobV9tYWluTG9vcCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIHN0YXJ0ZWQoV2ViS2l0RG93bmxvYWRDbGllbnQqIGNsaWVudCwgV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBl
bmQoU3RhcnRlZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVzcG9uc2Uo
V2ViS2l0RG93bmxvYWRDbGllbnQqIGNsaWVudCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBX
ZWJLaXROZXR3b3JrUmVzcG9uc2UqIHJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9h
ZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWRSZXNwb25zZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAg
ICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoQ3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWREYXRhKFdlYktpdERvd25sb2FkQ2xpZW50KiBj
bGllbnQsIFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgZ3VpbnQ2NCBkYXRhTGVuZ3RoKQorICAg
IHsKKyAgICAgICAgbV9kb3dubG9hZFNpemUgKz0gZGF0YUxlbmd0aDsKKyAgICAgICAgaWYgKCFt
X2Rvd25sb2FkRXZlbnRzLmNvbnRhaW5zKFJlY2VpdmVkRGF0YSkpCisgICAgICAgICAgICBtX2Rv
d25sb2FkRXZlbnRzLmFwcGVuZChSZWNlaXZlZERhdGEpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBmaW5pc2hlZChXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXREb3dubG9h
ZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFwcGVuZChGaW5p
c2hlZCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBtX2Rv
d25sb2FkRXZlbnRzLmFwcGVuZChGYWlsZWQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1f
bWFpbkxvb3ApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVEZXN0aW5hdGlvbihX
ZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKKyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hh
cj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxlbmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVk
RmlsZW5hbWUsIE5VTEwpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShn
X2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlvbi5nZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJr
aXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQo
KSk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKKyAgICB7
CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lk
IGNoZWNrRGVzdGluYXRpb25BbmREZWxldGUoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25z
dCBjaGFyKiBleHBlY3RlZE5hbWUpCisgICAgeworICAgICAgICBpZiAoIXdlYmtpdF9kb3dubG9h
ZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBHUmVmUHRyPEdGaWxlPiBkZXN0RmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmko
d2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkpKTsKKyAgICAgICAgR093
blB0cjxjaGFyPiBkZXN0QmFzZW5hbWUoZ19maWxlX2dldF9iYXNlbmFtZShkZXN0RmlsZS5nZXQo
KSkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIoZGVzdEJhc2VuYW1lLmdldCgpLCA9PSwgZXhw
ZWN0ZWROYW1lKTsKKworICAgICAgICBnX2ZpbGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAwLCAw
KTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJDb250ZXh0KiBtX3dlYkNvbnRleHQ7CisgICAgR01h
aW5Mb29wKiBtX21haW5Mb29wOworICAgIFZlY3RvcjxEb3dubG9hZEV2ZW50cz4gbV9kb3dubG9h
ZEV2ZW50czsKKyAgICBndWludDY0IG1fZG93bmxvYWRTaXplOworfTsKKworc3RhdGljIENTdHJp
bmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHdlYmtpdDFUZXN0UmVzb3VjZXNEaXIgPSAiU291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3Vy
Y2VzIjsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9y
X3BhdGgoV0VCS0lUX0VYRUNfUEFUSCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IHBhcmVudCA9IGFk
b3B0R1JlZihnX2ZpbGVfZ2V0X3BhcmVudChmaWxlLmdldCgpKSk7CisgICAgZmlsZSA9IGdfZmls
ZV9nZXRfcGFyZW50KHBhcmVudC5nZXQoKSk7CisgICAgR093blB0cjxjaGFyPiByb290RGlyKGdf
ZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7CisgICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNE
aXIoZ19idWlsZF9maWxlbmFtZShyb290RGlyLmdldCgpLCB3ZWJraXQxVGVzdFJlc291Y2VzRGly
LCBOVUxMKSk7CisgICAgcmV0dXJuIHJlc291cmNlc0Rpci5nZXQoKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKK3sKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShnZXRX
ZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAg
R1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291
cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRv
cHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9T
VEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkp
OworICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQo
KSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdl
YmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCBzb3VyY2VV
UkkuZ2V0KCkpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxv
YWRGaW5pc2hlZCgpOworCisgICAgVmVjdG9yPERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudHM+
JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0s
IERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwg
PT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlz
aGVkKTsKKworICAgIGdfYXNzZXJ0X2NtcGludCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdf
ZmlsZV9pbmZvX2dldF9zaXplKHNvdXJjZUluZm8uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkLmdldCgpKSk7CisgICAgZ19hc3Nl
cnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxv
YWQuZ2V0KCkpLCA9PSwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGUo
ZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitjbGFzcyBEb3dubG9hZFRlc3RFcnJv
cjogcHVibGljIERvd25sb2FkVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShEb3dubG9hZFRlc3RFcnJvcik7CisKKyAgICBEb3dubG9hZFRlc3RFcnJvcigpCisgICAg
ICAgIDogbV9leHBlY3RlZEVycm9yKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2ViS2l0RG93bmxvYWRDbGll
bnQqIGNsaWVudCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBXZWJLaXROZXR3b3JrUmVzcG9u
c2UqIHJlc3BvbnNlKQorICAgIHsKKyAgICAgICAgRG93bmxvYWRUZXN0OjpyZWNlaXZlZFJlc3Bv
bnNlKGNsaWVudCwgZG93bmxvYWQsIHJlc3BvbnNlKTsKKyAgICAgICAgaWYgKG1fZXhwZWN0ZWRF
cnJvciA9PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIpCisgICAgICAg
ICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICB9CisKKyAgICB2b2lk
IGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXRE
b3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisKKyAgICB2b2lkIGZhaWxlZChXZWJL
aXREb3dubG9hZENsaWVudCogY2xpZW50LCBXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJv
ciogZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJyb3Is
IFdFQktJVF9ET1dOTE9BRF9FUlJPUiwgbV9leHBlY3RlZEVycm9yKSk7CisgICAgICAgIERvd25s
b2FkVGVzdDo6ZmFpbGVkKGNsaWVudCwgZG93bmxvYWQsIGVycm9yKTsKKyAgICB9CisKKyAgICB2
b2lkIGRlY2lkZURlc3RpbmF0aW9uKFdlYktpdERvd25sb2FkQ2xpZW50KiBjbGllbnQsIFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKQorICAg
IHsKKyAgICAgICAgaWYgKG1fZXhwZWN0ZWRFcnJvciAhPSBXRUJLSVRfRE9XTkxPQURfRVJST1Jf
REVTVElOQVRJT04pIHsKKyAgICAgICAgICAgIERvd25sb2FkVGVzdDo6ZGVjaWRlRGVzdGluYXRp
b24oY2xpZW50LCBkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24o
ZG93bmxvYWQsICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9h
ZEVycm9yIG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExv
Y2FsRmlsZUVycm9yKERvd25sb2FkVGVzdEVycm9yKiB0ZXN0LCBnY29uc3Rwb2ludGVyKQorewor
ICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JL
OworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtp
dF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCAiZmlsZTovLy9m
b28vYmFyIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50cz4m
IGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
RG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNz
ZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25s
b2FkLmdldCgpKSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lU
X0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1
aWxkX2ZpbGVuYW1lKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBk
ZiIsIE5VTEwpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9u
ZXdfZm9yX3BhdGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9n
ZXRfdXJpKGZpbGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2Vi
X2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgpKSk7Cisg
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChk
b3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsK
KworICAgIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVz
dGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAgIHRlc3QtPm1f
ZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsK
KyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJp
KHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAg
IHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2ZW50cyA9IHRlc3Qt
Pm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0
OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
RG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPCwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93
bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlciog
a1NlcnZlcjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUgPSAi
d2Via2l0LWRvd25sb2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNv
dXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgs
IEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmICht
ZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRf
ZmlsZW5hbWUoZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkp
OworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgIGlm
ICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVu
dHNMZW5ndGgsIDApKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBs
ZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisg
ICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24oZ19zdHJkdXBfcHJpbnRmKCJmaWxl
bmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkpOworICAgIHNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3Np
dGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRz
LCBjb250ZW50c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3Rl
RmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxX
ZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rv
d25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90
ZXN0LnBkZiIpLmRhdGEoKSkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50
aWxEb3dubG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9h
ZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRpb24p
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJlY2Vp
dmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2FkVGVz
dDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgZ19hc3NlcnQod2Via2l0
X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPT0sIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKGRv
d25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9p
ZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IoRG93bmxvYWRUZXN0RXJyb3IqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05M
T0FEX0VSUk9SX05FVFdPUks7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQg
PSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNv
bnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIv
Zm9vIikuZGF0YSgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERv
d25sb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZl
bnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0s
ID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZlbnRzLmNs
ZWFyKCk7CisgICAgV2ViS2l0TmV0d29ya1Jlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF9kb3du
bG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQuZ2V0KCkpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQo
d2Via2l0X25ldHdvcmtfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKSwgPT0sIDQw
NCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxLik7CisKKyAgICB0ZXN0LT5tX2V4cGVjdGVk
RXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047CisgICAgZG93bmxvYWQg
PSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNv
bnRleHQsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworICAg
IHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93
bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7CisK
KyAgICBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBldmVudHMuY2xl
YXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRl
ZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3Rp
bmF0aW9uQW5kRGVsZXRlKGRvd25sb2FkLmdldCgpLCAiYmFyIik7CisKKyAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI7Cisg
ICAgZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0
ZXN0LT5tX3dlYkNvbnRleHQsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIpLmRh
dGEoKSkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZp
bmlzaGVkKCk7CisKKyAgICBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMyk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAg
ICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRf
Z2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEuKTsKKyAgICB0ZXN0
LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKGRvd25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2Vz
dGVkRmlsZW5hbWUpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5l
dyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsK
KworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19kaXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhY
WFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVtcERpcmVjdG9yeSk7CisKKyAgICBEb3dubG9hZFRl
c3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2FsLWZpbGUiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUp
OworICAgIERvd25sb2FkVGVzdEVycm9yOjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVy
cm9yIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IpOworICAgIERvd25sb2FkVGVzdDo6YWRk
KCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKKyAg
ICBEb3dubG9hZFRlc3RFcnJvcjo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3Ii
LCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sK
KyAgICBkZWxldGUga1NlcnZlcjsKKyAgICBnX3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCAyY2E4N2M4Li43
N2RmNTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJr
aXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBA
IC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRCYWNrRm9yd2FyZExpc3RJ
dGVtLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXREb3dubG9hZC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93bmxvYWRD
bGllbnQuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdEVudW1UeXBlcy5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0RXJyb3IuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdE5ldHdvcmtS
ZXF1ZXN0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQybWFyc2hhbC5saXN0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Vi
a2l0Mm1hcnNoYWwubGlzdAppbmRleCBiNzA2OWE3Li5kMjU4ZmI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKQEAgLTEs
NSArMSw5IEBACiBCT09MRUFOOk9CSkVDVCxTVFJJTkcsUE9JTlRFUgogQk9PTEVBTjpPQkpFQ1QK
K0JPT0xFQU46T0JKRUNULE9CSkVDVAorQk9PTEVBTjpPQkpFQ1QsUE9JTlRFUgorQk9PTEVBTjpP
QkpFQ1QsU1RSSU5HCitCT09MRUFOOk9CSkVDVCxVSU5UNjQKIEJPT0xFQU46Vk9JRAogVk9JRDpP
QkpFQ1QsUE9JTlRFUgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117025</attachid>
            <date>2011-11-29 12:51:33 -0800</date>
            <delta_ts>2011-12-26 06:04:18 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-download-client2.diff</filename>
            <type>text/plain</type>
            <size>34252</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzODZmMzg1Li43ZjkwYjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIg
QEAKIDIwMTEtMTEtMjkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBEb3dubG9hZENsaWVudCBpbiBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwOgorICAgICAgICAod2Via2l0X2Rvd25s
b2FkX2Vycm9yX3F1YXJrKTogQWRkIHF1YXJrIGZvciBkb3dubG9hZCBlcnJvcnMuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4
dF9jbGFzc19pbml0KToKKyAgICAgICAgKGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KTogSW5pdGlh
bGl6ZSB0aGUgZG93bmxvYWQgY2xpZW50LgorICAgICAgICAoZG93bmxvYWRzTWFwKTogSGFzaE1h
cCBjb250YWluaW5nIGRvd25sb2FkIG9iamVjdHMgZm9yIGFsbAorICAgICAgICBvbmdvaW5nIGRv
d25sb2FkIG9wZXJhdGlvbnMuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRf
dXJpKTogU3RhcnQgYSBuZXcgZG93bmxvYWQgZm9yIHRoZQorICAgICAgICBnaXZlbiBVUkkuCisg
ICAgICAgICh3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCk6IEhlbHBlciBmdW5j
dGlvbiB0byBjcmVhdGUgYQorICAgICAgICBuZXcgZG93bmxvYWQgb2JqZWN0IG9yIHJldHVybiB0
aGUgZXhpc3Rpbmcgb25lIGZyb20gdGhlIGRvd25sb2FkcyBtYXAuCisgICAgICAgIChkaWRTdGFy
dCk6IEVtaXQgV2ViS2l0V2ViQ29udGV4dDo6ZG93bmxvYWQtc3RhcnRlZC4KKyAgICAgICAgKGRp
ZFJlY2VpdmVSZXNwb25zZSk6IENhbGwgd2Via2l0RG93bmxvYWRTZXRSZXNwb25zZSgpIHdpdGgg
dGhlCisgICAgICAgIHJlY2VpdmVkIHJlc3BvbnNlLgorICAgICAgICAoZGlkUmVjZWl2ZURhdGEp
OiBDYWxsIHdlYmtpdERvd25sb2FkTm90aWZ5UHJvZ3Jlc3MoKS4KKyAgICAgICAgKGRlY2lkZURl
c3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKTogQ2FsbAorICAgICAgICB3ZWJraXREb3du
bG9hZERlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKCkuCisgICAgICAgIChk
aWRDcmVhdGVEZXN0aW5hdGlvbik6IENhbGwgd2Via2l0RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0
ZWQoKS4KKyAgICAgICAgKGRpZEZhaWwpOiBDYWxsIHdlYmtpdERvd25sb2FkRmFpbGVkKCkgb3IK
KyAgICAgICAgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoKSBpZiB0aGUgZG93bmxvYWQgd2FzIGNh
bmNlbGxlZCBiZWZvcmUKKyAgICAgICAgZmFpbGluZy4KKyAgICAgICAgKGRpZENhbmNlbCk6IENh
bGwgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoKS4KKyAgICAgICAgKGRpZEZpbmlzaCk6IENhbGwg
d2Via2l0RG93bmxvYWRGaW5pc2hlZCgpLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEluaXRE
b3dubG9hZENsaWVudCk6IEFkZCBpbXBsZW1lbnRhdGlvbiBmb3IKKyAgICAgICAgZG93bmxvYWQg
Y2xpZW50IGNhbGxiYWNrcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdCBmb3IgZG93bmxvYWRzLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIpOgorICAgICAgICAodGVzdERvd25sb2Fk
TG9jYWxGaWxlKToKKyAgICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKToKKyAgICAg
ICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOgor
ICAgICAgICAodGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKToKKyAgICAgICAgKGJlZm9yZUFs
bCk6CisgICAgICAgIChhZnRlckFsbCk6CisKKzIwMTEtMTEtMjkgIENhcmxvcyBHYXJjaWEgQ2Ft
cG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCB0aGUg
R1RLKyBwb3J0IGJ1aWxkIGFmdGVyIHIxMDEzMDcuCiAKICAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bTogQWRkIG1pc3NpbmcgZmlsZXMgdG8gY29tcGlsYXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKaW5kZXggNmMyNGFhMS4uYWRkY2Yx
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJy
b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcApAQCAtNTcsMyArNTcsMTIgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJL
SVRfUExVR0lOX0VSUk9SX0NBTk5PVF9MT0FEX1BMVUdJTiwgUGx1Z2luRXJyb3IKIENPTVBJTEVf
QVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJPUl9KQVZBX1VOQVZBSUxBQkxF
LCBQbHVnaW5FcnJvckphdmFVbmF2YWlsYWJsZSk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdFQktJVF9QTFVHSU5fRVJST1JfQ09OTkVDVElPTl9DQU5DRUxMRUQsIFBsdWdpbkVycm9y
Q29ubmVjdGlvbkNhbmNlbGxlZCk7CiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJ
VF9QTFVHSU5fRVJST1JfV0lMTF9IQU5ETEVfTE9BRCwgUGx1Z2luRXJyb3JXaWxsSGFuZGxlTG9h
ZCk7CisKK0dRdWFyayB3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsoKQoreworICAgIHJldHVy
biBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZyhXZWJDb3JlOjplcnJvckRvbWFpbkRvd25sb2Fk
KTsKK30KKworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfRE9XTkxPQURfRVJS
T1JfTkVUV09SSywgRG93bmxvYWRFcnJvck5ldHdvcmspOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJ
TkdfRU5VTShXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIsIERvd25sb2Fk
RXJyb3JDYW5jZWxsZWRCeVVzZXIpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJL
SVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT04sIERvd25sb2FkRXJyb3JEZXN0aW5hdGlvbik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaAppbmRl
eCAzY2UwZTIwLi45YjBlNjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEVycm9yLmgKQEAgLTMyLDYgKzMyLDcgQEAgR19CRUdJTl9ERUNMUwogI2RlZmlu
ZSBXRUJLSVRfTkVUV09SS19FUlJPUiB3ZWJraXRfbmV0d29ya19lcnJvcl9xdWFyayAoKQogI2Rl
ZmluZSBXRUJLSVRfUE9MSUNZX0VSUk9SICB3ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrICgpCiAj
ZGVmaW5lIFdFQktJVF9QTFVHSU5fRVJST1IgIHdlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsgKCkK
KyNkZWZpbmUgV0VCS0lUX0RPV05MT0FEX0VSUk9SIHdlYmtpdF9kb3dubG9hZF9lcnJvcl9xdWFy
ayAoKQogCiAvKioKICAqIFdlYktpdE5ldHdvcmtFcnJvcjoKQEAgLTg5LDE0ICs5MCwzMSBAQCB0
eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9QTFVHSU5fRVJST1JfV0lMTF9IQU5ETEVfTE9BRCA9
IDIwNCwKIH0gV2ViS2l0UGx1Z2luRXJyb3I7CiAKKy8qKgorICogV2ViS2l0RG93bmxvYWRFcnJv
cjoKKyAqIEBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzogRG93bmxvYWQgZmFpbHVyZSBk
dWUgdG8gbmV0d29yayBlcnJvcgorICogQFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURf
QllfVVNFUjogRG93bmxvYWQgd2FzIGNhbmNlbGxlZCBieSB1c2VyCisgKiBAV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0RFU1RJTkFUSU9OOiBEb3dubG9hZCBmYWlsdXJlIGR1ZSB0byBkZXN0aW5hdGlv
biBlcnJvcgorICoKKyAqIEVudW0gdmFsdWVzIHVzZWQgdG8gZGVub3RlIHRoZSB2YXJpb3VzIGRv
d25sb2FkIGVycm9ycy4KKyAqLwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfRE9XTkxPQURf
RVJST1JfTkVUV09SSyA9IDQ5OSwKKyAgICBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVE
X0JZX1VTRVIgPSA0MDAsCisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OID0g
NDAxCit9IFdlYktpdERvd25sb2FkRXJyb3I7CisKK1dFQktJVF9BUEkgR1F1YXJrCit3ZWJraXRf
bmV0d29ya19lcnJvcl9xdWFyayAgKHZvaWQpOworCiBXRUJLSVRfQVBJIEdRdWFyawotd2Via2l0
X25ldHdvcmtfZXJyb3JfcXVhcmsgKHZvaWQpOword2Via2l0X3BvbGljeV9lcnJvcl9xdWFyayAg
ICh2b2lkKTsKIAogV0VCS0lUX0FQSSBHUXVhcmsKLXdlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsg
ICh2b2lkKTsKK3dlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsgICAodm9pZCk7CiAKIFdFQktJVF9B
UEkgR1F1YXJrCi13ZWJraXRfcGx1Z2luX2Vycm9yX3F1YXJrICAodm9pZCk7Cit3ZWJraXRfZG93
bmxvYWRfZXJyb3JfcXVhcmsgKHZvaWQpOwogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4
IDFmOTU5MGMuLjMxZjY4MDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yMCwxNSArMjAsMzUgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0LmgiCiAKKyNpbmNsdWRl
ICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRlLmgiCisjaW5j
bHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgogI2luY2x1ZGUgPFdl
YktpdDIvV0tDb250ZXh0Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgorI2lu
Y2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLVHlwZS5oPgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworZW51bSB7CisgICAgRE9XTkxPQURfU1RBUlRFRCwKKworICAgIExBU1RfU0lHTkFMCit9
OwogCiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBXS1JldGFpblB0cjxX
S0NvbnRleHRSZWY+IGNvbnRleHQ7CiB9OwogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0
SW5pdERvd25sb2FkQ2xpZW50KFdlYktpdFdlYkNvbnRleHQqKTsKKworc3RhdGljIGd1aW50IHNp
Z25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCiBHX0RFRklORV9UWVBFKFdlYktpdFdlYkNv
bnRleHQsIHdlYmtpdF93ZWJfY29udGV4dCwgR19UWVBFX09CSkVDVCkKIAogc3RhdGljIHZvaWQg
d2Via2l0V2ViQ29udGV4dEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKQEAgLTQ5LDE1ICs2OSwz
MiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdChXZWJLaXRXZWJD
b250ZXh0Q2xhc3MqIHdlYkNvbnRleHRDbGFzcwogICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViQ29udGV4dENsYXNzKTsKICAgICBnT2JqZWN0Q2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0V2ViQ29udGV4dEZpbmFsaXplOwogCisgICAgLyoqCisgICAgICog
V2ViS2l0V2ViQ29udGV4dDo6ZG93bmxvYWQtc3RhcnRlZDoKKyAgICAgKiBAY29udGV4dDogdGhl
ICNXZWJLaXRXZWJDb250ZXh0CisgICAgICogQGRvd25sb2FkOiB0aGUgI1dlYktpdERvd25sb2Fk
IGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV2ZW50CisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gYSBuZXcgZG93bmxvYWQgcmVxdWVzdCBpcyBtYWRlLgorICAgICAqLwor
ICAgIHNpZ25hbHNbRE9XTkxPQURfU1RBUlRFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImRv
d25sb2FkLXN0YXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
Z09iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAor
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0RPV05MT0FEKTsKKwog
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJDb250ZXh0Q2xhc3MsIHNpemVvZihXZWJL
aXRXZWJDb250ZXh0UHJpdmF0ZSkpOwogfQogCi0KIHN0YXRpYyBncG9pbnRlciBjcmVhdGVEZWZh
dWx0V2ViQ29udGV4dChncG9pbnRlcikKIHsKICAgICBXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250
ZXh0ID0gV0VCS0lUX1dFQl9DT05URVhUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09O
VEVYVCwgTlVMTCkpOwogICAgIHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQgPSBXS0NvbnRleHRH
ZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOwogICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwod2Vi
Q29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKSwga1dLQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93
c2VyKTsKKyAgICB3ZWJraXRXZWJDb250ZXh0SW5pdERvd25sb2FkQ2xpZW50KHdlYkNvbnRleHQp
OworCiAgICAgcmV0dXJuIHdlYkNvbnRleHQ7CiB9CiAKQEAgLTE1Miw2ICsxODksNDkgQEAgV2Vi
S2l0Q2FjaGVNb2RlbCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsKFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQpCiAgICAgcmV0dXJuIFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJP
V1NFUjsKIH0KIAordHlwZWRlZiBIYXNoTWFwPFdLRG93bmxvYWRSZWYsIEdSZWZQdHI8V2ViS2l0
RG93bmxvYWQ+ID4gRG93bmxvYWRzTWFwOworCitzdGF0aWMgRG93bmxvYWRzTWFwJiBkb3dubG9h
ZHNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoRG93bmxvYWRzTWFwLCBkb3dubG9h
ZHMsICgpKTsKKyAgICByZXR1cm4gZG93bmxvYWRzOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJf
Y29udGV4dF9kb3dubG9hZF91cmk6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAor
ICogQHVyaTogdGhlIFVSSSB0byBkb3dubG9hZAorICoKKyAqIFJlcXVlc3RzIGRvd25sb2FkaW5n
IG9mIHRoZSBzcGVjaWZpZWQgVVJJIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIg
ZnVsbCk6IGEgbmV3ICNXZWJLaXREb3dubG9hZCByZXByZXNlbnRpbmcgdGhlCisgKiAgICB0aGUg
ZG93bmxvYWQgb3BlcmF0aW9uLgorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciog
dXJpKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChj
b250ZXh0KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCAwKTsKKworICAgIFdl
YktpdFdlYkNvbnRleHRQcml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBXS1JldGFp
blB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmco
dXJpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1JlcXVlc3QoQWRvcHRX
SywgV0tVUkxSZXF1ZXN0Q3JlYXRlV2l0aFdLVVJMKHdrVVJMLmdldCgpKSk7CisgICAgV0tSZXRh
aW5QdHI8V0tEb3dubG9hZFJlZj4gd2tEb3dubG9hZCA9IFdLQ29udGV4dERvd25sb2FkVVJMUmVx
dWVzdChwcml2LT5jb250ZXh0LmdldCgpLCB3a1JlcXVlc3QuZ2V0KCkpOworICAgIEdSZWZQdHI8
V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0RG93bmxvYWRDcmVhdGUod2tEb3dubG9h
ZC5nZXQoKSk7CisgICAgZG93bmxvYWRzTWFwKCkuc2V0KHdrRG93bmxvYWQuZ2V0KCksIGRvd25s
b2FkLmdldCgpKTsKKyAgICByZXR1cm4gZG93bmxvYWQuZ2V0KCk7Cit9CisKK1dlYktpdERvd25s
b2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBkb3du
bG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CisgICAgaWYgKGRvd25sb2FkKQorICAgICAgICBy
ZXR1cm4gZG93bmxvYWQuZ2V0KCk7CisKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRE
b3dubG9hZENyZWF0ZSh3a0Rvd25sb2FkKSk7CisgICAgZG93bmxvYWRzTWFwKCkuc2V0KHdrRG93
bmxvYWQsIGRvd25sb2FkLmdldCgpKTsKKyAgICByZXR1cm4gZG93bmxvYWQuZ2V0KCk7Cit9CisK
IFdLQ29udGV4dFJlZiB3ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KFdlYktpdFdlYkNvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRl
eHQpKTsKQEAgLTE1OSwzICsyMzksOTQgQEAgV0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRH
ZXRXS0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1cm4gY29udGV4
dC0+cHJpdi0+Y29udGV4dC5nZXQoKTsKIH0KIAorc3RhdGljIHZvaWQgZGlkU3RhcnQoV0tDb250
ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250
ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQp
OworICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX1dFQl9DT05URVhUKGNsaWVudEluZm8pLCBzaWdu
YWxzW0RPV05MT0FEX1NUQVJURURdLCAwLCBkb3dubG9hZC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2
b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgV0tVUkxSZXNwb25zZVJlZiB3a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29u
dGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2Fk
KTsKKyAgICBpZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3dubG9hZC5nZXQoKSkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1lc3NhZ2UodG9JbXBs
KHdrUmVzcG9uc2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkudG9Tb3VwTWVzc2FnZSgpKTsKKyAgICBH
UmVmUHRyPFdlYktpdFVSSVJlc3BvbnNlPiByZXNwb25zZSh3ZWJraXRVUklSZXNwb25zZUNyZWF0
ZUZvclNvdXBNZXNzYWdlKG1lc3NhZ2UuZ2V0KCkpKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9o
ZWFkZXJzX2dldF9jb250ZW50X2xlbmd0aChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzKSkKKyAg
ICAgICAgd2Via2l0VVJJUmVzcG9uc2VTZXRDb250ZW50TGVuZ3RoKHJlc3BvbnNlLmdldCgpLCB0
b0ltcGwod2tSZXNwb25zZSktPnJlc291cmNlUmVzcG9uc2UoKS5leHBlY3RlZENvbnRlbnRMZW5n
dGgoKSk7CisgICAgd2Via2l0RG93bmxvYWRTZXRSZXNwb25zZShkb3dubG9hZC5nZXQoKSwgcmVz
cG9uc2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRS
ZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0g
d2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNT
RVJUKGRvd25sb2FkKTsKKyAgICB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKGRvd25sb2Fk
LmdldCgpLCBsZW5ndGgpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRp
b25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93
bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9h
ZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAg
IEFTU0VSVChkb3dubG9hZCk7CisgICAgQ1N0cmluZyBkZXN0aW5hdGlvblVSSSA9IHdlYmtpdERv
d25sb2FkRGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZG93bmxvYWQuZ2V0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCku
dXRmOCgpKTsKKyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGlu
YXRpb25VUkkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24o
V0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIHBhdGgs
IGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4g
ZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2Fk
KTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIHdlYmtpdERvd25sb2FkRGVzdGluYXRpb25D
cmVhdGVkKGRvd25sb2FkLmdldCgpLCB0b0ltcGwocGF0aCktPnN0cmluZygpLnV0ZjgoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93
bmxvYWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAg
R1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JD
cmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIGlm
ICh3ZWJraXREb3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdldCgpKSkgeworICAgICAgICAv
LyBDYW5jZWxsYXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG90aGVyIGVycm9ycy4KKyAgICAg
ICAgd2Via2l0RG93bmxvYWRDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpOworICAgIH0gZWxzZQor
ICAgICAgICB3ZWJraXREb3dubG9hZEZhaWxlZChkb3dubG9hZC5nZXQoKSwgdG9JbXBsKGVycm9y
KS0+cGxhdGZvcm1FcnJvcigpKTsKKyAgICBkb3dubG9hZHNNYXAoKS5yZW1vdmUod2tEb3dubG9h
ZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRS
ZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdl
YktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25s
b2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgd2Via2l0RG93bmxv
YWRDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpOworICAgIGRvd25sb2Fkc01hcCgpLnJlbW92ZSh3
a0Rvd25sb2FkKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiB3a0Nv
bnRleHQsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykK
K3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRl
eHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7
CisgICAgd2Via2l0RG93bmxvYWRGaW5pc2hlZChkb3dubG9hZC5nZXQoKSk7CisgICAgZG93bmxv
YWRzTWFwKCkucmVtb3ZlKHdrRG93bmxvYWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJD
b250ZXh0SW5pdERvd25sb2FkQ2xpZW50KFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCit7
CisgICAgV0tDb250ZXh0RG93bmxvYWRDbGllbnQgd2tEb3dubG9hZENsaWVudCA9IHsKKyAgICAg
ICAga1dLQ29udGV4dERvd25sb2FkQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYkNv
bnRleHQsIC8vIENsaWVudEluZm8KKyAgICAgICAgZGlkU3RhcnQsCisgICAgICAgIDAsIC8vIGRp
ZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZQorICAgICAgICBkaWRSZWNlaXZlUmVzcG9u
c2UsCisgICAgICAgIGRpZFJlY2VpdmVEYXRhLAorICAgICAgICAwLCAvLyBzaG91bGREZWNvZGVT
b3VyY2VEYXRhT2ZNSU1FVHlwZQorICAgICAgICBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZSwKKyAgICAgICAgZGlkQ3JlYXRlRGVzdGluYXRpb24sCisgICAgICAgIGRpZEZp
bmlzaCwKKyAgICAgICAgZGlkRmFpbCwKKyAgICAgICAgZGlkQ2FuY2VsLAorICAgICAgICAwLCAv
LyBwcm9jZXNzRGlkQ3Jhc2gKKyAgICB9OworICAgIFdLQ29udGV4dFNldERvd25sb2FkQ2xpZW50
KHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksICZ3a0Rvd25sb2FkQ2xpZW50KTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuaAppbmRleCAyZjM4ZGJjMi4uYjg4YmVkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApAQCAtMjYsNiArMjYsNyBAQAog
CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CiAKIEdfQkVHSU5fREVD
TFMKIApAQCAtODksNiArOTAsMTAgQEAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2Rl
bCAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCwKIFdFQktJVF9BUEkgV2ViS2l0Q2FjaGVNb2Rl
bAogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbCAoV2ViS2l0V2ViQ29udGV4dCAq
Y29udGV4dCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgord2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaSAgICAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKnVyaSk7CisKIEdf
RU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKaW5kZXggODZkN2RlYy4uZGM1
ZjM4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCkBAIC0zMiw2ICszMiw3IEBACiBHX0JFR0lOX0RF
Q0xTCiAKIFdLQ29udGV4dFJlZiB3ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KFdlYktpdFdl
YkNvbnRleHQqKTsKK1dlYktpdERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVE
b3dubG9hZChXS0Rvd25sb2FkUmVmKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4
dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0
aW9ucy50eHQKaW5kZXggYWRiZmQzMi4uNmIwMjVhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMu
dHh0CkBAIC0yNyw2ICsyNyw3IEBAIFdlYktpdENhY2hlTW9kZWwKIHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfZGVmYXVsdAogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbAogd2Via2l0
X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbAord2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2Fk
X3VyaQogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYkNvbnRleHRDbGFzcwpAQCAt
Mjk5LDExICszMDAsMTQgQEAgd2Via2l0X2Rvd25sb2FkX2dldF90eXBlCiBXRUJLSVRfTkVUV09S
S19FUlJPUgogV0VCS0lUX1BMVUdJTl9FUlJPUgogV0VCS0lUX1BPTElDWV9FUlJPUgorV0VCS0lU
X0RPV05MT0FEX0VSUk9SCiBXZWJLaXROZXR3b3JrRXJyb3IKIFdlYktpdFBsdWdpbkVycm9yCiBX
ZWJLaXRQb2xpY3lFcnJvcgorV2ViS2l0RG93bmxvYWRFcnJvcgogd2Via2l0X25ldHdvcmtfZXJy
b3JfcXVhcmsKIHdlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsKIHdlYmtpdF9wb2xpY3lfZXJyb3Jf
cXVhcmsKK3dlYmtpdF9kb3dubG9hZF9lcnJvcl9xdWFyawogPC9TRUNUSU9OPgogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5h
bSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFt
CmluZGV4IGQ5MTJiNjUuLjgzZDQzNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC0zLDcgKzMsOCBAQCBURVNU
X1BST0dTICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcg
XAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50IFwK
IAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKLQlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJhY2tGb3J3YXJkTGlzdAorCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0QmFja0ZvcndhcmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMv
VGVzdERvd25sb2FkcwogCiBub2luc3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogd2Via2l0
Ml90ZXN0c19jcHBmbGFncyA9IFwKQEAgLTc2LDMgKzc3LDggQEAgUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3RCYWNrRm9yd2FyZExpc3RfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3Bw
ZmxhZ3MKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0X0xEQURE
ID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RC
YWNrRm9yd2FyZExpc3RfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9n
cmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fkc19TT1VSQ0VTID0gXAorICAgICAgICBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcAor
UHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfQ1BQRkxBR1MgPSAkKHdlYmtp
dDJfdGVzdHNfY3BwZmxhZ3MpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fk
c19MREFERCA9ICQod2Via2l0Ml90ZXN0c19sZGFkZCkKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0
c19UZXN0RG93bmxvYWRzX0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9h
ZHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25s
b2Fkcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ4NTE4MQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3REb3dubG9hZHMuY3BwCkBAIC0wLDAgKzEsNDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWlu
LmgiCisjaW5jbHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlv
Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
Kworc3RhdGljIGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBEb3dubG9hZFRlc3Q6IHB1
YmxpYyBUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2Fk
VGVzdCk7CisKKyAgICBlbnVtIERvd25sb2FkRXZlbnRzIHsKKyAgICAgICAgU3RhcnRlZCwKKyAg
ICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKKyAgICAgICAgQ3JlYXRlZERlc3RpbmF0aW9uLAorICAg
ICAgICBSZWNlaXZlZERhdGEsCisgICAgICAgIEZpbmlzaGVkLAorICAgICAgICBGYWlsZWQKKyAg
ICB9OworCisgICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgR1BhcmFtU3BlYyAqLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2Fk
KSk7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgIH0KKwor
ICAgIHN0YXRpYyBnYm9vbGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5h
dGlvbihkb3dubG9hZCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2Fk
X2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHRl
c3QtPmNyZWF0ZWREZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOworICAgICAgICBy
ZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2Fs
bGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25s
b2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9h
ZCwgZGF0YUxlbmd0aCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRp
YyBnYm9vbGVhbiBmaW5pc2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93
bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQp
OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFp
bGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3du
bG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAg
IHRlc3QtPmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93
bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5h
bWUpOworICAgICAgICB0ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVk
RmlsZW5hbWUpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IHRlc3QtPnN0YXJ0ZWQoZG93bmxvYWQpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25s
b2FkLCAibm90aWZ5OjpyZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNwb25zZUNhbGxi
YWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJjcmVhdGVk
LWRlc3RpbmF0aW9uIiwgR19DQUxMQkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayksIHRl
c3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2ZWQtZGF0YSIs
IEdfQ0FMTEJBQ0socmVjZWl2ZWREYXRhQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWdu
YWxfY29ubmVjdChkb3dubG9hZCwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5pc2hlZENhbGxi
YWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmYWlsZWQi
LCBHX0NBTExCQUNLKGZhaWxlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nv
bm5lY3QoZG93bmxvYWQsICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURl
c3RpbmF0aW9uQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICBEb3dubG9hZFRlc3QoKQor
ICAgICAgICA6IG1fd2ViQ29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkK
KyAgICAgICAgLCBtX21haW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAg
LCBtX2Rvd25sb2FkU2l6ZSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dl
YkNvbnRleHQsICJkb3dubG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5Eb3dubG9hZFRlc3QoKQorICAgIHsKKyAg
ICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dCwg
R19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9s
b29wX3VucmVmKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydGVk
KFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVu
dHMuYXBwZW5kKFN0YXJ0ZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJl
c3BvbnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIG1fZG93bmxv
YWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkUmVzcG9uc2UpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBjcmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBj
aGFyKiBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5k
KENyZWF0ZWREZXN0aW5hdGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVk
RGF0YShXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCkKKyAgICB7
CisgICAgICAgIG1fZG93bmxvYWRTaXplICs9IGRhdGFMZW5ndGg7CisgICAgICAgIGlmICghbV9k
b3dubG9hZEV2ZW50cy5jb250YWlucyhSZWNlaXZlZERhdGEpKQorICAgICAgICAgICAgbV9kb3du
bG9hZEV2ZW50cy5hcHBlbmQoUmVjZWl2ZWREYXRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZmluaXNoZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9k
b3dubG9hZEV2ZW50cy5hcHBlbmQoRmluaXNoZWQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0
KG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmYWlsZWQoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9h
ZEV2ZW50cy5hcHBlbmQoRmFpbGVkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5M
b29wKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAg
eworICAgICAgICBHT3duUHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUoa1Rl
bXBEaXJlY3RvcnksIHN1Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7CisgICAgICAgIEdPd25QdHI8
Y2hhcj4gZGVzdGluYXRpb25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCks
IDAsIDApKTsKKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9h
ZCwgZGVzdGluYXRpb25VUkkuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRG93
bmxvYWRGaW5pc2hlZCgpCisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgdm9pZCBjaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAg
ICAgaWYgKCF3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdS
ZWYoZ19maWxlX25ld19mb3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93
bmxvYWQpKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRf
YmFzZW5hbWUoZGVzdEZpbGUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RC
YXNlbmFtZS5nZXQoKSwgPT0sIGV4cGVjdGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxlX2RlbGV0
ZShkZXN0RmlsZS5nZXQoKSwgMCwgMCk7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCog
bV93ZWJDb250ZXh0OworICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8RG93
bmxvYWRFdmVudHM+IG1fZG93bmxvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX2Rvd25sb2FkU2l6
ZTsKK307CisKK3N0YXRpYyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiB3ZWJraXQxVGVzdFJlc291Y2VzRGlyID0gIlNvdXJjZS9X
ZWJLaXQvZ3RrL3Rlc3RzL3Jlc291cmNlcyI7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFk
b3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9wYXRoKFdFQktJVF9FWEVDX1BBVEgpKTsKKyAgICBHUmVm
UHRyPEdGaWxlPiBwYXJlbnQgPSBhZG9wdEdSZWYoZ19maWxlX2dldF9wYXJlbnQoZmlsZS5nZXQo
KSkpOworICAgIGZpbGUgPSBnX2ZpbGVfZ2V0X3BhcmVudChwYXJlbnQuZ2V0KCkpOworICAgIEdP
d25QdHI8Y2hhcj4gcm9vdERpcihnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIEdP
d25QdHI8Y2hhcj4gcmVzb3VyY2VzRGlyKGdfYnVpbGRfZmlsZW5hbWUocm9vdERpci5nZXQoKSwg
d2Via2l0MVRlc3RSZXNvdWNlc0RpciwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJjZXNEaXIu
Z2V0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZShEb3dubG9hZFRl
c3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR093blB0cjxjaGFyPiBzb3VyY2VQYXRo
KGdfYnVpbGRfZmlsZW5hbWUoZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRl
c3QucGRmIiwgTlVMTCkpOworICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFkb3B0R1JlZihn
X2ZpbGVfbmV3X2Zvcl9wYXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxl
SW5mbz4gc291cmNlSW5mbyA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhzb3VyY2UuZ2V0
KCksIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVy
eUluZm9GbGFncz4oMCksIDAsIDApKTsKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVVSSShnX2Zp
bGVfZ2V0X3VyaShzb3VyY2UuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBk
b3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3Qt
Pm1fd2ViQ29udGV4dCwgc291cmNlVVJJLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAg
IHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9h
ZFRlc3Q6OkRvd25sb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2Up
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0
ZWREZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25s
b2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9
PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+
bV9kb3dubG9hZFNpemUsID09LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgp
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9h
ZC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0
aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPT0sIDEuKTsKKyAgICB0ZXN0LT5jaGVj
a0Rlc3RpbmF0aW9uQW5kRGVsZXRlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKwor
Y2xhc3MgRG93bmxvYWRUZXN0RXJyb3I6IHB1YmxpYyBEb3dubG9hZFRlc3QgeworcHVibGljOgor
ICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0RXJyb3IpOworCisgICAgRG93
bmxvYWRUZXN0RXJyb3IoKQorICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxP
QURfRVJST1JfTkVUV09SSykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCByZWNlaXZlZFJlc3Bv
bnNlKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIERvd25sb2FkVGVz
dDo6cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJy
b3IgPT0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQorICAgICAgICAg
ICAgd2Via2l0X2Rvd25sb2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgfQorCisgICAgdm9pZCBj
cmVhdGVkRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBk
ZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAg
fQorCisgICAgdm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVy
cm9yKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJL
SVRfRE9XTkxPQURfRVJST1IsIG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAgICBEb3dubG9hZFRl
c3Q6OmZhaWxlZChkb3dubG9hZCwgZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgZGVjaWRlRGVz
dGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVk
RmlsZW5hbWUpCisgICAgeworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9E
T1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTikgeworICAgICAgICAgICAgRG93bmxvYWRUZXN0Ojpk
ZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGlu
YXRpb24oZG93bmxvYWQsICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXRE
b3dubG9hZEVycm9yIG1fZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3du
bG9hZExvY2FsRmlsZUVycm9yKERvd25sb2FkVGVzdEVycm9yKiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9O
RVRXT1JLOworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVm
KHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCAiZmls
ZTovLy9mb28vYmFyIikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxE
b3dubG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBd
LCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzFdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNz
KGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0
aChnX2J1aWxkX2ZpbGVuYW1lKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0
ZXN0LnBkZiIsIE5VTEwpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdf
ZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdf
ZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJr
aXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgp
KSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09C
SkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNo
ZWQoKTsKKworICAgIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2
ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRf
ZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworICAgIHRlc3QtPmNo
ZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAgIHRl
c3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllf
VVNFUjsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxv
YWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkp
OworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2ZW50cyA9
IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRU
ZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxv
YWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJd
LCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRv
d25sb2FkLmdldCgpKSwgPCwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxl
dGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2ViS2l0VGVzdFNl
cnZlcioga1NlcnZlcjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVkRmlsZW5h
bWUgPSAid2Via2l0LWRvd25sb2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxi
YWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIq
IHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAg
IGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBf
bWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdf
YnVpbGRfZmlsZW5hbWUoZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwg
TlVMTCkpOworICAgIGNoYXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOwor
ICAgIGlmICghZ19maWxlX2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAm
Y29udGVudHNMZW5ndGgsIDApKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1l
c3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0sp
OworCisgICAgR093blB0cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24oZ19zdHJkdXBfcHJpbnRm
KCJmaWxlbmFtZT0lcyIsIGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkpOworICAgIHNvdXBfbWVz
c2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1E
aXNwb3NpdGlvbiIsIGNvbnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7CisgICAgc291cF9tZXNzYWdl
X2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNv
bnRlbnRzLCBjb250ZW50c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2Fk
UmVtb3RlRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1Jl
ZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtTZXJ2ZXItPmdldFVSSUZvclBh
dGgoIi90ZXN0LnBkZiIpLmRhdGEoKSkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53
YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpE
b3dubG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGlu
YXRpb24pOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6
OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25s
b2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgZ19hc3NlcnQo
d2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdf
YXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRv
d25sb2FkLmdldCgpKSwgPT0sIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVs
ZXRlKGRvd25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJyb3IoRG93bmxvYWRUZXN0RXJyb3IqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lU
X0RPV05MT0FEX0VSUk9SX05FVFdPUks7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93
bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5t
X3dlYkNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrU2VydmVyLT5nZXRVUklGb3JQ
YXRoKCIvZm9vIikuZGF0YSgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRV
bnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25s
b2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZl
bnRzLmNsZWFyKCk7CisgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rv
d25sb2FkX2dldF9yZXNwb25zZShkb3dubG9hZC5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWlu
dCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCA0MDQp
OworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3By
b2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVy
cm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIGRvd25sb2FkID0g
YWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250
ZXh0LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsKKyAgICB0
ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25s
b2FkLmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisg
ICAgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0s
ID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZlbnRzLmNsZWFy
KCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRf
cHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxLik7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5h
dGlvbkFuZERlbGV0ZShkb3dubG9hZC5nZXQoKSwgImJhciIpOworCisgICAgdGVzdC0+bV9leHBl
Y3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOworICAg
IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVz
dC0+bV93ZWJDb250ZXh0LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRh
KCkpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdf
T0JKRUNUKGRvd25sb2FkLmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5p
c2hlZCgpOworCisgICAgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAg
ZXZlbnRzLmNsZWFyKCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dl
dF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxLik7CisgICAgdGVzdC0+
Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3Rl
ZEZpbGVuYW1lKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcg
V2ViS2l0VGVzdFNlcnZlcigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisK
KyAgICBrVGVtcERpcmVjdG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhY
IiwgMCk7CisgICAgZ19hc3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgRG93bmxvYWRUZXN0
OjphZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlKTsK
KyAgICBEb3dubG9hZFRlc3RFcnJvcjo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmlsZS1lcnJv
ciIsIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKTsKKyAgICBEb3dubG9hZFRlc3Q6OmFkZCgi
RG93bmxvYWRzIiwgInJlbW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZSk7CisgICAg
RG93bmxvYWRUZXN0RXJyb3I6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlLWVycm9yIiwg
dGVzdERvd25sb2FkUmVtb3RlRmlsZUVycm9yKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7Cisg
ICAgZGVsZXRlIGtTZXJ2ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9Cg==
</data>
<flag name="commit-queue"
          id="116714"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>120552</attachid>
            <date>2011-12-26 06:04:18 -0800</date>
            <delta_ts>2012-01-23 06:46:10 -0800</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-download-client4.diff</filename>
            <type>text/plain</type>
            <size>40701</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwYTU0M2FkLi5mNzkzMjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjEg
QEAKIDIwMTEtMTItMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBEb3dubG9hZENsaWVudCBpbiBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKGRpZFN0YXJ0KTogQ2FsbCB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKCkuCisg
ICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2UpOiBDYWxsIHdlYmtpdERvd25sb2FkU2V0UmVzcG9u
c2UoKSB3aXRoIHRoZQorICAgICAgICByZWNlaXZlZCByZXNwb25zZS4KKyAgICAgICAgKGRpZFJl
Y2VpdmVEYXRhKTogQ2FsbCB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKCkuCisgICAgICAg
IChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6IENhbGwKKyAgICAgICAg
d2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgpLgor
ICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOiBDYWxsIHdlYmtpdERvd25sb2FkRGVzdGlu
YXRpb25DcmVhdGVkKCkuCisgICAgICAgIChkaWRGYWlsKTogQ2FsbCB3ZWJraXREb3dubG9hZEZh
aWxlZCgpIG9yCisgICAgICAgIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKCkgaWYgdGhlIGRvd25s
b2FkIHdhcyBjYW5jZWxsZWQgYmVmb3JlCisgICAgICAgIGZhaWxpbmcuCisgICAgICAgIChkaWRD
YW5jZWwpOiBDYWxsIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKCkuCisgICAgICAgIChkaWRGaW5p
c2gpOiBDYWxsIHdlYmtpdERvd25sb2FkRmluaXNoZWQoKS4KKyAgICAgICAgKHdlYmtpdERvd25s
b2FkQ2xpZW50QXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRleHQpOiBBZGQKKyAgICAgICAgaW1w
bGVtZW50YXRpb24gZm9yIGRvd25sb2FkIGNsaWVudCBjYWxsYmFja3MuCisgICAgICAgICh3ZWJr
aXRfZG93bmxvYWRfY2xpZW50X2luaXQpOgorICAgICAgICAod2Via2l0X2Rvd25sb2FkX2NsaWVu
dF9jbGFzc19pbml0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9h
ZENsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJv
ci5jcHA6CisgICAgICAgICh3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmspOiBBZGQgcXVhcmsg
Zm9yIGRvd25sb2FkIGVycm9ycy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRF
cnJvci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
OgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2luaXQpOiBBZGQgZG93bmxvYWQt
c3RhcnRlZCBzaWduYWwuCisgICAgICAgIChjcmVhdGVEZWZhdWx0V2ViQ29udGV4dCk6IEluaXRp
YWxpemUgdGhlIGRvd25sb2FkIGNsaWVudC4KKyAgICAgICAgKGRvd25sb2Fkc01hcCk6IEhhc2hN
YXAgY29udGFpbmluZyBkb3dubG9hZCBvYmplY3RzIGZvciBhbGwKKyAgICAgICAgb25nb2luZyBk
b3dubG9hZCBvcGVyYXRpb25zLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2Fk
X3VyaSk6IFN0YXJ0IGEgbmV3IGRvd25sb2FkIGZvciB0aGUKKyAgICAgICAgZ2l2ZW4gVVJJLgor
ICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQpOiBIZWxwZXIgZnVu
Y3Rpb24gdG8gY3JlYXRlIGEKKyAgICAgICAgbmV3IGRvd25sb2FkIG9iamVjdCBvciByZXR1cm4g
dGhlIGV4aXN0aW5nIG9uZSBmcm9tIHRoZSBkb3dubG9hZHMgbWFwLgorICAgICAgICAod2Via2l0
V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKTogUmVtb3ZlIHRoZSBkb3dubG9hZCBvYmplY3QgZnJv
bQorICAgICAgICB0aGUgZG93bmxvYWRzIG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRE
b3dubG9hZFN0YXJ0ZWQpOiBFbWl0CisgICAgICAgIFdlYktpdFdlYkNvbnRleHQ6OmRvd25sb2Fk
LXN0YXJ0ZWQgZm9yIHRoZSBnaXZlbiBkb3dubG9hZCBvYmplY3QuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IHRlc3Qg
Zm9yIGRvd25sb2Fkcy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93
bmxvYWRzLmNwcDogQWRkZWQuCisgICAgICAgIChnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKToK
KyAgICAgICAgKHRlc3REb3dubG9hZExvY2FsRmlsZSk6CisgICAgICAgICh0ZXN0RG93bmxvYWRM
b2NhbEZpbGVFcnJvcik6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICh0ZXN0
RG93bmxvYWRSZW1vdGVGaWxlKToKKyAgICAgICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGVFcnJv
cik6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorCisyMDExLTEy
LTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwogICAgICAg
ICBGaXggYSBjcmFzaCBpbiBXZWJQcm9jZXNzIHdoZW4gc3RhcnRpbmcgYSBkb3dubG9hZCBub3Qg
aW5pdGlhdGVkIGJ5IGEgV2ViUGFnZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzUyMjUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQppbmRleCBmZjZlY2JkLi5k
MjM1YzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpAQCAtNTI4LDYgKzUyOCw4IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RG93bmxvYWQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRE
b3dubG9hZC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZFByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
RG93bmxvYWRDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZENsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRFcnJvci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRFcnJvci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXREb3dubG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYmNhZmFkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViS2l0RG93bmxvYWRDbGllbnQuaCIKKworI2luY2x1ZGUgIldlYkNvbnRleHQu
aCIKKyNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRV
UklSZXNwb25zZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKKworR19ERUZJTkVfVFlQRShXZWJLaXREb3dubG9hZENsaWVudCwgd2Via2l0X2Rv
d25sb2FkX2NsaWVudCwgR19UWVBFX09CSkVDVCkKKworc3RhdGljIHZvaWQgZGlkU3RhcnQoV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJD
b250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxv
YWQpOworICAgIHdlYmtpdFdlYkNvbnRleHREb3dubG9hZFN0YXJ0ZWQoV0VCS0lUX1dFQl9DT05U
RVhUKGNsaWVudEluZm8pLCBkb3dubG9hZC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJl
Y2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tV
UkxSZXNwb25zZVJlZiB3a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9y
Q3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBp
ZiAod2Via2l0RG93bmxvYWRJc0NhbmNlbGxlZChkb3dubG9hZC5nZXQoKSkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1lc3NhZ2UodG9JbXBsKHdrUmVzcG9u
c2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkudG9Tb3VwTWVzc2FnZSgpKTsKKyAgICBHUmVmUHRyPFdl
YktpdFVSSVJlc3BvbnNlPiByZXNwb25zZSh3ZWJraXRVUklSZXNwb25zZUNyZWF0ZUZvclNvdXBN
ZXNzYWdlKG1lc3NhZ2UuZ2V0KCkpKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9jb250ZW50X2xlbmd0aChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzKSkKKyAgICAgICAgd2Vi
a2l0VVJJUmVzcG9uc2VTZXRDb250ZW50TGVuZ3RoKHJlc3BvbnNlLmdldCgpLCB0b0ltcGwod2tS
ZXNwb25zZSktPnJlc291cmNlUmVzcG9uc2UoKS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKSk7Cisg
ICAgd2Via2l0RG93bmxvYWRTZXRSZXNwb25zZShkb3dubG9hZC5nZXQoKSwgcmVzcG9uc2UuZ2V0
KCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0YShXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2Vi
Q29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25s
b2FkKTsKKyAgICB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKGRvd25sb2FkLmdldCgpLCBs
ZW5ndGgpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYgZGVjaWRlRGVzdGluYXRpb25XaXRoU3Vn
Z2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdL
U3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtp
dFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisgICAgQ1N0cmluZyBkZXN0aW5hdGlvblVSSSA9IHdlYmtpdERvd25sb2FkRGVj
aWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoZG93bmxvYWQuZ2V0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpKTsK
KyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGluYXRpb25VUkku
ZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0
UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIHBhdGgsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQg
PSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3a0Rvd25sb2FkKTsKKyAgICBB
U1NFUlQoZG93bmxvYWQpOworICAgIHdlYmtpdERvd25sb2FkRGVzdGluYXRpb25DcmVhdGVkKGRv
d25sb2FkLmdldCgpLCB0b0ltcGwocGF0aCktPnN0cmluZygpLnV0ZjgoKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdL
RXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxX
ZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3du
bG9hZCh3a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIGlmICh3ZWJraXRE
b3dubG9hZElzQ2FuY2VsbGVkKGRvd25sb2FkLmdldCgpKSkgeworICAgICAgICAvLyBDYW5jZWxs
YXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG90aGVyIGVycm9ycy4KKyAgICAgICAgd2Via2l0
RG93bmxvYWRDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpOworICAgIH0gZWxzZQorICAgICAgICB3
ZWJraXREb3dubG9hZEZhaWxlZChkb3dubG9hZC5nZXQoKSwgdG9JbXBsKGVycm9yKS0+cGxhdGZv
cm1FcnJvcigpKTsKKyAgICB3ZWJraXRXZWJDb250ZXh0UmVtb3ZlRG93bmxvYWQod2tEb3dubG9h
ZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRS
ZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdl
YktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25s
b2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgd2Via2l0RG93bmxv
YWRDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpOworICAgIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVE
b3dubG9hZCh3a0Rvd25sb2FkKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4
dFJlZiB3a0NvbnRleHQsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xp
ZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtp
dFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisgICAgd2Via2l0RG93bmxvYWRGaW5pc2hlZChkb3dubG9hZC5nZXQoKSk7Cisg
ICAgd2Via2l0V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKHdrRG93bmxvYWQpOworfQorCit2b2lk
IHdlYmtpdERvd25sb2FkQ2xpZW50QXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRleHQoV2ViS2l0
RG93bmxvYWRDbGllbnQqIGRvd25sb2FkQ2xpZW50LCBXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250
ZXh0KQoreworICAgIFdLQ29udGV4dERvd25sb2FkQ2xpZW50IHdrRG93bmxvYWRDbGllbnQgPSB7
CisgICAgICAgIGtXS0NvbnRleHREb3dubG9hZENsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAg
ICB3ZWJDb250ZXh0LCAvLyBDbGllbnRJbmZvCisgICAgICAgIGRpZFN0YXJ0LAorICAgICAgICAw
LCAvLyBkaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UKKyAgICAgICAgZGlkUmVjZWl2
ZVJlc3BvbnNlLAorICAgICAgICBkaWRSZWNlaXZlRGF0YSwKKyAgICAgICAgMCwgLy8gc2hvdWxk
RGVjb2RlU291cmNlRGF0YU9mTUlNRVR5cGUKKyAgICAgICAgZGVjaWRlRGVzdGluYXRpb25XaXRo
U3VnZ2VzdGVkRmlsZW5hbWUsCisgICAgICAgIGRpZENyZWF0ZURlc3RpbmF0aW9uLAorICAgICAg
ICBkaWRGaW5pc2gsCisgICAgICAgIGRpZEZhaWwsCisgICAgICAgIGRpZENhbmNlbCwKKyAgICAg
ICAgMCwgLy8gcHJvY2Vzc0RpZENyYXNoCisgICAgfTsKKyAgICBXS0NvbnRleHRTZXREb3dubG9h
ZENsaWVudCh3ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KHdlYkNvbnRleHQpLCAmd2tEb3du
bG9hZENsaWVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3dubG9hZF9jbGllbnRfaW5p
dChXZWJLaXREb3dubG9hZENsaWVudCopCit7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9kb3du
bG9hZF9jbGllbnRfY2xhc3NfaW5pdChXZWJLaXREb3dubG9hZENsaWVudENsYXNzKikKK3sKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25s
b2FkQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZENsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxY2EzOTMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXREb3dubG9hZENsaWVudC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXREb3dubG9hZENsaWVudF9oCisjZGVmaW5l
IFdlYktpdERvd25sb2FkQ2xpZW50X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2Rl
ZmluZSBXRUJLSVRfVFlQRV9ET1dOTE9BRF9DTElFTlQgICAgICAgICAgICAod2Via2l0X2Rvd25s
b2FkX2NsaWVudF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xJRU5UKG9i
aikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9U
WVBFX0RPV05MT0FEX0NMSUVOVCwgV2ViS2l0RG93bmxvYWRDbGllbnQpKQorI2RlZmluZSBXRUJL
SVRfSVNfRE9XTkxPQURfQ0xJRU5UKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCkpCisjZGVmaW5lIFdFQktJ
VF9ET1dOTE9BRF9DTElFTlRfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FT
VCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRE9XTkxPQURfQ0xJRU5ULCBXZWJLaXREb3dubG9hZENs
aWVudENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0RPV05MT0FEX0NMSUVOVF9DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9ET1dOTE9B
RF9DTElFTlQpKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfQ0xJRU5UX0dFVF9DTEFTUyhvYmop
ICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0RPV05MT0FE
X0NMSUVOVCwgV2ViS2l0RG93bmxvYWRDbGllbnRDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXREb3dubG9hZENsaWVudCBXZWJLaXREb3dubG9hZENsaWVudDsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXREb3dubG9hZENsaWVudENsYXNzIFdlYktpdERvd25sb2FkQ2xpZW50Q2xhc3M7CisK
K3N0cnVjdCBfV2ViS2l0RG93bmxvYWRDbGllbnQgeworICAgIEdPYmplY3QgcGFyZW50OworfTsK
Kworc3RydWN0IF9XZWJLaXREb3dubG9hZENsaWVudENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJraXRfZG93bmxvYWRfY2xpZW50X2dldF90eXBl
KCk7Cit2b2lkIHdlYmtpdERvd25sb2FkQ2xpZW50QXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRl
eHQoV2ViS2l0RG93bmxvYWRDbGllbnQqLCBXZWJLaXRXZWJDb250ZXh0Kik7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0RXJyb3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RXJyb3IuY3BwCmluZGV4IDZjMjRhYTEuLmFkZGNmMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKQEAgLTU3LDMgKzU3LDEyIEBA
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJPUl9DQU5OT1Rf
TE9BRF9QTFVHSU4sIFBsdWdpbkVycm9yCiBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdF
QktJVF9QTFVHSU5fRVJST1JfSkFWQV9VTkFWQUlMQUJMRSwgUGx1Z2luRXJyb3JKYXZhVW5hdmFp
bGFibGUpOwogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VSUk9S
X0NPTk5FQ1RJT05fQ0FOQ0VMTEVELCBQbHVnaW5FcnJvckNvbm5lY3Rpb25DYW5jZWxsZWQpOwog
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VSUk9SX1dJTExfSEFO
RExFX0xPQUQsIFBsdWdpbkVycm9yV2lsbEhhbmRsZUxvYWQpOworCitHUXVhcmsgd2Via2l0X2Rv
d25sb2FkX2Vycm9yX3F1YXJrKCkKK3sKKyAgICByZXR1cm4gZ19xdWFya19mcm9tX3N0YXRpY19z
dHJpbmcoV2ViQ29yZTo6ZXJyb3JEb21haW5Eb3dubG9hZCk7Cit9CisKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUkssIERvd25sb2FkRXJy
b3JOZXR3b3JrKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FE
X0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSLCBEb3dubG9hZEVycm9yQ2FuY2VsbGVkQnlVc2VyKTsK
K0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OLCBEb3dubG9hZEVycm9yRGVzdGluYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgKaW5kZXggM2NlMGUyMC4uOWIwZTYzMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFcnJvci5oCkBAIC0z
Miw2ICszMiw3IEBAIEdfQkVHSU5fREVDTFMKICNkZWZpbmUgV0VCS0lUX05FVFdPUktfRVJST1Ig
d2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgKCkKICNkZWZpbmUgV0VCS0lUX1BPTElDWV9FUlJP
UiAgd2Via2l0X3BvbGljeV9lcnJvcl9xdWFyayAoKQogI2RlZmluZSBXRUJLSVRfUExVR0lOX0VS
Uk9SICB3ZWJraXRfcGx1Z2luX2Vycm9yX3F1YXJrICgpCisjZGVmaW5lIFdFQktJVF9ET1dOTE9B
RF9FUlJPUiB3ZWJraXRfZG93bmxvYWRfZXJyb3JfcXVhcmsgKCkKIAogLyoqCiAgKiBXZWJLaXRO
ZXR3b3JrRXJyb3I6CkBAIC04OSwxNCArOTAsMzEgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJL
SVRfUExVR0lOX0VSUk9SX1dJTExfSEFORExFX0xPQUQgPSAyMDQsCiB9IFdlYktpdFBsdWdpbkVy
cm9yOwogCisvKioKKyAqIFdlYktpdERvd25sb2FkRXJyb3I6CisgKiBAV0VCS0lUX0RPV05MT0FE
X0VSUk9SX05FVFdPUks6IERvd25sb2FkIGZhaWx1cmUgZHVlIHRvIG5ldHdvcmsgZXJyb3IKKyAq
IEBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVI6IERvd25sb2FkIHdhcyBj
YW5jZWxsZWQgYnkgdXNlcgorICogQFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTjog
RG93bmxvYWQgZmFpbHVyZSBkdWUgdG8gZGVzdGluYXRpb24gZXJyb3IKKyAqCisgKiBFbnVtIHZh
bHVlcyB1c2VkIHRvIGRlbm90ZSB0aGUgdmFyaW91cyBkb3dubG9hZCBlcnJvcnMuCisgKi8KK3R5
cGVkZWYgZW51bSB7CisgICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX05FVFdPUksgPSA0OTksCisg
ICAgV0VCS0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSID0gNDAwLAorICAgIFdF
QktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiA9IDQwMQorfSBXZWJLaXREb3dubG9hZEVy
cm9yOworCitXRUJLSVRfQVBJIEdRdWFyaword2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsgICh2
b2lkKTsKKwogV0VCS0lUX0FQSSBHUXVhcmsKLXdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrICh2
b2lkKTsKK3dlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsgICAodm9pZCk7CiAKIFdFQktJVF9BUEkg
R1F1YXJrCi13ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrICAodm9pZCk7Cit3ZWJraXRfcGx1Z2lu
X2Vycm9yX3F1YXJrICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEdRdWFyawotd2Via2l0X3BsdWdp
bl9lcnJvcl9xdWFyayAgKHZvaWQpOword2Via2l0X2Rvd25sb2FkX2Vycm9yX3F1YXJrICh2b2lk
KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCAxZjk1OTBjLi4yMjQxY2VjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmNwcApAQCAtMjAsMTUgKzIwLDM0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViQ29udGV4dC5oIgogCisjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgorI2luY2x1
ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxX
ZWJLaXQyL1dLQ29udGV4dC5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KKyNp
bmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1R5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK2VudW0geworICAgIERPV05MT0FEX1NUQVJURUQsCisKKyAgICBMQVNUX1NJR05BTAor
fTsKIAogc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAgICAgV0tSZXRhaW5QdHI8
V0tDb250ZXh0UmVmPiBjb250ZXh0OworCisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZENsaWVu
dD4gZG93bmxvYWRDbGllbnQ7CiB9OwogCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05B
TF0gPSB7IDAsIH07CisKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViQ29udGV4dCwgd2Via2l0X3dl
Yl9jb250ZXh0LCBHX1RZUEVfT0JKRUNUKQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0
RmluYWxpemUoR09iamVjdCogb2JqZWN0KQpAQCAtNDksMTUgKzY4LDMzIEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2Vi
Q29udGV4dENsYXNzCiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyh3ZWJDb250ZXh0Q2xhc3MpOwogICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRXZWJDb250ZXh0RmluYWxpemU7CiAKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJDb250ZXh0
Ojpkb3dubG9hZC1zdGFydGVkOgorICAgICAqIEBjb250ZXh0OiB0aGUgI1dlYktpdFdlYkNvbnRl
eHQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2NpYXRlZCB3aXRo
IHRoaXMgZXZlbnQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBh
IG5ldyBkb3dubG9hZCByZXF1ZXN0IGlzIG1hZGUuCisgICAgICovCisgICAgc2lnbmFsc1tET1dO
TE9BRF9TVEFSVEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZG93bmxvYWQtc3RhcnRlZCIs
CisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAor
ICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAg
ICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpOworCiAgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHdlYkNvbnRleHRDbGFzcywgc2l6ZW9mKFdlYktpdFdlYkNvbnRleHRQcml2
YXRlKSk7CiB9CiAKLQogc3RhdGljIGdwb2ludGVyIGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KGdw
b2ludGVyKQogewogICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJLSVRfV0VC
X0NPTlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCBOVUxMKSk7CiAg
ICAgd2ViQ29udGV4dC0+cHJpdi0+Y29udGV4dCA9IFdLQ29udGV4dEdldFNoYXJlZFByb2Nlc3ND
b250ZXh0KCk7CiAgICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbCh3ZWJDb250ZXh0LT5wcml2LT5j
b250ZXh0LmdldCgpLCBrV0tDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIpOworICAgIHdlYkNv
bnRleHQtPnByaXYtPmRvd25sb2FkQ2xpZW50ID0gYWRvcHRHUmVmKFdFQktJVF9ET1dOTE9BRF9D
TElFTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0RPV05MT0FEX0NMSUVOVCwgTlVMTCkpKTsK
KyAgICB3ZWJraXREb3dubG9hZENsaWVudEF0dGFjaERvd25sb2FkQ2xpZW50VG9Db250ZXh0KHdl
YkNvbnRleHQtPnByaXYtPmRvd25sb2FkQ2xpZW50LmdldCgpLCB3ZWJDb250ZXh0KTsKKwogICAg
IHJldHVybiB3ZWJDb250ZXh0OwogfQogCkBAIC0xNTIsNiArMTg5LDU5IEBAIFdlYktpdENhY2hl
TW9kZWwgd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbChXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0KQogICAgIHJldHVybiBXRUJLSVRfQ0FDSEVfTU9ERUxfV0VCX0JST1dTRVI7CiB9
CiAKK3R5cGVkZWYgSGFzaE1hcDxXS0Rvd25sb2FkUmVmLCBHUmVmUHRyPFdlYktpdERvd25sb2Fk
PiA+IERvd25sb2Fkc01hcDsKKworc3RhdGljIERvd25sb2Fkc01hcCYgZG93bmxvYWRzTWFwKCkK
K3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERvd25sb2Fkc01hcCwgZG93bmxvYWRzLCAoKSk7
CisgICAgcmV0dXJuIGRvd25sb2FkczsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIEB1cmk6
IHRoZSBVUkkgdG8gZG93bmxvYWQKKyAqCisgKiBSZXF1ZXN0cyBkb3dubG9hZGluZyBvZiB0aGUg
c3BlY2lmaWVkIFVSSSBzdHJpbmcuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpOiBh
IG5ldyAjV2ViS2l0RG93bmxvYWQgcmVwcmVzZW50aW5nIHRoZQorICogICAgdGhlIGRvd25sb2Fk
IG9wZXJhdGlvbi4KKyAqLworV2ViS2l0RG93bmxvYWQqIHdlYmtpdF93ZWJfY29udGV4dF9kb3du
bG9hZF91cmkoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgY29uc3QgZ2NoYXIqIHVyaSkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCks
IDApOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKHVyaSwgMCk7CisKKyAgICBXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZSogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHVyaSkpOwor
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gd2tSZXF1ZXN0KEFkb3B0V0ssIFdLVVJM
UmVxdWVzdENyZWF0ZVdpdGhXS1VSTCh3a1VSTC5nZXQoKSkpOworICAgIFdLUmV0YWluUHRyPFdL
RG93bmxvYWRSZWY+IHdrRG93bmxvYWQgPSBXS0NvbnRleHREb3dubG9hZFVSTFJlcXVlc3QocHJp
di0+Y29udGV4dC5nZXQoKSwgd2tSZXF1ZXN0LmdldCgpKTsKKyAgICBXZWJLaXREb3dubG9hZCog
ZG93bmxvYWQgPSB3ZWJraXREb3dubG9hZENyZWF0ZSh3a0Rvd25sb2FkLmdldCgpKTsKKyAgICBk
b3dubG9hZHNNYXAoKS5zZXQod2tEb3dubG9hZC5nZXQoKSwgZG93bmxvYWQpOworICAgIHJldHVy
biBkb3dubG9hZDsKK30KKworV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNy
ZWF0ZURvd25sb2FkKFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCkKK3sKKyAgICBHUmVmUHRyPFdl
YktpdERvd25sb2FkPiBkb3dubG9hZCA9IGRvd25sb2Fkc01hcCgpLmdldCh3a0Rvd25sb2FkKTsK
KyAgICBpZiAoZG93bmxvYWQpCisgICAgICAgIHJldHVybiBkb3dubG9hZC5nZXQoKTsKKworICAg
IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdERvd25sb2FkQ3JlYXRlKHdrRG93bmxvYWQpKTsK
KyAgICBkb3dubG9hZHNNYXAoKS5zZXQod2tEb3dubG9hZCwgZG93bmxvYWQuZ2V0KCkpOworICAg
IHJldHVybiBkb3dubG9hZC5nZXQoKTsKK30KKwordm9pZCB3ZWJraXRXZWJDb250ZXh0UmVtb3Zl
RG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQoreworICAgIGRvd25sb2Fkc01hcCgp
LnJlbW92ZSh3a0Rvd25sb2FkKTsKK30KKwordm9pZCB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRT
dGFydGVkKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0KGNvbnRleHQsIHNpZ25hbHNbRE9XTkxPQURfU1RBUlRF
RF0sIDAsIGRvd25sb2FkKTsKK30KKwogV0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRHZXRX
S0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIHsKICAgICBnX2Fzc2VydChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDJmMzhkYmMyLi5iODhiZWQw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0RG93bmxvYWQuaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC04OSw2ICs5MCwxMCBAQCB3ZWJr
aXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0
LAogV0VCS0lUX0FQSSBXZWJLaXRDYWNoZU1vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nh
Y2hlX21vZGVsIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKIAorV0VCS0lUX0FQSSBXZWJL
aXREb3dubG9hZCAqCit3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpICAgIChXZWJLaXRX
ZWJDb250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgZ2NoYXIgICAgICAqdXJpKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dFByaXZhdGUuaAppbmRleCA4NmQ3ZGVjLi5kMmRkODEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgK
QEAgLTMyLDYgKzMyLDkgQEAKIEdfQkVHSU5fREVDTFMKIAogV0tDb250ZXh0UmVmIHdlYmtpdFdl
YkNvbnRleHRHZXRXS0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCopOworV2ViS2l0RG93bmxvYWQq
IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKFdLRG93bmxvYWRSZWYpOwordm9p
ZCB3ZWJraXRXZWJDb250ZXh0UmVtb3ZlRG93bmxvYWQoV0tEb3dubG9hZFJlZik7Cit2b2lkIHdl
YmtpdFdlYkNvbnRleHREb3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdERv
d25sb2FkKik7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4
IDg0ODc0YTYuLjQ5N2JlMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMjcsNiAr
MjcsNyBAQCBXZWJLaXRDYWNoZU1vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQK
IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVfbW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9z
ZXRfY2FjaGVfbW9kZWwKK3dlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkKIAogPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CiBXZWJLaXRXZWJDb250ZXh0Q2xhc3MKQEAgLTMyOSwxMSArMzMwLDE0
IEBAIHdlYmtpdF9kb3dubG9hZF9nZXRfdHlwZQogV0VCS0lUX05FVFdPUktfRVJST1IKIFdFQktJ
VF9QTFVHSU5fRVJST1IKIFdFQktJVF9QT0xJQ1lfRVJST1IKK1dFQktJVF9ET1dOTE9BRF9FUlJP
UgogV2ViS2l0TmV0d29ya0Vycm9yCiBXZWJLaXRQbHVnaW5FcnJvcgogV2ViS2l0UG9saWN5RXJy
b3IKK1dlYktpdERvd25sb2FkRXJyb3IKIHdlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrCiB3ZWJr
aXRfcGx1Z2luX2Vycm9yX3F1YXJrCiB3ZWJraXRfcG9saWN5X2Vycm9yX3F1YXJrCit3ZWJraXRf
ZG93bmxvYWRfZXJyb3JfcXVhcmsKIDwvU0VDVElPTj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQppbmRleCBkOTEyYjY1
Li44M2Q0MzUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90
ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtMyw3ICszLDggQEAgVEVTVF9QUk9HUyArPSBcCiAJ
UHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRXZWJWaWV3IFwKIAlQcm9ncmFtcy9X
ZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYkxvYWRlckNsaWVudCBcCiAJUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCi0JUHJvZ3JhbXMvV2ViS2l0MkFQSVRl
c3RzL1Rlc3RCYWNrRm9yd2FyZExpc3QKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdEJh
Y2tGb3J3YXJkTGlzdCBcCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3REb3dubG9hZHMK
IAogbm9pbnN0X1BST0dSQU1TICs9ICQoVEVTVF9QUk9HUykKIHdlYmtpdDJfdGVzdHNfY3BwZmxh
Z3MgPSBcCkBAIC03NiwzICs3Nyw4IEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFj
a0ZvcndhcmRMaXN0X0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZsYWdzCiBQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdEJhY2tGb3J3YXJkTGlzdF9MREFERCA9ICQod2Via2l0Ml90
ZXN0c19sZGFkZCkKIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0QmFja0ZvcndhcmRMaXN0
X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKIAorUHJvZ3JhbXNfV2ViS2l0MkFQ
SVRlc3RzX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKK1Byb2dyYW1zX1dlYktp
dDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAkKHdl
YmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25sb2Fk
c19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmM2RhODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNw
cApAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUg
IldlYktpdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxnbGliL2dzdGRpby5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3N0YXRpYyBjaGFy
KiBrVGVtcERpcmVjdG9yeTsKKworY2xhc3MgRG93bmxvYWRUZXN0OiBwdWJsaWMgVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9hZFRlc3QpOworCisgICAg
ZW51bSBEb3dubG9hZEV2ZW50cyB7CisgICAgICAgIFN0YXJ0ZWQsCisgICAgICAgIFJlY2VpdmVk
UmVzcG9uc2UsCisgICAgICAgIENyZWF0ZWREZXN0aW5hdGlvbiwKKyAgICAgICAgUmVjZWl2ZWRE
YXRhLAorICAgICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmFpbGVkCisgICAgfTsKKworICAgIHN0
YXRpYyB2b2lkIHJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxv
YWQsIEdQYXJhbVNwZWMqLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAgeworICAgICAgICBnX2Fz
c2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X3Jlc3BvbnNlKGRvd25sb2FkKSk7CisgICAgICAgIHRl
c3QtPnJlY2VpdmVkUmVzcG9uc2UoZG93bmxvYWQpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9v
bGVhbiBjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQs
IGNvbnN0IGdjaGFyKiBkZXN0aW5hdGlvbiwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZCkp
OworICAgICAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlv
bihkb3dubG9hZCksID09LCBkZXN0aW5hdGlvbik7CisgICAgICAgIHRlc3QtPmNyZWF0ZWREZXN0
aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb24pOworICAgICAgICByZXR1cm4gVFJVRTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gcmVjZWl2ZWREYXRhQ2FsbGJhY2soV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkLCBndWludDY0IGRhdGFMZW5ndGgsIERvd25sb2FkVGVzdCogdGVzdCkK
KyAgICB7CisgICAgICAgIHRlc3QtPnJlY2VpdmVkRGF0YShkb3dubG9hZCwgZGF0YUxlbmd0aCk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBmaW5p
c2hlZENhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgdGVzdC0+ZmluaXNoZWQoZG93bmxvYWQpOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jvb2xlYW4gZmFpbGVkQ2FsbGJhY2soV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yLCBEb3dubG9hZFRlc3QqIHRlc3Qp
CisgICAgeworICAgICAgICBnX2Fzc2VydChlcnJvcik7CisgICAgICAgIHRlc3QtPmZhaWxlZChk
b3dubG9hZCwgZXJyb3IpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0
aWMgZ2Jvb2xlYW4gZGVjaWRlRGVzdGluYXRpb25DYWxsYmFjayhXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSwgRG93bmxvYWRUZXN0KiB0ZXN0
KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQoc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICB0
ZXN0LT5kZWNpZGVEZXN0aW5hdGlvbihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkb3dubG9hZFN0YXJ0
ZWRDYWxsYmFjayhXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPnN0YXJ0ZWQo
ZG93bmxvYWQpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAibm90aWZ5Ojpy
ZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKSwgdGVzdCk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJjcmVhdGVkLWRlc3RpbmF0aW9uIiwg
R19DQUxMQkFDSyhjcmVhdGVkRGVzdGluYXRpb25DYWxsYmFjayksIHRlc3QpOworICAgICAgICBn
X3NpZ25hbF9jb25uZWN0KGRvd25sb2FkLCAicmVjZWl2ZWQtZGF0YSIsIEdfQ0FMTEJBQ0socmVj
ZWl2ZWREYXRhQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3du
bG9hZCwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhmaW5pc2hlZENhbGxiYWNrKSwgdGVzdCk7Cisg
ICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJmYWlsZWQiLCBHX0NBTExCQUNLKGZh
aWxlZENhbGxiYWNrKSwgdGVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQs
ICJkZWNpZGUtZGVzdGluYXRpb24iLCBHX0NBTExCQUNLKGRlY2lkZURlc3RpbmF0aW9uQ2FsbGJh
Y2spLCB0ZXN0KTsKKyAgICB9CisKKyAgICBEb3dubG9hZFRlc3QoKQorICAgICAgICA6IG1fd2Vi
Q29udGV4dCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSkKKyAgICAgICAgLCBtX21h
aW5Mb29wKGdfbWFpbl9sb29wX25ldygwLCBUUlVFKSkKKyAgICAgICAgLCBtX2Rvd25sb2FkU2l6
ZSgwKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYkNvbnRleHQsICJkb3du
bG9hZC1zdGFydGVkIiwgR19DQUxMQkFDSyhkb3dubG9hZFN0YXJ0ZWRDYWxsYmFjayksIHRoaXMp
OworICAgIH0KKworICAgIH5Eb3dubG9hZFRlc3QoKQorICAgIHsKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1fd2ViQ29udGV4dCwgR19TSUdOQUxfTUFUQ0hf
REFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3VucmVmKG1fbWFp
bkxvb3ApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBzdGFydGVkKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKFN0YXJ0
ZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERv
d25sb2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5k
KFJlY2VpdmVkUmVzcG9uc2UpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVkRGVz
dGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIG1fZG93bmxvYWRFdmVudHMuYXBwZW5kKENyZWF0ZWREZXN0aW5h
dGlvbik7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkRGF0YShXZWJLaXREb3du
bG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCkKKyAgICB7CisgICAgICAgIG1fZG93
bmxvYWRTaXplICs9IGRhdGFMZW5ndGg7CisgICAgICAgIGlmICghbV9kb3dubG9hZEV2ZW50cy5j
b250YWlucyhSZWNlaXZlZERhdGEpKQorICAgICAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBl
bmQoUmVjZWl2ZWREYXRhKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZmluaXNoZWQoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5h
cHBlbmQoRmluaXNoZWQpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3ApOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmYWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2Fk
LCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQo
RmFpbGVkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisK
KyAgICB2aXJ0dWFsIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0RG93bmxvYWQqIGRvd25s
b2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAgeworICAgICAgICBHT3du
UHRyPGNoYXI+IGRlc3RpbmF0aW9uKGdfYnVpbGRfZmlsZW5hbWUoa1RlbXBEaXJlY3RvcnksIHN1
Z2dlc3RlZEZpbGVuYW1lLCBOVUxMKSk7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRp
b25VUkkoZ19maWxlbmFtZV90b191cmkoZGVzdGluYXRpb24uZ2V0KCksIDAsIDApKTsKKyAgICAg
ICAgd2Via2l0X2Rvd25sb2FkX3NldF9kZXN0aW5hdGlvbihkb3dubG9hZCwgZGVzdGluYXRpb25V
UkkuZ2V0KCkpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgp
CisgICAgeworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisg
ICAgdm9pZCBjaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCwgY29uc3QgY2hhciogZXhwZWN0ZWROYW1lKQorICAgIHsKKyAgICAgICAgaWYgKCF3ZWJraXRf
ZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25sb2FkKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgR1JlZlB0cjxHRmlsZT4gZGVzdEZpbGUgPSBhZG9wdEdSZWYoZ19maWxlX25ld19m
b3JfdXJpKHdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQpKSk7CisgICAg
ICAgIEdPd25QdHI8Y2hhcj4gZGVzdEJhc2VuYW1lKGdfZmlsZV9nZXRfYmFzZW5hbWUoZGVzdEZp
bGUuZ2V0KCkpKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKGRlc3RCYXNlbmFtZS5nZXQoKSwg
PT0sIGV4cGVjdGVkTmFtZSk7CisKKyAgICAgICAgZ19maWxlX2RlbGV0ZShkZXN0RmlsZS5nZXQo
KSwgMCwgMCk7CisgICAgfQorCisgICAgV2ViS2l0V2ViQ29udGV4dCogbV93ZWJDb250ZXh0Owor
ICAgIEdNYWluTG9vcCogbV9tYWluTG9vcDsKKyAgICBWZWN0b3I8RG93bmxvYWRFdmVudHM+IG1f
ZG93bmxvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX2Rvd25sb2FkU2l6ZTsKK307CisKK3N0YXRp
YyBDU3RyaW5nIGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKQoreworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiB3ZWJraXQxVGVzdFJlc291Y2VzRGlyID0gIlNvdXJjZS9XZWJLaXQvZ3RrL3Rlc3Rz
L3Jlc291cmNlcyI7CisgICAgR1JlZlB0cjxHRmlsZT4gZmlsZSA9IGFkb3B0R1JlZihnX2ZpbGVf
bmV3X2Zvcl9wYXRoKFdFQktJVF9FWEVDX1BBVEgpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBwYXJl
bnQgPSBhZG9wdEdSZWYoZ19maWxlX2dldF9wYXJlbnQoZmlsZS5nZXQoKSkpOworICAgIGZpbGUg
PSBnX2ZpbGVfZ2V0X3BhcmVudChwYXJlbnQuZ2V0KCkpOworICAgIEdPd25QdHI8Y2hhcj4gcm9v
dERpcihnX2ZpbGVfZ2V0X3BhdGgoZmlsZS5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gcmVz
b3VyY2VzRGlyKGdfYnVpbGRfZmlsZW5hbWUocm9vdERpci5nZXQoKSwgd2Via2l0MVRlc3RSZXNv
dWNlc0RpciwgTlVMTCkpOworICAgIHJldHVybiByZXNvdXJjZXNEaXIuZ2V0KCk7Cit9CisKK3N0
YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZShEb3dubG9hZFRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgR093blB0cjxjaGFyPiBzb3VyY2VQYXRoKGdfYnVpbGRfZmlsZW5h
bWUoZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkp
OworICAgIEdSZWZQdHI8R0ZpbGU+IHNvdXJjZSA9IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl9w
YXRoKHNvdXJjZVBhdGguZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdGaWxlSW5mbz4gc291cmNlSW5m
byA9IGFkb3B0R1JlZihnX2ZpbGVfcXVlcnlfaW5mbyhzb3VyY2UuZ2V0KCksIEdfRklMRV9BVFRS
SUJVVEVfU1RBTkRBUkRfU0laRSwgc3RhdGljX2Nhc3Q8R0ZpbGVRdWVyeUluZm9GbGFncz4oMCks
IDAsIDApKTsKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVVSSShnX2ZpbGVfZ2V0X3VyaShzb3Vy
Y2UuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0
R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwg
c291cmNlVVJJLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRl
c3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRp
bERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2Fk
RXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNb
MF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlvbik7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2
ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRUZXN0
OjpGaW5pc2hlZCk7CisKKyAgICBnX2Fzc2VydF9jbXBpbnQodGVzdC0+bV9kb3dubG9hZFNpemUs
ID09LCBnX2ZpbGVfaW5mb19nZXRfc2l6ZShzb3VyY2VJbmZvLmdldCgpKSk7CisgICAgZ19hc3Nl
cnQod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAg
IGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNz
KGRvd25sb2FkLmdldCgpKSwgPT0sIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5k
RGVsZXRlKGRvd25sb2FkLmdldCgpLCAidGVzdC5wZGYiKTsKK30KKworY2xhc3MgRG93bmxvYWRU
ZXN0RXJyb3I6IHB1YmxpYyBEb3dubG9hZFRlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9U
RVNUX0ZJWFRVUkUoRG93bmxvYWRUZXN0RXJyb3IpOworCisgICAgRG93bmxvYWRUZXN0RXJyb3Io
KQorICAgICAgICA6IG1fZXhwZWN0ZWRFcnJvcihXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09S
SykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCByZWNlaXZlZFJlc3BvbnNlKFdlYktpdERvd25s
b2FkKiBkb3dubG9hZCkKKyAgICB7CisgICAgICAgIERvd25sb2FkVGVzdDo6cmVjZWl2ZWRSZXNw
b25zZShkb3dubG9hZCk7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgPT0gV0VCS0lUX0RP
V05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSKQorICAgICAgICAgICAgd2Via2l0X2Rvd25s
b2FkX2NhbmNlbChkb3dubG9hZCk7CisgICAgfQorCisgICAgdm9pZCBjcmVhdGVkRGVzdGluYXRp
b24oV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKKyAg
ICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCBm
YWlsZWQoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBHRXJyb3IqIGVycm9yKQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLCBXRUJLSVRfRE9XTkxPQURfRVJS
T1IsIG1fZXhwZWN0ZWRFcnJvcikpOworICAgICAgICBEb3dubG9hZFRlc3Q6OmZhaWxlZChkb3du
bG9hZCwgZXJyb3IpOworICAgIH0KKworICAgIHZvaWQgZGVjaWRlRGVzdGluYXRpb24oV2ViS2l0
RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBnY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCisgICAg
eworICAgICAgICBpZiAobV9leHBlY3RlZEVycm9yICE9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9E
RVNUSU5BVElPTikgeworICAgICAgICAgICAgRG93bmxvYWRUZXN0OjpkZWNpZGVEZXN0aW5hdGlv
bihkb3dubG9hZCwgc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHdlYmtpdF9kb3dubG9hZF9zZXRfZGVzdGluYXRpb24oZG93bmxvYWQs
ICJmaWxlOi8vL2Zvby9iYXIiKTsKKyAgICB9CisKKyAgICBXZWJLaXREb3dubG9hZEVycm9yIG1f
ZXhwZWN0ZWRFcnJvcjsKK307CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVy
cm9yKERvd25sb2FkVGVzdEVycm9yKiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3Qt
Pm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLOworICAgIEdS
ZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29u
dGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCAiZmlsZTovLy9mb28vYmFyIikp
OworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVk
KCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50cz4mIGV2ZW50cyA9
IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXpl
KCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRU
ZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxv
YWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZs
b2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgp
KSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FE
X0VSUk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVu
YW1lKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwp
KTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3Bh
dGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZp
bGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgpKSk7CisgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5n
ZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2
ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
cy5zaXplKCksID09LCAzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93
bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
RG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOwor
ICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dy
ZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25B
bmREZWxldGUoZG93bmxvYWQuZ2V0KCksICJiYXIiKTsKKworICAgIHRlc3QtPm1fZXhwZWN0ZWRF
cnJvciA9IFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICBkb3du
bG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1f
d2ViQ29udGV4dCwgdXJpLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndh
aXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxv
YWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAzKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZl
ZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGYWlsZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwg
PCwgMS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0
KCksICJ0ZXN0LnBkZiIpOworfQorCitzdGF0aWMgV2ViS2l0VGVzdFNlcnZlcioga1NlcnZlcjsK
K3N0YXRpYyBjb25zdCBjaGFyKiBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUgPSAid2Via2l0LWRv
d25sb2FkZWQtZmlsZSI7CisKK3N0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
IHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFi
bGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5t
ZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3Rh
dHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUo
Z2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAgIGNo
YXIqIGNvbnRlbnRzOworICAgIGdzaXplIGNvbnRlbnRzTGVuZ3RoOworICAgIGlmICghZ19maWxl
X2dldF9jb250ZW50cyhmaWxlUGF0aC5nZXQoKSwgJmNvbnRlbnRzLCAmY29udGVudHNMZW5ndGgs
IDApKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgR093blB0
cjxjaGFyPiBjb250ZW50RGlzcG9zaXRpb24oZ19zdHJkdXBfcHJpbnRmKCJmaWxlbmFtZT0lcyIs
IGtTZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGNv
bnRlbnREaXNwb3NpdGlvbi5nZXQoKSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50
c0xlbmd0aCk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNw
b25zZV9ib2R5KTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkUmVtb3RlRmlsZShEb3du
bG9hZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXREb3du
bG9hZD4gZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3Vy
aSh0ZXN0LT5tX3dlYkNvbnRleHQsIGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi90ZXN0LnBkZiIp
LmRhdGEoKSkpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNo
ZXMoR19PQkpFQ1QoZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9h
ZEZpbmlzaGVkKCk7CisKKyAgICBWZWN0b3I8RG93bmxvYWRUZXN0OjpEb3dubG9hZEV2ZW50cz4m
IGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2
ZW50cy5zaXplKCksID09LCA1KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwg
RG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9
PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpDcmVhdGVkRGVzdGluYXRpb24pOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNo
ZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgZ19hc3NlcnQod2Via2l0X2Rvd25sb2Fk
X2dldF9kZXN0aW5hdGlvbihkb3dubG9hZC5nZXQoKSkpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0
KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwg
PT0sIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKGRvd25sb2FkLmdl
dCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0RG93
bmxvYWRSZW1vdGVGaWxlRXJyb3IoRG93bmxvYWRUZXN0RXJyb3IqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9S
X05FVFdPUks7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZm9vIikuZGF0
YSgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmlu
aXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnRzPiYgZXZl
bnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
LnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3du
bG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBE
b3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7Cisg
ICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXNw
b25zZShkb3dubG9hZC5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfdXJpX3Jl
c3BvbnNlX2dldF9zdGF0dXNfY29kZShyZXNwb25zZSksID09LCA0MDQpOworICAgIGdfYXNzZXJ0
X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2Fk
LmdldCgpKSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RP
V05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtp
dF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCBrU2VydmVyLT5n
ZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmpl
Y3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgpKSk7Cisg
ICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisgICAgZXZlbnRzID0gdGVz
dC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwg
PT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6
OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRl
c3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09
LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisgICAgZ19hc3Nl
cnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxv
YWQuZ2V0KCkpLCA8LCAxLik7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlvbkFuZERlbGV0ZShk
b3dubG9hZC5nZXQoKSwgImJhciIpOworCisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VC
S0lUX0RPV05MT0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOworICAgIGRvd25sb2FkID0gYWRv
cHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0
LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVzdC5wZGYiKS5kYXRhKCkpKTsKKyAgICB0ZXN0
LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2Fk
LmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisgICAg
ZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBE
b3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09
LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7
CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9lc3RpbWF0ZWRfcHJv
Z3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxLik7CisgICAgdGVzdC0+Y2hlY2tEZXN0aW5hdGlv
bkFuZERlbGV0ZShkb3dubG9hZC5nZXQoKSwga1NlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKK30K
Kwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGtTZXJ2ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZl
cigpOworICAgIGtTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICBrVGVtcERpcmVj
dG9yeSA9IGdfZGlyX21ha2VfdG1wKCJXZWJLaXQyVGVzdHMtWFhYWFhYIiwgMCk7CisgICAgZ19h
c3NlcnQoa1RlbXBEaXJlY3RvcnkpOworCisgICAgRG93bmxvYWRUZXN0OjphZGQoIkRvd25sb2Fk
cyIsICJsb2NhbC1maWxlIiwgdGVzdERvd25sb2FkTG9jYWxGaWxlKTsKKyAgICBEb3dubG9hZFRl
c3RFcnJvcjo6YWRkKCJEb3dubG9hZHMiLCAibG9jYWwtZmlsZS1lcnJvciIsIHRlc3REb3dubG9h
ZExvY2FsRmlsZUVycm9yKTsKKyAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgInJl
bW90ZS1maWxlIiwgdGVzdERvd25sb2FkUmVtb3RlRmlsZSk7CisgICAgRG93bmxvYWRUZXN0RXJy
b3I6OmFkZCgiRG93bmxvYWRzIiwgInJlbW90ZS1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkUmVt
b3RlRmlsZUVycm9yKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2
ZXI7CisgICAgZ19ybWRpcihrVGVtcERpcmVjdG9yeSk7Cit9CmRpZmYgLS1naXQgYS9Ub29scy9n
dGsvZ2VuZXJhdGUtZ3RrZG9jIGIvVG9vbHMvZ3RrL2dlbmVyYXRlLWd0a2RvYwppbmRleCA3OTcx
YzBmLi4wNWYxN2Y4IDEwMDc1NQotLS0gYS9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCisrKyBi
L1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKQEAgLTYwLDYgKzYwLDcgQEAgZGVmIGdldF93ZWJr
aXQyX29wdGlvbnMoKToKICAgICAgICAgICAgICAgICAgICAnIC1JJyArIHNyY19wYXRoKCksCiAg
ICAgICAgICdpZ25vcmVkX2ZpbGVzJzogZ2xvYi5nbG9iKHNyY19wYXRoKCcqUHJpdmF0ZS5oJykp
ICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnUGFnZUNs
aWVudEltcGwuKicpKSArIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3Jj
X3BhdGgoJ1dlYktpdERvd25sb2FkQ2xpZW50LionKSkgKyBcCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRVSUNsaWVudC4qJykpICsgXAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgndGVzdHMvKi5oJykpCiAgICAg
fSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123552</attachid>
            <date>2012-01-23 06:46:10 -0800</date>
            <delta_ts>2012-01-23 16:50:31 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-download-client5.diff</filename>
            <type>text/plain</type>
            <size>39644</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMTFjZmZjLi5jNzBhMGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcg
QEAKKzIwMTItMDEtMjMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBEb3dubG9hZENsaWVudCBpbiBXZWJLaXQyIEdU
SysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
Mjk1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKGRpZFN0YXJ0KTogQ2FsbCB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKCkuCisg
ICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2UpOiBDYWxsIHdlYmtpdERvd25sb2FkU2V0UmVzcG9u
c2UoKSB3aXRoIHRoZQorICAgICAgICByZWNlaXZlZCByZXNwb25zZS4KKyAgICAgICAgKGRpZFJl
Y2VpdmVEYXRhKTogQ2FsbCB3ZWJraXREb3dubG9hZE5vdGlmeVByb2dyZXNzKCkuCisgICAgICAg
IChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6IENhbGwKKyAgICAgICAg
d2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSgpLgor
ICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOiBDYWxsIHdlYmtpdERvd25sb2FkRGVzdGlu
YXRpb25DcmVhdGVkKCkuCisgICAgICAgIChkaWRGYWlsKTogQ2FsbCB3ZWJraXREb3dubG9hZEZh
aWxlZCgpIG9yCisgICAgICAgIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKCkgaWYgdGhlIGRvd25s
b2FkIHdhcyBjYW5jZWxsZWQgYmVmb3JlCisgICAgICAgIGZhaWxpbmcuCisgICAgICAgIChkaWRD
YW5jZWwpOiBDYWxsIHdlYmtpdERvd25sb2FkQ2FuY2VsbGVkKCkuCisgICAgICAgIChkaWRGaW5p
c2gpOiBDYWxsIHdlYmtpdERvd25sb2FkRmluaXNoZWQoKS4KKyAgICAgICAgKGF0dGFjaERvd25s
b2FkQ2xpZW50VG9Db250ZXh0KTogQWRkCisgICAgICAgIGltcGxlbWVudGF0aW9uIGZvciBkb3du
bG9hZCBjbGllbnQgY2FsbGJhY2tzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkQ2xpZW50Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEVycm9yLmNwcDoKKyAgICAgICAgKHdlYmtpdF9kb3dubG9hZF9lcnJvcl9xdWFyayk6IEFk
ZCBxdWFyayBmb3IgZG93bmxvYWQgZXJyb3JzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEVycm9yLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfY2xhc3NfaW5pdCk6IEFkZCBk
b3dubG9hZC1zdGFydGVkIHNpZ25hbC4KKyAgICAgICAgKGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0
KTogSW5pdGlhbGl6ZSB0aGUgZG93bmxvYWQgY2xpZW50LgorICAgICAgICAoZG93bmxvYWRzTWFw
KTogSGFzaE1hcCBjb250YWluaW5nIGRvd25sb2FkIG9iamVjdHMgZm9yIGFsbAorICAgICAgICBv
bmdvaW5nIGRvd25sb2FkIG9wZXJhdGlvbnMuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpKTogU3RhcnQgYSBuZXcgZG93bmxvYWQgZm9yIHRoZQorICAgICAgICBnaXZl
biBVUkkuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCk6IEhl
bHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYQorICAgICAgICBuZXcgZG93bmxvYWQgb2JqZWN0IG9y
IHJldHVybiB0aGUgZXhpc3Rpbmcgb25lIGZyb20gdGhlIGRvd25sb2FkcyBtYXAuCisgICAgICAg
ICh3ZWJraXRXZWJDb250ZXh0UmVtb3ZlRG93bmxvYWQpOiBSZW1vdmUgdGhlIGRvd25sb2FkIG9i
amVjdCBmcm9tCisgICAgICAgIHRoZSBkb3dubG9hZHMgbWFwLgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dERvd25sb2FkU3RhcnRlZCk6IEVtaXQKKyAgICAgICAgV2ViS2l0V2ViQ29udGV4dDo6
ZG93bmxvYWQtc3RhcnRlZCBmb3IgdGhlIGdpdmVuIGRvd25sb2FkIG9iamVjdC4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW06IEFkZCBu
ZXcgdGVzdCBmb3IgZG93bmxvYWRzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3REb3dubG9hZHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdldFdlYktpdDFUZXN0UmVzb3Vj
ZXNEaXIpOgorICAgICAgICAodGVzdERvd25sb2FkTG9jYWxGaWxlKToKKyAgICAgICAgKHRlc3RE
b3dubG9hZExvY2FsRmlsZUVycm9yKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAg
ICAgKHRlc3REb3dubG9hZFJlbW90ZUZpbGUpOgorICAgICAgICAodGVzdERvd25sb2FkUmVtb3Rl
RmlsZUVycm9yKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisK
IDIwMTItMDEtMjEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAg
ICAgIE1ha2UgV2ViS2l0MiByZW1lbWJlciB0aGUgaGVpZ2h0IG9mIHRoZSBXZWIgSW5zcGVjdG9y
IHdoZW4gaXQgaXMgZG9ja2VkLgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDAxN2EzNmYuLmMwOWRmM2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wMS0yMyAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dU
S10gSW1wbGVtZW50IERvd25sb2FkQ2xpZW50IGluIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyOTUyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBndGsvZ2VuZXJhdGUtZ3Rr
ZG9jOgorICAgICAgICAoZ2V0X3dlYmtpdDJfb3B0aW9ucyk6IElnbm9yZSBXZWJLaXREb3dubG9h
ZENsaWVudC4KKwogMjAxMi0wMS0yMCAgVG9yIEFybmUgVmVzdGLDuCAgPHRvci5hcm5lLnZlc3Ri
b0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBDaGFuZ2UgaG93IGJ1aWxkLXdlYmtpdCBkZWNp
ZGVzIHdoZW4gdG8gZG8gZnVsbCBpbmNyZW1lbnRhbCBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
aW5kZXggYjVmNTYyNC4uOTIwMDI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTUyNSw2ICs1
MjUsOCBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJL
SVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RG93bmxvYWQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWRQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xpZW50LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NjlhM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKQEAgLTAs
MCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCisKKyNpbmNs
dWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUg
PFdlYktpdDIvV0tTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyB2b2lkIGRpZFN0YXJ0KFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4
dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsK
KyAgICB3ZWJraXRXZWJDb250ZXh0RG93bmxvYWRTdGFydGVkKFdFQktJVF9XRUJfQ09OVEVYVChj
bGllbnRJbmZvKSwgZG93bmxvYWQuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVz
cG9uc2VSZWYgd2tSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0
ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgaWYgKHdl
YmtpdERvd25sb2FkSXNDYW5jZWxsZWQoZG93bmxvYWQuZ2V0KCkpKQorICAgICAgICByZXR1cm47
CisKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlc3BvbnNlPiByZXNwb25zZSA9IGFkb3B0R1JlZih3
ZWJraXRVUklSZXNwb25zZUNyZWF0ZUZvclJlc291cmNlUmVzcG9uc2UodG9JbXBsKHdrUmVzcG9u
c2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkpKTsKKyAgICB3ZWJraXREb3dubG9hZFNldFJlc3BvbnNl
KGRvd25sb2FkLmdldCgpLCByZXNwb25zZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJl
Y2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCB1aW50NjRf
dCBsZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRE
b3dubG9hZD4gZG93bmxvYWQgPSB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZCh3
a0Rvd25sb2FkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIHdlYmtpdERvd25sb2FkTm90
aWZ5UHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCksIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBXS1N0cmlu
Z1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZShXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdSZWYgZmlsZW5hbWUsIGJvb2wqIGFs
bG93T3ZlcndyaXRlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2Vi
S2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxv
YWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBDU3RyaW5nIGRlc3Rp
bmF0aW9uVVJJID0gd2Via2l0RG93bmxvYWREZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShkb3dubG9hZC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0ltcGwo
ZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4KCkpOworICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvblVSSS5kYXRhKCkpOworfQorCitzdGF0aWMgdm9pZCBk
aWRDcmVhdGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9h
ZCwgV0tTdHJpbmdSZWYgcGF0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVm
UHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0
ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgd2Via2l0
RG93bmxvYWREZXN0aW5hdGlvbkNyZWF0ZWQoZG93bmxvYWQuZ2V0KCksIHRvSW1wbChwYXRoKS0+
c3RyaW5nKCkudXRmOCgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYs
IFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCAq
Y2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IHdl
YmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKHdrRG93bmxvYWQpOworICAgIEFTU0VS
VChkb3dubG9hZCk7CisgICAgaWYgKHdlYmtpdERvd25sb2FkSXNDYW5jZWxsZWQoZG93bmxvYWQu
Z2V0KCkpKSB7CisgICAgICAgIC8vIENhbmNlbGxhdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIg
b3RoZXIgZXJyb3JzLgorICAgICAgICB3ZWJraXREb3dubG9hZENhbmNlbGxlZChkb3dubG9hZC5n
ZXQoKSk7CisgICAgfSBlbHNlCisgICAgICAgIHdlYmtpdERvd25sb2FkRmFpbGVkKGRvd25sb2Fk
LmdldCgpLCB0b0ltcGwoZXJyb3IpLT5wbGF0Zm9ybUVycm9yKCkpOworICAgIHdlYmtpdFdlYkNv
bnRleHRSZW1vdmVEb3dubG9hZCh3a0Rvd25sb2FkKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ2Fu
Y2VsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Vi
a2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJU
KGRvd25sb2FkKTsKKyAgICB3ZWJraXREb3dubG9hZENhbmNlbGxlZChkb3dubG9hZC5nZXQoKSk7
CisgICAgd2Via2l0V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKHdrRG93bmxvYWQpOworfQorCitz
dGF0aWMgdm9pZCBkaWRGaW5pc2goV0tDb250ZXh0UmVmIHdrQ29udGV4dCwgV0tEb3dubG9hZFJl
ZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8V2Vi
S2l0RG93bmxvYWQ+IGRvd25sb2FkID0gd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxv
YWQod2tEb3dubG9hZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICB3ZWJraXREb3dubG9h
ZEZpbmlzaGVkKGRvd25sb2FkLmdldCgpKTsKKyAgICB3ZWJraXRXZWJDb250ZXh0UmVtb3ZlRG93
bmxvYWQod2tEb3dubG9hZCk7Cit9CisKK3ZvaWQgYXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRl
eHQoV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCkKK3sKKyAgICBXS0NvbnRleHREb3dubG9h
ZENsaWVudCB3a0Rvd25sb2FkQ2xpZW50ID0geworICAgICAgICBrV0tDb250ZXh0RG93bmxvYWRD
bGllbnRDdXJyZW50VmVyc2lvbiwKKyAgICAgICAgd2ViQ29udGV4dCwgLy8gQ2xpZW50SW5mbwor
ICAgICAgICBkaWRTdGFydCwKKyAgICAgICAgMCwgLy8gZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlCisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZSwKKyAgICAgICAgZGlkUmVjZWl2
ZURhdGEsCisgICAgICAgIDAsIC8vIHNob3VsZERlY29kZVNvdXJjZURhdGFPZk1JTUVUeXBlCisg
ICAgICAgIGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lLAorICAgICAgICBk
aWRDcmVhdGVEZXN0aW5hdGlvbiwKKyAgICAgICAgZGlkRmluaXNoLAorICAgICAgICBkaWRGYWls
LAorICAgICAgICBkaWRDYW5jZWwsCisgICAgICAgIDAsIC8vIHByb2Nlc3NEaWRDcmFzaAorICAg
IH07CisgICAgV0tDb250ZXh0U2V0RG93bmxvYWRDbGllbnQod2Via2l0V2ViQ29udGV4dEdldFdL
Q29udGV4dCh3ZWJDb250ZXh0KSwgJndrRG93bmxvYWRDbGllbnQpOworfQorCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU2NmU4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRD
bGllbnQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV2ViS2l0RG93bmxvYWRDbGllbnRfaAorI2RlZmluZSBXZWJLaXREb3du
bG9hZENsaWVudF9oCisKKyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0LmgiCisKK3ZvaWQgYXR0
YWNoRG93bmxvYWRDbGllbnRUb0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCopOworCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9y
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmNwcApp
bmRleCA2YzI0YWExLi5hZGRjZjFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRFcnJvci5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RXJyb3IuY3BwCkBAIC01NywzICs1NywxMiBAQCBDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdFQktJVF9QTFVHSU5fRVJST1JfQ0FOTk9UX0xPQURfUExVR0lOLCBQ
bHVnaW5FcnJvcgogQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXRUJLSVRfUExVR0lOX0VS
Uk9SX0pBVkFfVU5BVkFJTEFCTEUsIFBsdWdpbkVycm9ySmF2YVVuYXZhaWxhYmxlKTsKIENPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJPUl9DT05ORUNUSU9OX0NB
TkNFTExFRCwgUGx1Z2luRXJyb3JDb25uZWN0aW9uQ2FuY2VsbGVkKTsKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV0VCS0lUX1BMVUdJTl9FUlJPUl9XSUxMX0hBTkRMRV9MT0FELCBQbHVn
aW5FcnJvcldpbGxIYW5kbGVMb2FkKTsKKworR1F1YXJrIHdlYmtpdF9kb3dubG9hZF9lcnJvcl9x
dWFyaygpCit7CisgICAgcmV0dXJuIGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKFdlYkNvcmU6
OmVycm9yRG9tYWluRG93bmxvYWQpOworfQorCitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLLCBEb3dubG9hZEVycm9yTmV0d29yayk7CitD
T01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9DQU5DRUxM
RURfQllfVVNFUiwgRG93bmxvYWRFcnJvckNhbmNlbGxlZEJ5VXNlcik7CitDT01QSUxFX0FTU0VS
VF9NQVRDSElOR19FTlVNKFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ERVNUSU5BVElPTiwgRG93bmxv
YWRFcnJvckRlc3RpbmF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVycm9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRFcnJvci5oCmluZGV4IDNjZTBlMjAuLjliMGU2MzAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVycm9yLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RXJyb3IuaApAQCAtMzIsNiArMzIsNyBAQCBH
X0JFR0lOX0RFQ0xTCiAjZGVmaW5lIFdFQktJVF9ORVRXT1JLX0VSUk9SIHdlYmtpdF9uZXR3b3Jr
X2Vycm9yX3F1YXJrICgpCiAjZGVmaW5lIFdFQktJVF9QT0xJQ1lfRVJST1IgIHdlYmtpdF9wb2xp
Y3lfZXJyb3JfcXVhcmsgKCkKICNkZWZpbmUgV0VCS0lUX1BMVUdJTl9FUlJPUiAgd2Via2l0X3Bs
dWdpbl9lcnJvcl9xdWFyayAoKQorI2RlZmluZSBXRUJLSVRfRE9XTkxPQURfRVJST1Igd2Via2l0
X2Rvd25sb2FkX2Vycm9yX3F1YXJrICgpCiAKIC8qKgogICogV2ViS2l0TmV0d29ya0Vycm9yOgpA
QCAtODksMTQgKzkwLDMxIEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1BMVUdJTl9FUlJP
Ul9XSUxMX0hBTkRMRV9MT0FEID0gMjA0LAogfSBXZWJLaXRQbHVnaW5FcnJvcjsKIAorLyoqCisg
KiBXZWJLaXREb3dubG9hZEVycm9yOgorICogQFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JL
OiBEb3dubG9hZCBmYWlsdXJlIGR1ZSB0byBuZXR3b3JrIGVycm9yCisgKiBAV0VCS0lUX0RPV05M
T0FEX0VSUk9SX0NBTkNFTExFRF9CWV9VU0VSOiBEb3dubG9hZCB3YXMgY2FuY2VsbGVkIGJ5IHVz
ZXIKKyAqIEBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT046IERvd25sb2FkIGZhaWx1
cmUgZHVlIHRvIGRlc3RpbmF0aW9uIGVycm9yCisgKgorICogRW51bSB2YWx1ZXMgdXNlZCB0byBk
ZW5vdGUgdGhlIHZhcmlvdXMgZG93bmxvYWQgZXJyb3JzLgorICovCit0eXBlZGVmIGVudW0gewor
ICAgIFdFQktJVF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLID0gNDk5LAorICAgIFdFQktJVF9ET1dO
TE9BRF9FUlJPUl9DQU5DRUxMRURfQllfVVNFUiA9IDQwMCwKKyAgICBXRUJLSVRfRE9XTkxPQURf
RVJST1JfREVTVElOQVRJT04gPSA0MDEKK30gV2ViS2l0RG93bmxvYWRFcnJvcjsKKworV0VCS0lU
X0FQSSBHUXVhcmsKK3dlYmtpdF9uZXR3b3JrX2Vycm9yX3F1YXJrICAodm9pZCk7CisKIFdFQktJ
VF9BUEkgR1F1YXJrCi13ZWJraXRfbmV0d29ya19lcnJvcl9xdWFyayAodm9pZCk7Cit3ZWJraXRf
cG9saWN5X2Vycm9yX3F1YXJrICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIEdRdWFyawotd2Via2l0
X3BvbGljeV9lcnJvcl9xdWFyayAgKHZvaWQpOword2Via2l0X3BsdWdpbl9lcnJvcl9xdWFyayAg
ICh2b2lkKTsKIAogV0VCS0lUX0FQSSBHUXVhcmsKLXdlYmtpdF9wbHVnaW5fZXJyb3JfcXVhcmsg
ICh2b2lkKTsKK3dlYmtpdF9kb3dubG9hZF9lcnJvcl9xdWFyayAodm9pZCk7CiAKIEdfRU5EX0RF
Q0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dC5jcHAKaW5kZXggZmY4NWJjYS4uMzYwYjBhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTIw
LDEzICsyMCwyOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNv
bnRleHQuaCIKIAorI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJLaXREb3du
bG9hZENsaWVudC5oIgorI2luY2x1ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworZW51bSB7CisgICAgRE9XTkxPQURfU1RBUlRFRCwKKworICAgIExBU1RfU0lHTkFM
Cit9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBXS1JldGFpblB0
cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7CiB9OwogCitzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNU
X1NJR05BTF0gPSB7IDAsIH07CisKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViQ29udGV4dCwgd2Vi
a2l0X3dlYl9jb250ZXh0LCBHX1RZUEVfT0JKRUNUKQogCiBzdGF0aWMgdm9pZCB3ZWJraXRXZWJD
b250ZXh0RmluYWxpemUoR09iamVjdCogb2JqZWN0KQpAQCAtNDcsMTUgKzYzLDMyIEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFz
cyogd2ViQ29udGV4dENsYXNzCiAgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyh3ZWJDb250ZXh0Q2xhc3MpOwogICAgIGdPYmplY3RDbGFzcy0+ZmluYWxpemUg
PSB3ZWJraXRXZWJDb250ZXh0RmluYWxpemU7CiAKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJD
b250ZXh0Ojpkb3dubG9hZC1zdGFydGVkOgorICAgICAqIEBjb250ZXh0OiB0aGUgI1dlYktpdFdl
YkNvbnRleHQKKyAgICAgKiBAZG93bmxvYWQ6IHRoZSAjV2ViS2l0RG93bmxvYWQgYXNzb2NpYXRl
ZCB3aXRoIHRoaXMgZXZlbnQKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQg
d2hlbiBhIG5ldyBkb3dubG9hZCByZXF1ZXN0IGlzIG1hZGUuCisgICAgICovCisgICAgc2lnbmFs
c1tET1dOTE9BRF9TVEFSVEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZG93bmxvYWQtc3Rh
cnRlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xh
c3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAg
ICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAor
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfRE9XTkxPQUQpOworCiAgICAgZ190eXBl
X2NsYXNzX2FkZF9wcml2YXRlKHdlYkNvbnRleHRDbGFzcywgc2l6ZW9mKFdlYktpdFdlYkNvbnRl
eHRQcml2YXRlKSk7CiB9CiAKLQogc3RhdGljIGdwb2ludGVyIGNyZWF0ZURlZmF1bHRXZWJDb250
ZXh0KGdwb2ludGVyKQogewogICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJL
SVRfV0VCX0NPTlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCBOVUxM
KSk7CiAgICAgd2ViQ29udGV4dC0+cHJpdi0+Y29udGV4dCA9IFdLQ29udGV4dEdldFNoYXJlZFBy
b2Nlc3NDb250ZXh0KCk7CiAgICAgV0tDb250ZXh0U2V0Q2FjaGVNb2RlbCh3ZWJDb250ZXh0LT5w
cml2LT5jb250ZXh0LmdldCgpLCBrV0tDYWNoZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIpOworICAg
IGF0dGFjaERvd25sb2FkQ2xpZW50VG9Db250ZXh0KHdlYkNvbnRleHQpOworCiAgICAgcmV0dXJu
IHdlYkNvbnRleHQ7CiB9CiAKQEAgLTE1MCw2ICsxODMsNTkgQEAgV2ViS2l0Q2FjaGVNb2RlbCB3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsKFdlYktpdFdlYkNvbnRleHQqIGNvbnRl
eHQpCiAgICAgcmV0dXJuIFdFQktJVF9DQUNIRV9NT0RFTF9XRUJfQlJPV1NFUjsKIH0KIAordHlw
ZWRlZiBIYXNoTWFwPFdLRG93bmxvYWRSZWYsIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+ID4gRG93
bmxvYWRzTWFwOworCitzdGF0aWMgRG93bmxvYWRzTWFwJiBkb3dubG9hZHNNYXAoKQoreworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoRG93bmxvYWRzTWFwLCBkb3dubG9hZHMsICgpKTsKKyAgICBy
ZXR1cm4gZG93bmxvYWRzOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9h
ZF91cmk6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29udGV4dAorICogQHVyaTogdGhlIFVS
SSB0byBkb3dubG9hZAorICoKKyAqIFJlcXVlc3RzIGRvd25sb2FkaW5nIG9mIHRoZSBzcGVjaWZp
ZWQgVVJJIHN0cmluZy4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IGEgbmV3ICNX
ZWJLaXREb3dubG9hZCByZXByZXNlbnRpbmcgdGhlCisgKiAgICB0aGUgZG93bmxvYWQgb3BlcmF0
aW9uLgorICovCitXZWJLaXREb3dubG9hZCogd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3Vy
aShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogdXJpKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgMCk7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwodXJpLCAwKTsKKworICAgIFdlYktpdFdlYkNvbnRleHRQ
cml2YXRlKiBwcml2ID0gY29udGV4dC0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4g
d2tVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcodXJpKSk7CisgICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1JlcXVlc3QoQWRvcHRXSywgV0tVUkxSZXF1ZXN0
Q3JlYXRlV2l0aFdLVVJMKHdrVVJMLmdldCgpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tEb3dubG9h
ZFJlZj4gd2tEb3dubG9hZCA9IFdLQ29udGV4dERvd25sb2FkVVJMUmVxdWVzdChwcml2LT5jb250
ZXh0LmdldCgpLCB3a1JlcXVlc3QuZ2V0KCkpOworICAgIFdlYktpdERvd25sb2FkKiBkb3dubG9h
ZCA9IHdlYmtpdERvd25sb2FkQ3JlYXRlKHdrRG93bmxvYWQuZ2V0KCkpOworICAgIGRvd25sb2Fk
c01hcCgpLnNldCh3a0Rvd25sb2FkLmdldCgpLCBkb3dubG9hZCk7CisgICAgcmV0dXJuIGRvd25s
b2FkOworfQorCitXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93
bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkKQoreworICAgIEdSZWZQdHI8V2ViS2l0RG93
bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQpOworICAgIGlm
IChkb3dubG9hZCkKKyAgICAgICAgcmV0dXJuIGRvd25sb2FkLmdldCgpOworCisgICAgZG93bmxv
YWQgPSBhZG9wdEdSZWYod2Via2l0RG93bmxvYWRDcmVhdGUod2tEb3dubG9hZCkpOworICAgIGRv
d25sb2Fkc01hcCgpLnNldCh3a0Rvd25sb2FkLCBkb3dubG9hZC5nZXQoKSk7CisgICAgcmV0dXJu
IGRvd25sb2FkLmdldCgpOworfQorCit2b2lkIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVEb3dubG9h
ZChXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQpCit7CisgICAgZG93bmxvYWRzTWFwKCkucmVtb3Zl
KHdrRG93bmxvYWQpOworfQorCit2b2lkIHdlYmtpdFdlYkNvbnRleHREb3dubG9hZFN0YXJ0ZWQo
V2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorewor
ICAgIGdfc2lnbmFsX2VtaXQoY29udGV4dCwgc2lnbmFsc1tET1dOTE9BRF9TVEFSVEVEXSwgMCwg
ZG93bmxvYWQpOworfQorCiBXS0NvbnRleHRSZWYgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4
dChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogewogICAgIGdfYXNzZXJ0KFdFQktJVF9JU19X
RUJfQ09OVEVYVChjb250ZXh0KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKaW5kZXggMmYzOGRiYzIuLmI4OGJlZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3du
bG9hZC5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTg5LDYgKzkwLDEwIEBAIHdlYmtpdF93ZWJf
Y29udGV4dF9zZXRfY2FjaGVfbW9kZWwgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQsCiBXRUJL
SVRfQVBJIFdlYktpdENhY2hlTW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVfbW9k
ZWwgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQpOwogCitXRUJLSVRfQVBJIFdlYktpdERvd25s
b2FkICoKK3dlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgKFdlYktpdFdlYkNvbnRl
eHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBn
Y2hhciAgICAgICp1cmkpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0
ZS5oCmluZGV4IDg2ZDdkZWMuLmQyZGQ4MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaApAQCAtMzIs
NiArMzIsOSBAQAogR19CRUdJTl9ERUNMUwogCiBXS0NvbnRleHRSZWYgd2Via2l0V2ViQ29udGV4
dEdldFdLQ29udGV4dChXZWJLaXRXZWJDb250ZXh0Kik7CitXZWJLaXREb3dubG9hZCogd2Via2l0
V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZik7Cit2b2lkIHdlYmtp
dFdlYkNvbnRleHRSZW1vdmVEb3dubG9hZChXS0Rvd25sb2FkUmVmKTsKK3ZvaWQgd2Via2l0V2Vi
Q29udGV4dERvd25sb2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0RG93bmxvYWQq
KTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggNjkxMzE3
Zi4uZWEwYmUyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC0yNyw2ICsyNyw3IEBA
IFdlYktpdENhY2hlTW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdAogd2Via2l0
X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNo
ZV9tb2RlbAord2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaQogCiA8U1VCU0VDVElPTiBT
dGFuZGFyZD4KIFdlYktpdFdlYkNvbnRleHRDbGFzcwpAQCAtMzE0LDExICszMTUsMTQgQEAgd2Vi
a2l0X2Rvd25sb2FkX2dldF90eXBlCiBXRUJLSVRfTkVUV09SS19FUlJPUgogV0VCS0lUX1BMVUdJ
Tl9FUlJPUgogV0VCS0lUX1BPTElDWV9FUlJPUgorV0VCS0lUX0RPV05MT0FEX0VSUk9SCiBXZWJL
aXROZXR3b3JrRXJyb3IKIFdlYktpdFBsdWdpbkVycm9yCiBXZWJLaXRQb2xpY3lFcnJvcgorV2Vi
S2l0RG93bmxvYWRFcnJvcgogd2Via2l0X25ldHdvcmtfZXJyb3JfcXVhcmsKIHdlYmtpdF9wbHVn
aW5fZXJyb3JfcXVhcmsKIHdlYmtpdF9wb2xpY3lfZXJyb3JfcXVhcmsKK3dlYmtpdF9kb3dubG9h
ZF9lcnJvcl9xdWFyawogPC9TRUNUSU9OPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4IDE3NTlkMDQuLjFmMTJj
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dO
VW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L0dOVW1ha2VmaWxlLmFtCkBAIC0zLDcgKzMsOCBAQCBURVNUX1BST0dTICs9IFwKIAlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFdlYlZpZXcgXAogCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0V2ViS2l0V2ViTG9hZGVyQ2xpZW50IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdFdlYktpdFNldHRpbmdzIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVz
dEJhY2tGb3J3YXJkTGlzdAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0QmFja0Zvcndh
cmRMaXN0IFwKKwlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcwogCiBub2lu
c3RfUFJPR1JBTVMgKz0gJChURVNUX1BST0dTKQogCkBAIC05NSw0ICs5NiwxMSBAQCBQcm9ncmFt
c19XZWJLaXQyQVBJVGVzdHNfVGVzdFdlYktpdEFjY2Vzc2liaWxpdHlfU09VUkNFUyA9IFwKIFBy
b2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0QWNjZXNzaWJpbGl0eV9DUFBGTEFHUyA9
ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykgJChBVFNQSTJfQ0ZMQUdTKQogUHJvZ3JhbXNfV2Vi
S2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRBY2Nlc3NpYmlsaXR5X0xEQUREID0gJCh3ZWJraXQyX3Rl
c3RzX2xkYWRkKSAkKEFUU1BJMl9MSUJTKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RX
ZWJLaXRBY2Nlc3NpYmlsaXR5X0xERkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfbGRmbGFncykKLWVu
ZGlmClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZW5kaWYKKworUHJvZ3JhbXNfV2ViS2l0
MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfU09VUkNFUyA9IFwKKyAgICAgICAgU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAKK1Byb2dyYW1zX1dl
YktpdDJBUElUZXN0c19UZXN0RG93bmxvYWRzX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2Nw
cGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3REb3dubG9hZHNfTERBREQgPSAk
KHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdERvd25s
b2Fkc19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdERvd25sb2Fkcy5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiYTkzZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9h
ZHMuY3BwCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5j
bHVkZSAiV2ViS2l0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPGdsaWIvZ3N0ZGlvLmg+CisjaW5j
bHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHN0
cmluZy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvd2Via2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworc3RhdGlj
IGNoYXIqIGtUZW1wRGlyZWN0b3J5OworCitjbGFzcyBEb3dubG9hZFRlc3Q6IHB1YmxpYyBUZXN0
IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKERvd25sb2FkVGVzdCk7CisK
KyAgICBlbnVtIERvd25sb2FkRXZlbnRzIHsKKyAgICAgICAgU3RhcnRlZCwKKyAgICAgICAgUmVj
ZWl2ZWRSZXNwb25zZSwKKyAgICAgICAgQ3JlYXRlZERlc3RpbmF0aW9uLAorICAgICAgICBSZWNl
aXZlZERhdGEsCisgICAgICAgIEZhaWxlZCwKKyAgICAgICAgRmluaXNoZWQKKyAgICB9OworCisg
ICAgc3RhdGljIHZvaWQgcmVjZWl2ZWRSZXNwb25zZUNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBk
b3dubG9hZCwgR1BhcmFtU3BlYyosIERvd25sb2FkVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAg
IGdfYXNzZXJ0KHdlYmtpdF9kb3dubG9hZF9nZXRfcmVzcG9uc2UoZG93bmxvYWQpKTsKKyAgICAg
ICAgdGVzdC0+cmVjZWl2ZWRSZXNwb25zZShkb3dubG9hZCk7CisgICAgfQorCisgICAgc3RhdGlj
IGdib29sZWFuIGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2FkKiBkb3du
bG9hZCwgY29uc3QgZ2NoYXIqIGRlc3RpbmF0aW9uLCBEb3dubG9hZFRlc3QqIHRlc3QpCisgICAg
eworICAgICAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25s
b2FkKSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3Rp
bmF0aW9uKGRvd25sb2FkKSwgPT0sIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgdGVzdC0+Y3JlYXRl
ZERlc3RpbmF0aW9uKGRvd25sb2FkLCBkZXN0aW5hdGlvbik7CisgICAgICAgIHJldHVybiBUUlVF
OworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiByZWNlaXZlZERhdGFDYWxsYmFjayhXZWJL
aXREb3dubG9hZCogZG93bmxvYWQsIGd1aW50NjQgZGF0YUxlbmd0aCwgRG93bmxvYWRUZXN0KiB0
ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cmVjZWl2ZWREYXRhKGRvd25sb2FkLCBkYXRhTGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIGdib29sZWFu
IGZpbmlzaGVkQ2FsbGJhY2soV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBEb3dubG9hZFRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5maW5pc2hlZChkb3dubG9hZCk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBmYWlsZWRDYWxsYmFj
ayhXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdFcnJvciogZXJyb3IsIERvd25sb2FkVGVzdCog
dGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKKyAgICAgICAgdGVzdC0+ZmFp
bGVkKGRvd25sb2FkLCBlcnJvcik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAg
IHN0YXRpYyBnYm9vbGVhbiBkZWNpZGVEZXN0aW5hdGlvbkNhbGxiYWNrKFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCwgY29uc3QgZ2NoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lLCBEb3dubG9hZFRlc3Qq
IHRlc3QpCisgICAgeworICAgICAgICBnX2Fzc2VydChzdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAg
ICAgIHRlc3QtPmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7
CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRvd25sb2Fk
U3RhcnRlZENhbGxiYWNrKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdERvd25sb2Fk
KiBkb3dubG9hZCwgRG93bmxvYWRUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+c3Rh
cnRlZChkb3dubG9hZCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJub3Rp
Znk6OnJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2spLCB0ZXN0
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImNyZWF0ZWQtZGVzdGluYXRp
b24iLCBHX0NBTExCQUNLKGNyZWF0ZWREZXN0aW5hdGlvbkNhbGxiYWNrKSwgdGVzdCk7CisgICAg
ICAgIGdfc2lnbmFsX2Nvbm5lY3QoZG93bmxvYWQsICJyZWNlaXZlZC1kYXRhIiwgR19DQUxMQkFD
SyhyZWNlaXZlZERhdGFDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KGRvd25sb2FkLCAiZmluaXNoZWQiLCBHX0NBTExCQUNLKGZpbmlzaGVkQ2FsbGJhY2spLCB0ZXN0
KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3dubG9hZCwgImZhaWxlZCIsIEdfQ0FMTEJB
Q0soZmFpbGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChkb3du
bG9hZCwgImRlY2lkZS1kZXN0aW5hdGlvbiIsIEdfQ0FMTEJBQ0soZGVjaWRlRGVzdGluYXRpb25D
YWxsYmFjayksIHRlc3QpOworICAgIH0KKworICAgIERvd25sb2FkVGVzdCgpCisgICAgICAgIDog
bV93ZWJDb250ZXh0KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKQorICAgICAgICAs
IG1fbWFpbkxvb3AoZ19tYWluX2xvb3BfbmV3KDAsIFRSVUUpKQorICAgICAgICAsIG1fZG93bmxv
YWRTaXplKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViQ29udGV4dCwg
ImRvd25sb2FkLXN0YXJ0ZWQiLCBHX0NBTExCQUNLKGRvd25sb2FkU3RhcnRlZENhbGxiYWNrKSwg
dGhpcyk7CisgICAgfQorCisgICAgfkRvd25sb2FkVGVzdCgpCisgICAgeworICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQobV93ZWJDb250ZXh0LCBHX1NJR05BTF9N
QVRDSF9EQVRBLCAwLCAwLCAwLCAwLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfdW5yZWYo
bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0ZWQoV2ViS2l0RG93
bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQo
U3RhcnRlZCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlY2VpdmVkUmVzcG9uc2UoV2Vi
S2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5h
cHBlbmQoUmVjZWl2ZWRSZXNwb25zZSk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGNyZWF0
ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3Rp
bmF0aW9uKQorICAgIHsKKyAgICAgICAgbV9kb3dubG9hZEV2ZW50cy5hcHBlbmQoQ3JlYXRlZERl
c3RpbmF0aW9uKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVjZWl2ZWREYXRhKFdlYktp
dERvd25sb2FkKiBkb3dubG9hZCwgZ3VpbnQ2NCBkYXRhTGVuZ3RoKQorICAgIHsKKyAgICAgICAg
bV9kb3dubG9hZFNpemUgKz0gZGF0YUxlbmd0aDsKKyAgICAgICAgaWYgKCFtX2Rvd25sb2FkRXZl
bnRzLmNvbnRhaW5zKFJlY2VpdmVkRGF0YSkpCisgICAgICAgICAgICBtX2Rvd25sb2FkRXZlbnRz
LmFwcGVuZChSZWNlaXZlZERhdGEpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hl
ZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZl
bnRzLmFwcGVuZChGaW5pc2hlZCk7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9v
cCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9hZCogZG93
bmxvYWQsIEdFcnJvciogZXJyb3IpCisgICAgeworICAgICAgICBtX2Rvd25sb2FkRXZlbnRzLmFw
cGVuZChGYWlsZWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWNpZGVEZXN0aW5hdGlv
bihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBzdWdnZXN0ZWRGaWxlbmFt
ZSkKKyAgICB7CisgICAgICAgIEdPd25QdHI8Y2hhcj4gZGVzdGluYXRpb24oZ19idWlsZF9maWxl
bmFtZShrVGVtcERpcmVjdG9yeSwgc3VnZ2VzdGVkRmlsZW5hbWUsIE5VTEwpKTsKKyAgICAgICAg
R093blB0cjxjaGFyPiBkZXN0aW5hdGlvblVSSShnX2ZpbGVuYW1lX3RvX3VyaShkZXN0aW5hdGlv
bi5nZXQoKSwgMCwgMCkpOworICAgICAgICB3ZWJraXRfZG93bmxvYWRfc2V0X2Rlc3RpbmF0aW9u
KGRvd25sb2FkLCBkZXN0aW5hdGlvblVSSS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCB3YWl0
VW50aWxEb3dubG9hZEZpbmlzaGVkKCkKKyAgICB7CisgICAgICAgIGdfbWFpbl9sb29wX3J1biht
X21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrRGVzdGluYXRpb25BbmREZWxldGUo
V2ViS2l0RG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBleHBlY3RlZE5hbWUpCisgICAg
eworICAgICAgICBpZiAoIXdlYmtpdF9kb3dubG9hZF9nZXRfZGVzdGluYXRpb24oZG93bmxvYWQp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHUmVmUHRyPEdGaWxlPiBkZXN0RmlsZSA9
IGFkb3B0R1JlZihnX2ZpbGVfbmV3X2Zvcl91cmkod2Via2l0X2Rvd25sb2FkX2dldF9kZXN0aW5h
dGlvbihkb3dubG9hZCkpKTsKKyAgICAgICAgR093blB0cjxjaGFyPiBkZXN0QmFzZW5hbWUoZ19m
aWxlX2dldF9iYXNlbmFtZShkZXN0RmlsZS5nZXQoKSkpOworICAgICAgICBnX2Fzc2VydF9jbXBz
dHIoZGVzdEJhc2VuYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROYW1lKTsKKworICAgICAgICBnX2Zp
bGVfZGVsZXRlKGRlc3RGaWxlLmdldCgpLCAwLCAwKTsKKyAgICB9CisKKyAgICBXZWJLaXRXZWJD
b250ZXh0KiBtX3dlYkNvbnRleHQ7CisgICAgR01haW5Mb29wKiBtX21haW5Mb29wOworICAgIFZl
Y3RvcjxEb3dubG9hZEV2ZW50cz4gbV9kb3dubG9hZEV2ZW50czsKKyAgICBndWludDY0IG1fZG93
bmxvYWRTaXplOworfTsKKworc3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rp
cigpCit7CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIHdlYmtpdDFUZXN0UmVzb3VjZXNEaXIgPSAi
U291cmNlL1dlYktpdC9ndGsvdGVzdHMvcmVzb3VyY2VzIjsKKyAgICBHUmVmUHRyPEdGaWxlPiBm
aWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoV0VCS0lUX0VYRUNfUEFUSCkpOwor
ICAgIEdSZWZQdHI8R0ZpbGU+IHBhcmVudCA9IGFkb3B0R1JlZihnX2ZpbGVfZ2V0X3BhcmVudChm
aWxlLmdldCgpKSk7CisgICAgZmlsZSA9IGdfZmlsZV9nZXRfcGFyZW50KHBhcmVudC5nZXQoKSk7
CisgICAgR093blB0cjxjaGFyPiByb290RGlyKGdfZmlsZV9nZXRfcGF0aChmaWxlLmdldCgpKSk7
CisgICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShyb290RGly
LmdldCgpLCB3ZWJraXQxVGVzdFJlc291Y2VzRGlyLCBOVUxMKSk7CisgICAgcmV0dXJuIHJlc291
cmNlc0Rpci5nZXQoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdERvd25sb2FkTG9jYWxGaWxlKERv
d25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICBHT3duUHRyPGNoYXI+IHNv
dXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0
YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CisgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlUGF0aC5nZXQoKSkpOworICAgIEdSZWZQ
dHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNv
dXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxH
RmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOworICAgIEdPd25QdHI8Y2hhcj4gc291cmNl
VVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0RG93
bmxvYWQ+IGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91
cmkodGVzdC0+bV93ZWJDb250ZXh0LCBzb3VyY2VVUkkuZ2V0KCkpKTsKKyAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgp
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisgICAgVmVjdG9y
PERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2Fk
RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRS
ZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVz
dDo6Q3JlYXRlZERlc3RpbmF0aW9uKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZERhdGEpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVu
dHNbNF0sID09LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKworICAgIGdfYXNzZXJ0X2NtcGlu
dCh0ZXN0LT5tX2Rvd25sb2FkU2l6ZSwgPT0sIGdfZmlsZV9pbmZvX2dldF9zaXplKHNvdXJjZUlu
Zm8uZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9u
KGRvd25sb2FkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2Fk
X2dldF9lc3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMS4pOworICAgIHRl
c3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0KCksICJ0ZXN0LnBkZiIp
OworfQorCitjbGFzcyBEb3dubG9hZFRlc3RFcnJvcjogcHVibGljIERvd25sb2FkVGVzdCB7Citw
dWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShEb3dubG9hZFRlc3RFcnJvcik7CisK
KyAgICBEb3dubG9hZFRlc3RFcnJvcigpCisgICAgICAgIDogbV9leHBlY3RlZEVycm9yKFdFQktJ
VF9ET1dOTE9BRF9FUlJPUl9ORVRXT1JLKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlY2Vp
dmVkUmVzcG9uc2UoV2ViS2l0RG93bmxvYWQqIGRvd25sb2FkKQorICAgIHsKKyAgICAgICAgRG93
bmxvYWRUZXN0OjpyZWNlaXZlZFJlc3BvbnNlKGRvd25sb2FkKTsKKyAgICAgICAgaWYgKG1fZXhw
ZWN0ZWRFcnJvciA9PSBXRUJLSVRfRE9XTkxPQURfRVJST1JfQ0FOQ0VMTEVEX0JZX1VTRVIpCisg
ICAgICAgICAgICB3ZWJraXRfZG93bmxvYWRfY2FuY2VsKGRvd25sb2FkKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNyZWF0ZWREZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0
IGNoYXIqIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGZhaWxlZChXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIEdF
cnJvciogZXJyb3IpCisgICAgeworICAgICAgICBnX2Fzc2VydChnX2Vycm9yX21hdGNoZXMoZXJy
b3IsIFdFQktJVF9ET1dOTE9BRF9FUlJPUiwgbV9leHBlY3RlZEVycm9yKSk7CisgICAgICAgIERv
d25sb2FkVGVzdDo6ZmFpbGVkKGRvd25sb2FkLCBlcnJvcik7CisgICAgfQorCisgICAgdm9pZCBk
ZWNpZGVEZXN0aW5hdGlvbihXZWJLaXREb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGdjaGFyKiBz
dWdnZXN0ZWRGaWxlbmFtZSkKKyAgICB7CisgICAgICAgIGlmIChtX2V4cGVjdGVkRXJyb3IgIT0g
V0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OKSB7CisgICAgICAgICAgICBEb3dubG9h
ZFRlc3Q6OmRlY2lkZURlc3RpbmF0aW9uKGRvd25sb2FkLCBzdWdnZXN0ZWRGaWxlbmFtZSk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgd2Via2l0X2Rvd25sb2FkX3Nl
dF9kZXN0aW5hdGlvbihkb3dubG9hZCwgImZpbGU6Ly8vZm9vL2JhciIpOworICAgIH0KKworICAg
IFdlYktpdERvd25sb2FkRXJyb3IgbV9leHBlY3RlZEVycm9yOworfTsKKworc3RhdGljIHZvaWQg
dGVzdERvd25sb2FkTG9jYWxGaWxlRXJyb3IoRG93bmxvYWRUZXN0RXJyb3IqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FE
X0VSUk9SX05FVFdPUks7CisgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4gZG93bmxvYWQgPSBh
ZG9wdEdSZWYod2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNvbnRl
eHQsICJmaWxlOi8vL2Zvby9iYXIiKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVk
V2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndh
aXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIFZlY3RvcjxEb3dubG9hZFRlc3Q6OkRv
d25sb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50czsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDMpOworICAgIGdfYXNzZXJ0X2NtcGludChl
dmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OkZhaWxlZCk7CisgICAgZ19hc3NlcnRfY21w
aW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5j
bGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1h
dGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOworCisgICAgdGVzdC0+bV9leHBl
Y3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJTkFUSU9OOworICAgIEdPd25Q
dHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIo
KS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0g
YWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5nZXQoKSkpOworICAgIEdPd25QdHI8
Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkpKTsKKyAgICBkb3dubG9hZCA9IGFk
b3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4
dCwgdXJpLmdldCgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RG
aW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERv
d25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2ZW50cyA9IHRlc3QtPm1fZG93bmxvYWRFdmVudHM7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fz
c2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNl
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgRG93bmxvYWRUZXN0OjpGYWls
ZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09LCBEb3dubG9hZFRlc3Q6OkZp
bmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fzc2VydF9jbXBmbG9hdCh3ZWJr
aXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3dubG9hZC5nZXQoKSksIDwsIDEu
KTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRlKGRvd25sb2FkLmdldCgpLCAi
YmFyIik7CisKKyAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJS
T1JfQ0FOQ0VMTEVEX0JZX1VTRVI7CisgICAgZG93bmxvYWQgPSBhZG9wdEdSZWYod2Via2l0X3dl
Yl9jb250ZXh0X2Rvd25sb2FkX3VyaSh0ZXN0LT5tX3dlYkNvbnRleHQsIHVyaS5nZXQoKSkpOwor
ICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qo
ZG93bmxvYWQuZ2V0KCkpKTsKKyAgICB0ZXN0LT53YWl0VW50aWxEb3dubG9hZEZpbmlzaGVkKCk7
CisKKyAgICBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2FkRXZlbnRzOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sw
XSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRf
Y21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZl
bnRzLmNsZWFyKCk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9l
c3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA8LCAxLik7CisgICAgdGVzdC0+Y2hl
Y2tEZXN0aW5hdGlvbkFuZERlbGV0ZShkb3dubG9hZC5nZXQoKSwgInRlc3QucGRmIik7Cit9CisK
K3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOworc3RhdGljIGNvbnN0IGNoYXIqIGtT
ZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSA9ICJ3ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKKworc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSog
bWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0
KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9H
RVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEdPd25Q
dHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShnZXRXZWJLaXQxVGVzdFJlc291Y2Vz
RGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7CisgICAgY2hhciogY29udGVudHM7CisgICAgZ3Np
emUgY29udGVudHNMZW5ndGg7CisgICAgaWYgKCFnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVQYXRo
LmdldCgpLCAmY29udGVudHMsICZjb250ZW50c0xlbmd0aCwgMCkpIHsKKyAgICAgICAgc291cF9t
ZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBHT3duUHRyPGNoYXI+IGNvbnRlbnREaXNwb3Np
dGlvbihnX3N0cmR1cF9wcmludGYoImZpbGVuYW1lPSVzIiwga1NlcnZlclN1Z2dlc3RlZEZpbGVu
YW1lKSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgY29udGVudERpc3Bvc2l0aW9uLmdldCgp
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgY29udGVudHMsIGNvbnRlbnRzTGVuZ3RoKTsKKworICAgIHNvdXBf
bWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCitzdGF0
aWMgdm9pZCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKERvd25sb2FkVGVzdCogdGVzdCwgZ2NvbnN0
cG9pbnRlcikKK3sKKyAgICBHUmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0
R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwg
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5n
ZXQoKSkpOworICAgIHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIFZl
Y3RvcjxEb3dubG9hZFRlc3Q6OkRvd25sb2FkRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9kb3du
bG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOwor
ICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQp
OworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2Vp
dmVkUmVzcG9uc2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9h
ZFRlc3Q6OkNyZWF0ZWREZXN0aW5hdGlvbik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sz
XSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzRdLCA9PSwgRG93bmxvYWRUZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFy
KCk7CisKKyAgICBnX2Fzc2VydCh3ZWJraXRfZG93bmxvYWRfZ2V0X2Rlc3RpbmF0aW9uKGRvd25s
b2FkLmdldCgpKSk7CisgICAgZ19hc3NlcnRfY21wZmxvYXQod2Via2l0X2Rvd25sb2FkX2dldF9l
c3RpbWF0ZWRfcHJvZ3Jlc3MoZG93bmxvYWQuZ2V0KCkpLCA9PSwgMS4pOworICAgIHRlc3QtPmNo
ZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0KCksIGtTZXJ2ZXJTdWdnZXN0ZWRG
aWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3REb3dubG9hZFJlbW90ZUZpbGVFcnJvcihE
b3dubG9hZFRlc3RFcnJvciogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5tX2V4
cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfTkVUV09SSzsKKyAgICBHUmVmUHRy
PFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRf
ZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9mb28iKS5kYXRhKCkpKTsKKyAgICB0ZXN0LT5hc3Nl
cnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgp
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsRG93bmxvYWRGaW5pc2hlZCgpOworCisgICAgVmVjdG9y
PERvd25sb2FkVGVzdDo6RG93bmxvYWRFdmVudHM+JiBldmVudHMgPSB0ZXN0LT5tX2Rvd25sb2Fk
RXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgNCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIERvd25sb2FkVGVzdDo6U3RhcnRlZCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIERvd25sb2FkVGVzdDo6UmVjZWl2ZWRS
ZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1syXSwgPT0sIERvd25sb2FkVGVz
dDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgRG93bmxvYWRU
ZXN0OjpGaW5pc2hlZCk7CisgICAgZXZlbnRzLmNsZWFyKCk7CisgICAgV2ViS2l0VVJJUmVzcG9u
c2UqIHJlc3BvbnNlID0gd2Via2l0X2Rvd25sb2FkX2dldF9yZXNwb25zZShkb3dubG9hZC5nZXQo
KSk7CisgICAgZ19hc3NlcnRfY21wdWludCh3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF9zdGF0dXNf
Y29kZShyZXNwb25zZSksID09LCA0MDQpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9k
b3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMS4pOwor
CisgICAgdGVzdC0+bV9leHBlY3RlZEVycm9yID0gV0VCS0lUX0RPV05MT0FEX0VSUk9SX0RFU1RJ
TkFUSU9OOworICAgIGRvd25sb2FkID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJfY29udGV4dF9kb3du
bG9hZF91cmkodGVzdC0+bV93ZWJDb250ZXh0LCBrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvdGVz
dC5wZGYiKS5kYXRhKCkpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKGRvd25sb2FkLmdldCgpKSk7CisgICAgdGVzdC0+d2FpdFVudGls
RG93bmxvYWRGaW5pc2hlZCgpOworCisgICAgZXZlbnRzID0gdGVzdC0+bV9kb3dubG9hZEV2ZW50
czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDQpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBEb3dubG9hZFRlc3Q6OlN0YXJ0ZWQpOworICAgIGdf
YXNzZXJ0X2NtcGludChldmVudHNbMV0sID09LCBEb3dubG9hZFRlc3Q6OlJlY2VpdmVkUmVzcG9u
c2UpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBEb3dubG9hZFRlc3Q6OkZh
aWxlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1szXSwgPT0sIERvd25sb2FkVGVzdDo6
RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdl
YmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwg
MS4pOworICAgIHRlc3QtPmNoZWNrRGVzdGluYXRpb25BbmREZWxldGUoZG93bmxvYWQuZ2V0KCks
ICJiYXIiKTsKKworICAgIHRlc3QtPm1fZXhwZWN0ZWRFcnJvciA9IFdFQktJVF9ET1dOTE9BRF9F
UlJPUl9DQU5DRUxMRURfQllfVVNFUjsKKyAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRf
d2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwga1NlcnZlci0+Z2V0
VVJJRm9yUGF0aCgiL3Rlc3QucGRmIikuZGF0YSgpKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0
SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChkb3dubG9hZC5nZXQoKSkpOworICAg
IHRlc3QtPndhaXRVbnRpbERvd25sb2FkRmluaXNoZWQoKTsKKworICAgIGV2ZW50cyA9IHRlc3Qt
Pm1fZG93bmxvYWRFdmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09
LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgRG93bmxvYWRUZXN0OjpT
dGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgRG93bmxvYWRUZXN0
OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwg
RG93bmxvYWRUZXN0OjpGYWlsZWQpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbM10sID09
LCBEb3dubG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKyAgICBnX2Fz
c2VydF9jbXBmbG9hdCh3ZWJraXRfZG93bmxvYWRfZ2V0X2VzdGltYXRlZF9wcm9ncmVzcyhkb3du
bG9hZC5nZXQoKSksIDwsIDEuKTsKKyAgICB0ZXN0LT5jaGVja0Rlc3RpbmF0aW9uQW5kRGVsZXRl
KGRvd25sb2FkLmdldCgpLCBrU2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworfQorCit2b2lkIGJl
Zm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAg
a1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIGtUZW1wRGlyZWN0b3J5ID0gZ19k
aXJfbWFrZV90bXAoIldlYktpdDJUZXN0cy1YWFhYWFgiLCAwKTsKKyAgICBnX2Fzc2VydChrVGVt
cERpcmVjdG9yeSk7CisKKyAgICBEb3dubG9hZFRlc3Q6OmFkZCgiRG93bmxvYWRzIiwgImxvY2Fs
LWZpbGUiLCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUpOworICAgIERvd25sb2FkVGVzdEVycm9yOjph
ZGQoIkRvd25sb2FkcyIsICJsb2NhbC1maWxlLWVycm9yIiwgdGVzdERvd25sb2FkTG9jYWxGaWxl
RXJyb3IpOworICAgIERvd25sb2FkVGVzdDo6YWRkKCJEb3dubG9hZHMiLCAicmVtb3RlLWZpbGUi
LCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlKTsKKyAgICBEb3dubG9hZFRlc3RFcnJvcjo6YWRkKCJE
b3dubG9hZHMiLCAicmVtb3RlLWZpbGUtZXJyb3IiLCB0ZXN0RG93bmxvYWRSZW1vdGVGaWxlRXJy
b3IpOworfQorCit2b2lkIGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUga1NlcnZlcjsKKyAgICBn
X3JtZGlyKGtUZW1wRGlyZWN0b3J5KTsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL2d0ay9nZW5lcmF0
ZS1ndGtkb2MgYi9Ub29scy9ndGsvZ2VuZXJhdGUtZ3RrZG9jCmluZGV4IDBjMThhMzguLjMxNzQ4
N2IgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay9nZW5lcmF0ZS1ndGtkb2MKKysrIGIvVG9vbHMvZ3Rr
L2dlbmVyYXRlLWd0a2RvYwpAQCAtNjAsNiArNjAsNyBAQCBkZWYgZ2V0X3dlYmtpdDJfb3B0aW9u
cygpOgogICAgICAgICAgICAgICAgICAgICcgLUknICsgc3JjX3BhdGgoKSwKICAgICAgICAgJ2ln
bm9yZWRfZmlsZXMnOiBnbG9iLmdsb2Ioc3JjX3BhdGgoJypQcml2YXRlLmgnKSkgKyBcCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdQYWdlQ2xpZW50SW1wbC4q
JykpICsgXAorICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2IuZ2xvYihzcmNfcGF0aCgnV2Vi
S2l0RG93bmxvYWRDbGllbnQuKicpKSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9i
Lmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFVJQ2xpZW50LionKSkgKyBcCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ2xvYi5nbG9iKHNyY19wYXRoKCdXZWJLaXRXZWJMb2FkZXJDbGllbnQuKicpKSAr
IFwKICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iLmdsb2Ioc3JjX3BhdGgoJ1dlYktpdFdl
YlZpZXdCYXNlQWNjZXNzaWJsZS4qJykpICsgXAo=
</data>
<flag name="review"
          id="124621"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>