<?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>40222</bug_id>
          
          <creation_ts>2010-06-07 03:32:39 -0700</creation_ts>
          <short_desc>Use the new SoupURILoader API</short_desc>
          <delta_ts>2011-02-16 08:46:20 -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>WebKitGTK</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>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alsadi</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>234759</commentid>
    <comment_count>0</comment_count>
      <attachid>58006</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-06-07 03:32:39 -0700</bug_when>
    <thetext>Created attachment 58006
Http working with the new SoupURILoader API

See https://bugzilla.gnome.org/show_bug.cgi?id=557777 for more details about the new SoupURILoader stuff

It seems sensible to handle here the WebKitGtk+ patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236841</commentid>
    <comment_count>1</comment_count>
      <attachid>58477</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-06-11 08:24:03 -0700</bug_when>
    <thetext>Created attachment 58477
WebKitGtk+ working for http:/ftp:/file:/data: protocols

With this new version of the patch and the changes to libsoup mentioned here https://bugzilla.gnome.org/show_bug.cgi?id=557777 all the tests for WebKitGtk+ are working fine.

With this new version not only http://, but ftp:// data:// and file:// protocols are correctly working with the new SoupURILoader stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242416</commentid>
    <comment_count>2</comment_count>
      <attachid>59628</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-06-24 03:48:12 -0700</bug_when>
    <thetext>Created attachment 59628
WebKitGtk+ working for http/ftp/file/data protocols

The previous patch still had the old handling code for data:// URLs. Now we use the SoupURILoader stuff also for loading data:.

All the tests work fine with this patch and the libsoup version stored in http://gitorious.org/libsoup-io-cache

libsoup changes can be tracked in https://bugzilla.gnome.org/show_bug.cgi?id=557777</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242417</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-24 03:50:13 -0700</bug_when>
    <thetext>Attachment 59628 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/platform/network/soup/ResourceHandleSoup.cpp:308:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:377:  Declaration has space between type name and * in GInputStream *in  [whitespace/declaration] [3]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:391:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:490:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:492:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:500:  Declaration has space between type name and * in GError *error  [whitespace/declaration] [3]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:571:  Declaration has space between type name and * in GFile *file  [whitespace/declaration] [3]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:571:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:585:  Extra space before ( in function call  [whitespace/parens] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:859:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/network/soup/ResourceHandleSoup.cpp:883:  Declaration has space between type name and * in gchar *urlstr  [whitespace/declaration] [3]
WebCore/platform/network/soup/ResourceRequestSoup.cpp:39:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 12 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242437</commentid>
    <comment_count>4</comment_count>
      <attachid>59635</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-06-24 04:30:19 -0700</bug_when>
    <thetext>Created attachment 59635
WebKitGtk+ working for http/ftp/file/data protocols

Style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242457</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-24 05:14:46 -0700</bug_when>
    <thetext>Attachment 59628 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3304674</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242486</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-24 06:47:03 -0700</bug_when>
    <thetext>Attachment 59635 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3342348</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242980</commentid>
    <comment_count>7</comment_count>
      <attachid>59635</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-06-25 05:57:15 -0700</bug_when>
    <thetext>Comment on attachment 59635
WebKitGtk+ working for http/ftp/file/data protocols

WebCore/platform/network/soup/ResourceHandleSoup.cpp:547
 +          client-&gt;didFinishLoading(handle.get());
You are missing checks here for the existance of the client and for cancelling. The didReceiveData above may have cancelled it, we&apos;ll get crashes.


WebCore/platform/network/soup/ResourceHandleSoup.cpp:490
 +          gulong gotChunkHandler = GPOINTER_TO_UINT(userData);
Eeww. I don&apos;t think this is right. This will do a cast to guint. I would prefer removing this hack, and using a variable inside the ResourceHandleInternal hack instead.

WebCore/platform/network/soup/ResourceHandleSoup.cpp:566
 +      // returns a stream whose outcome is a HTML with a list of files
&quot;whose content is HTML&quot;, I think, sounds better; I don&apos;t see any special handling for directories, though, should there be? It appears the special handling is for any file: URIs

r- for the reasons above, I&apos;ll try to get this installed and start running with it to get it tested =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243627</commentid>
    <comment_count>8</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-06-28 02:04:25 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 59635 [details])
&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:547
&gt;  +          client-&gt;didFinishLoading(handle.get());
&gt; You are missing checks here for the existance of the client and for cancelling. The didReceiveData above may have cancelled it, we&apos;ll get crashes.

True

&gt; 
&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:490
&gt;  +          gulong gotChunkHandler = GPOINTER_TO_UINT(userData);
&gt; Eeww. I don&apos;t think this is right. This will do a cast to guint. I would prefer removing this hack, and using a variable inside the ResourceHandleInternal hack instead.

Ok

&gt; WebCore/platform/network/soup/ResourceHandleSoup.cpp:566
&gt;  +      // returns a stream whose outcome is a HTML with a list of files
&gt; &quot;whose content is HTML&quot;, I think, sounds better; I don&apos;t see any special handling for directories, though, should there be? It appears the special handling is for any file: URIs

Thing is that for directories we&apos;ll get a SoupDirectoryInputStream instead of a GFileInputStream. If we get that soup stream we&apos;ll handle it as a normal stream with HTML content. Maybe we could set the condition as !SOUP_IS_DIRECTORY_INPUT_STREAM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245258</commentid>
    <comment_count>9</comment_count>
      <attachid>59635</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-07-01 05:05:09 -0700</bug_when>
    <thetext>Comment on attachment 59635
WebKitGtk+ working for http/ftp/file/data protocols

&gt;-        GFile* m_gfile;
&gt;+        SoupRequest* m_req;

Maybe we can start using GRefPtr for this?

&gt;-    String url = handle-&gt;request().url().string();
&gt;-    ASSERT(url.startsWith(&quot;data:&quot;, false));
&gt;+    String urlStr = handle-&gt;request().url().string();
&gt;+    ASSERT(urlStr.startsWith(&quot;data:&quot;, false));
&gt; 
&gt;-    int index = url.find(&apos;,&apos;);
&gt;+    int index = urlStr.find(&apos;,&apos;);
&gt;     if (index == -1) {
&gt;         client-&gt;cannotShowURL(handle);
&gt;         return false;
&gt;     }
&gt; 
&gt;-    String mediaType = url.substring(5, index - 5);
&gt;-    String data = url.substring(index + 1);
&gt;+    String mediaType = urlStr.substring(5, index - 5);

This seems to be a bit random? Should go in a different patch at the very least.

&gt;+    SoupSession* session = handle-&gt;defaultSession();
&gt;+    GError* error = 0;

Should use GOwnPtr for GError here.

&gt;+    d-&gt;m_req = soup_session_request(session, handle-&gt;request().url().string().utf8().data(), &amp;error);
&gt;+    if (error) {
&gt;+        g_error_free(error);
&gt;+        return false;
&gt;+    }
&gt;+
&gt;+    GInputStream* in = soup_request_send(d-&gt;m_req, 0, &amp;error);
&gt;+    if (error) {
&gt;+        g_error_free(error);
&gt;+        return false;
&gt;+    }
&gt;+
&gt;+    d-&gt;m_inputStream = in;
&gt;+    d-&gt;m_bufferSize = 8192;
&gt;+    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(d-&gt;m_bufferSize));
&gt;+    d-&gt;m_total = 0;
&gt;+
&gt;+    g_object_set_data(G_OBJECT(d-&gt;m_inputStream), &quot;webkit-resource&quot;, handle);
&gt;+    handle-&gt;ref();
&gt;+
&gt;+    d-&gt;m_cancellable = g_cancellable_new();
&gt;+    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, d-&gt;m_bufferSize,
&gt;+                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt;+                              readCallback, (isBase64) ? 0 : GINT_TO_POINTER(1));

I suppose it&apos;s good to unify stuff and always go through libsoup for everything, but isn&apos;t parsing a simple string asynchronously a bit overkill? /me wonders

&gt; 
&gt;     return false;
&gt; }
&gt;@@ -428,7 +404,7 @@ static bool startData(ResourceHandle* handle, String urlString)
&gt; 
&gt;     // If parseDataUrl is called synchronously the job is not yet effectively started
&gt;     // and webkit won&apos;t never know that the data has been parsed even didFinishLoading is called.
&gt;-    d-&gt;m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
&gt;+    d-&gt;m_idleHandler = g_idle_add(parseDataUrl, handle);

This is not the same thing. Do you need to change it or you just felt it was better? Needs an explanation.

&gt;     return true;
&gt; }
&gt; 
&gt;@@ -469,6 +445,151 @@ static void ensureSessionIsInitialized(SoupSession* session)
&gt;     g_object_set_data(G_OBJECT(session), &quot;webkit-init&quot;, reinterpret_cast&lt;void*&gt;(0xdeadbeef));
&gt; }
&gt; 

&gt;+static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer userData)
&gt;+{
&gt;+    RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(g_object_get_data(source, &quot;webkit-resource&quot;));
&gt;+    if (!handle)
&gt;+        return;
&gt;+
&gt;+    ResourceHandleInternal* d = handle-&gt;getInternal();
&gt;+    ResourceHandleClient* client = handle-&gt;client();
&gt;+
&gt;+    if (userData) {
&gt;+        // No need to call gotChunkHandler anymore. Received data will
&gt;+        // be reported by readCallback
&gt;+        gulong gotChunkHandler = GPOINTER_TO_UINT(userData);
&gt;+        if (g_signal_handler_is_connected(d-&gt;m_msg, gotChunkHandler))
&gt;+            g_signal_handler_disconnect(d-&gt;m_msg, gotChunkHandler);
&gt;+    }
&gt;+
&gt;+    if (d-&gt;m_cancelled || !client) {
&gt;+        cleanupSoupRequestOperation(handle.get());
&gt;+        return;
&gt;+    }
&gt;+
&gt;+    GError* error = 0;

GOwnPtr. This is repeated elsewhere, the same applies.

&gt;+    GInputStream* in = soup_request_send_finish(d-&gt;m_req, res, &amp;error);
&gt;+
&gt;+    if (error) {
&gt;+

Extra blank line!

&gt;+        if (d-&gt;m_msg &amp;&amp; SOUP_STATUS_IS_TRANSPORT_ERROR(d-&gt;m_msg-&gt;status_code)) {
&gt;+            SoupURI* uri = soup_request_get_uri(d-&gt;m_req);
&gt;+            char* uristr = soup_uri_to_string(uri, false);

uriStr? With GOwnPtr. This applies in a bunch of places too.

&gt;+            ResourceError resourceError(g_quark_to_string(SOUP_HTTP_ERROR),
&gt;+                                        d-&gt;m_msg-&gt;status_code,
&gt;+                                        uristr,
&gt;+                                        String::fromUTF8(d-&gt;m_msg-&gt;reason_phrase));
&gt;+            g_free(uristr);
&gt;+            g_error_free(error);
&gt;+            cleanupSoupRequestOperation(handle.get());
&gt;+            client-&gt;didFail(handle.get(), resourceError);
&gt;+            return;
&gt;+        }
&gt;+
&gt;+        if (error-&gt;domain == G_IO_ERROR) {
&gt;+            SoupURI* uri = soup_request_get_uri(d-&gt;m_req);
&gt;+            char* uristr = soup_uri_to_string(uri, false);
&gt;+            ResourceError resourceError(g_quark_to_string(G_IO_ERROR),
&gt;+                                        error-&gt;code,
&gt;+                                        uristr,
&gt;+                                        error ? String::fromUTF8(error-&gt;message) : String());
&gt;+            g_free(uristr);
&gt;+            g_error_free(error);
&gt;+            cleanupSoupRequestOperation(handle.get());
&gt;+            client-&gt;didFail(handle.get(), resourceError);
&gt;+            return;
&gt;+        }
&gt;+
&gt;+        g_error_free(error);
&gt;+
&gt;+        if (d-&gt;m_msg &amp;&amp; d-&gt;m_msg-&gt;status_code == SOUP_STATUS_UNAUTHORIZED) {
&gt;+            fillResponseFromMessage(d-&gt;m_msg, &amp;d-&gt;m_response);
&gt;+            client-&gt;didReceiveResponse(handle.get(), d-&gt;m_response);
&gt;+
&gt;+            // WebCore might have cancelled the job in the while
&gt;+            if (d-&gt;m_cancelled)
&gt;+                return;
&gt;+
&gt;+            if (d-&gt;m_msg-&gt;response_body-&gt;data)
&gt;+                client-&gt;didReceiveData(handle.get(), d-&gt;m_msg-&gt;response_body-&gt;data, d-&gt;m_msg-&gt;response_body-&gt;length, true);
&gt;+        }
&gt;+
&gt;+        client-&gt;didFinishLoading(handle.get());
&gt;+        return;
&gt;+    }
&gt;+
&gt;+    if (d-&gt;m_cancelled) {
&gt;+        cleanupSoupRequestOperation(handle.get());
&gt;+        return;
&gt;+    }
&gt;+
&gt;+    d-&gt;m_inputStream = in;
&gt;+    d-&gt;m_bufferSize = 8192;

This number appears around more than once, should be a #define

&gt;+    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(d-&gt;m_bufferSize));
&gt;+    d-&gt;m_total = 0;
&gt;+
&gt;+    // readCallback needs it
&gt;+    g_object_set_data(G_OBJECT(d-&gt;m_inputStream), &quot;webkit-resource&quot;, handle.get());
&gt;+
&gt;+    // We need to check if it&apos;s a file: URL and if it is a regular
&gt;+    // file as it could be a directory. In that case Soup properly
&gt;+    // returns a stream whose outcome is a HTML with a list of files
&gt;+    // in the directory
&gt;+    if (equalIgnoringCase(handle-&gt;request().url().protocol(), &quot;file&quot;)
&gt;+        &amp;&amp; G_IS_FILE_INPUT_STREAM(in)) {
&gt;+
&gt;+            GFile* file = soup_request_file_get_file(SOUP_REQUEST_FILE(d-&gt;m_req));

GRefPtr.

&gt;+
&gt;+            ResourceResponse response;
&gt;+
&gt;+            response.setURL(handle-&gt;request().url());
&gt;+            response.setMimeType(soup_request_get_content_type(d-&gt;m_req));
&gt;+            response.setExpectedContentLength(soup_request_get_content_length(d-&gt;m_req));
&gt;+            client-&gt;didReceiveResponse(handle.get(), response);
&gt;+
&gt;+            if (d-&gt;m_cancelled) {
&gt;+                cleanupSoupRequestOperation(handle.get());
&gt;+                return;
&gt;+            }
&gt;+
&gt;+            g_object_unref(file);
&gt;+    }
&gt;+
&gt;+    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, d-&gt;m_bufferSize,
&gt;+                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt;+                              readCallback, 0);
&gt;+}
&gt;+

&gt; 
&gt;+

Not extra line.

&gt; bool ResourceHandle::start(Frame* frame)
&gt; {
&gt;     ASSERT(!d-&gt;m_msg);
&gt;@@ -591,21 +720,21 @@ bool ResourceHandle::start(Frame* frame)
&gt;         return false;
&gt; 
&gt;     KURL url = request().url();
&gt;-    String urlString = url.string();
&gt;-    String protocol = url.protocol();
&gt; 
&gt;     // Used to set the authentication dialog toplevel; may be NULL
&gt;     d-&gt;m_frame = frame;
&gt; 
&gt;-    if (equalIgnoringCase(protocol, &quot;data&quot;))
&gt;-        return startData(this, urlString);
&gt;+    if (url.protocolIs(&quot;data&quot;))
&gt;+        return startData(this, url);
&gt; 
&gt;-    if (equalIgnoringCase(protocol, &quot;http&quot;) || equalIgnoringCase(protocol, &quot;https&quot;)) {
&gt;+    if (url.protocolInHTTPFamily()) {
&gt;         if (startHttp(this))
&gt;             return true;
&gt;     }
&gt; 
&gt;-    if (equalIgnoringCase(protocol, &quot;file&quot;) || equalIgnoringCase(protocol, &quot;ftp&quot;) || equalIgnoringCase(protocol, &quot;ftps&quot;)) {
&gt;+    if (url.protocolIs(&quot;file&quot;)
&gt;+        || url.protocolIs(&quot;ftp&quot;)
&gt;+        || url.protocolIs(&quot;ftps&quot;)) {
&gt;         // FIXME: should we be doing any other protocols here?
&gt;         if (startGio(this, url))
&gt;             return true;

This is all nice but I don&apos;t believe it&apos;s strictly needed in the patch, you could push it separately and earlier.

&gt;@@ -665,38 +794,6 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest&amp; request, S
&gt;     syncLoader.run();
&gt; }
&gt; 

&gt; static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt; {
&gt;     RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(g_object_get_data(source, &quot;webkit-resource&quot;));
&gt;@@ -707,7 +804,6 @@ static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt;     ResourceHandleClient* client = handle-&gt;client();
&gt; 
&gt;     g_input_stream_close_finish(d-&gt;m_inputStream, res, 0);
&gt;-    cleanupGioOperation(handle.get());
&gt; 
&gt;     // The load may have been cancelled, the client may have been
&gt;     // destroyed already. In such cases calling didFinishLoading is a
&gt;@@ -716,9 +812,11 @@ static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt;         return;
&gt; 
&gt;     client-&gt;didFinishLoading(handle.get());
&gt;+
&gt;+    cleanupSoupRequestOperation(handle.get());

Any reason to move this?

&gt; }
&gt; 

&gt;@@ -755,141 +854,36 @@ static void readCallback(GObject* source, GAsyncResult* res, gpointer)
&gt;     }
&gt; 
&gt;     d-&gt;m_total += bytesRead;
&gt;-    client-&gt;didReceiveData(handle.get(), d-&gt;m_buffer, bytesRead, d-&gt;m_total);
&gt;+    if (G_LIKELY(!data))
&gt;+        client-&gt;didReceiveData(handle.get(), d-&gt;m_buffer, bytesRead, d-&gt;m_total);

So the likely case is that there&apos;s no data read? Uh?

&gt;+    else {
&gt;+        // We have to convert it to UTF-16 due to limitations in KURL
&gt;+        GOwnPtr&lt;gunichar2&gt; unicodeStr(g_utf8_to_utf16(d-&gt;m_buffer, bytesRead, 0, 0, 0));
&gt;+        client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(unicodeStr.get()), g_utf8_strlen(d-&gt;m_buffer, bytesRead) * sizeof(UChar), 0);

Mmm, we don&apos;t seem to do this in the other didReceiveData calls, we pass UTF8 data and lenght in bytes, not characters. If the tests pass I suppose this is ok, but it seems puzzling.
&gt;+    }
&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245336</commentid>
    <comment_count>10</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-07-01 07:28:38 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 59635 [details])
&gt; &gt;-        GFile* m_gfile;
&gt; &gt;+        SoupRequest* m_req;
&gt; 
&gt; Maybe we can start using GRefPtr for this?

Seems a good place indeed
 
&gt; &gt;-    String url = handle-&gt;request().url().string();
&gt; &gt;-    ASSERT(url.startsWith(&quot;data:&quot;, false));
&gt; &gt;+    String urlStr = handle-&gt;request().url().string();
&gt; &gt;+    ASSERT(urlStr.startsWith(&quot;data:&quot;, false));
&gt; &gt; 
&gt; &gt;-    int index = url.find(&apos;,&apos;);
&gt; &gt;+    int index = urlStr.find(&apos;,&apos;);
&gt; &gt;     if (index == -1) {
&gt; &gt;         client-&gt;cannotShowURL(handle);
&gt; &gt;         return false;
&gt; &gt;     }
&gt; &gt; 
&gt; &gt;-    String mediaType = url.substring(5, index - 5);
&gt; &gt;-    String data = url.substring(index + 1);
&gt; &gt;+    String mediaType = urlStr.substring(5, index - 5);
&gt; 
&gt; This seems to be a bit random? Should go in a different patch at the very least.

Absolutely, I guess I changed it sometime in the past when there was another url variable around.
 
&gt; &gt;+    SoupSession* session = handle-&gt;defaultSession();
&gt; &gt;+    GError* error = 0;
&gt; 
&gt; Should use GOwnPtr for GError here.

Ok

&gt; &gt;+    d-&gt;m_req = soup_session_request(session, handle-&gt;request().url().string().utf8().data(), &amp;error);
&gt; &gt;+    if (error) {
&gt; &gt;+        g_error_free(error);
&gt; &gt;+        return false;
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    GInputStream* in = soup_request_send(d-&gt;m_req, 0, &amp;error);
&gt; &gt;+    if (error) {
&gt; &gt;+        g_error_free(error);
&gt; &gt;+        return false;
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    d-&gt;m_inputStream = in;
&gt; &gt;+    d-&gt;m_bufferSize = 8192;
&gt; &gt;+    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(d-&gt;m_bufferSize));
&gt; &gt;+    d-&gt;m_total = 0;
&gt; &gt;+
&gt; &gt;+    g_object_set_data(G_OBJECT(d-&gt;m_inputStream), &quot;webkit-resource&quot;, handle);
&gt; &gt;+    handle-&gt;ref();
&gt; &gt;+
&gt; &gt;+    d-&gt;m_cancellable = g_cancellable_new();
&gt; &gt;+    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, d-&gt;m_bufferSize,
&gt; &gt;+                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt; &gt;+                              readCallback, (isBase64) ? 0 : GINT_TO_POINTER(1));
&gt; 
&gt; I suppose it&apos;s good to unify stuff and always go through libsoup for everything, but isn&apos;t parsing a simple string asynchronously a bit overkill? /me wonders

I agree that the real benefit for the data: case is only to use a single path for every protocol, as what we do basically is to parse the string as you say. Don&apos;t feel like strongly defending any alternative though.

&gt; &gt; 
&gt; &gt;     return false;
&gt; &gt; }
&gt; &gt;@@ -428,7 +404,7 @@ static bool startData(ResourceHandle* handle, String urlString)
&gt; &gt; 
&gt; &gt;     // If parseDataUrl is called synchronously the job is not yet effectively started
&gt; &gt;     // and webkit won&apos;t never know that the data has been parsed even didFinishLoading is called.
&gt; &gt;-    d-&gt;m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
&gt; &gt;+    d-&gt;m_idleHandler = g_idle_add(parseDataUrl, handle);
&gt; 
&gt; This is not the same thing. Do you need to change it or you just felt it was better? Needs an explanation.

I agree, I have to find one first :-). Thing is that somehow tests show some flackiness with the timeout_add while they worked fine everytime for me with the idle stuff.

&gt; &gt;     return true;
&gt; &gt; }
&gt; &gt; 
&gt; &gt;@@ -469,6 +445,151 @@ static void ensureSessionIsInitialized(SoupSession* session)
&gt; &gt;     g_object_set_data(G_OBJECT(session), &quot;webkit-init&quot;, reinterpret_cast&lt;void*&gt;(0xdeadbeef));
&gt; &gt; }
&gt; &gt; 
&gt; 
&gt; &gt;+static void sendRequestCallback(GObject* source, GAsyncResult* res, gpointer userData)
&gt; &gt;+{
&gt; &gt;+    RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(g_object_get_data(source, &quot;webkit-resource&quot;));
&gt; &gt;+    if (!handle)
&gt; &gt;+        return;
&gt; &gt;+
&gt; &gt;+    ResourceHandleInternal* d = handle-&gt;getInternal();
&gt; &gt;+    ResourceHandleClient* client = handle-&gt;client();
&gt; &gt;+
&gt; &gt;+    if (userData) {
&gt; &gt;+        // No need to call gotChunkHandler anymore. Received data will
&gt; &gt;+        // be reported by readCallback
&gt; &gt;+        gulong gotChunkHandler = GPOINTER_TO_UINT(userData);
&gt; &gt;+        if (g_signal_handler_is_connected(d-&gt;m_msg, gotChunkHandler))
&gt; &gt;+            g_signal_handler_disconnect(d-&gt;m_msg, gotChunkHandler);
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    if (d-&gt;m_cancelled || !client) {
&gt; &gt;+        cleanupSoupRequestOperation(handle.get());
&gt; &gt;+        return;
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    GError* error = 0;
&gt; 
&gt; GOwnPtr. This is repeated elsewhere, the same applies.

Yep

&gt; &gt;+    GInputStream* in = soup_request_send_finish(d-&gt;m_req, res, &amp;error);
&gt; &gt;+
&gt; &gt;+    if (error) {
&gt; &gt;+
&gt; 
&gt; Extra blank line!
&gt; 
&gt; &gt;+        if (d-&gt;m_msg &amp;&amp; SOUP_STATUS_IS_TRANSPORT_ERROR(d-&gt;m_msg-&gt;status_code)) {
&gt; &gt;+            SoupURI* uri = soup_request_get_uri(d-&gt;m_req);
&gt; &gt;+            char* uristr = soup_uri_to_string(uri, false);
&gt; 
&gt; uriStr? With GOwnPtr. This applies in a bunch of places too.

Fair enough

&gt; &gt;+            ResourceError resourceError(g_quark_to_string(SOUP_HTTP_ERROR),
&gt; &gt;+                                        d-&gt;m_msg-&gt;status_code,
&gt; &gt;+                                        uristr,
&gt; &gt;+                                        String::fromUTF8(d-&gt;m_msg-&gt;reason_phrase));
&gt; &gt;+            g_free(uristr);
&gt; &gt;+            g_error_free(error);
&gt; &gt;+            cleanupSoupRequestOperation(handle.get());
&gt; &gt;+            client-&gt;didFail(handle.get(), resourceError);
&gt; &gt;+            return;
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        if (error-&gt;domain == G_IO_ERROR) {
&gt; &gt;+            SoupURI* uri = soup_request_get_uri(d-&gt;m_req);
&gt; &gt;+            char* uristr = soup_uri_to_string(uri, false);
&gt; &gt;+            ResourceError resourceError(g_quark_to_string(G_IO_ERROR),
&gt; &gt;+                                        error-&gt;code,
&gt; &gt;+                                        uristr,
&gt; &gt;+                                        error ? String::fromUTF8(error-&gt;message) : String());
&gt; &gt;+            g_free(uristr);
&gt; &gt;+            g_error_free(error);
&gt; &gt;+            cleanupSoupRequestOperation(handle.get());
&gt; &gt;+            client-&gt;didFail(handle.get(), resourceError);
&gt; &gt;+            return;
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        g_error_free(error);
&gt; &gt;+
&gt; &gt;+        if (d-&gt;m_msg &amp;&amp; d-&gt;m_msg-&gt;status_code == SOUP_STATUS_UNAUTHORIZED) {
&gt; &gt;+            fillResponseFromMessage(d-&gt;m_msg, &amp;d-&gt;m_response);
&gt; &gt;+            client-&gt;didReceiveResponse(handle.get(), d-&gt;m_response);
&gt; &gt;+
&gt; &gt;+            // WebCore might have cancelled the job in the while
&gt; &gt;+            if (d-&gt;m_cancelled)
&gt; &gt;+                return;
&gt; &gt;+
&gt; &gt;+            if (d-&gt;m_msg-&gt;response_body-&gt;data)
&gt; &gt;+                client-&gt;didReceiveData(handle.get(), d-&gt;m_msg-&gt;response_body-&gt;data, d-&gt;m_msg-&gt;response_body-&gt;length, true);
&gt; &gt;+        }
&gt; &gt;+
&gt; &gt;+        client-&gt;didFinishLoading(handle.get());
&gt; &gt;+        return;
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    if (d-&gt;m_cancelled) {
&gt; &gt;+        cleanupSoupRequestOperation(handle.get());
&gt; &gt;+        return;
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    d-&gt;m_inputStream = in;
&gt; &gt;+    d-&gt;m_bufferSize = 8192;
&gt; 
&gt; This number appears around more than once, should be a #define

Ok
 
&gt; &gt;+    d-&gt;m_buffer = static_cast&lt;char*&gt;(g_malloc(d-&gt;m_bufferSize));
&gt; &gt;+    d-&gt;m_total = 0;
&gt; &gt;+
&gt; &gt;+    // readCallback needs it
&gt; &gt;+    g_object_set_data(G_OBJECT(d-&gt;m_inputStream), &quot;webkit-resource&quot;, handle.get());
&gt; &gt;+
&gt; &gt;+    // We need to check if it&apos;s a file: URL and if it is a regular
&gt; &gt;+    // file as it could be a directory. In that case Soup properly
&gt; &gt;+    // returns a stream whose outcome is a HTML with a list of files
&gt; &gt;+    // in the directory
&gt; &gt;+    if (equalIgnoringCase(handle-&gt;request().url().protocol(), &quot;file&quot;)
&gt; &gt;+        &amp;&amp; G_IS_FILE_INPUT_STREAM(in)) {
&gt; &gt;+
&gt; &gt;+            GFile* file = soup_request_file_get_file(SOUP_REQUEST_FILE(d-&gt;m_req));
&gt; 
&gt; GRefPtr.

Sure
 
&gt; &gt;+
&gt; &gt;+            ResourceResponse response;
&gt; &gt;+
&gt; &gt;+            response.setURL(handle-&gt;request().url());
&gt; &gt;+            response.setMimeType(soup_request_get_content_type(d-&gt;m_req));
&gt; &gt;+            response.setExpectedContentLength(soup_request_get_content_length(d-&gt;m_req));
&gt; &gt;+            client-&gt;didReceiveResponse(handle.get(), response);
&gt; &gt;+
&gt; &gt;+            if (d-&gt;m_cancelled) {
&gt; &gt;+                cleanupSoupRequestOperation(handle.get());
&gt; &gt;+                return;
&gt; &gt;+            }
&gt; &gt;+
&gt; &gt;+            g_object_unref(file);
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    g_input_stream_read_async(d-&gt;m_inputStream, d-&gt;m_buffer, d-&gt;m_bufferSize,
&gt; &gt;+                              G_PRIORITY_DEFAULT, d-&gt;m_cancellable,
&gt; &gt;+                              readCallback, 0);
&gt; &gt;+}
&gt; &gt;+
&gt; 
&gt; &gt; 
&gt; &gt;+
&gt; 
&gt; Not extra line.
&gt; 
&gt; &gt; bool ResourceHandle::start(Frame* frame)
&gt; &gt; {
&gt; &gt;     ASSERT(!d-&gt;m_msg);
&gt; &gt;@@ -591,21 +720,21 @@ bool ResourceHandle::start(Frame* frame)
&gt; &gt;         return false;
&gt; &gt; 
&gt; &gt;     KURL url = request().url();
&gt; &gt;-    String urlString = url.string();
&gt; &gt;-    String protocol = url.protocol();
&gt; &gt; 
&gt; &gt;     // Used to set the authentication dialog toplevel; may be NULL
&gt; &gt;     d-&gt;m_frame = frame;
&gt; &gt; 
&gt; &gt;-    if (equalIgnoringCase(protocol, &quot;data&quot;))
&gt; &gt;-        return startData(this, urlString);
&gt; &gt;+    if (url.protocolIs(&quot;data&quot;))
&gt; &gt;+        return startData(this, url);
&gt; &gt; 
&gt; &gt;-    if (equalIgnoringCase(protocol, &quot;http&quot;) || equalIgnoringCase(protocol, &quot;https&quot;)) {
&gt; &gt;+    if (url.protocolInHTTPFamily()) {
&gt; &gt;         if (startHttp(this))
&gt; &gt;             return true;
&gt; &gt;     }
&gt; &gt; 
&gt; &gt;-    if (equalIgnoringCase(protocol, &quot;file&quot;) || equalIgnoringCase(protocol, &quot;ftp&quot;) || equalIgnoringCase(protocol, &quot;ftps&quot;)) {
&gt; &gt;+    if (url.protocolIs(&quot;file&quot;)
&gt; &gt;+        || url.protocolIs(&quot;ftp&quot;)
&gt; &gt;+        || url.protocolIs(&quot;ftps&quot;)) {
&gt; &gt;         // FIXME: should we be doing any other protocols here?
&gt; &gt;         if (startGio(this, url))
&gt; &gt;             return true;
&gt; 
&gt; This is all nice but I don&apos;t believe it&apos;s strictly needed in the patch, you could push it separately and earlier.
&gt; 

That&apos;s true

&gt; &gt;@@ -665,38 +794,6 @@ void ResourceHandle::loadResourceSynchronously(const ResourceRequest&amp; request, S
&gt; &gt;     syncLoader.run();
&gt; &gt; }
&gt; &gt; 
&gt; 
&gt; &gt; static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt; &gt; {
&gt; &gt;     RefPtr&lt;ResourceHandle&gt; handle = static_cast&lt;ResourceHandle*&gt;(g_object_get_data(source, &quot;webkit-resource&quot;));
&gt; &gt;@@ -707,7 +804,6 @@ static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt; &gt;     ResourceHandleClient* client = handle-&gt;client();
&gt; &gt; 
&gt; &gt;     g_input_stream_close_finish(d-&gt;m_inputStream, res, 0);
&gt; &gt;-    cleanupGioOperation(handle.get());
&gt; &gt; 
&gt; &gt;     // The load may have been cancelled, the client may have been
&gt; &gt;     // destroyed already. In such cases calling didFinishLoading is a
&gt; &gt;@@ -716,9 +812,11 @@ static void closeCallback(GObject* source, GAsyncResult* res, gpointer)
&gt; &gt;         return;
&gt; &gt; 
&gt; &gt;     client-&gt;didFinishLoading(handle.get());
&gt; &gt;+
&gt; &gt;+    cleanupSoupRequestOperation(handle.get());
&gt; 
&gt; Any reason to move this?

I just moved it because I thought it was releasing something too early, but it did not. Agree that it can be moved back to the middle of the function.

&gt; 
&gt; &gt; }
&gt; &gt; 
&gt; 
&gt; &gt;@@ -755,141 +854,36 @@ static void readCallback(GObject* source, GAsyncResult* res, gpointer)
&gt; &gt;     }
&gt; &gt; 
&gt; &gt;     d-&gt;m_total += bytesRead;
&gt; &gt;-    client-&gt;didReceiveData(handle.get(), d-&gt;m_buffer, bytesRead, d-&gt;m_total);
&gt; &gt;+    if (G_LIKELY(!data))
&gt; &gt;+        client-&gt;didReceiveData(handle.get(), d-&gt;m_buffer, bytesRead, d-&gt;m_total);
&gt; 
&gt; So the likely case is that there&apos;s no data read? Uh?

Maybe the name mislead you. That data is just a gpointer that I used as a flag in order to know whether we should convert the read bytes to UTF-16 or not. The most common case is that we don&apos;t have to, as it should be done only for non-bas64 data streams, which I guess are not so frequent as http: or another protocols.

&gt; 
&gt; &gt;+    else {
&gt; &gt;+        // We have to convert it to UTF-16 due to limitations in KURL
&gt; &gt;+        GOwnPtr&lt;gunichar2&gt; unicodeStr(g_utf8_to_utf16(d-&gt;m_buffer, bytesRead, 0, 0, 0));
&gt; &gt;+        client-&gt;didReceiveData(handle.get(), reinterpret_cast&lt;const char*&gt;(unicodeStr.get()), g_utf8_strlen(d-&gt;m_buffer, bytesRead) * sizeof(UChar), 0);
&gt; 
&gt; Mmm, we don&apos;t seem to do this in the other didReceiveData calls, we pass UTF8 data and lenght in bytes, not characters. If the tests pass I suppose this is ok, but it seems puzzling.
&gt; &gt;+    }
&gt; &gt;

We&apos;re passing here also the length in bytes (that&apos;s why we have the sizeof(UChar). Anyway it&apos;s true that this is the only place where we do this. If you take a look at the original parseDataUrl method this is only done also for non-base64 data streams. And indeed, tests like it :)

Thx for reviewing!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247115</commentid>
    <comment_count>11</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-07-06 10:22:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt;@@ -428,7 +404,7 @@ static bool startData(ResourceHandle* handle, String urlString)
&gt; &gt; 
&gt; &gt;     // If parseDataUrl is called synchronously the job is not yet effectively started
&gt; &gt;     // and webkit won&apos;t never know that the data has been parsed even didFinishLoading is called.
&gt; &gt;-    d-&gt;m_idleHandler = g_timeout_add(0, parseDataUrl, handle);
&gt; &gt;+    d-&gt;m_idleHandler = g_idle_add(parseDataUrl, handle);
&gt; 
&gt; This is not the same thing. Do you need to change it or you just felt it was better? Needs an explanation.

There is only 1 test that fails if I keep the timeout_add thing which is 
http/tests/security/dataURL/xss-DENIED-from-data-url-in-foreign-domain-subframe.html

This test (from the resources POV) does the following:
  * loads an HTML which then...
  * loads another HTML which...
  * loads a data URL with some code that finally calls notifyDone

The sequence of calls with the &quot;old&quot; g_timeout_add is

startHttp -&gt; closeCallback -&gt; startHttp -&gt; startData -&gt; parseDataURL -&gt; closeCallback -&gt; closeCallback -&gt; startHttp -&gt; closeCallback

The problem is that parseDataURL is called *before* the last startHttp is issued and thus the test keeps waiting forever for the notifyDone call which is called when parseDataURL finishes.

With the g_idle_add it looks like

startHttp -&gt; closeCallback -&gt; startHttp -&gt; startData -&gt; closeCallback -&gt; startHttp -&gt;  parseDataURL -&gt; closeCallback -&gt; closeCallback

In this case the parseDataURL is called after the last call to startHttp. This is pretty much what happens with master&apos;s ResourceHandleSoup. The reason why it currently works in master with a timeout is not clear to me yet but I suspect that with the new libsoup it fails because the amount of asynchronous calls increases. Don&apos;t know core guts enough to know why some callbacks are called before than others.

Thing is that the test works fine, I mean, the output of the test is OK, WebKit behaves as it should not allowing access to the root element from a dataURL loaded from another domain, it&apos;s just that the test framework don&apos;t get the events when it expects them to arrive, that&apos;s why it reaches the timeout. So maybe skipping the test is a possibility.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255304</commentid>
    <comment_count>12</comment_count>
      <attachid>62413</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2010-07-23 04:45:17 -0700</bug_when>
    <thetext>Created attachment 62413
WebKitGtk+ using libsoup SoupURILoader new API

New version of the patch based on Xan&apos;s and Gustavo&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>271430</commentid>
    <comment_count>13</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-08-30 07:44:28 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; There is only 1 test that fails if I keep the timeout_add thing which is 
&gt; http/tests/security/dataURL/xss-DENIED-from-data-url-in-foreign-domain-subframe.html
[...]
&gt; Thing is that the test works fine, I mean, the output of the test is OK, WebKit behaves as it should not allowing access to the root element from a dataURL loaded from another domain, it&apos;s just that the test framework don&apos;t get the events when it expects them to arrive, that&apos;s why it reaches the timeout. So maybe skipping the test is a possibility.

I think this test is being fragile by depending on timing or on a specific order of events. I would recommend skipping it, and reenabling it after we figure a way of making it less dependant on the order of the events - though it might be that the order of events is actually specified in the standard. Either way, I am indeed against replacing a timeout with an idle, idles may never run like Martin described.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>351919</commentid>
    <comment_count>14</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-02-16 00:23:06 -0800</bug_when>
    <thetext>I guess we should close this right ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352096</commentid>
    <comment_count>15</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 08:39:05 -0800</bug_when>
    <thetext>What was the resolution of this issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352100</commentid>
    <comment_count>16</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2011-02-16 08:45:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; What was the resolution of this issue?

It was actually the first step to land the SoupCache but at the end we did it we did all at the same time. I guess this should be an already fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352102</commentid>
    <comment_count>17</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-02-16 08:46:20 -0800</bug_when>
    <thetext>Great. Yeah. We can just close this now then.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58006</attachid>
            <date>2010-06-07 03:32:39 -0700</date>
            <delta_ts>2010-06-11 08:24:03 -0700</delta_ts>
            <desc>Http working with the new SoupURILoader API</desc>
            <filename>webkit-soupuriloader.patch</filename>
            <type>text/plain</type>
            <size>15653</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IGYyMGYwNTUuLjU4MTZjNjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtMTE2LDYgKzExNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAgICAgICAgICwgbV9jYW5j
ZWxsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAgICAgICAgICAgICwgbV9y
ZXEoMCkKICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAgICAgICAgICAgLCBtX2Nh
bmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCkBAIC0xOTgsNiArMTk5LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9u
c2U7CiAgICAgICAgIGJvb2wgbV9jYW5jZWxsZWQ7CiAgICAgICAgIEdGaWxlKiBtX2dmaWxlOwor
ICAgICAgICBTb3VwUmVxdWVzdCogbV9yZXE7CiAgICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1
dFN0cmVhbTsKICAgICAgICAgR0NhbmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBj
aGFyKiBtX2J1ZmZlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDBhOTYwNTguLjExODFiMmEgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApA
QCAtMTIwLDggKzEyMCwxMSBAQCB2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkK
ICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQogCitzdGF0aWMgdm9pZCBj
bGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBp
c0Rlc3Ryb3lpbmcpOworc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhHT2JqZWN0KiBz
b3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCByZWFkQ2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworCiBz
dGF0aWMgdm9pZCBjbGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJv
b2wgaXNEZXN0cm95aW5nKTsKLXN0YXRpYyBib29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSog
aGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKTsKIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKTsKIAogUmVzb3VyY2VIYW5kbGVJbnRlcm5hbDo6flJl
c291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtMTMxLDYgKzEzNCwxMiBAQCBSZXNvdXJjZUhhbmRs
ZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiAgICAgICAgIG1fbXNnID0gMDsK
ICAgICB9CiAKKyAgICBpZiAobV9yZXEpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1QobV9yZXEpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKG1fcmVxKTsKKyAgICAgICAgbV9yZXEgPSAwOworICAgIH0KKwogICAgIGlmIChtX2lkbGVI
YW5kbGVyKSB7CiAgICAgICAgIGdfc291cmNlX3JlbW92ZShtX2lkbGVIYW5kbGVyKTsKICAgICAg
ICAgbV9pZGxlSGFuZGxlciA9IDA7CkBAIC0yOTMsNTAgKzMwMiw3IEBAIHN0YXRpYyB2b2lkIGdv
dENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2lu
dGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEo
aGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0v
LyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2Fy
eSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9y
IHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNl
c3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRs
ZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBl
dmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50PwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1
cm47CiAKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5h
bCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50
KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5T
UE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3Vw
X3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAg
ICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7
Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVT
X1VOQVVUSE9SSVpFRCkgewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZk
LT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxl
LmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUg
Y2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5
LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCks
IG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRy
dWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkp
OwogfQogCiAvLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAgYmFj
a2VuZC4KQEAgLTQyOCw3ICszOTQsNyBAQCBzdGF0aWMgYm9vbCBzdGFydERhdGEoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSwgU3RyaW5nIHVybFN0cmluZykKIAogICAgIC8vIElmIHBhcnNlRGF0YVVy
bCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB0aGUgam9iIGlzIG5vdCB5ZXQgZWZmZWN0aXZlbHkg
c3RhcnRlZAogICAgIC8vIGFuZCB3ZWJraXQgd29uJ3QgbmV2ZXIga25vdyB0aGF0IHRoZSBkYXRh
IGhhcyBiZWVuIHBhcnNlZCBldmVuIGRpZEZpbmlzaExvYWRpbmcgaXMgY2FsbGVkLgotICAgIGQt
Pm1faWRsZUhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHBhcnNlRGF0YVVybCwgaGFuZGxlKTsK
KyAgICBkLT5tX2lkbGVIYW5kbGVyID0gZ19pZGxlX2FkZChwYXJzZURhdGFVcmwsIGhhbmRsZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ2OSw2ICs0MzUsMTI1IEBAIHN0YXRpYyB2b2lk
IGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdf
b2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBT
b3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJv
eWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUt
PmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9yZXEpIHsKKyAgICAgICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fcmVxKTsKKyAgICAgICAgZC0+bV9yZXEgPSAwOworICAg
IH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVm
KGQtPm1fY2FuY2VsbGFibGUpOworICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gMDsKKyAgICB9
CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgeworICAgICAgICBnX29iamVjdF9zZXRfZGF0
YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAg
ICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3RyZWFtKTsKKyAgICAgICAgZC0+bV9pbnB1
dFN0cmVhbSA9IDA7CisgICAgfQorCisgICAgaWYgKGQtPm1fYnVmZmVyKSB7CisgICAgICAgIGdf
ZnJlZShkLT5tX2J1ZmZlcik7CisgICAgICAgIGQtPm1fYnVmZmVyID0gMDsKKyAgICB9CisKKyAg
ICBpZiAoIWlzRGVzdHJveWluZykKKyAgICAgICAgaGFuZGxlLT5kZXJlZigpOworfQorCitzdGF0
aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0
KiByZXMsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4g
aGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShz
b3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50
KCk7CisKKyAgICBpZiAodXNlckRhdGEpIHsKKyAgICAgICAgLy8gTm8gbmVlZCB0byBjYWxsIGdv
dENodW5rSGFuZGxlciBhbnltb3JlLiBSZWNlaXZlZCBkYXRhIHdpbGwKKyAgICAgICAgLy8gYmUg
cmVwb3J0ZWQgYnkgcmVhZENhbGxiYWNrCisgICAgICAgIGd1bG9uZyBnb3RDaHVua0hhbmRsZXIg
PSBHUE9JTlRFUl9UT19VSU5UICh1c2VyRGF0YSk7CisgICAgICAgIGlmIChnX3NpZ25hbF9oYW5k
bGVyX2lzX2Nvbm5lY3RlZCAoZC0+bV9tc2csIGdvdENodW5rSGFuZGxlcikpCisgICAgICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGQtPm1fbXNnLCBnb3RDaHVua0hhbmRsZXIp
OworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7CisgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgR0Vycm9yICplcnJvciA9IDA7CisgICAgR0lucHV0U3RyZWFtKiBp
biA9IHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3JlcSwgcmVzLCAmZXJyb3IpOworCisg
ICAgaWYgKGVycm9yKSB7CisKKyAgICAgICAgaWYgKGQtPm1fbXNnICYmIFNPVVBfU1RBVFVTX0lT
X1RSQU5TUE9SVF9FUlJPUihkLT5tX21zZy0+c3RhdHVzX2NvZGUpKSB7CisgICAgICAgICAgICBT
b3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3JlcSk7CisgICAgICAgICAg
ICBjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7CisgICAgICAg
ICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9I
VFRQX0VSUk9SKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5t
X21zZy0+c3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdXJpc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmlu
Zzo6ZnJvbVVURjgoZC0+bV9tc2ctPnJlYXNvbl9waHJhc2UpKTsKKyAgICAgICAgICAgIGdfZnJl
ZSh1cmlzdHIpOworICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAg
Y2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3ItPmRvbWFpbiA9PSBHX0lP
X0VSUk9SKSB7CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3Vy
aShkLT5tX3JlcSk7CisgICAgICAgICAgICBjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJp
bmcodXJpLCBmYWxzZSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3Io
Z19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXJpc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7
CisgICAgICAgICAgICBnX2ZyZWUodXJpc3RyKTsKKyAgICAgICAgICAgIGdfZXJyb3JfZnJlZShl
cnJvcik7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNl
RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1
c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJl
c3BvbnNlRnJvbU1lc3NhZ2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7
CisKKyAgICAgICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBp
biB0aGUgd2hpbGUKKyAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+
ZGF0YSkKKyAgICAgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQo
KSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5
LT5sZW5ndGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hM
b2FkaW5nKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkLT5tX2lucHV0U3Ry
ZWFtID0gaW47CisgICAgZC0+bV9idWZmZXJTaXplID0gODE5MjsKKyAgICBkLT5tX2J1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBkLT5t
X3RvdGFsID0gMDsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRT
dHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKyAgICBnX2lucHV0X3N0
cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1ZmZl
clNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQs
IGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2Fs
bGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhh
bmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4Myw3ICs1NjgsMTcgQEAgc3RhdGlj
IGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgdXJsLnJlbW92ZUZy
YWdtZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiAKLSAgICBkLT5t
X21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2FnZSgpOworICAgIEdFcnJvciogZXJyb3IgPSAwOwor
ICAgIGQtPm1fcmVxID0gc291cF9zZXNzaW9uX3JlcXVlc3Qoc2Vzc2lvbiwgdXJsLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCksICZlcnJvcik7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdfZXJy
b3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKworICAgIGQtPm1fbXNnID0gc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9S
RVFVRVNUX0hUVFAoZC0+bV9yZXEpKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKGQt
Pm1fbXNnKTsKKwogICAgIGlmICghZC0+bV9tc2cpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNDkzLDcgKzU4OCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSog
aGFuZGxlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBHX0NB
TExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9jb25uZWN0
KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFjayks
IGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25pZmZl
ZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAgZ19z
aWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1bmtD
YWxsYmFjayksIGhhbmRsZSk7CisgICAgZ3Vsb25nIGdvdENodW5rSGFuZGxlciA9IGdfc2lnbmFs
X2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJh
Y2spLCBoYW5kbGUpOwogCiAjaWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKICAgICBTdHJpbmcg
Zmlyc3RQYXJ0eVN0cmluZyA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmco
KTsKQEAgLTUwMiw3ICs1OTcsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSkKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5tX21z
ZywgZmlyc3RQYXJ0eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1QoZC0+bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihoYW5kbGUpKTsKKyAgICAvLyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChk
LT5tX21zZyksICJyZXNvdXJjZUhhbmRsZSIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGhhbmRs
ZSkpOwogCiAgICAgRm9ybURhdGEqIGh0dHBCb2R5ID0gZC0+bV9yZXF1ZXN0Lmh0dHBCb2R5KCk7
CiAgICAgaWYgKGh0dHBCb2R5ICYmICFodHRwQm9keS0+aXNFbXB0eSgpKSB7CkBAIC01NjksMTUg
KzY2NCwxNCBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkK
ICAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldF9vbmUoZC0+bV9tc2ctPnJlcXVlc3Rf
aGVhZGVycywgIkFjY2VwdCIpKQogICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQo
ZC0+bV9tc2ctPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIsICIqLyoiKTsKIAotICAgIC8vIEJh
bGFuY2VkIGluIFJlc291cmNlSGFuZGxlSW50ZXJuYWwncyBkZXN0cnVjdG9yOyB3ZSBuZWVkIHRv
Ci0gICAgLy8ga2VlcCBvdXIgb3duIHJlZiwgYmVjYXVzZSBhZnRlciBxdWV1ZWluZyB0aGUgbWVz
c2FnZSwgdGhlCi0gICAgLy8gc2Vzc2lvbiBvd25zIHRoZSBpbml0aWFsIHJlZmVyZW5jZS4KLSAg
ICBnX29iamVjdF9yZWYoZC0+bV9tc2cpOwotICAgIHNvdXBfc2Vzc2lvbl9xdWV1ZV9tZXNzYWdl
KHNlc3Npb24sIGQtPm1fbXNnLCBmaW5pc2hlZENhbGxiYWNrLCBoYW5kbGUpOworICAgIGQtPm1f
Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIHNvdXBfcmVxdWVzdF9zZW5k
X2FzeW5jKGQtPm1fcmVxLCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIEdVSU5UX1RPX1BPSU5URVIoZ290Q2h1bmtIYW5k
bGVyKSk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorCiBib29sIFJlc291cmNlSGFuZGxlOjpz
dGFydChGcmFtZSogZnJhbWUpCiB7CiAgICAgQVNTRVJUKCFkLT5tX21zZyk7CkBAIC01OTgsNyAr
NjkyLDcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgIGQt
Pm1fZnJhbWUgPSBmcmFtZTsKIAogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShwcm90b2NvbCwg
ImRhdGEiKSkKLSAgICAgICAgcmV0dXJuIHN0YXJ0RGF0YSh0aGlzLCB1cmxTdHJpbmcpOworICAg
ICAgICByZXR1cm4gc3RhcnREYXRhKHRoaXMsIHVybCk7CiAKICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UocHJvdG9jb2wsICJodHRwIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wsICJo
dHRwcyIpKSB7CiAgICAgICAgIGlmIChzdGFydEh0dHAodGhpcykpCkBAIC03MDcsNyArODAxLDYg
QEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3Vs
dCogcmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lu
cHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50
IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBj
YWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzE2LDYgKzgwOSwxMSBAQCBzdGF0aWMg
dm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdw
b2ludGVyKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
aGFuZGxlLmdldCgpKTsKKworICAgIGlmIChkLT5tX2dmaWxlKQorICAgICAgICBjbGVhbnVwR2lv
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBjbGVhbnVwU291cFJl
cXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIH0KIAogc3RhdGljIHZvaWQgcmVhZENhbGxi
YWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQpAQCAtNzM2
LDE0ICs4MzQsMTggQEAgc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwg
R0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogCiAgICAgZ3NzaXplIGJ5dGVzUmVhZCA9IGdf
aW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRTdHJlYW0sIHJlcywgJmVycm9yKTsK
ICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgY2hhciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+
bV9nZmlsZSk7CisgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQt
Pm1fcmVxKTsKKyAgICAgICAgY2hhciogdXJpc3RyID0gc291cF91cmlfdG9fc3RyaW5nKHVyaSwg
ZmFsc2UpOwogICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19z
dHJpbmcoR19JT19FUlJPUiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaXN0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVz
c2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOworICAgICAgICBnX2ZyZWUo
dXJpc3RyKTsKICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdp
b09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICBpZiAoZC0+bV9nZmlsZSkKKyAgICAg
ICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAg
ICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU5LDcgKzg2MSwxMCBAQCBzdGF0aWMgdm9pZCByZWFk
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAK
ICAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2FkLCB3aGljaCBtYXkgcmVs
ZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7Ci0gICAg
ICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgaWYgKGQtPm1f
Z2ZpbGUpCisgICAgICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5k
bGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4IGExZDkxNmYuLmMxYzcxMTYg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5o
CkBAIC02Nyw2ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHVwZGF0
ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lk
IHVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3Q7CiAgICAg
ICAgIFNvdXBNZXNzYWdlKiB0b1NvdXBNZXNzYWdlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgdXBk
YXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAK
aW5kZXggNjJkZWIwMS4uYWZhYWU5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTEsMyArMSw0IEBACisKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR3VzdGF2byBOb3JvbmhhIFNpbHZhCiAgKgpAQCAtMzMs
NiArMzQsMjkgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Cit2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlKSBjb25zdAoreworICAgIGdfb2JqZWN0X3NldCAoc291cE1lc3NhZ2UsIFNPVVBf
TUVTU0FHRV9NRVRIT0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKworICAg
IGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCk7CisgICAg
U291cE1lc3NhZ2VIZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hl
YWRlcnM7CisgICAgaWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBIVFRQSGVhZGVy
TWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhU
VFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCisgICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhl
YWRlcnMsIGl0LT5maXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0Zjgo
KS5kYXRhKCkpOworICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5XzkwCisgICAgU3Ry
aW5nIGZpcnN0UGFydHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOwor
ICAgIGlmICghZmlyc3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgR093blB0cjxT
b3VwVVJJPiBmaXJzdFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5k
YXRhKCkpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShzb3VwTWVzc2Fn
ZSwgZmlyc3RQYXJ0eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBzb3VwX21lc3NhZ2Vf
c2V0X2ZsYWdzKHNvdXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9CisKIFNvdXBNZXNzYWdlKiBS
ZXNvdXJjZVJlcXVlc3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogewogICAgIFNvdXBNZXNzYWdl
KiBzb3VwTWVzc2FnZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRh
KCksIHVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58477</attachid>
            <date>2010-06-11 08:24:03 -0700</date>
            <delta_ts>2010-06-24 03:48:12 -0700</delta_ts>
            <desc>WebKitGtk+ working for http:/ftp:/file:/data: protocols</desc>
            <filename>webkit-libsoup-io.patch</filename>
            <type>text/plain</type>
            <size>25393</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IGYyMGYwNTUuLjNiNmI0MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtMTE1LDcgKzExNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkKICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAg
ICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAg
ICAgICAgICAgICwgbV9yZXEoMCkKICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAg
ICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCkBA
IC0xOTcsNyArMTk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTb3VwTWVzc2Fn
ZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAg
Ym9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7CisgICAgICAgIFNvdXBS
ZXF1ZXN0KiBtX3JlcTsKICAgICAgICAgR0lucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwogICAg
ICAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7CiAgICAgICAgIGNoYXIqIG1fYnVmZmVy
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKaW5kZXggMGE5NjA1OC4uMjUwODAwYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC0xMjAsOCArMTIw
LDEwIEBAIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVy
YXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGlj
IGJvb2wgc3RhcnREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcp
Oworc3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyKTsKKwogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSwgS1VSTCB1cmwpOwogCiBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJ
bnRlcm5hbCgpCkBAIC0xMzEsNiArMTMzLDEyIEBAIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6On5S
ZXNvdXJjZUhhbmRsZUludGVybmFsKCkKICAgICAgICAgbV9tc2cgPSAwOwogICAgIH0KIAorICAg
IGlmIChtX3JlcSkgeworICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChtX3JlcSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9yZXEpOwor
ICAgICAgICBtX3JlcSA9IDA7CisgICAgfQorCiAgICAgaWYgKG1faWRsZUhhbmRsZXIpIHsKICAg
ICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faWRsZUhhbmRsZXIpOwogICAgICAgICBtX2lkbGVIYW5k
bGVyID0gMDsKQEAgLTE0Myw3ICsxNTEsNyBAQCBSZXNvdXJjZUhhbmRsZTo6flJlc291cmNlSGFu
ZGxlKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1f
bXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgdGhpcyk7CiAKLSAgICBjbGVhbnVwR2lvT3BlcmF0
aW9uKHRoaXMsIHRydWUpOworICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbih0aGlzLCB0
cnVlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZvclVSTChjb25zdCBLVVJM
ICZ1cmwpCkBAIC0yOTMsNTAgKzMwMSw3IEBAIHN0YXRpYyB2b2lkIGdvdENodW5rQ2FsbGJhY2so
U291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2ludGVyIGRhdGEpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBj
aHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0vLyBDYWxsZWQgYXQgdGhl
IGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBhYm91dCB0aGUgbGFz
dCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9yIHJlZGlyZWN0cy4KLXN0
YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNz
YWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpKTsKLSAg
ICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBldmVuIGlmIHRoZXJlJ3Mg
bm8gY2xpZW50PwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47CiAKLSAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFj
bGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtc2ct
PnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmco
c291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAgICBSZXNvdXJjZUVycm9y
IGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOCht
c2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkg
ewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZkLT5tX3Jlc3BvbnNlKTsK
LSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jl
c3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBq
b2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQotICAgICAg
ICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIG1zZy0+cmVzcG9uc2Vf
Ym9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOwotICAgIH0KLQot
ICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkpOwogfQogCiAvLyBwYXJz
ZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAgYmFja2VuZC4KQEAgLTQyOCw3
ICszOTMsNyBAQCBzdGF0aWMgYm9vbCBzdGFydERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
U3RyaW5nIHVybFN0cmluZykKIAogICAgIC8vIElmIHBhcnNlRGF0YVVybCBpcyBjYWxsZWQgc3lu
Y2hyb25vdXNseSB0aGUgam9iIGlzIG5vdCB5ZXQgZWZmZWN0aXZlbHkgc3RhcnRlZAogICAgIC8v
IGFuZCB3ZWJraXQgd29uJ3QgbmV2ZXIga25vdyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHBhcnNl
ZCBldmVuIGRpZEZpbmlzaExvYWRpbmcgaXMgY2FsbGVkLgotICAgIGQtPm1faWRsZUhhbmRsZXIg
PSBnX3RpbWVvdXRfYWRkKDAsIHBhcnNlRGF0YVVybCwgaGFuZGxlKTsKKyAgICBkLT5tX2lkbGVI
YW5kbGVyID0gZ19pZGxlX2FkZChwYXJzZURhdGFVcmwsIGhhbmRsZSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKQEAgLTQ2OSw2ICs0MzQsMTUxIEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25J
c0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBzZXNzaW9uKQogICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0LWluaXQiLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJh
dGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyA9IGZhbHNlKQor
eworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7
CisKKyAgICBpZiAoZC0+bV9yZXEpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpF
Q1QoZC0+bV9yZXEpLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKGQtPm1fcmVxKTsKKyAgICAgICAgZC0+bV9yZXEgPSAwOworICAgIH0KKworICAgIGlmIChk
LT5tX2NhbmNlbGxhYmxlKSB7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFi
bGUpOworICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+
bV9pbnB1dFN0cmVhbSkgeworICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5t
X2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBnX29iamVjdF91
bnJlZihkLT5tX2lucHV0U3RyZWFtKTsKKyAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Cisg
ICAgfQorCisgICAgaWYgKGQtPm1fYnVmZmVyKSB7CisgICAgICAgIGdfZnJlZShkLT5tX2J1ZmZl
cik7CisgICAgICAgIGQtPm1fYnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoIWlzRGVzdHJv
eWluZykKKyAgICAgICAgaGFuZGxlLT5kZXJlZigpOworfQorCitzdGF0aWMgdm9pZCBzZW5kUmVx
dWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVy
IHVzZXJEYXRhKQoreworICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQt
cmVzb3VyY2UiKSk7CisgICAgaWYgKCFoYW5kbGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisgICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CisKKyAgICBpZiAo
dXNlckRhdGEpIHsKKyAgICAgICAgLy8gTm8gbmVlZCB0byBjYWxsIGdvdENodW5rSGFuZGxlciBh
bnltb3JlLiBSZWNlaXZlZCBkYXRhIHdpbGwKKyAgICAgICAgLy8gYmUgcmVwb3J0ZWQgYnkgcmVh
ZENhbGxiYWNrCisgICAgICAgIGd1bG9uZyBnb3RDaHVua0hhbmRsZXIgPSBHUE9JTlRFUl9UT19V
SU5UICh1c2VyRGF0YSk7CisgICAgICAgIGlmIChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3Rl
ZCAoZC0+bV9tc2csIGdvdENodW5rSGFuZGxlcikpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5k
bGVyX2Rpc2Nvbm5lY3QgKGQtPm1fbXNnLCBnb3RDaHVua0hhbmRsZXIpOworICAgIH0KKworICAg
IGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgR0Vycm9yICplcnJvciA9IDA7CisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVz
dF9zZW5kX2ZpbmlzaChkLT5tX3JlcSwgcmVzLCAmZXJyb3IpOworCisgICAgaWYgKGVycm9yKSB7
CisKKyAgICAgICAgaWYgKGQtPm1fbXNnICYmIFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJP
UihkLT5tX21zZy0+c3RhdHVzX2NvZGUpKSB7CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBz
b3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3JlcSk7CisgICAgICAgICAgICBjaGFyKiB1cmlzdHIg
PSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7CisgICAgICAgICAgICBSZXNvdXJjZUVy
cm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLT5tX21zZy0+c3RhdHVzX2Nv
ZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpc3RyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgoZC0+
bV9tc2ctPnJlYXNvbl9waHJhc2UpKTsKKyAgICAgICAgICAgIGdfZnJlZSh1cmlzdHIpOworICAg
ICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWls
KGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoZXJyb3ItPmRvbWFpbiA9PSBHX0lPX0VSUk9SKSB7CisgICAg
ICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3JlcSk7Cisg
ICAgICAgICAgICBjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7
CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJp
bmcoR19JT19FUlJPUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3ItPmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJp
c3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3Ry
aW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7CisgICAgICAgICAgICBn
X2ZyZWUodXJpc3RyKTsKKyAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAg
ICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAg
ICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsK
KworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgZC0+bV9tc2ctPnN0YXR1c19jb2RlID09IFNPVVBf
U1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAgICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3Nh
Z2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNlKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVj
ZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgZC0+bV9yZXNwb25zZSk7CisKKyAgICAgICAgICAg
IC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKKyAg
ICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAgICAgICAg
ICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9tc2ctPnJl
c3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUp
OworICAgICAgICB9CisKKyAgICAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5n
ZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQp
IHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBkLT5tX2lucHV0U3RyZWFtID0gaW47CisgICAg
ZC0+bV9idWZmZXJTaXplID0gODE5MjsKKyAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNo
YXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKwor
ICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JK
RUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsK
KworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQg
aXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBhcyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4g
dGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAgICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIG91
dGNvbWUgaXMgYSBIVE1MIHdpdGggYSBsaXN0IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVj
dG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5w
cm90b2NvbCgpLCAiZmlsZSIpCisgICAgICAgICYmIEdfSVNfRklMRV9JTlBVVF9TVFJFQU0oaW4p
KSB7CisKKyAgICAgICAgICAgIEdGaWxlICpmaWxlID0gc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2Zp
bGUgKFNPVVBfUkVRVUVTVF9GSUxFIChkLT5tX3JlcSkpOworCisgICAgICAgICAgICBSZXNvdXJj
ZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxl
LT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoc291
cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9yZXEpKTsKKyAgICAgICAgICAgIHJlc3Bv
bnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVu
Z3RoKGQtPm1fcmVxKSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSho
YW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKworICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVk
KSB7CisgICAgICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5n
ZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBnX29iamVjdF91bnJlZiAoZmlsZSk7CisgICAgfQorCisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXpl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5t
X2NhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNr
LCAwKTsKK30KKwogc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUp
CiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CkBAIC00ODMsNyArNTkzLDE3IEBAIHN0YXRpYyBib29s
IHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIHVybC5yZW1vdmVGcmFnbWVu
dElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0LnNldFVSTCh1cmwpOwogCi0gICAgZC0+bV9tc2cg
PSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBk
LT5tX3JlcSA9IHNvdXBfc2Vzc2lvbl9yZXF1ZXN0KHNlc3Npb24sIHVybC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKGQtPm1fcmVxKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisK
KyAgICBkLT5tX21zZyA9IHNvdXBfcmVxdWVzdF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVT
VF9IVFRQKGQtPm1fcmVxKSk7CisgICAgcmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21z
Zyk7CisKICAgICBpZiAoIWQtPm1fbXNnKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5
Myw3ICs2MTMsNyBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRs
ZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFD
SyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5t
X21zZywgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5k
bGUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBH
X0NBTExCQUNLKGNvbnRlbnRTbmlmZmVkQ2FsbGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJh
Y2spLCBoYW5kbGUpOworICAgIGd1bG9uZyBnb3RDaHVua0hhbmRsZXIgPSBnX3NpZ25hbF9jb25u
ZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwg
aGFuZGxlKTsKIAogI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5XzkwCiAgICAgU3RyaW5nIGZpcnN0
UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CkBA
IC01MDIsNyArNjIyLDcgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBo
YW5kbGUpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9tc2csIGZp
cnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdf
T0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oaGFuZGxlKSk7CisgICAgLy8gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9t
c2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihoYW5kbGUpKTsK
IAogICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IGQtPm1fcmVxdWVzdC5odHRwQm9keSgpOwogICAg
IGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHkoKSkgewpAQCAtNTY5LDE1ICs2ODks
MTQgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAg
aWYgKCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKGQtPm1fbXNnLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQiKSkKICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKGQtPm1f
bXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8qIik7CiAKLSAgICAvLyBCYWxhbmNl
ZCBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1Y3Rvcjsgd2UgbmVlZCB0bwotICAg
IC8vIGtlZXAgb3VyIG93biByZWYsIGJlY2F1c2UgYWZ0ZXIgcXVldWVpbmcgdGhlIG1lc3NhZ2Us
IHRoZQotICAgIC8vIHNlc3Npb24gb3ducyB0aGUgaW5pdGlhbCByZWZlcmVuY2UuCi0gICAgZ19v
YmplY3RfcmVmKGQtPm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Npb25fcXVldWVfbWVzc2FnZShzZXNz
aW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgaGFuZGxlKTsKKyAgICBkLT5tX2NhbmNl
bGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3lu
YyhkLT5tX3JlcSwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZW5kUmVxdWVzdENhbGxiYWNrLCBHVUlOVF9UT19QT0lOVEVSKGdvdENodW5rSGFuZGxlcikp
OwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKwogYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQo
RnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghZC0+bV9tc2cpOwpAQCAtNTkxLDIxICs3MTAs
MjEgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9IHJlcXVlc3QoKS51cmwoKTsKLSAgICBTdHJp
bmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOwotICAgIFN0cmluZyBwcm90b2NvbCA9IHVybC5w
cm90b2NvbCgpOwogCiAgICAgLy8gVXNlZCB0byBzZXQgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxv
ZyB0b3BsZXZlbDsgbWF5IGJlIE5VTEwKICAgICBkLT5tX2ZyYW1lID0gZnJhbWU7CiAKLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wsICJkYXRhIikpCi0gICAgICAgIHJldHVybiBz
dGFydERhdGEodGhpcywgdXJsU3RyaW5nKTsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImRhdGEi
KSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0RGF0YSh0aGlzLCB1cmwpOwogCi0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHByb3RvY29sLCAiaHR0cCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHByb3Rv
Y29sLCAiaHR0cHMiKSkgeworICAgIGlmICh1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSkgewog
ICAgICAgICBpZiAoc3RhcnRIdHRwKHRoaXMpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiZmlsZSIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiZnRwIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UocHJv
dG9jb2wsICJmdHBzIikpIHsKKyAgICBpZiAodXJsLnByb3RvY29sSXMoImZpbGUiKQorICAgICAg
ICB8fCB1cmwucHJvdG9jb2xJcygiZnRwIikKKyAgICAgICAgfHwgdXJsLnByb3RvY29sSXMoImZ0
cHMiKSkgewogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGJlIGRvaW5nIGFueSBvdGhlciBw
cm90b2NvbHMgaGVyZT8KICAgICAgICAgaWYgKHN0YXJ0R2lvKHRoaXMsIHVybCkpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY2NSwzOCArNzg0LDYgQEAgdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFzZWQgbG9hZGVyCi0K
LXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwg
Ym9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFs
KiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1fZ2ZpbGUpIHsKLSAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQtcmVz
b3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmlsZSk7Ci0gICAgICAg
IGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7Ci0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAgICAgICBkLT5tX2Nh
bmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgewotICAg
ICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtp
dC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3RyZWFt
KTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGQtPm1f
YnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAgICAgIGQtPm1fYnVm
ZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAgICAgICAgaGFuZGxl
LT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJj
ZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0cjxSZXNvdXJjZUhh
bmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRf
ZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDcsNyArNzk0LDYgQEAgc3Rh
dGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVz
LCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5j
bGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChkLT5tX2lucHV0U3Ry
ZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIAog
ICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1heSBo
YXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxsaW5n
IGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzE2LDYgKzgwMiw4IEBAIHN0YXRpYyB2b2lkIGNs
b3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUu
Z2V0KCkpOworCisgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7
CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jl
c3VsdCogcmVzLCBncG9pbnRlcikKQEAgLTcyOCw3ICs4MTYsNyBAQCBzdGF0aWMgdm9pZCByZWFk
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAg
ICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAg
ICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03MzYsMTQgKzgy
NCwxNSBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNS
ZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAKICAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9z
dHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3IpOwogICAgIGlm
IChlcnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxl
KTsKKyAgICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9yZXEp
OworICAgICAgICBjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7
CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhH
X0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5j
b2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpc3RyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6
IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7CisgICAgICAgIGdfZnJlZSh1cmlzdHIp
OwogICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNv
dXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc1OSw3ICs4NDgsNyBAQCBz
dGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJl
cywgZ3BvaW50ZXIpCiAKICAgICAvLyBkaWRSZWNlaXZlRGF0YSBtYXkgY2FuY2VsIHRoZSBsb2Fk
LCB3aGljaCBtYXkgcmVsZWFzZSB0aGUgbGFzdCByZWZlcmVuY2UuCiAgICAgaWYgKGQtPm1fY2Fu
Y2VsbGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAg
ICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTc2OCwxMjggKzg1NywxNyBAQCBzdGF0aWMgdm9pZCByZWFk
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOwogfQogCi1zdGF0
aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywg
Z3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNf
Y2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1y
ZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVz
b3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNv
dXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChk
LT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24o
aGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdFcnJvciogZXJy
b3IgPSAwOwotICAgIEdGaWxlSW5wdXRTdHJlYW0qIGluID0gZ19maWxlX3JlYWRfZmluaXNoKEdf
RklMRShzb3VyY2UpLCByZXMsICZlcnJvcik7Ci0gICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGNo
YXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVy
cm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmco
KSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwot
ICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgZC0+bV9pbnB1dFN0cmVhbSA9IEdfSU5QVVRfU1RSRUFNKGluKTsKLSAg
ICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOwotICAgIGQtPm1fYnVmZmVyID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOwotICAgIGQtPm1fdG90YWwgPSAwOwot
Ci0gICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJr
aXQtcmVzb3VyY2UiLCBoYW5kbGUuZ2V0KCkpOwotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5
bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxs
YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHF1ZXJ5SW5mb0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5j
UmVzdWx0KiByZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFu
ZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3Vy
Y2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFs
KCk7Ci0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7
Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlv
bihoYW5kbGUuZ2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVzb3VyY2VS
ZXNwb25zZSByZXNwb25zZTsKLQotICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1f
Z2ZpbGUpOwotICAgIHJlc3BvbnNlLnNldFVSTChLVVJMKEtVUkwoKSwgdXJpKSk7Ci0gICAgZ19m
cmVlKHVyaSk7Ci0KLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHRmlsZUluZm8qIGluZm8g
PSBnX2ZpbGVfcXVlcnlfaW5mb19maW5pc2goZC0+bV9nZmlsZSwgcmVzLCAmZXJyb3IpOwotCi0g
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0byBiZSBhYmxlIHRvIGhhbmRsZSBm
dHAgVVJJcyBwcm9wZXJseSwgd2UgbXVzdAotICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXJyb3Ig
aXMgR19JT19FUlJPUl9OT1RfTU9VTlRFRCwgYW5kIGlmIHNvLAotICAgICAgICAvLyBjYWxsIGdf
ZmlsZV9tb3VudF9lbmNsb3Npbmdfdm9sdW1lKCkgdG8gbW91bnQgdGhlIGZ0cAotICAgICAgICAv
LyBzZXJ2ZXIgKGFuZCB0aGVuIGtlZXAgdHJhY2sgb2YgdGhlIGZhY3QgdGhhdCB3ZSBtb3VudGVk
IGl0LAotICAgICAgICAvLyBhbmQgc2V0IGEgdGltZW91dCB0byB1bm1vdW50IGl0IGxhdGVyIGFm
dGVyIGl0J3MgYmVlbiBpZGxlCi0gICAgICAgIC8vIGZvciBhIHdoaWxlKS4KLSAgICAgICAgY2hh
ciogdXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJy
b3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygp
KTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0g
ICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50
LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSAhPSBHX0ZJ
TEVfVFlQRV9SRUdVTEFSKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBVUkkgcG9p
bnRzIHRvIGEgZGlyZWN0b3J5PyBTaG91bGQgd2UKLSAgICAgICAgLy8gZ2VuZXJhdGUgYSBsaXN0
aW5nPyBIb3c/IFdoYXQgZG8gb3RoZXIgYmFja2VuZHMgZG8gaGVyZT8KLSAgICAgICAgY2hhciog
dXJpID0gZ19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3Ig
cmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfSU9fRVJST1JfRkFJTEVELAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xlYW51
cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFu
ZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHJlc3BvbnNlLnNldE1pbWVUeXBlKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoaW5mbykp
OwotICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRf
c2l6ZShpbmZvKSk7Ci0KLSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9k
aWZpY2F0aW9uX3RpbWUoaW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWRE
YXRlKHR2LnR2X3NlYyk7Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUu
Z2V0KCksIHJlc3BvbnNlKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBj
bGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBnX2ZpbGVfcmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQs
IGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAw
KTsKLX0KIHN0YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwg
dXJsKQogewogICAgIEFTU0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPnJlcXVlc3Qo
KS5odHRwTWV0aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5yZXF1ZXN0KCkuaHR0cE1ldGhvZCgp
ICE9ICJQT1NUIikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZ2NoYXIgKnVybHN0cjsK
KyAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAg
ICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCiAg
ICAgLy8gR0lPIGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNv
IHJlbW92ZSB0aGVtCiAgICAgLy8gVE9ETzogdXNlIEtVUkwuZmlsZVN5c3RlbVBhdGggYWZ0ZXIg
S1VSTEd0ayBhbmQgRmlsZVN5c3RlbUd0ayBhcmUKICAgICAvLyB1c2luZyBHSU8gaW50ZXJuYWxs
eSwgYW5kIHByb3ZpZGluZyBVUklzIGluc3RlYWQgb2YgZmlsZSBwYXRocwpAQCAtOTAyLDIzICs4
ODAsMjcgQEAgc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VS
TCB1cmwpCiAgICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAodXNlZCBpbnRlcm5hbGx5IGJ5IEdG
aWxlKSBoYXMgcHJvYmxlbXMKICAgICAvLyBkZWNvZGluZyBzdHJpbmdzIHdpdGggYXJiaXRyYXJ5
IHBlcmNlbnQgc2lnbnMKICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGQtPm1f
Z2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgp
ICsgc2l6ZW9mKCJmaWxlOi8vIikgLSAxKTsKKyAgICAgICAgdXJsc3RyID0gZ19zdHJkdXAodXJs
LnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBk
LT5tX2dmaWxlID0gZ19maWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1y
ZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgICAgIHVybHN0ciA9IGdfc3RyZHVwKHVybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKIAotICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVh
bnVwR2lvT3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIEdFcnJvciogZXJy
b3IgPSAwOworICAgIGQtPm1fcmVxID0gc291cF9zZXNzaW9uX3JlcXVlc3Qoc2Vzc2lvbiwgdXJs
c3RyLCAmZXJyb3IpOworICAgIGdfZnJlZSh1cmxzdHIpOworICAgIGlmIChlcnJvcikgeworICAg
ICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fcmVxKSwgIndlYmtpdC1yZXNvdXJj
ZSIsIGhhbmRsZSk7CisKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgogICAgIGhhbmRsZS0+
cmVmKCk7CiAKICAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKLSAg
ICBnX2ZpbGVfcXVlcnlfaW5mb19hc3luYyhkLT5tX2dmaWxlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfVFlQRSAiLCIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSAi
LCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJE
X1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9fTk9O
RSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1f
Y2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlJbmZvQ2FsbGJh
Y2ssIDApOworICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fcmVxLCBkLT5tX2NhbmNl
bGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ss
IDApOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3
LDYgKzY3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNv
dXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRl
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291
cE1lc3NhZ2UqIHRvU291cE1lc3NhZ2UoKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9t
U291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2
MmRlYjAxLi5hZmFhZTllIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291
cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMSwzICsxLDQgQEAKKwogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKICAqCkBAIC0zMyw2ICszNCwy
OSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQg
UmVzb3VyY2VSZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3Nh
Z2UpIGNvbnN0Cit7CisgICAgZ19vYmplY3Rfc2V0IChzb3VwTWVzc2FnZSwgU09VUF9NRVNTQUdF
X01FVEhPRCwgaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRhKCksIE5VTEwpOworCisgICAgY29uc3Qg
SFRUUEhlYWRlck1hcCYgaGVhZGVycyA9IGh0dHBIZWFkZXJGaWVsZHMoKTsKKyAgICBTb3VwTWVz
c2FnZUhlYWRlcnMqIHNvdXBIZWFkZXJzID0gc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVyczsK
KyAgICBpZiAoIWhlYWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIEhUVFBIZWFkZXJNYXA6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGhlYWRlcnMuZW5kKCk7CisgICAgICAgIGZvciAoSFRUUEhlYWRl
ck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkKKyAgICAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwSGVhZGVycywg
aXQtPmZpcnN0LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGl0LT5zZWNvbmQudXRmOCgpLmRhdGEo
KSk7CisgICAgfQorCisjaWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKKyAgICBTdHJpbmcgZmly
c3RQYXJ0eVN0cmluZyA9IGZpcnN0UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CisgICAgaWYg
KCFmaXJzdFBhcnR5U3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICBHT3duUHRyPFNvdXBVUkk+
IGZpcnN0UGFydHkoc291cF91cmlfbmV3KGZpcnN0UGFydHlTdHJpbmcudXRmOCgpLmRhdGEoKSkp
OworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZpcnN0X3BhcnR5KHNvdXBNZXNzYWdlLCBmaXJz
dFBhcnR5LmdldCgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxh
Z3Moc291cE1lc3NhZ2UsIG1fc291cEZsYWdzKTsKK30KKwogU291cE1lc3NhZ2UqIFJlc291cmNl
UmVxdWVzdDo6dG9Tb3VwTWVzc2FnZSgpIGNvbnN0CiB7CiAgICAgU291cE1lc3NhZ2UqIHNvdXBN
ZXNzYWdlID0gc291cF9tZXNzYWdlX25ldyhodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgdXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59628</attachid>
            <date>2010-06-24 03:48:12 -0700</date>
            <delta_ts>2010-06-24 04:30:19 -0700</delta_ts>
            <desc>WebKitGtk+ working for http/ftp/file/data protocols</desc>
            <filename>webkitgtk-soupuriloader.patch</filename>
            <type>text/plain</type>
            <size>29628</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IGYyMGYwNTUuLjNiNmI0MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtMTE1LDcgKzExNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkKICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAg
ICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAg
ICAgICAgICAgICwgbV9yZXEoMCkKICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAg
ICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCkBA
IC0xOTcsNyArMTk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTb3VwTWVzc2Fn
ZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAg
Ym9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7CisgICAgICAgIFNvdXBS
ZXF1ZXN0KiBtX3JlcTsKICAgICAgICAgR0lucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwogICAg
ICAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7CiAgICAgICAgIGNoYXIqIG1fYnVmZmVy
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKaW5kZXggZTJjNjdiYy4uNjUyM2E0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC0xMjAsOCArMTIw
LDExIEBAIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVy
YXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGlj
IGJvb2wgc3RhcnREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcp
Oworc3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBH
QXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworCiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCk7CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTEzMSw2ICsxMzQsMTIgQEAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgICAgICBtX21zZyA9
IDA7CiAgICAgfQogCisgICAgaWYgKG1fcmVxKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKG1fcmVxKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBnX29iamVj
dF91bnJlZihtX3JlcSk7CisgICAgICAgIG1fcmVxID0gMDsKKyAgICB9CisKICAgICBpZiAobV9p
ZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CiAg
ICAgICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1Miw3IEBAIFJlc291cmNlSGFu
ZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAotICAg
IGNsZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJl
Rm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTI5Myw1MyArMzAyLDEwIEBAIHN0YXRpYyB2b2lk
IGdvdENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2UqIG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdw
b2ludGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoaGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwgY2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQot
Ci0vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vz
c2FyeSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlvbnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQg
Zm9yIHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZpbmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24g
KnNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdwb2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRy
PFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9wdFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhh
bmRsZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBtYXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29k
ZSBldmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50PwotICAgIGlmICghaGFuZGxlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRl
cm5hbCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xp
ZW50KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RS
QU5TUE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2RlKSkgewotICAgICAgICBjaGFyKiB1cmkgPSBz
b3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdlX2dldF91cmkobXNnKSwgZmFsc2UpOwotICAg
ICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJP
UiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9waHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVy
aSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RB
VFVTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICBmaWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2cs
ICZkLT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFu
ZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKLQotICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhh
dmUgY2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdoaWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNl
bGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9i
b2R5LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0
KCksIG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgbXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgs
IHRydWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0
KCkpOwogfQogCi0vLyBwYXJzZURhdGFVcmwoKSBpcyB0YWtlbiBmcm9tIHRoZSBDVVJMIGh0dHAg
YmFja2VuZC4KKy8vcGFyc2VEYXRhVXJsKCkgaXMgdGFrZW4gZnJvbSB0aGUgQ1VSTCBodHRwIGJh
Y2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0
YSkKIHsKICAgICBSZXNvdXJjZUhhbmRsZSogaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihjYWxsYmFja0RhdGEpOwpAQCAtMzU0LDE3ICszMjAsMTYgQEAgc3RhdGljIGdib29s
ZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAgaWYgKCFjbGllbnQp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyB1cmwgPSBoYW5kbGUtPnJlcXVl
c3QoKS51cmwoKS5zdHJpbmcoKTsKLSAgICBBU1NFUlQodXJsLnN0YXJ0c1dpdGgoImRhdGE6Iiwg
ZmFsc2UpKTsKKyAgICBTdHJpbmcgdXJsU3RyID0gaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCk7CisgICAgQVNTRVJUKHVybFN0ci5zdGFydHNXaXRoKCJkYXRhOiIsIGZhbHNlKSk7CiAK
LSAgICBpbnQgaW5kZXggPSB1cmwuZmluZCgnLCcpOworICAgIGludCBpbmRleCA9IHVybFN0ci5m
aW5kKCcsJyk7CiAgICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgIGNsaWVudC0+Y2Fubm90
U2hvd1VSTChoYW5kbGUpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgU3Ry
aW5nIG1lZGlhVHlwZSA9IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJpbmcg
ZGF0YSA9IHVybC5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICBTdHJpbmcgbWVkaWFUeXBlID0g
dXJsU3RyLnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1l
ZGlhVHlwZS5lbmRzV2l0aCgiO2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBA
IC0zODEsNyArMzQ2LDYgQEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBj
YWxsYmFja0RhdGEpCiAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCiAgICAg
aWYgKGlzQmFzZTY0KSB7Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMo
ZGF0YSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CiAg
ICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCkBA
IC0zOTAsMzIgKzM1NCw0NCBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVy
IGNhbGxiYWNrRGF0YSkKICAgICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4K
ICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNp
bmNlIFdlYkNvcmUncyBkZWNvZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBh
bmQgZmFpbHMgb24gQWNpZDMgdGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBv
dXRMZW5ndGggPSAwOwotICAgICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5k
YXRhKCksICZvdXRMZW5ndGgpKTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4g
MCkKLSAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBv
dXRMZW5ndGgsIDApOwotICAgICAgICBnX2ZyZWUob3V0RGF0YSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgLy8gV2UgaGF2ZSB0byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRh
dGlvbnMgaW4gS1VSTAotICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRh
dGEsIFRleHRFbmNvZGluZyhjaGFyc2V0KSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNv
ZGluZ05hbWUoIlVURi0xNiIpOwogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZSho
YW5kbGUsIHJlc3BvbnNlKTsKIAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRs
ZS0+Y2xpZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRh
dGEubGVuZ3RoKCkgPiAwKQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0
YS5sZW5ndGgoKSAqIHNpemVvZihVQ2hhciksIDApOwogICAgIH0KIAogICAgIGlmIChkLT5tX2Nh
bmNlbGxlZCB8fCAhaGFuZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZSk7CisgICAgU291cFNlc3Npb24qIHNl
c3Npb24gPSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgR0Vycm9yKiBlcnJvciA9IDA7
CisgICAgZC0+bV9yZXEgPSBzb3VwX3Nlc3Npb25fcmVxdWVzdChzZXNzaW9uLCBoYW5kbGUtPnJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3IpOworICAgIGlmIChl
cnJvcikgeworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgR0lucHV0U3RyZWFtICppbiA9IHNvdXBfcmVxdWVzdF9zZW5kKGQt
Pm1fcmVxLCAwLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9pbnB1
dFN0cmVhbSA9IGluOworICAgIGQtPm1fYnVmZmVyU2l6ZSA9IDgxOTI7CisgICAgZC0+bV9idWZm
ZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7CisgICAg
ZC0+bV90b3RhbCA9IDA7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lu
cHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgaGFuZGxlLT5yZWYo
KTsKKworICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldyAoKTsKKyAgICBn
X2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBk
LT5tX2J1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZ
X0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2NCkgPyAwIDogR0lOVF9UT19QT0lOVEVSKDEpKTsKIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQyOCw3ICs0MDQsNyBAQCBzdGF0aWMgYm9vbCBzdGFy
dERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU3RyaW5nIHVybFN0cmluZykKIAogICAgIC8v
IElmIHBhcnNlRGF0YVVybCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB0aGUgam9iIGlzIG5vdCB5
ZXQgZWZmZWN0aXZlbHkgc3RhcnRlZAogICAgIC8vIGFuZCB3ZWJraXQgd29uJ3QgbmV2ZXIga25v
dyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHBhcnNlZCBldmVuIGRpZEZpbmlzaExvYWRpbmcgaXMg
Y2FsbGVkLgotICAgIGQtPm1faWRsZUhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHBhcnNlRGF0
YVVybCwgaGFuZGxlKTsKKyAgICBkLT5tX2lkbGVIYW5kbGVyID0gZ19pZGxlX2FkZChwYXJzZURh
dGFVcmwsIGhhbmRsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ2OSw2ICs0NDUsMTUx
IEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBz
ZXNzaW9uKQogICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0
LWluaXQiLCByZWludGVycHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRp
YyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBib29sIGlzRGVzdHJveWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9yZXEpIHsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEpLCAid2Via2l0LXJlc291
cmNlIiwgMCk7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fcmVxKTsKKyAgICAgICAgZC0+
bV9yZXEgPSAwOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxhYmxlKSB7CisgICAgICAg
IGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOworICAgICAgICBkLT5tX2NhbmNlbGxh
YmxlID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9pbnB1dFN0cmVhbSkgeworICAgICAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNv
dXJjZSIsIDApOworICAgICAgICBnX29iamVjdF91bnJlZihkLT5tX2lucHV0U3RyZWFtKTsKKyAg
ICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7CisgICAgfQorCisgICAgaWYgKGQtPm1fYnVmZmVy
KSB7CisgICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7CisgICAgICAgIGQtPm1fYnVmZmVyID0g
MDsKKyAgICB9CisKKyAgICBpZiAoIWlzRGVzdHJveWluZykKKyAgICAgICAgaGFuZGxlLT5kZXJl
ZigpOworfQorCitzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJj
ZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIFJlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29i
amVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CisgICAgaWYgKCFoYW5k
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBo
YW5kbGUtPmdldEludGVybmFsKCk7CisgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9
IGhhbmRsZS0+Y2xpZW50KCk7CisKKyAgICBpZiAodXNlckRhdGEpIHsKKyAgICAgICAgLy8gTm8g
bmVlZCB0byBjYWxsIGdvdENodW5rSGFuZGxlciBhbnltb3JlLiBSZWNlaXZlZCBkYXRhIHdpbGwK
KyAgICAgICAgLy8gYmUgcmVwb3J0ZWQgYnkgcmVhZENhbGxiYWNrCisgICAgICAgIGd1bG9uZyBn
b3RDaHVua0hhbmRsZXIgPSBHUE9JTlRFUl9UT19VSU5UICh1c2VyRGF0YSk7CisgICAgICAgIGlm
IChnX3NpZ25hbF9oYW5kbGVyX2lzX2Nvbm5lY3RlZCAoZC0+bV9tc2csIGdvdENodW5rSGFuZGxl
cikpCisgICAgICAgICAgICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QgKGQtPm1fbXNnLCBn
b3RDaHVua0hhbmRsZXIpOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xp
ZW50KSB7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR0Vycm9yICplcnJvciA9IDA7CisgICAg
R0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChkLT5tX3JlcSwgcmVz
LCAmZXJyb3IpOworCisgICAgaWYgKGVycm9yKSB7CisKKyAgICAgICAgaWYgKGQtPm1fbXNnICYm
IFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihkLT5tX21zZy0+c3RhdHVzX2NvZGUpKSB7
CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5tX3Jl
cSk7CisgICAgICAgICAgICBjaGFyKiB1cmlzdHIgPSBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBm
YWxzZSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190
b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkLT5tX21zZy0+c3RhdHVzX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdXJpc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgoZC0+bV9tc2ctPnJlYXNvbl9waHJhc2UpKTsKKyAg
ICAgICAgICAgIGdfZnJlZSh1cmlzdHIpOworICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9y
KTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJv
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZXJyb3It
PmRvbWFpbiA9PSBHX0lPX0VSUk9SKSB7CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3Vw
X3JlcXVlc3RfZ2V0X3VyaShkLT5tX3JlcSk7CisgICAgICAgICAgICBjaGFyKiB1cmlzdHIgPSBz
b3VwX3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7CisgICAgICAgICAgICBSZXNvdXJjZUVycm9y
IHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpc3RyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2Fn
ZSkgOiBTdHJpbmcoKSk7CisgICAgICAgICAgICBnX2ZyZWUodXJpc3RyKTsKKyAgICAgICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUu
Z2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYg
ZC0+bV9tc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAg
ICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNl
KTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwg
ZC0+bV9yZXNwb25zZSk7CisKKyAgICAgICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5j
ZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKKyAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+
cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAgICAgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVE
YXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNn
LT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgY2xp
ZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQpIHsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1
ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBkLT5tX2lucHV0U3RyZWFtID0gaW47CisgICAgZC0+bV9idWZmZXJTaXplID0gODE5MjsKKyAg
ICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNp
emUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8vIHJlYWRDYWxsYmFjayBuZWVkcyBp
dAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Vi
a2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sg
aWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSByZWd1bGFyCisgICAgLy8gZmlsZSBh
cyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBjYXNlIFNvdXAgcHJvcGVybHkKKyAg
ICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIG91dGNvbWUgaXMgYSBIVE1MIHdpdGggYSBsaXN0
IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5wcm90b2NvbCgpLCAiZmlsZSIpCisgICAgICAg
ICYmIEdfSVNfRklMRV9JTlBVVF9TVFJFQU0oaW4pKSB7CisKKyAgICAgICAgICAgIEdGaWxlICpm
aWxlID0gc291cF9yZXF1ZXN0X2ZpbGVfZ2V0X2ZpbGUgKFNPVVBfUkVRVUVTVF9GSUxFIChkLT5t
X3JlcSkpOworCisgICAgICAgICAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAg
ICAgICAgICByZXNwb25zZS5zZXRVUkwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAg
ICAgICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUo
ZC0+bV9yZXEpKTsKKyAgICAgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0
aChzb3VwX3JlcXVlc3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fcmVxKSk7CisgICAgICAgICAg
ICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKwor
ICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKSB7CisgICAgICAgICAgICAgICAgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBnX29iamVjdF91bnJlZiAoZmlsZSk7
CisgICAgfQorCisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5tX2lucHV0U3RyZWFt
LCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKK30KKwogc3RhdGljIGJvb2wgc3Rh
cnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CkBA
IC00ODMsNyArNjA0LDE3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSog
aGFuZGxlKQogICAgIHVybC5yZW1vdmVGcmFnbWVudElkZW50aWZpZXIoKTsKICAgICByZXF1ZXN0
LnNldFVSTCh1cmwpOwogCi0gICAgZC0+bV9tc2cgPSByZXF1ZXN0LnRvU291cE1lc3NhZ2UoKTsK
KyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBkLT5tX3JlcSA9IHNvdXBfc2Vzc2lvbl9yZXF1
ZXN0KHNlc3Npb24sIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3IpOworICAgIGlm
IChlcnJvcikgeworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fcmVxKSwg
IndlYmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisKKyAgICBkLT5tX21zZyA9IHNvdXBfcmVxdWVz
dF9odHRwX2dldF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKGQtPm1fcmVxKSk7CisgICAgcmVx
dWVzdC51cGRhdGVTb3VwTWVzc2FnZShkLT5tX21zZyk7CisKICAgICBpZiAoIWQtPm1fbXNnKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTQ5Myw3ICs2MjQsNyBAQCBzdGF0aWMgYm9vbCBz
dGFydEh0dHAoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKICAgICBnX3NpZ25hbF9jb25uZWN0KGQt
Pm1fbXNnLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRDYWxsYmFjayksIGhhbmRs
ZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1oZWFkZXJzIiwgR19DQUxM
QkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2spLCBoYW5kbGUpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
ZC0+bV9tc2csICJjb250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGNvbnRlbnRTbmlmZmVkQ2Fs
bGJhY2spLCBoYW5kbGUpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtY2h1
bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2FsbGJhY2spLCBoYW5kbGUpOworICAgIGd1bG9uZyBn
b3RDaHVua0hhbmRsZXIgPSBnX3NpZ25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwg
R19DQUxMQkFDSyhnb3RDaHVua0NhbGxiYWNrKSwgaGFuZGxlKTsKIAogI2lmZGVmIEhBVkVfTElC
U09VUF8yXzI5XzkwCiAgICAgU3RyaW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0
UGFydHlGb3JDb29raWVzKCkuc3RyaW5nKCk7CkBAIC01MDIsNyArNjMzLDYgQEAgc3RhdGljIGJv
b2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIHNvdXBfbWVzc2Fn
ZV9zZXRfZmlyc3RfcGFydHkoZC0+bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNl
bmRpZgotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNl
SGFuZGxlIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKICAgICBGb3JtRGF0
YSogaHR0cEJvZHkgPSBkLT5tX3JlcXVlc3QuaHR0cEJvZHkoKTsKICAgICBpZiAoaHR0cEJvZHkg
JiYgIWh0dHBCb2R5LT5pc0VtcHR5KCkpIHsKQEAgLTU2OSwxNSArNjk5LDE0IEBAIHN0YXRpYyBi
b29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGlmICghc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0Iikp
CiAgICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChkLT5tX21zZy0+cmVxdWVzdF9o
ZWFkZXJzLCAiQWNjZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFsYW5jZWQgaW4gUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8KLSAgICAvLyBrZWVwIG91ciBv
d24gcmVmLCBiZWNhdXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNzYWdlLCB0aGUKLSAgICAvLyBz
ZXNzaW9uIG93bnMgdGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAgIGdfb2JqZWN0X3JlZihkLT5t
X21zZyk7Ci0gICAgc291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vzc2lvbiwgZC0+bV9tc2cs
IGZpbmlzaGVkQ2FsbGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2Fu
Y2VsbGFibGVfbmV3KCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9yZXEsIGQt
Pm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RD
YWxsYmFjaywgR1VJTlRfVE9fUE9JTlRFUihnb3RDaHVua0hhbmRsZXIpKTsKIAogICAgIHJldHVy
biB0cnVlOwogfQogCisKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkK
IHsKICAgICBBU1NFUlQoIWQtPm1fbXNnKTsKQEAgLTU5MSwyMSArNzIwLDIxIEBAIGJvb2wgUmVz
b3VyY2VIYW5kbGU6OnN0YXJ0KEZyYW1lKiBmcmFtZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgS1VSTCB1cmwgPSByZXF1ZXN0KCkudXJsKCk7Ci0gICAgU3RyaW5nIHVybFN0cmluZyA9
IHVybC5zdHJpbmcoKTsKLSAgICBTdHJpbmcgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2woKTsKIAog
ICAgIC8vIFVzZWQgdG8gc2V0IHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cgdG9wbGV2ZWw7IG1h
eSBiZSBOVUxMCiAgICAgZC0+bV9mcmFtZSA9IGZyYW1lOwogCi0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKHByb3RvY29sLCAiZGF0YSIpKQotICAgICAgICByZXR1cm4gc3RhcnREYXRhKHRoaXMs
IHVybFN0cmluZyk7CisgICAgaWYgKHVybC5wcm90b2NvbElzKCJkYXRhIikpCisgICAgICAgIHJl
dHVybiBzdGFydERhdGEodGhpcywgdXJsKTsKIAotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShw
cm90b2NvbCwgImh0dHAiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImh0dHBzIikp
IHsKKyAgICBpZiAodXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkpIHsKICAgICAgICAgaWYgKHN0
YXJ0SHR0cCh0aGlzKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShwcm90b2NvbCwgImZpbGUiKSB8fCBlcXVhbElnbm9yaW5nQ2Fz
ZShwcm90b2NvbCwgImZ0cCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiZnRwcyIp
KSB7CisgICAgaWYgKHVybC5wcm90b2NvbElzKCJmaWxlIikKKyAgICAgICAgfHwgdXJsLnByb3Rv
Y29sSXMoImZ0cCIpCisgICAgICAgIHx8IHVybC5wcm90b2NvbElzKCJmdHBzIikpIHsKICAgICAg
ICAgLy8gRklYTUU6IHNob3VsZCB3ZSBiZSBkb2luZyBhbnkgb3RoZXIgcHJvdG9jb2xzIGhlcmU/
CiAgICAgICAgIGlmIChzdGFydEdpbyh0aGlzLCB1cmwpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CkBAIC02NjUsMzggKzc5NCw2IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBTCiAgICAgc3lu
Y0xvYWRlci5ydW4oKTsKIH0KIAotLy8gR0lPLWJhc2VkIGxvYWRlcgotCi1zdGF0aWMgdm9pZCBj
bGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95
aW5nID0gZmFsc2UpCi17Ci0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKLQotICAgIGlmIChkLT5tX2dmaWxlKSB7Ci0gICAgICAgIGdfb2JqZWN0
X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fZ2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgMCk7Ci0g
ICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fZ2ZpbGUpOwotICAgICAgICBkLT5tX2dmaWxlID0g
MDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9jYW5jZWxsYWJsZSkgewotICAgICAgICBnX29iamVj
dF91bnJlZihkLT5tX2NhbmNlbGxhYmxlKTsKLSAgICAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IDA7
Ci0gICAgfQotCi0gICAgaWYgKGQtPm1faW5wdXRTdHJlYW0pIHsKLSAgICAgICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCAw
KTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9pbnB1dFN0cmVhbSk7Ci0gICAgICAgIGQt
Pm1faW5wdXRTdHJlYW0gPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2J1ZmZlcikgewotICAg
ICAgICBnX2ZyZWUoZC0+bV9idWZmZXIpOwotICAgICAgICBkLT5tX2J1ZmZlciA9IDA7Ci0gICAg
fQotCi0gICAgaWYgKCFpc0Rlc3Ryb3lpbmcpCi0gICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKLX0K
LQogc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3Vs
dCogcmVzLCBncG9pbnRlcikKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9
IHN0YXRpY19jYXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAi
d2Via2l0LXJlc291cmNlIikpOwpAQCAtNzA3LDcgKzgwNCw2IEBAIHN0YXRpYyB2b2lkIGNsb3Nl
Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAg
ICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAg
ICBnX2lucHV0X3N0cmVhbV9jbG9zZV9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAwKTsK
LSAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAKICAgICAvLyBUaGUgbG9h
ZCBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCwgdGhlIGNsaWVudCBtYXkgaGF2ZSBiZWVuCiAgICAg
Ly8gZGVzdHJveWVkIGFscmVhZHkuIEluIHN1Y2ggY2FzZXMgY2FsbGluZyBkaWRGaW5pc2hMb2Fk
aW5nIGlzIGEKQEAgLTcxNiw5ICs4MTIsMTEgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhH
T2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICAgICAgcmV0
dXJuOwogCiAgICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQoKSk7CisKKyAg
ICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKIH0KIAotc3RhdGlj
IHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdw
b2ludGVyKQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5j
UmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNlSGFuZGxl
PiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRh
KHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKQEAgLTcyOCw3
ICs4MjYsNyBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5
bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVu
dCA9IGhhbmRsZS0+Y2xpZW50KCk7CiAKICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVu
dCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAg
IGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC03MzYsMTQgKzgzNCwxNSBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJh
Y2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAKICAgICBn
c3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0
cmVhbSwgcmVzLCAmZXJyb3IpOwogICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1cmkg
PSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKKyAgICAgICAgU291cFVSSSogdXJpID0gc291
cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9yZXEpOworICAgICAgICBjaGFyKiB1cmlzdHIgPSBzb3Vw
X3VyaV90b19zdHJpbmcodXJpLCBmYWxzZSk7CiAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3Vy
Y2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJp
c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPyBTdHJpbmc6
OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAgICAgZ19mcmVlKHVy
aSk7CisgICAgICAgIGdfZnJlZSh1cmlzdHIpOwogICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3Ip
OwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNs
ZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGllbnQt
PmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTc1NSwxNDEgKzg1NCwzNiBAQCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09i
amVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCiAgICAgfQogCiAgICAg
ZC0+bV90b3RhbCArPSBieXRlc1JlYWQ7Ci0gICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5k
bGUuZ2V0KCksIGQtPm1fYnVmZmVyLCBieXRlc1JlYWQsIGQtPm1fdG90YWwpOworICAgIGlmIChH
X0xJS0VMWSghZGF0YSkpIHsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUu
Z2V0KCksIGQtPm1fYnVmZmVyLCBieXRlc1JlYWQsIGQtPm1fdG90YWwpOworICAgIH0gZWxzZSB7
CisgICAgICAgIC8vIFdlIGhhdmUgdG8gY29udmVydCBpdCB0byBVVEYtMTYgZHVlIHRvIGxpbWl0
YXRpb25zIGluIEtVUkwKKyAgICAgICAgR093blB0cjxndW5pY2hhcjI+IHVuaWNvZGVTdHIoZ191
dGY4X3RvX3V0ZjE2KGQtPm1fYnVmZmVyLCBieXRlc1JlYWQsIDAsIDAsIDApKTsKKyAgICAgICAg
Y2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KHVuaWNvZGVTdHIuZ2V0KCkpLCBnX3V0Zjhfc3RybGVuKGQtPm1fYnVmZmVyLCBi
eXRlc1JlYWQpICogc2l6ZW9mKFVDaGFyKSwgMCk7CisgICAgfQogCiAgICAgLy8gZGlkUmVjZWl2
ZURhdGEgbWF5IGNhbmNlbCB0aGUgbG9hZCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVm
ZXJlbmNlLgogICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5t
X2J1ZmZlclNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RF
RkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkQ2FsbGJhY2ssIDApOwotfQotCi1zdGF0aWMgdm9pZCBvcGVuQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0
X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7Ci0g
ICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5wdXRTdHJlYW0q
IGluID0gZ19maWxlX3JlYWRfZmluaXNoKEdfRklMRShzb3VyY2UpLCByZXMsICZlcnJvcik7Ci0g
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1f
Z2ZpbGUpOwotICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19z
dHJpbmcoR19JT19FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRG
OChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAg
ICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhh
bmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291
cmNlRXJyb3IpOworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdl
dCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGQtPm1faW5wdXRTdHJlYW0gPSBH
X0lOUFVUX1NUUkVBTShpbik7Ci0gICAgZC0+bV9idWZmZXJTaXplID0gODE5MjsKLSAgICBkLT5t
X2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsK
LSAgICBkLT5tX3RvdGFsID0gMDsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQt
Pm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKICAgICBn
X2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBk
LT5tX2J1ZmZlclNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZ
X0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkQ2FsbGJhY2ssIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENh
bGxiYWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZvQ2FsbGJhY2soR09iamVj
dCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJl
c291cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2Jq
ZWN0X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRs
ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhh
bmRsZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0g
aGFuZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBj
bGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgY2hhciogdXJpID0gZ19m
aWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgp
LCB1cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAg
IEdGaWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2ZpbmlzaChkLT5tX2dmaWxlLCBy
ZXMsICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgLy8gRklYTUU6IHRvIGJl
IGFibGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNo
ZWNrIGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVELCBhbmQgaWYgc28sCi0g
ICAgICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUoKSB0byBtb3VudCB0
aGUgZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFj
dCB0aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVu
bW91bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAgICAgLy8gZm9yIGEgd2hp
bGUpLgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAg
ICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9f
RVJST1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1l
c3NhZ2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVfaW5mb19nZXRfZmlsZV90
eXBlKGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAgICAgLy8gRklYTUU6IHdo
YXQgaWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3ZQotICAgICAgICAv
LyBnZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNrZW5kcyBkbyBoZXJl
PwotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAg
ICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJS
T1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUl9GQUlM
RUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkp
OwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNs
aWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoZ19maWxlX2luZm9fZ2V0X2Nv
bnRlbnRfdHlwZShpbmZvKSk7Ci0gICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KGdfZmlsZV9pbmZvX2dldF9zaXplKGluZm8pKTsKLQotICAgIEdUaW1lVmFsIHR2OwotICAgIGdf
ZmlsZV9pbmZvX2dldF9tb2RpZmljYXRpb25fdGltZShpbmZvLCAmdHYpOwotICAgIHJlc3BvbnNl
LnNldExhc3RNb2RpZmllZERhdGUodHYudHZfc2VjKTsKLQotICAgIGNsaWVudC0+ZGlkUmVjZWl2
ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOwotCi0gICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGdfZmlsZV9yZWFkX2FzeW5jKGQtPm1fZ2ZpbGUsIEdf
UFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAg
ICBvcGVuQ2FsbGJhY2ssIDApOwotfQogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgS1VSTCB1cmwpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CiAKLSAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCiAgICAgaWYg
KGhhbmRsZS0+cmVxdWVzdCgpLmh0dHBNZXRob2QoKSAhPSAiR0VUIiAmJiBoYW5kbGUtPnJlcXVl
c3QoKS5odHRwTWV0aG9kKCkgIT0gIlBPU1QiKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAg
ICBnY2hhciAqdXJsc3RyOworICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uID0gaGFuZGxlLT5kZWZh
dWx0U2Vzc2lvbigpOworICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdl
dEludGVybmFsKCk7CisKICAgICAvLyBHSU8gZG9lc24ndCBrbm93IGhvdyB0byBoYW5kbGUgcmVm
cyBhbmQgcXVlcmllcywgc28gcmVtb3ZlIHRoZW0KICAgICAvLyBUT0RPOiB1c2UgS1VSTC5maWxl
U3lzdGVtUGF0aCBhZnRlciBLVVJMR3RrIGFuZCBGaWxlU3lzdGVtR3RrIGFyZQogICAgIC8vIHVz
aW5nIEdJTyBpbnRlcm5hbGx5LCBhbmQgcHJvdmlkaW5nIFVSSXMgaW5zdGVhZCBvZiBmaWxlIHBh
dGhzCkBAIC05MDIsMjMgKzg5NiwyNyBAQCBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBLVVJMIHVybCkKICAgICAvLyBnX2ZpbGVuYW1lX2Zyb21fdXJpICh1c2Vk
IGludGVybmFsbHkgYnkgR0ZpbGUpIGhhcyBwcm9ibGVtcwogICAgIC8vIGRlY29kaW5nIHN0cmlu
Z3Mgd2l0aCBhcmJpdHJhcnkgcGVyY2VudCBzaWducwogICAgIGlmICh1cmwuaXNMb2NhbEZpbGUo
KSkKLSAgICAgICAgZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdfZm9yX3BhdGgodXJsLnByZXR0eVVS
TCgpLnV0ZjgoKS5kYXRhKCkgKyBzaXplb2YoImZpbGU6Ly8iKSAtIDEpOworICAgICAgICB1cmxz
dHIgPSBnX3N0cmR1cCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgZWxzZQog
I2VuZGlmCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBnX2ZpbGVfbmV3X2Zvcl91cmkodXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
Z2ZpbGUpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKyAgICAgICAgdXJsc3RyID0gZ19z
dHJkdXAodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgLy8gYmFsYW5jZWQgYnkg
YSBkZXJlZigpIGluIGNsZWFudXBHaW9PcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMgcnVu
CisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgZC0+bV9yZXEgPSBzb3VwX3Nlc3Npb25fcmVx
dWVzdChzZXNzaW9uLCB1cmxzdHIsICZlcnJvcik7CisgICAgZ19mcmVlKHVybHN0cik7CisgICAg
aWYgKGVycm9yKSB7CisgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEp
LCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlKTsKKworICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVy
ZWYoKSBpbiBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24sIHdoaWNoIHNob3VsZCBhbHdheXMg
cnVuCiAgICAgaGFuZGxlLT5yZWYoKTsKIAogICAgIGQtPm1fY2FuY2VsbGFibGUgPSBnX2NhbmNl
bGxhYmxlX25ldygpOwotICAgIGdfZmlsZV9xdWVyeV9pbmZvX2FzeW5jKGQtPm1fZ2ZpbGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9UWVBF
ICIsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9BVFRSSUJVVEVfU1RBTkRB
UkRfQ09OVEVOVF9UWVBFICIsIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9B
VFRSSUJVVEVfU1RBTkRBUkRfU0laRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX0ZJ
TEVfUVVFUllfSU5GT19OT05FLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJ
VFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBxdWVyeUluZm9DYWxsYmFjaywgMCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+
bV9yZXEsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vu
ZFJlcXVlc3RDYWxsYmFjaywgMCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmggYi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAppbmRleCBhMWQ5MTZm
Li5jMWM3MTE2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZVJlcXVlc3QuaApAQCAtNjcsNiArNjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
ICAgICB1cGRhdGVGcm9tU291cE1lc3NhZ2Uoc291cE1lc3NhZ2UpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNv
bnN0OwogICAgICAgICBTb3VwTWVzc2FnZSogdG9Tb3VwTWVzc2FnZSgpIGNvbnN0OwogICAgICAg
ICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCmluZGV4IDYyZGViMDEuLmFmYWFlOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3BwCkBAIC0xLDMgKzEs
NCBAQAorCiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEd1c3Rhdm8gTm9yb25oYSBTaWx2YQog
ICoKQEAgLTMzLDYgKzM0LDI5IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAordm9pZCBSZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBN
ZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQgKHNvdXBNZXNz
YWdlLCBTT1VQX01FU1NBR0VfTUVUSE9ELCBodHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgTlVM
TCk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxk
cygpOworICAgIFNvdXBNZXNzYWdlSGVhZGVycyogc291cEhlYWRlcnMgPSBzb3VwTWVzc2FnZS0+
cmVxdWVzdF9oZWFkZXJzOworICAgIGlmICghaGVhZGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
SFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICAg
ICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBw
ZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Quc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNl
Y29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85
MAorICAgIFN0cmluZyBmaXJzdFBhcnR5U3RyaW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5z
dHJpbmcoKTsKKyAgICBpZiAoIWZpcnN0UGFydHlTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAg
IEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmlu
Zy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHko
c291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0KCkpOworICAgIH0KKyNlbmRpZgorCisgICAgc291
cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZSwgbV9zb3VwRmxhZ3MpOworfQorCiBTb3Vw
TWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0b1NvdXBNZXNzYWdlKCkgY29uc3QKIHsKICAgICBT
b3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSBzb3VwX21lc3NhZ2VfbmV3KGh0dHBNZXRob2QoKS51
dGY4KCkuZGF0YSgpLCB1cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59635</attachid>
            <date>2010-06-24 04:30:19 -0700</date>
            <delta_ts>2010-07-23 04:45:17 -0700</delta_ts>
            <desc>WebKitGtk+ working for http/ftp/file/data protocols</desc>
            <filename>webkitgtk-soupuriloader.patch</filename>
            <type>text/plain</type>
            <size>29430</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IGYyMGYwNTUuLjNiNmI0MDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtMTE1LDcgKzExNSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkKICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAg
ICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAg
ICAgICAgICAgICwgbV9yZXEoMCkKICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAg
ICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCkBA
IC0xOTcsNyArMTk3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTb3VwTWVzc2Fn
ZSogbV9tc2c7CiAgICAgICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKICAgICAgICAg
Ym9vbCBtX2NhbmNlbGxlZDsKLSAgICAgICAgR0ZpbGUqIG1fZ2ZpbGU7CisgICAgICAgIFNvdXBS
ZXF1ZXN0KiBtX3JlcTsKICAgICAgICAgR0lucHV0U3RyZWFtKiBtX2lucHV0U3RyZWFtOwogICAg
ICAgICBHQ2FuY2VsbGFibGUqIG1fY2FuY2VsbGFibGU7CiAgICAgICAgIGNoYXIqIG1fYnVmZmVy
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5k
bGVTb3VwLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxl
U291cC5jcHAKaW5kZXggZTJjNjdiYy4uNTdhODhjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUhhbmRsZVNvdXAuY3BwCkBAIC0xMjAsOCArMTIw
LDExIEBAIHZvaWQgV2ViQ29yZVN5bmNocm9ub3VzTG9hZGVyOjpydW4oKQogICAgICAgICBnX21h
aW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVy
YXRpb24oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcpOwotc3RhdGlj
IGJvb2wgc3RhcnREYXRhKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIFN0cmluZyB1cmxTdHJpbmcp
Oworc3RhdGljIHZvaWQgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxl
KiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95aW5nKTsKK3N0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2Fs
bGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworc3Rh
dGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyKTsKK3N0YXRpYyB2b2lkIGNsb3NlQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBH
QXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpOworCiBzdGF0aWMgYm9vbCBzdGFydEdpbyhSZXNv
dXJjZUhhbmRsZSogaGFuZGxlLCBLVVJMIHVybCk7CiAKIFJlc291cmNlSGFuZGxlSW50ZXJuYWw6
On5SZXNvdXJjZUhhbmRsZUludGVybmFsKCkKQEAgLTEzMSw2ICsxMzQsMTIgQEAgUmVzb3VyY2VI
YW5kbGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQogICAgICAgICBtX21zZyA9
IDA7CiAgICAgfQogCisgICAgaWYgKG1fcmVxKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKG1fcmVxKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOworICAgICAgICBnX29iamVj
dF91bnJlZihtX3JlcSk7CisgICAgICAgIG1fcmVxID0gMDsKKyAgICB9CisKICAgICBpZiAobV9p
ZGxlSGFuZGxlcikgewogICAgICAgICBnX3NvdXJjZV9yZW1vdmUobV9pZGxlSGFuZGxlcik7CiAg
ICAgICAgIG1faWRsZUhhbmRsZXIgPSAwOwpAQCAtMTQzLDcgKzE1Miw3IEBAIFJlc291cmNlSGFu
ZGxlOjp+UmVzb3VyY2VIYW5kbGUoKQogICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25u
ZWN0X21hdGNoZWQoZC0+bV9tc2csIEdfU0lHTkFMX01BVENIX0RBVEEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCB0aGlzKTsKIAotICAg
IGNsZWFudXBHaW9PcGVyYXRpb24odGhpcywgdHJ1ZSk7CisgICAgY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uKHRoaXMsIHRydWUpOwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJl
Rm9yVVJMKGNvbnN0IEtVUkwgJnVybCkKQEAgLTI5Myw1MCArMzAyLDcgQEAgc3RhdGljIHZvaWQg
Z290Q2h1bmtDYWxsYmFjayhTb3VwTWVzc2FnZSogbXNnLCBTb3VwQnVmZmVyKiBjaHVuaywgZ3Bv
aW50ZXIgZGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0
YShoYW5kbGUuZ2V0KCksIGNodW5rLT5kYXRhLCBjaHVuay0+bGVuZ3RoLCBmYWxzZSk7Ci19Ci0K
LS8vIENhbGxlZCBhdCB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlLCB3aXRoIGFsbCB0aGUgbmVjZXNz
YXJ5IGFib3V0IHRoZSBsYXN0IGluZm9ybWF0aW9ucy4KLS8vIERvZXNuJ3QgZ2V0IGNhbGxlZCBm
b3IgcmVkaXJlY3RzLgotc3RhdGljIHZvaWQgZmluaXNoZWRDYWxsYmFjayhTb3VwU2Vzc2lvbiAq
c2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKLXsKLSAgICBSZWZQdHI8
UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IGFkb3B0UmVmKHN0YXRpY19jYXN0PFJlc291cmNlSGFu
ZGxlKj4oZGF0YSkpOwotICAgIC8vIFRPRE86IG1heWJlIHdlIHNob3VsZCBydW4gdGhpcyBjb2Rl
IGV2ZW4gaWYgdGhlcmUncyBubyBjbGllbnQ/Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVy
bmFsKCk7Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGll
bnQoKTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGQtPm1f
Y2FuY2VsbGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoU09VUF9TVEFUVVNfSVNfVFJB
TlNQT1JUX0VSUk9SKG1zZy0+c3RhdHVzX2NvZGUpKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IHNv
dXBfdXJpX3RvX3N0cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAg
ICAgIFJlc291cmNlRXJyb3IgZXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2ctPnN0YXR1c19jb2RlLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
dHJpbmc6OmZyb21VVEY4KG1zZy0+cmVhc29uX3BocmFzZSkpOwotICAgICAgICBnX2ZyZWUodXJp
KTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgZXJyb3IpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgPT0gU09VUF9TVEFU
VVNfVU5BVVRIT1JJWkVEKSB7Ci0gICAgICAgIGZpbGxSZXNwb25zZUZyb21NZXNzYWdlKG1zZywg
JmQtPm1fcmVzcG9uc2UpOwotICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5k
bGUuZ2V0KCksIGQtPm1fcmVzcG9uc2UpOwotCi0gICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2
ZSBjYW5jZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKLSAgICAgICAgaWYgKGQtPm1fY2FuY2Vs
bGVkKQotICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChtc2ctPnJlc3BvbnNlX2Jv
ZHktPmRhdGEpCi0gICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQo
KSwgbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhLCBtc2ctPnJlc3BvbnNlX2JvZHktPmxlbmd0aCwg
dHJ1ZSk7Ci0gICAgfQotCi0gICAgY2xpZW50LT5kaWRGaW5pc2hMb2FkaW5nKGhhbmRsZS5nZXQo
KSk7CiB9CiAKIC8vIHBhcnNlRGF0YVVybCgpIGlzIHRha2VuIGZyb20gdGhlIENVUkwgaHR0cCBi
YWNrZW5kLgpAQCAtMzU0LDE3ICszMjAsMTYgQEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVy
bChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAgaWYgKCFjbGllbnQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIFN0cmluZyB1cmwgPSBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKTsKLSAgICBBU1NFUlQodXJsLnN0YXJ0c1dpdGgoImRhdGE6IiwgZmFsc2UpKTsKKyAgICBT
dHJpbmcgdXJsU3RyID0gaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCk7CisgICAgQVNT
RVJUKHVybFN0ci5zdGFydHNXaXRoKCJkYXRhOiIsIGZhbHNlKSk7CiAKLSAgICBpbnQgaW5kZXgg
PSB1cmwuZmluZCgnLCcpOworICAgIGludCBpbmRleCA9IHVybFN0ci5maW5kKCcsJyk7CiAgICAg
aWYgKGluZGV4ID09IC0xKSB7CiAgICAgICAgIGNsaWVudC0+Y2Fubm90U2hvd1VSTChoYW5kbGUp
OwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgU3RyaW5nIG1lZGlhVHlwZSA9
IHVybC5zdWJzdHJpbmcoNSwgaW5kZXggLSA1KTsKLSAgICBTdHJpbmcgZGF0YSA9IHVybC5zdWJz
dHJpbmcoaW5kZXggKyAxKTsKKyAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJsU3RyLnN1YnN0cmlu
Zyg1LCBpbmRleCAtIDUpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0
aCgiO2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBAIC0zODEsNyArMzQ2LDYg
QEAgc3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAg
ICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCiAgICAgaWYgKGlzQmFzZTY0KSB7
Ci0gICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CiAgICAgICAg
IHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CiAgICAgICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCkBAIC0zOTAsMzIgKzM1NCw0
NCBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkK
ICAgICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4KICAgICAgICAgaWYgKGQt
Pm1fY2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNpbmNlIFdlYkNvcmUncyBk
ZWNvZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBhbmQgZmFpbHMgb24gQWNp
ZDMgdGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBvdXRMZW5ndGggPSAwOwot
ICAgICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5kYXRhKCksICZvdXRMZW5n
dGgpKTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4gMCkKLSAgICAgICAgICAg
IGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBvdXRMZW5ndGgsIDApOwot
ICAgICAgICBnX2ZyZWUob3V0RGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgaGF2
ZSB0byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAot
ICAgICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIFRleHRFbmNvZGlu
ZyhjaGFyc2V0KSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoIlVURi0x
NiIpOwogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNl
KTsKIAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGEubGVuZ3RoKCkgPiAw
KQotICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5sZW5ndGgoKSAqIHNp
emVvZihVQ2hhciksIDApOwogICAgIH0KIAogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFu
ZGxlLT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2xpZW50LT5kaWRG
aW5pc2hMb2FkaW5nKGhhbmRsZSk7CisgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUt
PmRlZmF1bHRTZXNzaW9uKCk7CisgICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgZC0+bV9yZXEg
PSBzb3VwX3Nlc3Npb25fcmVxdWVzdChzZXNzaW9uLCBoYW5kbGUtPnJlcXVlc3QoKS51cmwoKS5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3IpOworICAgIGlmIChlcnJvcikgeworICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgR0lucHV0U3RyZWFtKiBpbiA9IHNvdXBfcmVxdWVzdF9zZW5kKGQtPm1fcmVxLCAwLCAmZXJy
b3IpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZC0+bV9pbnB1dFN0cmVhbSA9IGluOwor
ICAgIGQtPm1fYnVmZmVyU2l6ZSA9IDgxOTI7CisgICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7CisgICAgZC0+bV90b3RhbCA9IDA7
CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndl
YmtpdC1yZXNvdXJjZSIsIGhhbmRsZSk7CisgICAgaGFuZGxlLT5yZWYoKTsKKworICAgIGQtPm1f
Y2FuY2VsbGFibGUgPSBnX2NhbmNlbGxhYmxlX25ldygpOworICAgIGdfaW5wdXRfc3RyZWFtX3Jl
YWRfYXN5bmMoZC0+bV9pbnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9j
YW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywg
KGlzQmFzZTY0KSA/IDAgOiBHSU5UX1RPX1BPSU5URVIoMSkpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtNDI4LDcgKzQwNCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0RGF0YShSZXNvdXJjZUhh
bmRsZSogaGFuZGxlLCBTdHJpbmcgdXJsU3RyaW5nKQogCiAgICAgLy8gSWYgcGFyc2VEYXRhVXJs
IGlzIGNhbGxlZCBzeW5jaHJvbm91c2x5IHRoZSBqb2IgaXMgbm90IHlldCBlZmZlY3RpdmVseSBz
dGFydGVkCiAgICAgLy8gYW5kIHdlYmtpdCB3b24ndCBuZXZlciBrbm93IHRoYXQgdGhlIGRhdGEg
aGFzIGJlZW4gcGFyc2VkIGV2ZW4gZGlkRmluaXNoTG9hZGluZyBpcyBjYWxsZWQuCi0gICAgZC0+
bV9pZGxlSGFuZGxlciA9IGdfdGltZW91dF9hZGQoMCwgcGFyc2VEYXRhVXJsLCBoYW5kbGUpOwor
ICAgIGQtPm1faWRsZUhhbmRsZXIgPSBnX2lkbGVfYWRkKHBhcnNlRGF0YVVybCwgaGFuZGxlKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNDY5LDYgKzQ0NSwxNTEgQEAgc3RhdGljIHZvaWQg
ZW5zdXJlU2Vzc2lvbklzSW5pdGlhbGl6ZWQoU291cFNlc3Npb24qIHNlc3Npb24pCiAgICAgZ19v
YmplY3Rfc2V0X2RhdGEoR19PQkpFQ1Qoc2Vzc2lvbiksICJ3ZWJraXQtaW5pdCIsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KDB4ZGVhZGJlZWYpKTsKIH0KIAorc3RhdGljIHZvaWQgY2xlYW51cFNv
dXBSZXF1ZXN0T3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95
aW5nID0gZmFsc2UpCit7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+
Z2V0SW50ZXJuYWwoKTsKKworICAgIGlmIChkLT5tX3JlcSkgeworICAgICAgICBnX29iamVjdF9z
ZXRfZGF0YShHX09CSkVDVChkLT5tX3JlcSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYoZC0+bV9yZXEpOworICAgICAgICBkLT5tX3JlcSA9IDA7CisgICAg
fQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYo
ZC0+bV9jYW5jZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAgIH0K
KworICAgIGlmIChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRh
KEdfT0JKRUNUKGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBkLT5tX2lucHV0
U3RyZWFtID0gMDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAgICAgICAgZ19m
cmVlKGQtPm1fYnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAgIH0KKworICAg
IGlmICghaXNEZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNlbmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQq
IHJlcywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBo
YW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNv
dXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJu
YWwoKTsKKyAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQo
KTsKKworICAgIGlmICh1c2VyRGF0YSkgeworICAgICAgICAvLyBObyBuZWVkIHRvIGNhbGwgZ290
Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEgd2lsbAorICAgICAgICAvLyBiZSBy
ZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgZ3Vsb25nIGdvdENodW5rSGFuZGxlciA9
IEdQT0lOVEVSX1RPX1VJTlQodXNlckRhdGEpOworICAgICAgICBpZiAoZ19zaWduYWxfaGFuZGxl
cl9pc19jb25uZWN0ZWQoZC0+bV9tc2csIGdvdENodW5rSGFuZGxlcikpCisgICAgICAgICAgICBn
X3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2csIGdvdENodW5rSGFuZGxlcik7Cisg
ICAgfQorCisgICAgaWYgKGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAgY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAgICBHSW5wdXRTdHJlYW0qIGluID0g
c291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fcmVxLCByZXMsICZlcnJvcik7CisKKyAgICBp
ZiAoZXJyb3IpIHsKKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYgU09VUF9TVEFUVVNfSVNfVFJB
TlNQT1JUX0VSUk9SKGQtPm1fbXNnLT5zdGF0dXNfY29kZSkpIHsKKyAgICAgICAgICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQtPm1fcmVxKTsKKyAgICAgICAgICAgIGNo
YXIqIHVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZhbHNlKTsKKyAgICAgICAgICAg
IFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhTT1VQX0hUVFBf
RVJST1IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQtPm1fbXNn
LT5zdGF0dXNfY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
cmlzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpm
cm9tVVRGOChkLT5tX21zZy0+cmVhc29uX3BocmFzZSkpOworICAgICAgICAgICAgZ19mcmVlKHVy
aXN0cik7CisgICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgICAgICAgICAgY2xl
YW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICBjbGll
bnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChlcnJvci0+ZG9tYWluID09IEdfSU9fRVJS
T1IpIHsKKyAgICAgICAgICAgIFNvdXBVUkkqIHVyaSA9IHNvdXBfcmVxdWVzdF9nZXRfdXJpKGQt
Pm1fcmVxKTsKKyAgICAgICAgICAgIGNoYXIqIHVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0cmluZyh1
cmksIGZhbHNlKTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1
YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvci0+Y29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1cmlzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKKyAg
ICAgICAgICAgIGdfZnJlZSh1cmlzdHIpOworICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9y
KTsKKyAgICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkp
OworICAgICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJv
cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBnX2Vycm9yX2Zy
ZWUoZXJyb3IpOworCisgICAgICAgIGlmIChkLT5tX21zZyAmJiBkLT5tX21zZy0+c3RhdHVzX2Nv
ZGUgPT0gU09VUF9TVEFUVVNfVU5BVVRIT1JJWkVEKSB7CisgICAgICAgICAgICBmaWxsUmVzcG9u
c2VGcm9tTWVzc2FnZShkLT5tX21zZywgJmQtPm1fcmVzcG9uc2UpOworICAgICAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKKwor
ICAgICAgICAgICAgLy8gV2ViQ29yZSBtaWdodCBoYXZlIGNhbmNlbGxlZCB0aGUgam9iIGluIHRo
ZSB3aGlsZQorICAgICAgICAgICAgaWYgKGQtPm1fY2FuY2VsbGVkKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgaWYgKGQtPm1fbXNnLT5yZXNwb25zZV9ib2R5LT5kYXRh
KQorICAgICAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBk
LT5tX21zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmxl
bmd0aCwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRp
bmcoaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5t
X2NhbmNlbGxlZCkgeworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGQtPm1faW5wdXRTdHJlYW0g
PSBpbjsKKyAgICBkLT5tX2J1ZmZlclNpemUgPSA4MTkyOworICAgIGQtPm1fYnVmZmVyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOworICAgIGQtPm1fdG90
YWwgPSAwOworCisgICAgLy8gcmVhZENhbGxiYWNrIG5lZWRzIGl0CisgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1QoZC0+bV9pbnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5k
bGUuZ2V0KCkpOworCisgICAgLy8gV2UgbmVlZCB0byBjaGVjayBpZiBpdCdzIGEgZmlsZTogVVJM
IGFuZCBpZiBpdCBpcyBhIHJlZ3VsYXIKKyAgICAvLyBmaWxlIGFzIGl0IGNvdWxkIGJlIGEgZGly
ZWN0b3J5LiBJbiB0aGF0IGNhc2UgU291cCBwcm9wZXJseQorICAgIC8vIHJldHVybnMgYSBzdHJl
YW0gd2hvc2Ugb3V0Y29tZSBpcyBhIEhUTUwgd2l0aCBhIGxpc3Qgb2YgZmlsZXMKKyAgICAvLyBp
biB0aGUgZGlyZWN0b3J5CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGhhbmRsZS0+cmVxdWVz
dCgpLnVybCgpLnByb3RvY29sKCksICJmaWxlIikKKyAgICAgICAgJiYgR19JU19GSUxFX0lOUFVU
X1NUUkVBTShpbikpIHsKKworICAgICAgICAgICAgR0ZpbGUqIGZpbGUgPSBzb3VwX3JlcXVlc3Rf
ZmlsZV9nZXRfZmlsZShTT1VQX1JFUVVFU1RfRklMRShkLT5tX3JlcSkpOworCisgICAgICAgICAg
ICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOworCisgICAgICAgICAgICByZXNwb25zZS5zZXRV
UkwoaGFuZGxlLT5yZXF1ZXN0KCkudXJsKCkpOworICAgICAgICAgICAgcmVzcG9uc2Uuc2V0TWlt
ZVR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUoZC0+bV9yZXEpKTsKKyAgICAgICAg
ICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVlc3RfZ2V0X2Nv
bnRlbnRfbGVuZ3RoKGQtPm1fcmVxKSk7CisgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVS
ZXNwb25zZShoYW5kbGUuZ2V0KCksIHJlc3BvbnNlKTsKKworICAgICAgICAgICAgaWYgKGQtPm1f
Y2FuY2VsbGVkKSB7CisgICAgICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0aW9u
KGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBnX29iamVjdF91bnJlZihmaWxlKTsKKyAgICB9CisKKyAgICBnX2lucHV0
X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5tX2J1
ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFV
TFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFk
Q2FsbGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4Myw3ICs2MDQsMTcgQEAgc3Rh
dGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgdXJsLnJlbW92
ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiAKLSAgICBk
LT5tX21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2FnZSgpOworICAgIEdFcnJvciogZXJyb3IgPSAw
OworICAgIGQtPm1fcmVxID0gc291cF9zZXNzaW9uX3JlcXVlc3Qoc2Vzc2lvbiwgdXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksICZlcnJvcik7CisgICAgaWYgKGVycm9yKSB7CisgICAgICAgIGdf
ZXJyb3JfZnJlZShlcnJvcik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgZ19v
YmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEpLCAid2Via2l0LXJlc291cmNlIiwgaGFu
ZGxlKTsKKworICAgIGQtPm1fbXNnID0gc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09V
UF9SRVFVRVNUX0hUVFAoZC0+bV9yZXEpKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdl
KGQtPm1fbXNnKTsKKwogICAgIGlmICghZC0+bV9tc2cpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtNDkzLDcgKzYyNCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhhbmRs
ZSogaGFuZGxlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQiLCBH
X0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9jb25u
ZWN0KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxsYmFj
ayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQtc25p
ZmZlZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290Q2h1
bmtDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZ3Vsb25nIGdvdENodW5rSGFuZGxlciA9IGdfc2ln
bmFsX2Nvbm5lY3QoZC0+bV9tc2csICJnb3QtY2h1bmsiLCBHX0NBTExCQUNLKGdvdENodW5rQ2Fs
bGJhY2spLCBoYW5kbGUpOwogCiAjaWZkZWYgSEFWRV9MSUJTT1VQXzJfMjlfOTAKICAgICBTdHJp
bmcgZmlyc3RQYXJ0eVN0cmluZyA9IHJlcXVlc3QuZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJp
bmcoKTsKQEAgLTUwMiw3ICs2MzMsNiBAQCBzdGF0aWMgYm9vbCBzdGFydEh0dHAoUmVzb3VyY2VI
YW5kbGUqIGhhbmRsZSkKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShkLT5t
X21zZywgZmlyc3RQYXJ0eS5nZXQoKSk7CiAgICAgfQogI2VuZGlmCi0gICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1QoZC0+bV9tc2cpLCAicmVzb3VyY2VIYW5kbGUiLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihoYW5kbGUpKTsKIAogICAgIEZvcm1EYXRhKiBodHRwQm9keSA9IGQtPm1fcmVx
dWVzdC5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlzRW1wdHko
KSkgewpAQCAtNTY5LDE1ICs2OTksMTQgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCiAgICAgaWYgKCFzb3VwX21lc3NhZ2VfaGVhZGVyc19nZXRfb25lKGQt
Pm1fbXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkKICAgICAgICAgc291cF9tZXNzYWdl
X2hlYWRlcnNfYXBwZW5kKGQtPm1fbXNnLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiLCAiKi8q
Iik7CiAKLSAgICAvLyBCYWxhbmNlZCBpbiBSZXNvdXJjZUhhbmRsZUludGVybmFsJ3MgZGVzdHJ1
Y3Rvcjsgd2UgbmVlZCB0bwotICAgIC8vIGtlZXAgb3VyIG93biByZWYsIGJlY2F1c2UgYWZ0ZXIg
cXVldWVpbmcgdGhlIG1lc3NhZ2UsIHRoZQotICAgIC8vIHNlc3Npb24gb3ducyB0aGUgaW5pdGlh
bCByZWZlcmVuY2UuCi0gICAgZ19vYmplY3RfcmVmKGQtPm1fbXNnKTsKLSAgICBzb3VwX3Nlc3Np
b25fcXVldWVfbWVzc2FnZShzZXNzaW9uLCBkLT5tX21zZywgZmluaXNoZWRDYWxsYmFjaywgaGFu
ZGxlKTsKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBz
b3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3JlcSwgZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZW5kUmVxdWVzdENhbGxiYWNrLCBHVUlOVF9UT19QT0lO
VEVSKGdvdENodW5rSGFuZGxlcikpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKwogYm9vbCBS
ZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJhbWUqIGZyYW1lKQogewogICAgIEFTU0VSVCghZC0+bV9t
c2cpOwpAQCAtNTkxLDIxICs3MjAsMjEgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6c3RhcnQoRnJh
bWUqIGZyYW1lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBLVVJMIHVybCA9IHJlcXVl
c3QoKS51cmwoKTsKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdXJsLnN0cmluZygpOwotICAgIFN0
cmluZyBwcm90b2NvbCA9IHVybC5wcm90b2NvbCgpOwogCiAgICAgLy8gVXNlZCB0byBzZXQgdGhl
IGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0b3BsZXZlbDsgbWF5IGJlIE5VTEwKICAgICBkLT5tX2Zy
YW1lID0gZnJhbWU7CiAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wsICJkYXRh
IikpCi0gICAgICAgIHJldHVybiBzdGFydERhdGEodGhpcywgdXJsU3RyaW5nKTsKKyAgICBpZiAo
dXJsLnByb3RvY29sSXMoImRhdGEiKSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0RGF0YSh0aGlzLCB1
cmwpOwogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiaHR0cCIpIHx8IGVx
dWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiaHR0cHMiKSkgeworICAgIGlmICh1cmwucHJvdG9j
b2xJbkhUVFBGYW1pbHkoKSkgewogICAgICAgICBpZiAoc3RhcnRIdHRwKHRoaXMpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHBy
b3RvY29sLCAiZmlsZSIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKHByb3RvY29sLCAiZnRwIikgfHwg
ZXF1YWxJZ25vcmluZ0Nhc2UocHJvdG9jb2wsICJmdHBzIikpIHsKKyAgICBpZiAodXJsLnByb3Rv
Y29sSXMoImZpbGUiKQorICAgICAgICB8fCB1cmwucHJvdG9jb2xJcygiZnRwIikKKyAgICAgICAg
fHwgdXJsLnByb3RvY29sSXMoImZ0cHMiKSkgewogICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdl
IGJlIGRvaW5nIGFueSBvdGhlciBwcm90b2NvbHMgaGVyZT8KICAgICAgICAgaWYgKHN0YXJ0R2lv
KHRoaXMsIHVybCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTY2NSwzOCArNzk0LDYg
QEAgdm9pZCBSZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0v
LyBHSU8tYmFzZWQgbG9hZGVyCi0KLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVz
b3VyY2VIYW5kbGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBS
ZXNvdXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAg
aWYgKGQtPm1fZ2ZpbGUpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+
bV9nZmlsZSksICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYo
ZC0+bV9nZmlsZSk7Ci0gICAgICAgIGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChk
LT5tX2NhbmNlbGxhYmxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFi
bGUpOwotICAgICAgICBkLT5tX2NhbmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+
bV9pbnB1dFN0cmVhbSkgewotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5t
X2lucHV0U3RyZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91
bnJlZihkLT5tX2lucHV0U3RyZWFtKTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0g
ICAgfQotCi0gICAgaWYgKGQtPm1fYnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZl
cik7Ci0gICAgICAgIGQtPm1fYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJv
eWluZykKLSAgICAgICAgaGFuZGxlLT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNh
bGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewog
ICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VI
YW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBA
IC03MDcsNyArODA0LDYgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3Vy
Y2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVu
dCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3Nl
X2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRp
b24oaGFuZGxlLmdldCgpKTsKIAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2Vs
bGVkLCB0aGUgY2xpZW50IG1heSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4g
SW4gc3VjaCBjYXNlcyBjYWxsaW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzE2LDkgKzgx
MiwxMSBAQCBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5j
UmVzdWx0KiByZXMsIGdwb2ludGVyKQogICAgICAgICByZXR1cm47CiAKICAgICBjbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKKworICAgIGNsZWFudXBTb3VwUmVxdWVzdE9w
ZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogfQogCi1zdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09i
amVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCitzdGF0aWMgdm9pZCBy
ZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIg
ZGF0YSkKIHsKICAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19jYXN0
PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJlc291
cmNlIikpOwogICAgIGlmICghaGFuZGxlKQpAQCAtNzI4LDcgKzgyNiw3IEBAIHN0YXRpYyB2b2lk
IHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9pbnRl
cikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsK
IAogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7Ci0gICAgICAgIGNsZWFudXBH
aW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3Bl
cmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTczNiwx
NCArODM0LDE1IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdB
c3luY1Jlc3VsdCogcmVzLCBncG9pbnRlcikKIAogICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lu
cHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChkLT5tX2lucHV0U3RyZWFtLCByZXMsICZlcnJvcik7CiAg
ICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1f
Z2ZpbGUpOworICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShkLT5t
X3JlcSk7CisgICAgICAgIGNoYXIqIHVyaXN0ciA9IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIGZh
bHNlKTsKICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3Ry
aW5nKEdfSU9fRVJST1IpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3ItPmNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmlzdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3Nh
Z2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKKyAgICAgICAgZ19mcmVlKHVy
aXN0cik7CiAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNsZWFudXBHaW9P
cGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCks
IHJlc291cmNlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNzU1LDE0MSArODU0
LDM2IEBAIHN0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jl
c3VsdCogcmVzLCBncG9pbnRlcikKICAgICB9CiAKICAgICBkLT5tX3RvdGFsICs9IGJ5dGVzUmVh
ZDsKLSAgICBjbGllbnQtPmRpZFJlY2VpdmVEYXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9idWZmZXIs
IGJ5dGVzUmVhZCwgZC0+bV90b3RhbCk7CisgICAgaWYgKEdfTElLRUxZKCFkYXRhKSkKKyAgICAg
ICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGQtPm1fYnVmZmVyLCBieXRl
c1JlYWQsIGQtPm1fdG90YWwpOworICAgIGVsc2UgeworICAgICAgICAvLyBXZSBoYXZlIHRvIGNv
bnZlcnQgaXQgdG8gVVRGLTE2IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCisgICAgICAgIEdP
d25QdHI8Z3VuaWNoYXIyPiB1bmljb2RlU3RyKGdfdXRmOF90b191dGYxNihkLT5tX2J1ZmZlciwg
Ynl0ZXNSZWFkLCAwLCAwLCAwKSk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFu
ZGxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1bmljb2RlU3RyLmdldCgp
KSwgZ191dGY4X3N0cmxlbihkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkKSAqIHNpemVvZihVQ2hhciks
IDApOworICAgIH0KIAogICAgIC8vIGRpZFJlY2VpdmVEYXRhIG1heSBjYW5jZWwgdGhlIGxvYWQs
IHdoaWNoIG1heSByZWxlYXNlIHRoZSBsYXN0IHJlZmVyZW5jZS4KICAgICBpZiAoZC0+bV9jYW5j
ZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhkLT5t
X2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKLX0KLQotc3Rh
dGljIHZvaWQgb3BlbkNhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMs
IGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGlj
X2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQt
cmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJl
c291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAgUmVz
b3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KLSAgICBpZiAo
ZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9u
KGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHRXJyb3IqIGVy
cm9yID0gMDsKLSAgICBHRmlsZUlucHV0U3RyZWFtKiBpbiA9IGdfZmlsZV9yZWFkX2ZpbmlzaChH
X0ZJTEUoc291cmNlKSwgcmVzLCAmZXJyb3IpOwotICAgIGlmIChlcnJvcikgewotICAgICAgICBj
aGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAgUmVzb3VyY2VF
cnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1IpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpIDogU3RyaW5n
KCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsK
LSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGll
bnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKKyAgICAgICAgY2xlYW51
cFNvdXBSZXF1ZXN0T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBkLT5tX2lucHV0U3RyZWFtID0gR19JTlBVVF9TVFJFQU0oaW4pOwotICAgIGQt
Pm1fYnVmZmVyU2l6ZSA9IDgxOTI7Ci0gICAgZC0+bV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4oZ19tYWxsb2MoZC0+bV9idWZmZXJTaXplKSk7Ci0gICAgZC0+bV90b3RhbCA9IDA7Ci0KLSAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3RyZWFtKSwgIndlYmtpdC1y
ZXNvdXJjZSIsIGhhbmRsZS5nZXQoKSk7CiAgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhk
LT5tX2lucHV0U3RyZWFtLCBkLT5tX2J1ZmZlciwgZC0+bV9idWZmZXJTaXplLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBkLT5tX2NhbmNlbGxhYmxl
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxiYWNrLCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgZGF0YSk7CiB9CiAKLXN0YXRp
YyB2b2lkIHF1ZXJ5SW5mb0NhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBy
ZXMsIGdwb2ludGVyKQotewotICAgIFJlZlB0cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3Rh
dGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihnX29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJr
aXQtcmVzb3VyY2UiKSk7Ci0gICAgaWYgKCFoYW5kbGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7Ci0gICAg
UmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0KLSAgICBp
ZiAoZC0+bV9jYW5jZWxsZWQpIHsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUu
Z2V0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVzb3VyY2VSZXNwb25zZSBy
ZXNwb25zZTsKLQotICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2ZpbGUpOwot
ICAgIHJlc3BvbnNlLnNldFVSTChLVVJMKEtVUkwoKSwgdXJpKSk7Ci0gICAgZ19mcmVlKHVyaSk7
Ci0KLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHRmlsZUluZm8qIGluZm8gPSBnX2ZpbGVf
cXVlcnlfaW5mb19maW5pc2goZC0+bV9nZmlsZSwgcmVzLCAmZXJyb3IpOwotCi0gICAgaWYgKGVy
cm9yKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0byBiZSBhYmxlIHRvIGhhbmRsZSBmdHAgVVJJcyBw
cm9wZXJseSwgd2UgbXVzdAotICAgICAgICAvLyBjaGVjayBpZiB0aGUgZXJyb3IgaXMgR19JT19F
UlJPUl9OT1RfTU9VTlRFRCwgYW5kIGlmIHNvLAotICAgICAgICAvLyBjYWxsIGdfZmlsZV9tb3Vu
dF9lbmNsb3Npbmdfdm9sdW1lKCkgdG8gbW91bnQgdGhlIGZ0cAotICAgICAgICAvLyBzZXJ2ZXIg
KGFuZCB0aGVuIGtlZXAgdHJhY2sgb2YgdGhlIGZhY3QgdGhhdCB3ZSBtb3VudGVkIGl0LAotICAg
ICAgICAvLyBhbmQgc2V0IGEgdGltZW91dCB0byB1bm1vdW50IGl0IGxhdGVyIGFmdGVyIGl0J3Mg
YmVlbiBpZGxlCi0gICAgICAgIC8vIGZvciBhIHdoaWxlKS4KLSAgICAgICAgY2hhciogdXJpID0g
Z19maWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3Vy
Y2VFcnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yLT5jb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJy
b3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKLSAgICAg
ICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIGNs
ZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgY2xpZW50LT5kaWRGYWls
KGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoZ19maWxlX2luZm9fZ2V0X2ZpbGVfdHlwZShpbmZvKSAhPSBHX0ZJTEVfVFlQRV9S
RUdVTEFSKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB3aGF0IGlmIHRoZSBVUkkgcG9pbnRzIHRvIGEg
ZGlyZWN0b3J5PyBTaG91bGQgd2UKLSAgICAgICAgLy8gZ2VuZXJhdGUgYSBsaXN0aW5nPyBIb3c/
IFdoYXQgZG8gb3RoZXIgYmFja2VuZHMgZG8gaGVyZT8KLSAgICAgICAgY2hhciogdXJpID0gZ19m
aWxlX2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VF
cnJvcihnX3F1YXJrX3RvX3N0cmluZyhHX0lPX0VSUk9SKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfSU9fRVJST1JfRkFJTEVELAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJh
dGlvbihoYW5kbGUuZ2V0KCkpOwotICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgp
LCByZXNvdXJjZUVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHJlc3BvbnNl
LnNldE1pbWVUeXBlKGdfZmlsZV9pbmZvX2dldF9jb250ZW50X3R5cGUoaW5mbykpOwotICAgIHJl
c3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChnX2ZpbGVfaW5mb19nZXRfc2l6ZShpbmZv
KSk7Ci0KLSAgICBHVGltZVZhbCB0djsKLSAgICBnX2ZpbGVfaW5mb19nZXRfbW9kaWZpY2F0aW9u
X3RpbWUoaW5mbywgJnR2KTsKLSAgICByZXNwb25zZS5zZXRMYXN0TW9kaWZpZWREYXRlKHR2LnR2
X3NlYyk7Ci0KLSAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUuZ2V0KCksIHJl
c3BvbnNlKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lv
T3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBn
X2ZpbGVfcmVhZF9hc3luYyhkLT5tX2dmaWxlLCBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2Fu
Y2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgb3BlbkNhbGxiYWNrLCAwKTsKLX0KIHN0
YXRpYyBib29sIHN0YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogewog
ICAgIEFTU0VSVChoYW5kbGUpOwogCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhh
bmRsZS0+Z2V0SW50ZXJuYWwoKTsKLQogICAgIGlmIChoYW5kbGUtPnJlcXVlc3QoKS5odHRwTWV0
aG9kKCkgIT0gIkdFVCIgJiYgaGFuZGxlLT5yZXF1ZXN0KCkuaHR0cE1ldGhvZCgpICE9ICJQT1NU
IikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgZ2NoYXIqIHVybHN0cjsKKyAgICBTb3Vw
U2Vzc2lvbiogc2Vzc2lvbiA9IGhhbmRsZS0+ZGVmYXVsdFNlc3Npb24oKTsKKyAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOworCiAgICAgLy8gR0lP
IGRvZXNuJ3Qga25vdyBob3cgdG8gaGFuZGxlIHJlZnMgYW5kIHF1ZXJpZXMsIHNvIHJlbW92ZSB0
aGVtCiAgICAgLy8gVE9ETzogdXNlIEtVUkwuZmlsZVN5c3RlbVBhdGggYWZ0ZXIgS1VSTEd0ayBh
bmQgRmlsZVN5c3RlbUd0ayBhcmUKICAgICAvLyB1c2luZyBHSU8gaW50ZXJuYWxseSwgYW5kIHBy
b3ZpZGluZyBVUklzIGluc3RlYWQgb2YgZmlsZSBwYXRocwpAQCAtOTAyLDIzICs4OTYsMjcgQEAg
c3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgS1VSTCB1cmwpCiAg
ICAgLy8gZ19maWxlbmFtZV9mcm9tX3VyaSAodXNlZCBpbnRlcm5hbGx5IGJ5IEdGaWxlKSBoYXMg
cHJvYmxlbXMKICAgICAvLyBkZWNvZGluZyBzdHJpbmdzIHdpdGggYXJiaXRyYXJ5IHBlcmNlbnQg
c2lnbnMKICAgICBpZiAodXJsLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgIGQtPm1fZ2ZpbGUgPSBn
X2ZpbGVfbmV3X2Zvcl9wYXRoKHVybC5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpICsgc2l6ZW9m
KCJmaWxlOi8vIikgLSAxKTsKKyAgICAgICAgdXJsc3RyID0gZ19zdHJkdXAodXJsLnByZXR0eVVS
TCgpLnV0ZjgoKS5kYXRhKCkpOwogICAgIGVsc2UKICNlbmRpZgotICAgICAgICBkLT5tX2dmaWxl
ID0gZ19maWxlX25ld19mb3JfdXJpKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBn
X29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2dmaWxlKSwgIndlYmtpdC1yZXNvdXJjZSIs
IGhhbmRsZSk7CisgICAgICAgIHVybHN0ciA9IGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIC8vIGJhbGFuY2VkIGJ5IGEgZGVyZWYoKSBpbiBjbGVhbnVwR2lvT3Bl
cmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgorICAgIEdFcnJvciogZXJyb3IgPSAwOwor
ICAgIGQtPm1fcmVxID0gc291cF9zZXNzaW9uX3JlcXVlc3Qoc2Vzc2lvbiwgdXJsc3RyLCAmZXJy
b3IpOworICAgIGdfZnJlZSh1cmxzdHIpOworICAgIGlmIChlcnJvcikgeworICAgICAgICBnX2Vy
cm9yX2ZyZWUoZXJyb3IpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGdfb2Jq
ZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1fcmVxKSwgIndlYmtpdC1yZXNvdXJjZSIsIGhhbmRs
ZSk7CisKKyAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cFNvdXBSZXF1ZXN0
T3BlcmF0aW9uLCB3aGljaCBzaG91bGQgYWx3YXlzIHJ1bgogICAgIGhhbmRsZS0+cmVmKCk7CiAK
ICAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKLSAgICBnX2ZpbGVf
cXVlcnlfaW5mb19hc3luYyhkLT5tX2dmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfRklMRV9BVFRSSUJVVEVfU1RBTkRBUkRfVFlQRSAiLCIKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX0NPTlRFTlRfVFlQRSAiLCIKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1NJWkUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX1FVRVJZX0lORk9fTk9ORSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFi
bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlJbmZvQ2FsbGJhY2ssIDApOwor
ICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKGQtPm1fcmVxLCBkLT5tX2NhbmNlbGxhYmxlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2ssIDApOworCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
UmVzb3VyY2VSZXF1ZXN0LmgKaW5kZXggYTFkOTE2Zi4uYzFjNzExNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTY3LDYgKzY3LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBNZXNzYWdl
KHNvdXBNZXNzYWdlKTsKICAgICAgICAgfQogCisgICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKSBjb25zdDsKICAgICAgICAgU291cE1lc3NhZ2Uq
IHRvU291cE1lc3NhZ2UoKSBjb25zdDsKICAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3Nh
Z2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcAppbmRleCA2MmRlYjAxLi5h
MzE2NWFmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJj
ZVJlcXVlc3RTb3VwLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNv
dXJjZVJlcXVlc3RTb3VwLmNwcApAQCAtMSwzICsxLDQgQEAKKwogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwOSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEKICAqCkBAIC0zMyw2ICszNCwyOSBAQCB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3ZvaWQgUmVzb3VyY2VS
ZXF1ZXN0Ojp1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UpIGNvbnN0
Cit7CisgICAgZ19vYmplY3Rfc2V0KHNvdXBNZXNzYWdlLCBTT1VQX01FU1NBR0VfTUVUSE9ELCBo
dHRwTWV0aG9kKCkudXRmOCgpLmRhdGEoKSwgTlVMTCk7CisKKyAgICBjb25zdCBIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzID0gaHR0cEhlYWRlckZpZWxkcygpOworICAgIFNvdXBNZXNzYWdlSGVhZGVy
cyogc291cEhlYWRlcnMgPSBzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzOworICAgIGlmICgh
aGVhZGVycy5pc0VtcHR5KCkpIHsKKyAgICAgICAgSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gaGVhZGVycy5lbmQoKTsKKyAgICAgICAgZm9yIChIVFRQSGVhZGVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGhlYWRlcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKHNvdXBIZWFkZXJzLCBpdC0+Zmlyc3Qu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgaXQtPnNlY29uZC51dGY4KCkuZGF0YSgpKTsKKyAgICB9
CisKKyNpZmRlZiBIQVZFX0xJQlNPVVBfMl8yOV85MAorICAgIFN0cmluZyBmaXJzdFBhcnR5U3Ry
aW5nID0gZmlyc3RQYXJ0eUZvckNvb2tpZXMoKS5zdHJpbmcoKTsKKyAgICBpZiAoIWZpcnN0UGFy
dHlTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgIEdPd25QdHI8U291cFVSST4gZmlyc3RQYXJ0
eShzb3VwX3VyaV9uZXcoZmlyc3RQYXJ0eVN0cmluZy51dGY4KCkuZGF0YSgpKSk7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoc291cE1lc3NhZ2UsIGZpcnN0UGFydHkuZ2V0
KCkpOworICAgIH0KKyNlbmRpZgorCisgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhzb3VwTWVz
c2FnZSwgbV9zb3VwRmxhZ3MpOworfQorCiBTb3VwTWVzc2FnZSogUmVzb3VyY2VSZXF1ZXN0Ojp0
b1NvdXBNZXNzYWdlKCkgY29uc3QKIHsKICAgICBTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UgPSBz
b3VwX21lc3NhZ2VfbmV3KGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgpLCB1cmwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsK
</data>
<flag name="review"
          id="46602"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>62413</attachid>
            <date>2010-07-23 04:45:17 -0700</date>
            <delta_ts>2010-07-23 04:45:17 -0700</delta_ts>
            <desc>WebKitGtk+ using libsoup SoupURILoader new API</desc>
            <filename>webkitgtk-soup.patch</filename>
            <type>text/plain</type>
            <size>29777</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZUludGVy
bmFsLmggYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGVJbnRlcm5hbC5o
CmluZGV4IDdiNmU5NjAuLmI5NThiMTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9SZXNvdXJjZUhhbmRsZUludGVybmFsLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL1Jlc291cmNlSGFuZGxlSW50ZXJuYWwuaApAQCAtNDYsNiArNDYsNyBAQAogI2VuZGlmCiAK
ICNpZiBVU0UoU09VUCkKKyNpbmNsdWRlIDxHUmVmUHRyLmg+CiAjaW5jbHVkZSA8bGlic291cC9z
b3VwLmg+CiBjbGFzcyBGcmFtZTsKICNlbmRpZgpAQCAtMTE1LDcgKzExNiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBVU0UoU09VUCkKICAgICAgICAgICAgICwgbV9tc2coMCkKICAgICAg
ICAgICAgICwgbV9jYW5jZWxsZWQoZmFsc2UpCi0gICAgICAgICAgICAsIG1fZ2ZpbGUoMCkKKyAg
ICAgICAgICAgICwgbV9yZXEoMCkKICAgICAgICAgICAgICwgbV9pbnB1dFN0cmVhbSgwKQogICAg
ICAgICAgICAgLCBtX2NhbmNlbGxhYmxlKDApCiAgICAgICAgICAgICAsIG1fYnVmZmVyKDApCkBA
IC0xMjMsNiArMTI0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgLCBtX3Rv
dGFsKDApCiAgICAgICAgICAgICAsIG1faWRsZUhhbmRsZXIoMCkKICAgICAgICAgICAgICwgbV9m
cmFtZSgwKQorICAgICAgICAgICAgLCBtX2dvdENodW5rSGFuZGxlcigwKQogI2VuZGlmCiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgICAgICAgICAsIG1fam9iKDApCkBAIC0xOTgsMTMgKzIwMCwxNCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNvdXBNZXNzYWdlKiBtX21zZzsKICAgICAg
ICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwogICAgICAgICBib29sIG1fY2FuY2VsbGVk
OwotICAgICAgICBHRmlsZSogbV9nZmlsZTsKKyAgICAgICAgR1JlZlB0cjxTb3VwUmVxdWVzdD4g
bV9yZXE7CiAgICAgICAgIEdJbnB1dFN0cmVhbSogbV9pbnB1dFN0cmVhbTsKICAgICAgICAgR0Nh
bmNlbGxhYmxlKiBtX2NhbmNlbGxhYmxlOwogICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKICAgICAg
ICAgZ3NpemUgbV9idWZmZXJTaXplLCBtX3RvdGFsOwogICAgICAgICBndWludCBtX2lkbGVIYW5k
bGVyOwogICAgICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICAgICAgZ3Vsb25nIG1fZ290Q2h1bmtI
YW5kbGVyOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFFOZXR3b3JrUmVwbHlI
YW5kbGVyKiBtX2pvYjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1Jlc291cmNlSGFuZGxlU291cC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9S
ZXNvdXJjZUhhbmRsZVNvdXAuY3BwCmluZGV4IDk2YTJmMjUuLjgwMzdhYzYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlSGFuZGxlU291cC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VIYW5kbGVTb3VwLmNwcApA
QCAtMTIwLDggKzEyMCwxMCBAQCB2b2lkIFdlYkNvcmVTeW5jaHJvbm91c0xvYWRlcjo6cnVuKCkK
ICAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwogfQogCi1zdGF0aWMgdm9pZCBj
bGVhbnVwR2lvT3BlcmF0aW9uKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIGJvb2wgaXNEZXN0cm95
aW5nKTsKLXN0YXRpYyBib29sIHN0YXJ0RGF0YShSZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBTdHJp
bmcgdXJsU3RyaW5nKTsKK3N0YXRpYyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihS
ZXNvdXJjZUhhbmRsZSogaGFuZGxlLCBib29sIGlzRGVzdHJveWluZyk7CitzdGF0aWMgdm9pZCBz
ZW5kUmVxdWVzdENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdw
b2ludGVyKTsKK3N0YXRpYyB2b2lkIHJlYWRDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCogcmVzLCBncG9pbnRlcik7CitzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdPYmpl
Y3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKTsKIHN0YXRpYyBib29sIHN0
YXJ0R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKTsKIAogUmVzb3VyY2VIYW5k
bGVJbnRlcm5hbDo6flJlc291cmNlSGFuZGxlSW50ZXJuYWwoKQpAQCAtMTMxLDYgKzEzMywxMSBA
QCBSZXNvdXJjZUhhbmRsZUludGVybmFsOjp+UmVzb3VyY2VIYW5kbGVJbnRlcm5hbCgpCiAgICAg
ICAgIG1fbXNnID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9yZXEpIHsKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0X2RhdGEoR19PQkpFQ1QobV9yZXEuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgMCk7
CisgICAgICAgIG1fcmVxLmNsZWFyKCk7CisgICAgfQorCiAgICAgaWYgKG1faWRsZUhhbmRsZXIp
IHsKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1faWRsZUhhbmRsZXIpOwogICAgICAgICBtX2lk
bGVIYW5kbGVyID0gMDsKQEAgLTE0Myw3ICsxNTAsNyBAQCBSZXNvdXJjZUhhbmRsZTo6flJlc291
cmNlSGFuZGxlKCkKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVk
KGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCwgdGhpcyk7CiAKLSAgICBjbGVhbnVwR2lv
T3BlcmF0aW9uKHRoaXMsIHRydWUpOworICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbih0
aGlzLCB0cnVlKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRsZTo6cHJlcGFyZUZvclVSTChjb25z
dCBLVVJMICZ1cmwpCkBAIC0xODUsOSArMTkyLDggQEAgc3RhdGljIHZvaWQgcmVzdGFydGVkQ2Fs
bGJhY2soU291cE1lc3NhZ2UqIG1zZywgZ3BvaW50ZXIgZGF0YSkKICAgICBpZiAoZC0+bV9jYW5j
ZWxsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNoYXIqIHVyaSA9IHNvdXBfdXJpX3RvX3N0
cmluZyhzb3VwX21lc3NhZ2VfZ2V0X3VyaShtc2cpLCBmYWxzZSk7Ci0gICAgU3RyaW5nIGxvY2F0
aW9uID0gU3RyaW5nKHVyaSk7Ci0gICAgZ19mcmVlKHVyaSk7CisgICAgR093blB0cjxjaGFyPiB1
cmkoc291cF91cmlfdG9fc3RyaW5nKHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyksIGZhbHNlKSk7
CisgICAgU3RyaW5nIGxvY2F0aW9uID0gU3RyaW5nKHVyaS5nZXQoKSk7CiAgICAgS1VSTCBuZXdV
UkwgPSBLVVJMKGhhbmRsZS0+Zmlyc3RSZXF1ZXN0KCkudXJsKCksIGxvY2F0aW9uKTsKIAogICAg
IFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gaGFuZGxlLT5maXJzdFJlcXVlc3QoKTsKQEAgLTI5
Myw1MiArMjk5LDExIEBAIHN0YXRpYyB2b2lkIGdvdENodW5rQ2FsbGJhY2soU291cE1lc3NhZ2Uq
IG1zZywgU291cEJ1ZmZlciogY2h1bmssIGdwb2ludGVyIGRhdGEpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLmdldCgpLCBjaHVuay0+ZGF0YSwg
Y2h1bmstPmxlbmd0aCwgZmFsc2UpOwotfQotCi0vLyBDYWxsZWQgYXQgdGhlIGVuZCBvZiB0aGUg
bWVzc2FnZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBhYm91dCB0aGUgbGFzdCBpbmZvcm1hdGlv
bnMuCi0vLyBEb2Vzbid0IGdldCBjYWxsZWQgZm9yIHJlZGlyZWN0cy4KLXN0YXRpYyB2b2lkIGZp
bmlzaGVkQ2FsbGJhY2soU291cFNlc3Npb24gKnNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIGdw
b2ludGVyIGRhdGEpCi17Ci0gICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBhZG9w
dFJlZihzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGRhdGEpKTsKLSAgICAvLyBUT0RPOiBt
YXliZSB3ZSBzaG91bGQgcnVuIHRoaXMgY29kZSBldmVuIGlmIHRoZXJlJ3Mgbm8gY2xpZW50Pwot
ICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNvdXJjZUhhbmRsZUlu
dGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgUmVzb3VyY2VIYW5kbGVD
bGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xpZW50KCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtc2ctPnN0YXR1c19jb2Rl
KSkgewotICAgICAgICBjaGFyKiB1cmkgPSBzb3VwX3VyaV90b19zdHJpbmcoc291cF9tZXNzYWdl
X2dldF91cmkobXNnKSwgZmFsc2UpOwotICAgICAgICBSZXNvdXJjZUVycm9yIGVycm9yKGdfcXVh
cmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbXNnLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nOjpmcm9tVVRGOChtc2ctPnJlYXNvbl9w
aHJhc2UpKTsKLSAgICAgICAgZ19mcmVlKHVyaSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbCho
YW5kbGUuZ2V0KCksIGVycm9yKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICht
c2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgewotICAgICAgICBm
aWxsUmVzcG9uc2VGcm9tTWVzc2FnZShtc2csICZkLT5tX3Jlc3BvbnNlKTsKLSAgICAgICAgY2xp
ZW50LT5kaWRSZWNlaXZlUmVzcG9uc2UoaGFuZGxlLmdldCgpLCBkLT5tX3Jlc3BvbnNlKTsKIAot
ICAgICAgICAvLyBXZWJDb3JlIG1pZ2h0IGhhdmUgY2FuY2VsbGVkIHRoZSBqb2IgaW4gdGhlIHdo
aWxlCi0gICAgICAgIGlmIChkLT5tX2NhbmNlbGxlZCkKLSAgICAgICAgICAgIHJldHVybjsKLQot
ICAgICAgICBpZiAobXNnLT5yZXNwb25zZV9ib2R5LT5kYXRhKQotICAgICAgICAgICAgY2xpZW50
LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIG1zZy0+cmVzcG9uc2VfYm9keS0+ZGF0YSwg
bXNnLT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOwotICAgIH0KLQotICAgIGNsaWVudC0+
ZGlkRmluaXNoTG9hZGluZyhoYW5kbGUuZ2V0KCkpOwogfQogCisjZGVmaW5lIEJVRkZFUl9TSVpF
IDgxOTIKKwogLy8gcGFyc2VEYXRhVXJsKCkgaXMgdGFrZW4gZnJvbSB0aGUgQ1VSTCBodHRwIGJh
Y2tlbmQuCiBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0
YSkKIHsKQEAgLTM2NCw3ICszMjksNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdw
b2ludGVyIGNhbGxiYWNrRGF0YSkKICAgICB9CiAKICAgICBTdHJpbmcgbWVkaWFUeXBlID0gdXJs
LnN1YnN0cmluZyg1LCBpbmRleCAtIDUpOwotICAgIFN0cmluZyBkYXRhID0gdXJsLnN1YnN0cmlu
ZyhpbmRleCArIDEpOwogCiAgICAgYm9vbCBpc0Jhc2U2NCA9IG1lZGlhVHlwZS5lbmRzV2l0aCgi
O2Jhc2U2NCIsIGZhbHNlKTsKICAgICBpZiAoaXNCYXNlNjQpCkBAIC0zODEsNyArMzQ1LDYgQEAg
c3RhdGljIGdib29sZWFuIHBhcnNlRGF0YVVybChncG9pbnRlciBjYWxsYmFja0RhdGEpCiAgICAg
cmVzcG9uc2Uuc2V0TWltZVR5cGUobWltZVR5cGUpOwogCiAgICAgaWYgKGlzQmFzZTY0KSB7Ci0g
ICAgICAgIGRhdGEgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoZGF0YSk7CiAgICAgICAgIHJl
c3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoY2hhcnNldCk7CiAgICAgICAgIGNsaWVudC0+ZGlk
UmVjZWl2ZVJlc3BvbnNlKGhhbmRsZSwgcmVzcG9uc2UpOwogCkBAIC0zOTAsMzIgKzM1Myw0MCBA
QCBzdGF0aWMgZ2Jvb2xlYW4gcGFyc2VEYXRhVXJsKGdwb2ludGVyIGNhbGxiYWNrRGF0YSkKICAg
ICAgICAgLy8gb3V0IGluIGVpdGhlciBvZiB0aG9zZSBjYXNlcy4KICAgICAgICAgaWYgKGQtPm1f
Y2FuY2VsbGVkIHx8ICFoYW5kbGUtPmNsaWVudCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIC8vIFVzZSB0aGUgR0xpYiBCYXNlNjQsIHNpbmNlIFdlYkNvcmUncyBkZWNv
ZGVyIGlzbid0Ci0gICAgICAgIC8vIGdlbmVyYWwtcHVycG9zZSBhbmQgZmFpbHMgb24gQWNpZDMg
dGVzdCA5NyAod2hpdGVzcGFjZSkuCi0gICAgICAgIHNpemVfdCBvdXRMZW5ndGggPSAwOwotICAg
ICAgICBjaGFyKiBvdXREYXRhID0gMDsKLSAgICAgICAgb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KGdfYmFzZTY0X2RlY29kZShkYXRhLnV0ZjgoKS5kYXRhKCksICZvdXRMZW5ndGgp
KTsKLSAgICAgICAgaWYgKG91dERhdGEgJiYgb3V0TGVuZ3RoID4gMCkKLSAgICAgICAgICAgIGNs
aWVudC0+ZGlkUmVjZWl2ZURhdGEoaGFuZGxlLCBvdXREYXRhLCBvdXRMZW5ndGgsIDApOwotICAg
ICAgICBnX2ZyZWUob3V0RGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2UgaGF2ZSB0
byBjb252ZXJ0IHRvIFVURi0xNiBlYXJseSBkdWUgdG8gbGltaXRhdGlvbnMgaW4gS1VSTAotICAg
ICAgICBkYXRhID0gZGVjb2RlVVJMRXNjYXBlU2VxdWVuY2VzKGRhdGEsIFRleHRFbmNvZGluZyhj
aGFyc2V0KSk7CiAgICAgICAgIHJlc3BvbnNlLnNldFRleHRFbmNvZGluZ05hbWUoIlVURi0xNiIp
OwogICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSZXNwb25zZShoYW5kbGUsIHJlc3BvbnNlKTsK
IAogICAgICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWhhbmRsZS0+Y2xpZW50KCkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKGRhdGEubGVuZ3RoKCkgPiAwKQot
ICAgICAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5sZW5ndGgoKSAqIHNpemVv
ZihVQ2hhciksIDApOwogICAgIH0KIAogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhaGFuZGxl
LT5jbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY2xpZW50LT5kaWRGaW5p
c2hMb2FkaW5nKGhhbmRsZSk7CisgICAgU291cFNlc3Npb24qIHNlc3Npb24gPSBoYW5kbGUtPmRl
ZmF1bHRTZXNzaW9uKCk7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgIGQtPm1fcmVx
ID0gc291cF9zZXNzaW9uX3JlcXVlc3Qoc2Vzc2lvbiwgaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51
cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCkpOworICAgIGlmIChl
cnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgR0lucHV0U3RyZWFtKiBpbiA9IHNv
dXBfcmVxdWVzdF9zZW5kKGQtPm1fcmVxLmdldCgpLCAwLCAmZXJyb3Iub3V0UHRyKCkpOworICAg
IGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZC0+bV9pbnB1dFN0cmVh
bSA9IGluOworICAgIGQtPm1fYnVmZmVyU2l6ZSA9IEJVRkZFUl9TSVpFOworICAgIGQtPm1fYnVm
ZmVyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGdfbWFsbG9jKGQtPm1fYnVmZmVyU2l6ZSkpOworICAg
IGQtPm1fdG90YWwgPSAwOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9p
bnB1dFN0cmVhbSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAgIGhhbmRsZS0+cmVm
KCk7CisKKyAgICBkLT5tX2NhbmNlbGxhYmxlID0gZ19jYW5jZWxsYWJsZV9uZXcoKTsKKyAgICBn
X2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBk
LT5tX2J1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZ
X0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWFkQ2FsbGJhY2ssIChpc0Jhc2U2NCkgPyAwIDogR0lOVF9UT19QT0lOVEVSKDEpKTsKIAog
ICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQyOCw3ICszOTksNyBAQCBzdGF0aWMgYm9vbCBzdGFy
dERhdGEoUmVzb3VyY2VIYW5kbGUqIGhhbmRsZSwgU3RyaW5nIHVybFN0cmluZykKIAogICAgIC8v
IElmIHBhcnNlRGF0YVVybCBpcyBjYWxsZWQgc3luY2hyb25vdXNseSB0aGUgam9iIGlzIG5vdCB5
ZXQgZWZmZWN0aXZlbHkgc3RhcnRlZAogICAgIC8vIGFuZCB3ZWJraXQgd29uJ3QgbmV2ZXIga25v
dyB0aGF0IHRoZSBkYXRhIGhhcyBiZWVuIHBhcnNlZCBldmVuIGRpZEZpbmlzaExvYWRpbmcgaXMg
Y2FsbGVkLgotICAgIGQtPm1faWRsZUhhbmRsZXIgPSBnX3RpbWVvdXRfYWRkKDAsIHBhcnNlRGF0
YVVybCwgaGFuZGxlKTsKKyAgICBkLT5tX2lkbGVIYW5kbGVyID0gZ19pZGxlX2FkZChwYXJzZURh
dGFVcmwsIGhhbmRsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ2OSw2ICs0NDAsMTQz
IEBAIHN0YXRpYyB2b2lkIGVuc3VyZVNlc3Npb25Jc0luaXRpYWxpemVkKFNvdXBTZXNzaW9uKiBz
ZXNzaW9uKQogICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKHNlc3Npb24pLCAid2Via2l0
LWluaXQiLCByZWludGVycHJldF9jYXN0PHZvaWQqPigweGRlYWRiZWVmKSk7CiB9CiAKK3N0YXRp
YyB2b2lkIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihSZXNvdXJjZUhhbmRsZSogaGFuZGxl
LCBib29sIGlzRGVzdHJveWluZyA9IGZhbHNlKQoreworICAgIFJlc291cmNlSGFuZGxlSW50ZXJu
YWwqIGQgPSBoYW5kbGUtPmdldEludGVybmFsKCk7CisKKyAgICBpZiAoZC0+bV9yZXEpIHsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEuZ2V0KCkpLCAid2Via2l0
LXJlc291cmNlIiwgMCk7CisgICAgICAgIGQtPm1fcmVxLmNsZWFyKCk7CisgICAgfQorCisgICAg
aWYgKGQtPm1fY2FuY2VsbGFibGUpIHsKKyAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9jYW5j
ZWxsYWJsZSk7CisgICAgICAgIGQtPm1fY2FuY2VsbGFibGUgPSAwOworICAgIH0KKworICAgIGlm
IChkLT5tX2lucHV0U3RyZWFtKSB7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KGQtPm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgMCk7CisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGQtPm1faW5wdXRTdHJlYW0pOworICAgICAgICBkLT5tX2lucHV0U3RyZWFtID0g
MDsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9idWZmZXIpIHsKKyAgICAgICAgZ19mcmVlKGQtPm1f
YnVmZmVyKTsKKyAgICAgICAgZC0+bV9idWZmZXIgPSAwOworICAgIH0KKworICAgIGlmICghaXNE
ZXN0cm95aW5nKQorICAgICAgICBoYW5kbGUtPmRlcmVmKCk7Cit9CisKK3N0YXRpYyB2b2lkIHNl
bmRSZXF1ZXN0Q2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3Bv
aW50ZXIgdXNlckRhdGEpCit7CisgICAgUmVmUHRyPFJlc291cmNlSGFuZGxlPiBoYW5kbGUgPSBz
dGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dldF9kYXRhKHNvdXJjZSwgIndl
YmtpdC1yZXNvdXJjZSIpKTsKKyAgICBpZiAoIWhhbmRsZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKyAg
ICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFuZGxlLT5jbGllbnQoKTsKKworICAg
IGlmIChkLT5tX2dvdENodW5rSGFuZGxlcikgeworICAgICAgICAvLyBObyBuZWVkIHRvIGNhbGwg
Z290Q2h1bmtIYW5kbGVyIGFueW1vcmUuIFJlY2VpdmVkIGRhdGEgd2lsbAorICAgICAgICAvLyBi
ZSByZXBvcnRlZCBieSByZWFkQ2FsbGJhY2sKKyAgICAgICAgaWYgKGdfc2lnbmFsX2hhbmRsZXJf
aXNfY29ubmVjdGVkKGQtPm1fbXNnLCBkLT5tX2dvdENodW5rSGFuZGxlcikpCisgICAgICAgICAg
ICBnX3NpZ25hbF9oYW5kbGVyX2Rpc2Nvbm5lY3QoZC0+bV9tc2csIGQtPm1fZ290Q2h1bmtIYW5k
bGVyKTsKKyAgICB9CisKKyAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgeworICAg
ICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBHSW5wdXRT
dHJlYW0qIGluID0gc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKGQtPm1fcmVxLmdldCgpLCByZXMs
ICZlcnJvci5vdXRQdHIoKSk7CisKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgaWYgKGQtPm1f
bXNnICYmIFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihkLT5tX21zZy0+c3RhdHVzX2Nv
ZGUpKSB7CisgICAgICAgICAgICBTb3VwVVJJKiB1cmkgPSBzb3VwX3JlcXVlc3RfZ2V0X3VyaShk
LT5tX3JlcS5nZXQoKSk7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3Vy
aV90b19zdHJpbmcodXJpLCBmYWxzZSkpOworICAgICAgICAgICAgUmVzb3VyY2VFcnJvciByZXNv
dXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9FUlJPUiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+bV9tc2ctPnN0YXR1c19jb2RlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVN0ci5nZXQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmc6OmZyb21VVEY4KGQtPm1f
bXNnLT5yZWFzb25fcGhyYXNlKSk7CisgICAgICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVy
YXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUu
Z2V0KCksIHJlc291cmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGVycm9yLT5kb21haW4gPT0gR19JT19FUlJPUikgeworICAgICAgICAgICAg
U291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+bV9yZXEuZ2V0KCkpOworICAg
ICAgICAgICAgR093blB0cjxjaGFyPiB1cmlTdHIoc291cF91cmlfdG9fc3RyaW5nKHVyaSwgZmFs
c2UpKTsKKyAgICAgICAgICAgIFJlc291cmNlRXJyb3IgcmVzb3VyY2VFcnJvcihnX3F1YXJrX3Rv
X3N0cmluZyhHX0lPX0VSUk9SKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlcnJvci0+Y29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1cmlTdHIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3IgPyBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSA6IFN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOworICAg
ICAgICAgICAgY2xpZW50LT5kaWRGYWlsKGhhbmRsZS5nZXQoKSwgcmVzb3VyY2VFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoZC0+bV9tc2cgJiYg
ZC0+bV9tc2ctPnN0YXR1c19jb2RlID09IFNPVVBfU1RBVFVTX1VOQVVUSE9SSVpFRCkgeworICAg
ICAgICAgICAgZmlsbFJlc3BvbnNlRnJvbU1lc3NhZ2UoZC0+bV9tc2csICZkLT5tX3Jlc3BvbnNl
KTsKKyAgICAgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwg
ZC0+bV9yZXNwb25zZSk7CisKKyAgICAgICAgICAgIC8vIFdlYkNvcmUgbWlnaHQgaGF2ZSBjYW5j
ZWxsZWQgdGhlIGpvYiBpbiB0aGUgd2hpbGUKKyAgICAgICAgICAgIGlmIChkLT5tX2NhbmNlbGxl
ZCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIGlmIChkLT5tX21zZy0+
cmVzcG9uc2VfYm9keS0+ZGF0YSkKKyAgICAgICAgICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVE
YXRhKGhhbmRsZS5nZXQoKSwgZC0+bV9tc2ctPnJlc3BvbnNlX2JvZHktPmRhdGEsIGQtPm1fbXNn
LT5yZXNwb25zZV9ib2R5LT5sZW5ndGgsIHRydWUpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
ZGlkUmVjZWl2ZURhdGEgYWJvdmUgbWlnaHQgaGF2ZSBjYW5jZWxsZWQgaXQKKyAgICAgICAgaWYg
KGQtPm1fY2FuY2VsbGVkIHx8ICFjbGllbnQpIHsKKyAgICAgICAgICBjbGVhbnVwU291cFJlcXVl
c3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICBj
bGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGQtPm1faW5wdXRTdHJlYW0gPSBpbjsKKyAgICBkLT5tX2J1ZmZlclNp
emUgPSBCVUZGRVJfU0laRTsKKyAgICBkLT5tX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihn
X21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKKyAgICBkLT5tX3RvdGFsID0gMDsKKworICAgIC8v
IHJlYWRDYWxsYmFjayBuZWVkcyBpdAorICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQt
Pm1faW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKKworICAg
IC8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgaXQncyBhIGZpbGU6IFVSTCBhbmQgaWYgaXQgaXMgYSBy
ZWd1bGFyCisgICAgLy8gZmlsZSBhcyBpdCBjb3VsZCBiZSBhIGRpcmVjdG9yeS4gSW4gdGhhdCBj
YXNlIFNvdXAgcHJvcGVybHkKKyAgICAvLyByZXR1cm5zIGEgc3RyZWFtIHdob3NlIGNvbnRlbnQg
aXMgYSBIVE1MIHdpdGggYSBsaXN0IG9mIGZpbGVzCisgICAgLy8gaW4gdGhlIGRpcmVjdG9yeQor
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShoYW5kbGUtPmZpcnN0UmVxdWVzdCgpLnVybCgpLnBy
b3RvY29sKCksICJmaWxlIikKKyAgICAgICAgJiYgR19JU19GSUxFX0lOUFVUX1NUUkVBTShpbikp
IHsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZTsKKworICAgICAgICByZXNwb25z
ZS5zZXRVUkwoaGFuZGxlLT5maXJzdFJlcXVlc3QoKS51cmwoKSk7CisgICAgICAgIHJlc3BvbnNl
LnNldE1pbWVUeXBlKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKGQtPm1fcmVxLmdldCgp
KSk7CisgICAgICAgIHJlc3BvbnNlLnNldEV4cGVjdGVkQ29udGVudExlbmd0aChzb3VwX3JlcXVl
c3RfZ2V0X2NvbnRlbnRfbGVuZ3RoKGQtPm1fcmVxLmdldCgpKSk7CisgICAgICAgIGNsaWVudC0+
ZGlkUmVjZWl2ZVJlc3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOworCisgICAgICAgIGlm
IChkLT5tX2NhbmNlbGxlZCkgeworICAgICAgICAgICAgY2xlYW51cFNvdXBSZXF1ZXN0T3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1f
YnVmZmVyLCBkLT5tX2J1ZmZlclNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
X1BSSU9SSVRZX0RFRkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWFkQ2FsbGJhY2ssIDApOworfQorCiBzdGF0aWMgYm9vbCBzdGFydEh0dHAo
UmVzb3VyY2VIYW5kbGUqIGhhbmRsZSkKIHsKICAgICBBU1NFUlQoaGFuZGxlKTsKQEAgLTQ4Myw3
ICs1OTEsMTYgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNlSGFuZGxlKiBoYW5kbGUp
CiAgICAgdXJsLnJlbW92ZUZyYWdtZW50SWRlbnRpZmllcigpOwogICAgIHJlcXVlc3Quc2V0VVJM
KHVybCk7CiAKLSAgICBkLT5tX21zZyA9IHJlcXVlc3QudG9Tb3VwTWVzc2FnZSgpOworICAgIEdP
d25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICBkLT5tX3JlcSA9IHNvdXBfc2Vzc2lvbl9yZXF1ZXN0
KHNlc3Npb24sIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmZXJyb3Iub3V0UHRyKCkpOwor
ICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1QoZC0+bV9yZXEuZ2V0KCkpLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxl
KTsKKworICAgIGQtPm1fbXNnID0gc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3NhZ2UoU09VUF9S
RVFVRVNUX0hUVFAoZC0+bV9yZXEuZ2V0KCkpKTsKKyAgICByZXF1ZXN0LnVwZGF0ZVNvdXBNZXNz
YWdlKGQtPm1fbXNnKTsKKwogICAgIGlmICghZC0+bV9tc2cpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNDkzLDcgKzYxMCw3IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0cChSZXNvdXJjZUhh
bmRsZSogaGFuZGxlKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QoZC0+bV9tc2csICJyZXN0YXJ0ZWQi
LCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNrKSwgaGFuZGxlKTsKICAgICBnX3NpZ25hbF9j
b25uZWN0KGQtPm1fbXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKGdvdEhlYWRlcnNDYWxs
YmFjayksIGhhbmRsZSk7CiAgICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImNvbnRlbnQt
c25pZmZlZCIsIEdfQ0FMTEJBQ0soY29udGVudFNuaWZmZWRDYWxsYmFjayksIGhhbmRsZSk7Ci0g
ICAgZ19zaWduYWxfY29ubmVjdChkLT5tX21zZywgImdvdC1jaHVuayIsIEdfQ0FMTEJBQ0soZ290
Q2h1bmtDYWxsYmFjayksIGhhbmRsZSk7CisgICAgZC0+bV9nb3RDaHVua0hhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0KGQtPm1fbXNnLCAiZ290LWNodW5rIiwgR19DQUxMQkFDSyhnb3RDaHVua0Nh
bGxiYWNrKSwgaGFuZGxlKTsKIAogI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5XzkwCiAgICAgU3Ry
aW5nIGZpcnN0UGFydHlTdHJpbmcgPSByZXF1ZXN0LmZpcnN0UGFydHlGb3JDb29raWVzKCkuc3Ry
aW5nKCk7CkBAIC01MDIsNyArNjE5LDYgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJlc291cmNl
SGFuZGxlKiBoYW5kbGUpCiAgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfZmlyc3RfcGFydHkoZC0+
bV9tc2csIGZpcnN0UGFydHkuZ2V0KCkpOwogICAgIH0KICNlbmRpZgotICAgIGdfb2JqZWN0X3Nl
dF9kYXRhKEdfT0JKRUNUKGQtPm1fbXNnKSwgInJlc291cmNlSGFuZGxlIiwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oaGFuZGxlKSk7CiAKICAgICBGb3JtRGF0YSogaHR0cEJvZHkgPSBkLT5tX2Zp
cnN0UmVxdWVzdC5odHRwQm9keSgpOwogICAgIGlmIChodHRwQm9keSAmJiAhaHR0cEJvZHktPmlz
RW1wdHkoKSkgewpAQCAtNTMyLDEyICs2NDgsMTEgQEAgc3RhdGljIGJvb2wgc3RhcnRIdHRwKFJl
c291cmNlSGFuZGxlKiBoYW5kbGUpCiAgICAgICAgICAgICAgICAgICAgICAqIG1hcHBpbmcgZm9y
IHVwbG9hZGVkIGZpbGVzIGNvZGUgaW5zcGlyZWQgYnkgdGVjaG5pcXVlIHVzZWQgaW4KICAgICAg
ICAgICAgICAgICAgICAgICogbGlic291cCdzIHNpbXBsZS1odHRwZCB0ZXN0CiAgICAgICAgICAg
ICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBHRXJyb3IqIGVycm9yID0gMDsKKyAg
ICAgICAgICAgICAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogICAgICAgICAgICAgICAg
ICAgICBDU3RyaW5nIGZpbGVOYW1lID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGVsZW1lbnQu
bV9maWxlbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGlu
ZyA9IGdfbWFwcGVkX2ZpbGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvcik7Cisg
ICAgICAgICAgICAgICAgICAgIEdNYXBwZWRGaWxlKiBmaWxlTWFwcGluZyA9IGdfbWFwcGVkX2Zp
bGVfbmV3KGZpbGVOYW1lLmRhdGEoKSwgZmFsc2UsICZlcnJvci5vdXRQdHIoKSk7CiAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnX2Vy
cm9yX2ZyZWUoZXJyb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9tYXRjaGVkKGQtPm1fbXNnLCBHX1NJR05BTF9NQVRDSF9EQVRBLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsIGhhbmRsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBnX29iamVjdF91
bnJlZihkLT5tX21zZyk7CkBAIC01NjksMTEgKzY4NCw5IEBAIHN0YXRpYyBib29sIHN0YXJ0SHR0
cChSZXNvdXJjZUhhbmRsZSogaGFuZGxlKQogICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNf
Z2V0X29uZShkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCiAgICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChkLT5tX21zZy0+cmVxdWVzdF9oZWFkZXJzLCAiQWNj
ZXB0IiwgIiovKiIpOwogCi0gICAgLy8gQmFsYW5jZWQgaW4gUmVzb3VyY2VIYW5kbGVJbnRlcm5h
bCdzIGRlc3RydWN0b3I7IHdlIG5lZWQgdG8KLSAgICAvLyBrZWVwIG91ciBvd24gcmVmLCBiZWNh
dXNlIGFmdGVyIHF1ZXVlaW5nIHRoZSBtZXNzYWdlLCB0aGUKLSAgICAvLyBzZXNzaW9uIG93bnMg
dGhlIGluaXRpYWwgcmVmZXJlbmNlLgotICAgIGdfb2JqZWN0X3JlZihkLT5tX21zZyk7Ci0gICAg
c291cF9zZXNzaW9uX3F1ZXVlX21lc3NhZ2Uoc2Vzc2lvbiwgZC0+bV9tc2csIGZpbmlzaGVkQ2Fs
bGJhY2ssIGhhbmRsZSk7CisgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3
KCk7CisgICAgc291cF9yZXF1ZXN0X3NlbmRfYXN5bmMoZC0+bV9yZXEuZ2V0KCksIGQtPm1fY2Fu
Y2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFJlcXVlc3RDYWxsYmFj
aywgMCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTY2NywzOCArNzgwLDYgQEAgdm9pZCBS
ZXNvdXJjZUhhbmRsZTo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsIFMKICAgICBzeW5jTG9hZGVyLnJ1bigpOwogfQogCi0vLyBHSU8tYmFz
ZWQgbG9hZGVyCi0KLXN0YXRpYyB2b2lkIGNsZWFudXBHaW9PcGVyYXRpb24oUmVzb3VyY2VIYW5k
bGUqIGhhbmRsZSwgYm9vbCBpc0Rlc3Ryb3lpbmcgPSBmYWxzZSkKLXsKLSAgICBSZXNvdXJjZUhh
bmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCi0gICAgaWYgKGQtPm1f
Z2ZpbGUpIHsKLSAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZC0+bV9nZmlsZSks
ICJ3ZWJraXQtcmVzb3VyY2UiLCAwKTsKLSAgICAgICAgZ19vYmplY3RfdW5yZWYoZC0+bV9nZmls
ZSk7Ci0gICAgICAgIGQtPm1fZ2ZpbGUgPSAwOwotICAgIH0KLQotICAgIGlmIChkLT5tX2NhbmNl
bGxhYmxlKSB7Ci0gICAgICAgIGdfb2JqZWN0X3VucmVmKGQtPm1fY2FuY2VsbGFibGUpOwotICAg
ICAgICBkLT5tX2NhbmNlbGxhYmxlID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoZC0+bV9pbnB1dFN0
cmVhbSkgewotICAgICAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX2lucHV0U3Ry
ZWFtKSwgIndlYmtpdC1yZXNvdXJjZSIsIDApOwotICAgICAgICBnX29iamVjdF91bnJlZihkLT5t
X2lucHV0U3RyZWFtKTsKLSAgICAgICAgZC0+bV9pbnB1dFN0cmVhbSA9IDA7Ci0gICAgfQotCi0g
ICAgaWYgKGQtPm1fYnVmZmVyKSB7Ci0gICAgICAgIGdfZnJlZShkLT5tX2J1ZmZlcik7Ci0gICAg
ICAgIGQtPm1fYnVmZmVyID0gMDsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRGVzdHJveWluZykKLSAg
ICAgICAgaGFuZGxlLT5kZXJlZigpOwotfQotCiBzdGF0aWMgdm9pZCBjbG9zZUNhbGxiYWNrKEdP
YmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyKQogewogICAgIFJlZlB0
cjxSZXNvdXJjZUhhbmRsZT4gaGFuZGxlID0gc3RhdGljX2Nhc3Q8UmVzb3VyY2VIYW5kbGUqPihn
X29iamVjdF9nZXRfZGF0YShzb3VyY2UsICJ3ZWJraXQtcmVzb3VyY2UiKSk7CkBAIC03MDksNyAr
NzkwLDcgQEAgc3RhdGljIHZvaWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3lu
Y1Jlc3VsdCogcmVzLCBncG9pbnRlcikKICAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50
ID0gaGFuZGxlLT5jbGllbnQoKTsKIAogICAgIGdfaW5wdXRfc3RyZWFtX2Nsb3NlX2ZpbmlzaChk
LT5tX2lucHV0U3RyZWFtLCByZXMsIDApOwotICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxl
LmdldCgpKTsKKyAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgpKTsK
IAogICAgIC8vIFRoZSBsb2FkIG1heSBoYXZlIGJlZW4gY2FuY2VsbGVkLCB0aGUgY2xpZW50IG1h
eSBoYXZlIGJlZW4KICAgICAvLyBkZXN0cm95ZWQgYWxyZWFkeS4gSW4gc3VjaCBjYXNlcyBjYWxs
aW5nIGRpZEZpbmlzaExvYWRpbmcgaXMgYQpAQCAtNzIwLDMyICs4MDEsMzIgQEAgc3RhdGljIHZv
aWQgY2xvc2VDYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBncG9p
bnRlcikKICAgICBjbGllbnQtPmRpZEZpbmlzaExvYWRpbmcoaGFuZGxlLmdldCgpKTsKIH0KIAot
c3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwgR0FzeW5jUmVzdWx0KiBy
ZXMsIGdwb2ludGVyKQorc3RhdGljIHZvaWQgcmVhZENhbGxiYWNrKEdPYmplY3QqIHNvdXJjZSwg
R0FzeW5jUmVzdWx0KiByZXMsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgUmVmUHRyPFJlc291cmNl
SGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0X2dl
dF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKICAgICBpZiAoIWhhbmRsZSkKICAg
ICAgICAgcmV0dXJuOwogCisgICAgYm9vbCBjb252ZXJ0VG9VVEYxNiA9IHN0YXRpY19jYXN0PGJv
b2w+KGRhdGEpOwogICAgIFJlc291cmNlSGFuZGxlSW50ZXJuYWwqIGQgPSBoYW5kbGUtPmdldElu
dGVybmFsKCk7CiAgICAgUmVzb3VyY2VIYW5kbGVDbGllbnQqIGNsaWVudCA9IGhhbmRsZS0+Y2xp
ZW50KCk7CiAKICAgICBpZiAoZC0+bV9jYW5jZWxsZWQgfHwgIWNsaWVudCkgewotICAgICAgICBj
bGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVx
dWVzdE9wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgR0Vycm9yKiBlcnJvciA9IDA7CisgICAgR093blB0cjxHRXJyb3I+IGVycm9yOwogCi0gICAg
Z3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGQtPm1faW5wdXRT
dHJlYW0sIHJlcywgJmVycm9yKTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJl
YW1fcmVhZF9maW5pc2goZC0+bV9pbnB1dFN0cmVhbSwgcmVzLCAmZXJyb3Iub3V0UHRyKCkpOwog
ICAgIGlmIChlcnJvcikgewotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5t
X2dmaWxlKTsKKyAgICAgICAgU291cFVSSSogdXJpID0gc291cF9yZXF1ZXN0X2dldF91cmkoZC0+
bV9yZXEuZ2V0KCkpOworICAgICAgICBHT3duUHRyPGNoYXI+IHVyaVN0cihzb3VwX3VyaV90b19z
dHJpbmcodXJpLCBmYWxzZSkpOwogICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3Io
Z19xdWFya190b19zdHJpbmcoR19JT19FUlJPUiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaVN0ci5nZXQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpm
cm9tVVRGOChlcnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkp
OwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0
aW9uKGhhbmRsZS5nZXQoKSk7CisgICAgICAgIGNsZWFudXBTb3VwUmVxdWVzdE9wZXJhdGlvbiho
YW5kbGUuZ2V0KCkpOwogICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNv
dXJjZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc1NywxNDEgKzgzOCwzNiBA
QCBzdGF0aWMgdm9pZCByZWFkQ2FsbGJhY2soR09iamVjdCogc291cmNlLCBHQXN5bmNSZXN1bHQq
IHJlcywgZ3BvaW50ZXIpCiAgICAgfQogCiAgICAgZC0+bV90b3RhbCArPSBieXRlc1JlYWQ7Ci0g
ICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGQtPm1fYnVmZmVyLCBieXRl
c1JlYWQsIGQtPm1fdG90YWwpOwotCi0gICAgLy8gZGlkUmVjZWl2ZURhdGEgbWF5IGNhbmNlbCB0
aGUgbG9hZCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxhc3QgcmVmZXJlbmNlLgotICAgIGlmIChk
LT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQo
KSk7Ci0gICAgICAgIHJldHVybjsKKyAgICBpZiAoR19MSUtFTFkoIWNvbnZlcnRUb1VURjE2KSkK
KyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlRGF0YShoYW5kbGUuZ2V0KCksIGQtPm1fYnVmZmVy
LCBieXRlc1JlYWQsIGQtPm1fdG90YWwpOworICAgIGVsc2UgeworICAgICAgICAvLyBXZSBoYXZl
IHRvIGNvbnZlcnQgaXQgdG8gVVRGLTE2IGR1ZSB0byBsaW1pdGF0aW9ucyBpbiBLVVJMCisgICAg
ICAgIEdPd25QdHI8Z3VuaWNoYXIyPiB1bmljb2RlU3RyKGdfdXRmOF90b191dGYxNihkLT5tX2J1
ZmZlciwgYnl0ZXNSZWFkLCAwLCAwLCAwKSk7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZURh
dGEoaGFuZGxlLmdldCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPih1bmljb2RlU3Ry
LmdldCgpKSwgZ191dGY4X3N0cmxlbihkLT5tX2J1ZmZlciwgYnl0ZXNSZWFkKSAqIHNpemVvZihV
Q2hhciksIDApOwogICAgIH0KIAotICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoZC0+bV9p
bnB1dFN0cmVhbSwgZC0+bV9idWZmZXIsIGQtPm1fYnVmZmVyU2l6ZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdfUFJJT1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDYWxsYmFjaywgMCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIG9wZW5DYWxsYmFjayhHT2JqZWN0KiBzb3VyY2UsIEdBc3luY1Jlc3VsdCogcmVzLCBn
cG9pbnRlcikKLXsKLSAgICBSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGhhbmRsZSA9IHN0YXRpY19j
YXN0PFJlc291cmNlSGFuZGxlKj4oZ19vYmplY3RfZ2V0X2RhdGEoc291cmNlLCAid2Via2l0LXJl
c291cmNlIikpOwotICAgIGlmICghaGFuZGxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZXNv
dXJjZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotICAgIFJlc291
cmNlSGFuZGxlQ2xpZW50KiBjbGllbnQgPSBoYW5kbGUtPmNsaWVudCgpOwotCisgICAgLy8gZGlk
UmVjZWl2ZURhdGEgbWF5IGNhbmNlbCB0aGUgbG9hZCwgd2hpY2ggbWF5IHJlbGVhc2UgdGhlIGxh
c3QgcmVmZXJlbmNlLgogICAgIGlmIChkLT5tX2NhbmNlbGxlZCB8fCAhY2xpZW50KSB7Ci0gICAg
ICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdGaWxlSW5wdXRTdHJlYW0qIGlu
ID0gZ19maWxlX3JlYWRfZmluaXNoKEdfRklMRShzb3VyY2UpLCByZXMsICZlcnJvcik7Ci0gICAg
aWYgKGVycm9yKSB7Ci0gICAgICAgIGNoYXIqIHVyaSA9IGdfZmlsZV9nZXRfdXJpKGQtPm1fZ2Zp
bGUpOwotICAgICAgICBSZXNvdXJjZUVycm9yIHJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJp
bmcoR19JT19FUlJPUiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
ci0+Y29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID8gU3RyaW5nOjpmcm9tVVRGOChl
cnJvci0+bWVzc2FnZSkgOiBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwotICAgICAg
ICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRs
ZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVudC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNl
RXJyb3IpOworICAgICAgICBjbGVhbnVwU291cFJlcXVlc3RPcGVyYXRpb24oaGFuZGxlLmdldCgp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGQtPm1faW5wdXRTdHJlYW0gPSBHX0lO
UFVUX1NUUkVBTShpbik7Ci0gICAgZC0+bV9idWZmZXJTaXplID0gODE5MjsKLSAgICBkLT5tX2J1
ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihnX21hbGxvYyhkLT5tX2J1ZmZlclNpemUpKTsKLSAg
ICBkLT5tX3RvdGFsID0gMDsKLQotICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGQtPm1f
aW5wdXRTdHJlYW0pLCAid2Via2l0LXJlc291cmNlIiwgaGFuZGxlLmdldCgpKTsKICAgICBnX2lu
cHV0X3N0cmVhbV9yZWFkX2FzeW5jKGQtPm1faW5wdXRTdHJlYW0sIGQtPm1fYnVmZmVyLCBkLT5t
X2J1ZmZlclNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX1BSSU9SSVRZX0RF
RkFVTFQsIGQtPm1fY2FuY2VsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZWFkQ2FsbGJhY2ssIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZENhbGxi
YWNrLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgcXVlcnlJbmZvQ2FsbGJhY2soR09iamVjdCog
c291cmNlLCBHQXN5bmNSZXN1bHQqIHJlcywgZ3BvaW50ZXIpCi17Ci0gICAgUmVmUHRyPFJlc291
cmNlSGFuZGxlPiBoYW5kbGUgPSBzdGF0aWNfY2FzdDxSZXNvdXJjZUhhbmRsZSo+KGdfb2JqZWN0
X2dldF9kYXRhKHNvdXJjZSwgIndlYmtpdC1yZXNvdXJjZSIpKTsKLSAgICBpZiAoIWhhbmRsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCogZCA9IGhhbmRs
ZS0+Z2V0SW50ZXJuYWwoKTsKLSAgICBSZXNvdXJjZUhhbmRsZUNsaWVudCogY2xpZW50ID0gaGFu
ZGxlLT5jbGllbnQoKTsKLQotICAgIGlmIChkLT5tX2NhbmNlbGxlZCkgewotICAgICAgICBjbGVh
bnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlOwotCi0gICAgY2hhciogdXJpID0gZ19maWxl
X2dldF91cmkoZC0+bV9nZmlsZSk7Ci0gICAgcmVzcG9uc2Uuc2V0VVJMKEtVUkwoS1VSTCgpLCB1
cmkpKTsKLSAgICBnX2ZyZWUodXJpKTsKLQotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdG
aWxlSW5mbyogaW5mbyA9IGdfZmlsZV9xdWVyeV9pbmZvX2ZpbmlzaChkLT5tX2dmaWxlLCByZXMs
ICZlcnJvcik7Ci0KLSAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgLy8gRklYTUU6IHRvIGJlIGFi
bGUgdG8gaGFuZGxlIGZ0cCBVUklzIHByb3Blcmx5LCB3ZSBtdXN0Ci0gICAgICAgIC8vIGNoZWNr
IGlmIHRoZSBlcnJvciBpcyBHX0lPX0VSUk9SX05PVF9NT1VOVEVELCBhbmQgaWYgc28sCi0gICAg
ICAgIC8vIGNhbGwgZ19maWxlX21vdW50X2VuY2xvc2luZ192b2x1bWUoKSB0byBtb3VudCB0aGUg
ZnRwCi0gICAgICAgIC8vIHNlcnZlciAoYW5kIHRoZW4ga2VlcCB0cmFjayBvZiB0aGUgZmFjdCB0
aGF0IHdlIG1vdW50ZWQgaXQsCi0gICAgICAgIC8vIGFuZCBzZXQgYSB0aW1lb3V0IHRvIHVubW91
bnQgaXQgbGF0ZXIgYWZ0ZXIgaXQncyBiZWVuIGlkbGUKLSAgICAgICAgLy8gZm9yIGEgd2hpbGUp
LgotICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAg
ICAgUmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJS
T1IpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3ItPmNvZGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlcnJvciA/IFN0cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3Nh
Z2UpIDogU3RyaW5nKCkpOwotICAgICAgICBnX2ZyZWUodXJpKTsKLSAgICAgICAgZ19lcnJvcl9m
cmVlKGVycm9yKTsKLSAgICAgICAgY2xlYW51cEdpb09wZXJhdGlvbihoYW5kbGUuZ2V0KCkpOwot
ICAgICAgICBjbGllbnQtPmRpZEZhaWwoaGFuZGxlLmdldCgpLCByZXNvdXJjZUVycm9yKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChnX2ZpbGVfaW5mb19nZXRfZmlsZV90eXBl
KGluZm8pICE9IEdfRklMRV9UWVBFX1JFR1VMQVIpIHsKLSAgICAgICAgLy8gRklYTUU6IHdoYXQg
aWYgdGhlIFVSSSBwb2ludHMgdG8gYSBkaXJlY3Rvcnk/IFNob3VsZCB3ZQotICAgICAgICAvLyBn
ZW5lcmF0ZSBhIGxpc3Rpbmc/IEhvdz8gV2hhdCBkbyBvdGhlciBiYWNrZW5kcyBkbyBoZXJlPwot
ICAgICAgICBjaGFyKiB1cmkgPSBnX2ZpbGVfZ2V0X3VyaShkLT5tX2dmaWxlKTsKLSAgICAgICAg
UmVzb3VyY2VFcnJvciByZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKEdfSU9fRVJST1Ip
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19JT19FUlJPUl9GQUlMRUQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcoKSk7Ci0gICAgICAgIGdfZnJlZSh1cmkpOwot
ICAgICAgICBjbGVhbnVwR2lvT3BlcmF0aW9uKGhhbmRsZS5nZXQoKSk7Ci0gICAgICAgIGNsaWVu
dC0+ZGlkRmFpbChoYW5kbGUuZ2V0KCksIHJlc291cmNlRXJyb3IpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgcmVzcG9uc2Uuc2V0TWltZVR5cGUoZ19maWxlX2luZm9fZ2V0X2NvbnRl
bnRfdHlwZShpbmZvKSk7Ci0gICAgcmVzcG9uc2Uuc2V0RXhwZWN0ZWRDb250ZW50TGVuZ3RoKGdf
ZmlsZV9pbmZvX2dldF9zaXplKGluZm8pKTsKLQotICAgIEdUaW1lVmFsIHR2OwotICAgIGdfZmls
ZV9pbmZvX2dldF9tb2RpZmljYXRpb25fdGltZShpbmZvLCAmdHYpOwotICAgIHJlc3BvbnNlLnNl
dExhc3RNb2RpZmllZERhdGUodHYudHZfc2VjKTsKLQotICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJl
c3BvbnNlKGhhbmRsZS5nZXQoKSwgcmVzcG9uc2UpOwotCi0gICAgaWYgKGQtPm1fY2FuY2VsbGVk
KSB7Ci0gICAgICAgIGNsZWFudXBHaW9PcGVyYXRpb24oaGFuZGxlLmdldCgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGdfZmlsZV9yZWFkX2FzeW5jKGQtPm1fZ2ZpbGUsIEdfUFJJ
T1JJVFlfREVGQVVMVCwgZC0+bV9jYW5jZWxsYWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICBv
cGVuQ2FsbGJhY2ssIDApOwotfQogc3RhdGljIGJvb2wgc3RhcnRHaW8oUmVzb3VyY2VIYW5kbGUq
IGhhbmRsZSwgS1VSTCB1cmwpCiB7CiAgICAgQVNTRVJUKGhhbmRsZSk7CiAKLSAgICBSZXNvdXJj
ZUhhbmRsZUludGVybmFsKiBkID0gaGFuZGxlLT5nZXRJbnRlcm5hbCgpOwotCiAgICAgaWYgKGhh
bmRsZS0+Zmlyc3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpICE9ICJHRVQiICYmIGhhbmRsZS0+Zmly
c3RSZXF1ZXN0KCkuaHR0cE1ldGhvZCgpICE9ICJQT1NUIikKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCisgICAgR093blB0cjxjaGFyPiB1cmxTdHI7CisgICAgU291cFNlc3Npb24qIHNlc3Npb24g
PSBoYW5kbGUtPmRlZmF1bHRTZXNzaW9uKCk7CisgICAgUmVzb3VyY2VIYW5kbGVJbnRlcm5hbCog
ZCA9IGhhbmRsZS0+Z2V0SW50ZXJuYWwoKTsKKwogICAgIC8vIEdJTyBkb2Vzbid0IGtub3cgaG93
IHRvIGhhbmRsZSByZWZzIGFuZCBxdWVyaWVzLCBzbyByZW1vdmUgdGhlbQogICAgIC8vIFRPRE86
IHVzZSBLVVJMLmZpbGVTeXN0ZW1QYXRoIGFmdGVyIEtVUkxHdGsgYW5kIEZpbGVTeXN0ZW1HdGsg
YXJlCiAgICAgLy8gdXNpbmcgR0lPIGludGVybmFsbHksIGFuZCBwcm92aWRpbmcgVVJJcyBpbnN0
ZWFkIG9mIGZpbGUgcGF0aHMKQEAgLTkwNCwyMyArODgwLDI1IEBAIHN0YXRpYyBib29sIHN0YXJ0
R2lvKFJlc291cmNlSGFuZGxlKiBoYW5kbGUsIEtVUkwgdXJsKQogICAgIC8vIGdfZmlsZW5hbWVf
ZnJvbV91cmkgKHVzZWQgaW50ZXJuYWxseSBieSBHRmlsZSkgaGFzIHByb2JsZW1zCiAgICAgLy8g
ZGVjb2Rpbmcgc3RyaW5ncyB3aXRoIGFyYml0cmFyeSBwZXJjZW50IHNpZ25zCiAgICAgaWYgKHVy
bC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBkLT5tX2dmaWxlID0gZ19maWxlX25ld19mb3JfcGF0
aCh1cmwucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSArIHNpemVvZigiZmlsZTovLyIpIC0gMSk7
CisgICAgICAgIHVybFN0ci5zZXQoZ19zdHJkdXAodXJsLnByZXR0eVVSTCgpLnV0ZjgoKS5kYXRh
KCkpKTsKICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgZC0+bV9nZmlsZSA9IGdfZmlsZV9uZXdf
Zm9yX3VyaSh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgZ19vYmplY3Rfc2V0X2Rh
dGEoR19PQkpFQ1QoZC0+bV9nZmlsZSksICJ3ZWJraXQtcmVzb3VyY2UiLCBoYW5kbGUpOworICAg
ICAgICB1cmxTdHIuc2V0KGdfc3RyZHVwKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSk7CiAK
LSAgICAvLyBiYWxhbmNlZCBieSBhIGRlcmVmKCkgaW4gY2xlYW51cEdpb09wZXJhdGlvbiwgd2hp
Y2ggc2hvdWxkIGFsd2F5cyBydW4KKyAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgZC0+
bV9yZXEgPSBzb3VwX3Nlc3Npb25fcmVxdWVzdChzZXNzaW9uLCB1cmxTdHIuZ2V0KCksICZlcnJv
ci5vdXRQdHIoKSk7CisgICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChkLT5tX3JlcS5nZXQoKSksICJ3ZWJraXQtcmVz
b3VyY2UiLCBoYW5kbGUpOworCisgICAgLy8gYmFsYW5jZWQgYnkgYSBkZXJlZigpIGluIGNsZWFu
dXBTb3VwUmVxdWVzdE9wZXJhdGlvbiwgd2hpY2ggc2hvdWxkIGFsd2F5cyBydW4KICAgICBoYW5k
bGUtPnJlZigpOwogCiAgICAgZC0+bV9jYW5jZWxsYWJsZSA9IGdfY2FuY2VsbGFibGVfbmV3KCk7
Ci0gICAgZ19maWxlX3F1ZXJ5X2luZm9fYXN5bmMoZC0+bV9nZmlsZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX0ZJTEVfQVRUUklCVVRFX1NUQU5EQVJEX1RZUEUgIiwiCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9DT05URU5UX1RZ
UEUgIiwiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19GSUxFX0FUVFJJQlVURV9TVEFO
REFSRF9TSVpFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfRklMRV9RVUVSWV9JTkZP
X05PTkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR19QUklPUklUWV9ERUZBVUxULCBk
LT5tX2NhbmNlbGxhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5SW5mb0Nh
bGxiYWNrLCAwKTsKKyAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhkLT5tX3JlcS5nZXQoKSwg
ZC0+bV9jYW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kUmVxdWVz
dENhbGxiYWNrLCAwKTsKKwogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oCmluZGV4IGExZDkxNmYuLmMxYzcx
MTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVx
dWVzdC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dC5oCkBAIC02Nyw2ICs2Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHVw
ZGF0ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIHVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkgY29uc3Q7CiAg
ICAgICAgIFNvdXBNZXNzYWdlKiB0b1NvdXBNZXNzYWdlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
dXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5j
cHAKaW5kZXggNjJkZWIwMS4uMzgwZmM4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAKQEAgLTMzLDYgKzMzLDI5IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAordm9pZCBSZXNv
dXJjZVJlcXVlc3Q6OnVwZGF0ZVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkg
Y29uc3QKK3sKKyAgICBnX29iamVjdF9zZXQoc291cE1lc3NhZ2UsIFNPVVBfTUVTU0FHRV9NRVRI
T0QsIGh0dHBNZXRob2QoKS51dGY4KCkuZGF0YSgpLCBOVUxMKTsKKworICAgIGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMgPSBodHRwSGVhZGVyRmllbGRzKCk7CisgICAgU291cE1lc3NhZ2VI
ZWFkZXJzKiBzb3VwSGVhZGVycyA9IHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnM7CisgICAg
aWYgKCFoZWFkZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBIVFRQSGVhZGVyTWFwOjpjb25zdF9p
dGVyYXRvciBlbmQgPSBoZWFkZXJzLmVuZCgpOworICAgICAgICBmb3IgKEhUVFBIZWFkZXJNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cEhlYWRlcnMsIGl0LT5m
aXJzdC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBpdC0+c2Vjb25kLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIH0KKworI2lmZGVmIEhBVkVfTElCU09VUF8yXzI5XzkwCisgICAgU3RyaW5nIGZpcnN0UGFy
dHlTdHJpbmcgPSBmaXJzdFBhcnR5Rm9yQ29va2llcygpLnN0cmluZygpOworICAgIGlmICghZmly
c3RQYXJ0eVN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgR093blB0cjxTb3VwVVJJPiBmaXJz
dFBhcnR5KHNvdXBfdXJpX25ldyhmaXJzdFBhcnR5U3RyaW5nLnV0ZjgoKS5kYXRhKCkpKTsKKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9maXJzdF9wYXJ0eShzb3VwTWVzc2FnZSwgZmlyc3RQYXJ0
eS5nZXQoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X2ZsYWdzKHNv
dXBNZXNzYWdlLCBtX3NvdXBGbGFncyk7Cit9CisKIFNvdXBNZXNzYWdlKiBSZXNvdXJjZVJlcXVl
c3Q6OnRvU291cE1lc3NhZ2UoKSBjb25zdAogewogICAgIFNvdXBNZXNzYWdlKiBzb3VwTWVzc2Fn
ZSA9IHNvdXBfbWVzc2FnZV9uZXcoaHR0cE1ldGhvZCgpLnV0ZjgoKS5kYXRhKCksIHVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>