<?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>84133</bug_id>
          
          <creation_ts>2012-04-17 01:57:58 -0700</creation_ts>
          <short_desc>[GTK] Add API to register custom URI schemes to WebKit2 GTK+ API</short_desc>
          <delta_ts>2012-06-07 03:16:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>84130</dependson>
    
    <dependson>85880</dependson>
    
    <dependson>88087</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>danw</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philn</cc>
    
    <cc>svillar</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>603869</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-17 01:57:58 -0700</bug_when>
    <thetext>Allow users to register custom URI schemes, like about: pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603878</commentid>
    <comment_count>1</comment_count>
      <attachid>137495</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-17 02:14:30 -0700</bug_when>
    <thetext>Created attachment 137495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603880</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-17 02:18:10 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603889</commentid>
    <comment_count>3</comment_count>
      <attachid>137495</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-04-17 02:27:12 -0700</bug_when>
    <thetext>Comment on attachment 137495
Patch

Attachment 137495 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12417539</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603893</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-17 02:29:39 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 137495 [details])
&gt; Attachment 137495 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/12417539

It fails to build because it depends on bug #84130</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610655</commentid>
    <comment_count>5</comment_count>
      <attachid>137495</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-26 08:48:54 -0700</bug_when>
    <thetext>Comment on attachment 137495
Patch

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

Looks good! The only large change I think you should make is to nix webkit_uri_scheme_request_get_path and webkit_uri_scheme_request_get_scheme, as their functionality is really duplicated by Soup.

In my mind, we should either be passing a URI object in our API or all agree that it&apos;s fine to use Soup to parse URIs manually. Adding these helper methods to one class makes me ask &quot;Why aren&apos;t these everywhere that we return URIs?&quot; If we added them everywhere we might as well pass SoupURI. So you see my issue...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:83
&gt; +/**
&gt; + * webkit_uri_scheme_request_get_scheme:
&gt; + * @request: a #WebKitURISchemeRequest
&gt; + *
&gt; + * Get the URI scheme of @request
&gt; + *
&gt; + * Returns: the URI scheme of @request
&gt; + */
&gt; +const char* webkit_uri_scheme_request_get_scheme(WebKitURISchemeRequest* request)
&gt; +{
&gt; +    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
&gt; +
&gt; +    if (!request-&gt;priv-&gt;soupURI)
&gt; +        request-&gt;priv-&gt;soupURI.set(soup_uri_new(request-&gt;priv-&gt;uri.data()));
&gt; +    return request-&gt;priv-&gt;soupURI-&gt;scheme;
&gt; +}

It seems a little weird that this class should be responsible for parsing URI&apos;s when other bits of the Gnome platform can do it. Perhaps you should omit this method and webkit_uri_scheme_request_get_path and simply rely on Soup to do it in callers.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:127
&gt; +/**
&gt; + * webkit_uri_scheme_request_finish:
&gt; + * @request: a #WebKitURISchemeRequest
&gt; + * @data: the contents of the request
&gt; + * @data_length: the length of the data, may be -1 if @data is a %NULL-terminated string
&gt; + * @mime_type: the content type of the data
&gt; + *
&gt; + * Finish a #WebKitURISchemeRequest by setting the contents of the request and its mime type.
&gt; + */
&gt; +void webkit_uri_scheme_request_finish(WebKitURISchemeRequest* request, gconstpointer data, gssize dataLength, const gchar* mimeType)
&gt; +{

It would be really nice if this API would support passing data in chunks.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:268
&gt; + * Register @scheme in @context, so that when an URI request with @scheme is made in the

Let me prefix this comment by stating outright that I think English is a dumb language for a variety of reasons. Notwithstanding, in cases where the &apos;U&apos; is pronounced like &apos;you&apos; it&apos;s actually better to use &apos;a&apos; instead of &apos;an.&apos; So your sentence would now include &quot;a URI&quot; instead of &quot;an URI.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:284
&gt; + *     path = webkit_uri_scheme_request_get_path (request);

As stated above, I think it makes sense for Soup to parse the URI directly here.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:292
&gt; + *         contents = g_strdup_printf (&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;p&amp;gt;Invalid about:%s page&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;, path);

Oh, gtkdoc!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h:-32
&gt; -G_BEGIN_DECLS

Thanks for cleaning these up as you go along!

&gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:33
&gt; +&lt;SUBSECTION  URI Scheme&gt;

Extreme nit: I think you have an extra space after SUBSECTION.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:36
&gt; +static const char* kBarHtml = &quot;&lt;html&gt;&lt;body&gt;Bar&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; +static const char* kEchoHtmlFormat = &quot;&lt;html&gt;&lt;body&gt;%s&lt;/body&gt;&lt;/html&gt;&quot;;

It probably makes sense to make these static within the class.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:52
&gt; +        URISchemeTest* test = static_cast&lt;URISchemeTest*&gt;(userData);
&gt; +        test-&gt;m_uriSchemeRequest = request;
&gt; +        test-&gt;assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request));
&gt; +        if (!g_strcmp0(webkit_uri_scheme_request_get_scheme(request), &quot;foo&quot;))
&gt; +            webkit_uri_scheme_request_finish(request, reinterpret_cast&lt;gconstpointer&gt;(kBarHtml), -1, &quot;text/html&quot;);
&gt; +        else if (!g_strcmp0(webkit_uri_scheme_request_get_scheme(request), &quot;echo&quot;)) {
&gt; +            GOwnPtr&lt;char&gt; echoHtml(g_strdup_printf(kEchoHtmlFormat, webkit_uri_scheme_request_get_path(request)));
&gt; +            webkit_uri_scheme_request_finish(request, reinterpret_cast&lt;gconstpointer&gt;(echoHtml.get()), -1, &quot;text/html&quot;);
&gt; +        }

As stated above, I think it makes sense to use Soup to parse the URI directly here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610670</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-26 09:11:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 137495 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137495&amp;action=review
&gt; 
&gt; Looks good! The only large change I think you should make is to nix webkit_uri_scheme_request_get_path and webkit_uri_scheme_request_get_scheme, as their functionality is really duplicated by Soup.

Thanks for reviewing!

&gt; In my mind, we should either be passing a URI object in our API or all agree that it&apos;s fine to use Soup to parse URIs manually. Adding these helper methods to one class makes me ask &quot;Why aren&apos;t these everywhere that we return URIs?&quot; If we added them everywhere we might as well pass SoupURI. So you see my issue...

In this particular case, it&apos;s pretty common to get the path and the scheme if you register more than one scheme with the same callback.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:83
&gt; &gt; +/**
&gt; &gt; + * webkit_uri_scheme_request_get_scheme:
&gt; &gt; + * @request: a #WebKitURISchemeRequest
&gt; &gt; + *
&gt; &gt; + * Get the URI scheme of @request
&gt; &gt; + *
&gt; &gt; + * Returns: the URI scheme of @request
&gt; &gt; + */
&gt; &gt; +const char* webkit_uri_scheme_request_get_scheme(WebKitURISchemeRequest* request)
&gt; &gt; +{
&gt; &gt; +    g_return_val_if_fail(WEBKIT_IS_URI_SCHEME_REQUEST(request), 0);
&gt; &gt; +
&gt; &gt; +    if (!request-&gt;priv-&gt;soupURI)
&gt; &gt; +        request-&gt;priv-&gt;soupURI.set(soup_uri_new(request-&gt;priv-&gt;uri.data()));
&gt; &gt; +    return request-&gt;priv-&gt;soupURI-&gt;scheme;
&gt; &gt; +}
&gt; 
&gt; It seems a little weird that this class should be responsible for parsing URI&apos;s when other bits of the Gnome platform can do it. Perhaps you should omit this method and webkit_uri_scheme_request_get_path and simply rely on Soup to do it in callers.

This is just a convenient method.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:268
&gt; &gt; + * Register @scheme in @context, so that when an URI request with @scheme is made in the
&gt; 
&gt; Let me prefix this comment by stating outright that I think English is a dumb language for a variety of reasons. Notwithstanding, in cases where the &apos;U&apos; is pronounced like &apos;you&apos; it&apos;s actually better to use &apos;a&apos; instead of &apos;an.&apos; So your sentence would now include &quot;a URI&quot; instead of &quot;an URI.&quot;

Ok.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:284
&gt; &gt; + *     path = webkit_uri_scheme_request_get_path (request);
&gt; 
&gt; As stated above, I think it makes sense for Soup to parse the URI directly here.

I think this makes the api a lot simpler, because the user doesn&apos;t need to create a soup uri, get the path and free the uri.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:292
&gt; &gt; + *         contents = g_strdup_printf (&quot;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;p&amp;gt;Invalid about:%s page&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&quot;, path);
&gt; 
&gt; Oh, gtkdoc!

it looks nice in the generated HTML :-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContextPrivate.h:-32
&gt; &gt; -G_BEGIN_DECLS
&gt; 
&gt; Thanks for cleaning these up as you go along!

np

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/docs/webkit2gtk-sections.txt:33
&gt; &gt; +&lt;SUBSECTION  URI Scheme&gt;
&gt; 
&gt; Extreme nit: I think you have an extra space after SUBSECTION.

Ah, ok, will remove it.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:36
&gt; &gt; +static const char* kBarHtml = &quot;&lt;html&gt;&lt;body&gt;Bar&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; &gt; +static const char* kEchoHtmlFormat = &quot;&lt;html&gt;&lt;body&gt;%s&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; 
&gt; It probably makes sense to make these static within the class.

I tried it, but I don&apos;t know how to do that in C++, it failed to compile all the time.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:52
&gt; &gt; +        URISchemeTest* test = static_cast&lt;URISchemeTest*&gt;(userData);
&gt; &gt; +        test-&gt;m_uriSchemeRequest = request;
&gt; &gt; +        test-&gt;assertObjectIsDeletedWhenTestFinishes(G_OBJECT(request));
&gt; &gt; +        if (!g_strcmp0(webkit_uri_scheme_request_get_scheme(request), &quot;foo&quot;))
&gt; &gt; +            webkit_uri_scheme_request_finish(request, reinterpret_cast&lt;gconstpointer&gt;(kBarHtml), -1, &quot;text/html&quot;);
&gt; &gt; +        else if (!g_strcmp0(webkit_uri_scheme_request_get_scheme(request), &quot;echo&quot;)) {
&gt; &gt; +            GOwnPtr&lt;char&gt; echoHtml(g_strdup_printf(kEchoHtmlFormat, webkit_uri_scheme_request_get_path(request)));
&gt; &gt; +            webkit_uri_scheme_request_finish(request, reinterpret_cast&lt;gconstpointer&gt;(echoHtml.get()), -1, &quot;text/html&quot;);
&gt; &gt; +        }
&gt; 
&gt; As stated above, I think it makes sense to use Soup to parse the URI directly here.

I think it makes the API more convenient to use, it saves some code to the user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610674</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-04-26 09:14:48 -0700</bug_when>
    <thetext>Please, note that this depends on #84130 which is still pending review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610748</commentid>
    <comment_count>8</comment_count>
      <attachid>137495</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-26 11:17:51 -0700</bug_when>
    <thetext>Comment on attachment 137495
Patch

Carlos and I chatted about this a bit and agreed that it makes more sense for the API to accept a GInputStream, to open up the possibility for doing things asynchronously. For now we&apos;ll make the API layer fetch the entire GInputStream contents to make the IPC traffic simpler, but later we&apos;ll do things in chunks and implement a custom GInputStream on the Web Process side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617473</commentid>
    <comment_count>9</comment_count>
      <attachid>140497</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-07 02:34:28 -0700</bug_when>
    <thetext>Created attachment 140497
Updated patch

Patch updated to receive a GInputStream instead of a void* with all the data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618478</commentid>
    <comment_count>10</comment_count>
      <attachid>140709</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-08 06:53:07 -0700</bug_when>
    <thetext>Created attachment 140709
Updated patch

This patch is now based on bug #85880 that adds support for sending data in chunks to the web process</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620461</commentid>
    <comment_count>11</comment_count>
      <attachid>141144</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-10 04:24:06 -0700</bug_when>
    <thetext>Created attachment 141144
Updated patch

Updated to the changes made in bug #85880</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637662</commentid>
    <comment_count>12</comment_count>
      <attachid>141144</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-30 13:52:04 -0700</bug_when>
    <thetext>Comment on attachment 141144
Updated patch

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

This looks pretty good to me, though I&apos;m not certain of a few bits of this code. For instance, this does not seem to support empty responses. Perhaps Dan can say how important that is. I&apos;ll hold off on my review until then, but I noticed a few other small things...

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:128
&gt; +    GRefPtr&lt;WebKitURISchemeRequest&gt; request = adoptGRef(schemeRequest);

I think this deserves a small comment explaining that a reference was added during the call to g_input_stream_read_async.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:131
&gt; +    if (bytesRead == -1)
&gt; +        return;

You might want to put a FIXME here about passing the error to the WebProcess side.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:137
&gt; +        WKSoupRequestManagerDidHandleURIRequest(priv-&gt;wkRequestManager.get(), wkData.get(), priv-&gt;streamLength, wkMimeType.get(), priv-&gt;requestID);

Here you are passing zero to the WebProcess for streams that do not have predetermined length. How do you differentiate between this situation and empty responses?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:139
&gt; +    } else if (bytesRead || (!bytesRead &amp;&amp; !priv-&gt;streamLength))
&gt; +        WKSoupRequestManagerDidReceiveURIRequestData(priv-&gt;wkRequestManager.get(), wkData.get(), priv-&gt;requestID);

Is it important to call WKSoupRequestManagerDidReceiveURIRequestData when priv-&gt;streamLength == 0 (undetermined stream length) case because otherwise the WebProcess won&apos;t know that the request is complete? I think this merits a small comment explaining the situation.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:162
&gt; +    g_return_if_fail(streamLength == -1 || streamLength &gt; 0);

So it&apos;s not possible to send an empty reply?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:52
&gt; +        {
&gt; +        }
&gt; +

Nit: I think the curly braces are one indentation level too far to the right.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:36
&gt; +static const char* kBarHtml = &quot;&lt;html&gt;&lt;body&gt;Bar&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; +static const char* kEchoHtmlFormat = &quot;&lt;html&gt;&lt;body&gt;%s&lt;/body&gt;&lt;/html&gt;&quot;;

Nit: Html -&gt; HTML

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:53
&gt; +            g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(inputStream.get()), reinterpret_cast&lt;gconstpointer&gt;(kBarHtml), inputStreamLength, 0);

Do you actually need to castkBarHTML and echoHTML here? I tried compiling this locally with g++ and had no errors:


#include &lt;cstdio&gt;

void foo(const void* in)
{
    printf(&quot;%p\n&quot;, in);
}

int main()
{
    const char* thing = &quot;blahblah&quot;;
    foo(thing);
}

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:113
&gt; +    test-&gt;loadURI(&quot;foo:blank&quot;);
&gt; +    test-&gt;waitUntilLoadFinished();
&gt; +    test-&gt;checkMainResourceData();
&gt; +
&gt; +    test-&gt;loadURI(&quot;echo:hello world&quot;);
&gt; +    test-&gt;waitUntilLoadFinished();
&gt; +    test-&gt;checkMainResourceData();

It&apos;s a bit odd that the fixture handles registering the handler and then the test handles loading the URL. Perhaps structure it like this:

test-&gt;addURLHandler(&quot;foo&quot;, kBarHTML);
test-&gt;waitUntilLoadFinished();
g_assert_cmpstr(test-&gt;mainResourceData(), ==, kBarHTML);

I think that will make your fixture slightly smaller and more general in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637664</commentid>
    <comment_count>13</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-30 13:52:27 -0700</bug_when>
    <thetext>CCing Dan so he can give some insight about empty replies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638193</commentid>
    <comment_count>14</comment_count>
    <who name="Dan Winship">danw</who>
    <bug_when>2012-05-31 03:30:02 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; CCing Dan so he can give some insight about empty replies.

it definitely seems like there might be use cases where you&apos;d want to be able to return a 0-length response.


Also, should webkit_web_context_register_uri_scheme() integrate with SchemeRegistry in some way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638514</commentid>
    <comment_count>15</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-31 09:57:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 141144 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141144&amp;action=review
&gt; 

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:137
&gt; &gt; +        WKSoupRequestManagerDidHandleURIRequest(priv-&gt;wkRequestManager.get(), wkData.get(), priv-&gt;streamLength, wkMimeType.get(), priv-&gt;requestID);
&gt; 
&gt; Here you are passing zero to the WebProcess for streams that do not have predetermined length. How do you differentiate between this situation and empty responses?

No, the input stream returns a 0 byte read when it has finished, if there&apos;s nothing to read yet, the callback is not emitted. The case of zero-length request is hanlded here indeed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:139
&gt; &gt; +    } else if (bytesRead || (!bytesRead &amp;&amp; !priv-&gt;streamLength))
&gt; &gt; +        WKSoupRequestManagerDidReceiveURIRequestData(priv-&gt;wkRequestManager.get(), wkData.get(), priv-&gt;requestID);
&gt; 
&gt; Is it important to call WKSoupRequestManagerDidReceiveURIRequestData when priv-&gt;streamLength == 0 (undetermined stream length) case because otherwise the WebProcess won&apos;t know that the request is complete? I think this merits a small comment explaining the situation.

WKSoupRequestManagerDidHandleURIRequest handles the case of a zero-length request.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitURISchemeRequest.cpp:162
&gt; &gt; +    g_return_if_fail(streamLength == -1 || streamLength &gt; 0);
&gt; 
&gt; So it&apos;s not possible to send an empty reply?

hmm, we could change that to be streamLength == -1 || streamLength &gt;= 0.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:52
&gt; &gt; +        {
&gt; &gt; +        }
&gt; &gt; +
&gt; 
&gt; Nit: I think the curly braces are one indentation level too far to the right.

emacs . . . :-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:36
&gt; &gt; +static const char* kBarHtml = &quot;&lt;html&gt;&lt;body&gt;Bar&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; &gt; +static const char* kEchoHtmlFormat = &quot;&lt;html&gt;&lt;body&gt;%s&lt;/body&gt;&lt;/html&gt;&quot;;
&gt; 
&gt; Nit: Html -&gt; HTML
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:53
&gt; &gt; +            g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(inputStream.get()), reinterpret_cast&lt;gconstpointer&gt;(kBarHtml), inputStreamLength, 0);
&gt; 
&gt; Do you actually need to castkBarHTML and echoHTML here? I tried compiling this locally with g++ and had no errors:

I don&apos;t know, I&apos;ll try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638529</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-31 10:16:27 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; CCing Dan so he can give some insight about empty replies.
&gt; 
&gt; it definitely seems like there might be use cases where you&apos;d want to be able to return a 0-length response.
&gt; 
&gt; 
&gt; Also, should webkit_web_context_register_uri_scheme() integrate with SchemeRegistry in some way?

WebKit2 only has messages to set url schemes as emptyDocument and Secure for now. You might want to register a scheme as whatever without using a custom handler no? So maybe it&apos;s better to have separate methods for those uses cases, what do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638557</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-31 10:44:49 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 141144 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141144&amp;action=review

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestWebKitWebContext.cpp:53
&gt; &gt; +            g_memory_input_stream_add_data(G_MEMORY_INPUT_STREAM(inputStream.get()), reinterpret_cast&lt;gconstpointer&gt;(kBarHtml), inputStreamLength, 0);
&gt; 
&gt; Do you actually need to castkBarHTML and echoHTML here? I tried compiling this locally with g++ and had no errors:

You are right, the cast is not needed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639299</commentid>
    <comment_count>18</comment_count>
      <attachid>145296</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-01 07:01:34 -0700</bug_when>
    <thetext>Created attachment 145296
New patch

Addresses all the review comments and adds test cases for errors loading the resource request and zero-length replies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639300</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-01 07:02:36 -0700</bug_when>
    <thetext>Depends on https://bugs.webkit.org/show_bug.cgi?id=88087</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643372</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-06-07 03:16:36 -0700</bug_when>
    <thetext>Committed r119700: &lt;http://trac.webkit.org/changeset/119700&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137495</attachid>
            <date>2012-04-17 02:14:30 -0700</date>
            <delta_ts>2012-05-07 02:34:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-register-uri-scheme.diff</filename>
            <type>text/plain</type>
            <size>35370</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4NmYwM2I0Li5lMmZkMWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTgg
QEAKKzIwMTItMDQtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gcmVnaXN0ZXIgY3VzdG9tIFVSSSBzY2hlbWVz
IHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGRpZFJlY2VpdmVVUklSZXF1ZXN0KTogQ2FsbGJhY2sgZW1pdHRlZCBieSB0
aGUgQyBBUEkgd2hlbiBhCisgICAgICAgIHJlcXVlc3QgZm9yIGEgY3VzdG9tIFVSSSBzY2hlbWUg
aGFzIGJlZW4gcmVjZWl2ZWQuIENhbGwKKyAgICAgICAgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVk
VVJJUmVxdWVzdCgpIHRvIGhhbmRsZSB0aGUgcmVxdWVzdC4KKyAgICAgICAgKGF0dGFjaFJlcXVl
c3RNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgV0tTb3Vw
UmVxdWVzdE1hbmFnZXJDbGllbnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UmVxdWVzdE1hbmFnZXJDbGllbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklTY2hlbWVSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2luaXQpOgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVxdWVzdEZpbmFsaXpl
KToKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3NfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRVUklTY2hlbWVSZXF1ZXN0Q3JlYXRlKTogQ3JlYXRlIGEgbmV3CisgICAgICAg
IFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgZm9yIHRoZSBnaXZlbiBVUkkgYW5kIHJlcXVlc3QgaWRl
bnRpZmllci4KKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZSk6
IFJldHVybiB0aGUgc2NoZW1lIG9mIHRoZQorICAgICAgICByZXF1ZXN0LgorICAgICAgICAod2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpKTogUmV0dXJuIHRoZSBmdWxsIFVSSSBvZiB0
aGUKKyAgICAgICAgcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3Rf
Z2V0X3BhdGgpOiBSZXR1cm4gdGhlIHBhdGggb2YgdGhlIFVSSS4KKyAgICAgICAgKHdlYmtpdF91
cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKTogRmluaXNoIHRoZSByZXF1ZXN0IGJ5IGNhbGxpbmcK
KyAgICAgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJTZW5kVVJJUmVxdWVzdCgpIHRvIHNlbmQgdGhl
IGNvbnRlbnRzIG9mIHRoZQorICAgICAgICByZXF1ZXN0IHRvIHRoZSBXZWJQcm9jZXNzLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaDogQWRkZWQu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYktpdFVSSVNjaGVtZUhhbmRsZXI6OldlYktpdFVSSVNjaGVtZUhhbmRsZXIp
OiBIZWxwZXIgc3RydWN0IHRvCisgICAgICAgIHNhdmUgY2FsbGJhY2sgYW5kIHVzZXIgZGF0YSBv
ZiByZWdpc3RlcmVkIFVSSSBzY2hlbWVzLgorICAgICAgICAoY3JlYXRlRGVmYXVsdFdlYkNvbnRl
eHQpOiBJbml0aWFsaXplIHRoZSBTb3VwUmVxdWVzdE1hbmFnZXIuCisgICAgICAgICh3ZWJraXRf
d2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSk6IFB1YmxpYyBBUEkgdG8gcmVnaXN0ZXIg
YQorICAgICAgICBjdXN0b20gVVJJIHNjaGVtZSBwcm92aWRpbmcgYSBjYWxsYmFjayB0aGF0IHdp
bGwgYmUgY2FsbGVkIHRvCisgICAgICAgIGhhbmRsZSByZXF1ZXN0cyBmb3IgdGhhdCBVUkkgc2No
ZW1lLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFJlcXVlc3RNYW5hZ2VyKTogSGVscGVy
IHByaXZhdGUgbWV0aG9kIHRvCisgICAgICAgIHJldHVybiB0aGUgU291cFJlcXVlc3RNYW5hZ2Vy
LgorICAgICAgICAod2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJUmVxdWVzdCk6IEdldCB0aGUK
KyAgICAgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciBmb3IgdGhlIGdpdmVuIHJlcXVlc3QgaWRl
bnRpZmllciBhbmQgY2FsbAorICAgICAgICB0aGUgY2FsbGJhY2suCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkCisgICAgICAgIFdlYktpdFVSSVNjaGVt
ZVJlcXVlc3Qgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQgd2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk6Cisg
ICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aDogSW5jbHVkZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmguCisKIDIwMTItMDQtMTYgIFJ5dWFu
IENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWRk
IG1pc3NpbmcgZmlsZXMgdG8gYnVpbGQgd2Via2l0Mi9FZmwuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmlu
ZGV4IGM3NGYzZTEuLmY0ZDg5MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDcsNiArMTA3
LDcgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVSSVJlc3BvbnNlLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJSZXNvdXJjZS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuaCBcCkBAIC02MDIsNiArNjAzLDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFu
YWdlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5jcHAgXApAQCAtNjIxLDYgKzYy
NCw5IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZVByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cml2YXRlLmgKaW5kZXggNGI3ZTlhZC4uNjRlNGUzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMjcsMTEgKzI3LDEzIEBACiAj
ZGVmaW5lIFdlYktpdFByaXZhdGVfaAogCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0FQSUNhc3QuaD4K
KyNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dFNvdXAuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dL
RG93bmxvYWQuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLRnVsbFNjcmVlbkNsaWVudEd0ay5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tS
ZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg+
CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1NvdXBSZXF1ZXN0TWFuYWdlci5oPgogI2luY2x1ZGUgPFdl
YktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KICNpbmNsdWRl
IDxnbGliLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjhmNDNhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmNwcApAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIgor
CisjaW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHZvaWQgZGlkUmVjZWl2ZVVS
SVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCBX
S1VSTFJlZiB1cmxSZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qgdm9pZCogY2xpZW50SW5m
bykKK3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9w
dEdSZWYod2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZShzb3VwUmVxdWVzdE1hbmFnZXJSZWYs
IHVybFJlZiwgcmVxdWVzdElEKSk7CisgICAgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJUmVx
dWVzdChXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50SW5mbyksIHJlcXVlc3QuZ2V0KCkpOworfQor
Cit2b2lkIGF0dGFjaFJlcXVlc3RNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KFdlYktpdFdlYkNvbnRl
eHQqIHdlYkNvbnRleHQpCit7CisgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJDbGllbnQgd2tSZXF1
ZXN0TWFuYWdlckNsaWVudCA9IHsKKyAgICAgICAga1dLU291cFJlcXVlc3RNYW5hZ2VyQ2xpZW50
Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYkNvbnRleHQsIC8vIGNsaWVudEluZm8KKyAgICAg
ICAgZGlkUmVjZWl2ZVVSSVJlcXVlc3QKKyAgICB9OworICAgIFdLU291cFJlcXVlc3RNYW5hZ2Vy
U2V0Q2xpZW50KHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1ZXN0TWFuYWdlcih3ZWJDb250ZXh0KSwg
JndrUmVxdWVzdE1hbmFnZXJDbGllbnQpOworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzY1NTk0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFn
ZXJDbGllbnQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEln
YWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnRfaAorI2RlZmluZSBX
ZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0
LmgiCisKK3ZvaWQgYXR0YWNoUmVxdWVzdE1hbmFnZXJDbGllbnRUb0NvbnRleHQoV2ViS2l0V2Vi
Q29udGV4dCopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYWE5MjBhZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuY3BwCkBAIC0w
LDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmgiCisKKyNp
bmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvR093blB0clNvdXAuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdCwg
R19UWVBFX09CSkVDVCkKKworc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSB7
CisgICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHdrUmVxdWVzdE1hbmFn
ZXI7CisgICAgdWludDY0X3QgcmVxdWVzdElEOworICAgIENTdHJpbmcgdXJpOworICAgIEdPd25Q
dHI8U291cFVSST4gc291cFVSSTsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfaW5pdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIFdl
YktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdFByaXZhdGUpOworICAgIHJlcXVlc3QtPnByaXYgPSBwcml2OworICAgIG5l
dyAocHJpdikgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUoKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0VVJJU2NoZW1lUmVxdWVzdEZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKG9iamVjdCktPnByaXYtPn5XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9jbGFzc19pbml0KFdlYktpdFVSSVNjaGVtZVJl
cXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xh
c3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3MpOworICAgIG9iamVjdENsYXNzLT5maW5h
bGl6ZSA9IHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RGaW5hbGl6ZTsKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2YoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFBy
aXZhdGUpKTsKK30KKworV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogd2Via2l0VVJJU2NoZW1lUmVx
dWVzdENyZWF0ZShXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiB3a1JlcXVlc3RNYW5hZ2VyLCBXS1VS
TFJlZiB3a1VSTCwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIFdlYktpdFVSSVNjaGVtZVJl
cXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2
LT53a1JlcXVlc3RNYW5hZ2VyID0gd2tSZXF1ZXN0TWFuYWdlcjsKKyAgICByZXF1ZXN0LT5wcml2
LT51cmkgPSB0b0ltcGwod2tVUkwpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgcmVxdWVzdC0+cHJp
di0+cmVxdWVzdElEID0gcmVxdWVzdElEOworICAgIHJldHVybiByZXF1ZXN0OworfQorCisvKioK
KyAqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZToKKyAqIEByZXF1ZXN0OiBh
ICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0CisgKgorICogR2V0IHRoZSBVUkkgc2NoZW1lIG9mIEBy
ZXF1ZXN0CisgKgorICogUmV0dXJuczogdGhlIFVSSSBzY2hlbWUgb2YgQHJlcXVlc3QKKyAqLwor
Y29uc3QgY2hhciogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKFdlYktpdFVS
SVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAoIXJlcXVl
c3QtPnByaXYtPnNvdXBVUkkpCisgICAgICAgIHJlcXVlc3QtPnByaXYtPnNvdXBVUkkuc2V0KHNv
dXBfdXJpX25ldyhyZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHJlcXVl
c3QtPnByaXYtPnNvdXBVUkktPnNjaGVtZTsKK30KKworLyoqCisgKiB3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF91cmk6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dAorICoKKyAqIEdldCB0aGUgVVJJIG9mIEByZXF1ZXN0CisgKgorICogUmV0dXJuczogdGhlIGZ1
bGwgVVJJIG9mIEByZXF1ZXN0CisgKi8KK2NvbnN0IGNoYXIqIHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZ2V0X3VyaShXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1QocmVxdWVzdCks
IDApOworCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgor
ICogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aDoKKyAqIEByZXF1ZXN0OiBhICNX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0CisgKgorICogR2V0IHRoZSBVUkkgcGF0aCBvZiBAcmVxdWVz
dAorICoKKyAqIFJldHVybnM6IHRoZSBVUkkgcGF0aCBvZiBAcmVxdWVzdAorICovCitjb25zdCBj
aGFyKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKFdlYktpdFVSSVNjaGVtZVJl
cXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1VS
SV9TQ0hFTUVfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisKKyAgICBpZiAoIXJlcXVlc3QtPnByaXYt
PnNvdXBVUkkpCisgICAgICAgIHJlcXVlc3QtPnByaXYtPnNvdXBVUkkuc2V0KHNvdXBfdXJpX25l
dyhyZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYt
PnNvdXBVUkktPnBhdGg7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9m
aW5pc2g6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICogQGRhdGE6
IHRoZSBjb250ZW50cyBvZiB0aGUgcmVxdWVzdAorICogQGRhdGFfbGVuZ3RoOiB0aGUgbGVuZ3Ro
IG9mIHRoZSBkYXRhLCBtYXkgYmUgLTEgaWYgQGRhdGEgaXMgYSAlTlVMTC10ZXJtaW5hdGVkIHN0
cmluZworICogQG1pbWVfdHlwZTogdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgZGF0YQorICoKKyAq
IEZpbmlzaCBhICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0IGJ5IHNldHRpbmcgdGhlIGNvbnRlbnRz
IG9mIHRoZSByZXF1ZXN0IGFuZCBpdHMgbWltZSB0eXBlLgorICovCit2b2lkIHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZmluaXNoKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdj
b25zdHBvaW50ZXIgZGF0YSwgZ3NzaXplIGRhdGFMZW5ndGgsIGNvbnN0IGdjaGFyKiBtaW1lVHlw
ZSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1Qo
cmVxdWVzdCkpOworCisgICAgc2l6ZV90IGRhdGFTaXplID0gZGF0YUxlbmd0aCA9PSAtMSA/IHN0
cmxlbihyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSkgOiBkYXRhTGVuZ3RoOwor
ICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRhKEFkb3B0V0ssIFdLRGF0YUNyZWF0ZShy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihkYXRhKSwgZGF0YVNpemUpKTsK
KyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tNaW1lVHlwZSA9IG1pbWVUeXBlID8gYWRv
cHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhtaW1lVHlwZSkpIDogMDsKKyAgICBX
S1NvdXBSZXF1ZXN0TWFuYWdlclNlbmRVUklSZXF1ZXN0KHJlcXVlc3QtPnByaXYtPndrUmVxdWVz
dE1hbmFnZXIuZ2V0KCksIHdrRGF0YS5nZXQoKSwgd2tNaW1lVHlwZS5nZXQoKSwgcmVxdWVzdC0+
cHJpdi0+cmVxdWVzdElEKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi44OGY5OTA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oCkBAIC0wLDAgKzEs
NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVk
KF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQor
I2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5
LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RfaAorI2RlZmluZSBX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmlu
ZSBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QgICAgICAgICAgICAod2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVVJJX1NDSEVNRV9SRVFV
RVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdF
QktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCkpCisj
ZGVmaW5lIFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1Qob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNU
KSkKKyNkZWZpbmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JF
UVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19V
UklfU0NIRU1FX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lU
X1VSSV9TQ0hFTUVfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
Q0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdlYktpdFVSSVNj
aGVtZVJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1
ZXN0ICAgICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFVSSVNjaGVtZVJlcXVlc3RDbGFzcyAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzczsKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSBXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0IHsKKyAg
ICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlICpw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyICoKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZSAoV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpICAgIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF9wYXRoICAgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QpOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoICAgICAo
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2NvbnN0cG9pbnRlciAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NzaXplICAgICAgICAgICAgICAgICAgZGF0YV9s
ZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICAgKm1pbWVfdHlwZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVS
SVNjaGVtZVJlcXVlc3RQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWZlZjA1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwyOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFVSSVNj
aGVtZVJlcXVlc3RQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZh
dGVfaAorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFVSSVNj
aGVtZVJlcXVlc3QuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5hZ2VyLmg+
CisKK1dlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RDcmVhdGUo
V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLVVJMUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpOwor
CisjZW5kaWYgLy8gV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRl
eCAwYjY4YzA4Li44NGQ1ODViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1
ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxv
YWRDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKLSNpbmNsdWRl
ICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQu
aCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgpAQCAtMzgsMTAgKzM4
LDMwIEBAIGVudW0gewogICAgIExBU1RfU0lHTkFMCiB9OwogCitzdHJ1Y3QgV2ViS2l0VVJJU2No
ZW1lSGFuZGxlciB7CisgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlcigpCisgICAgICAgIDogY2Fs
bGJhY2soMCkKKyAgICAgICAgLCB1c2VyRGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgV2ViS2l0
VVJJU2NoZW1lSGFuZGxlcihXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ss
IHZvaWQqIHVzZXJEYXRhKQorICAgICAgICA6IGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAs
IHVzZXJEYXRhKHVzZXJEYXRhKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgIFdlYktpdFVS
SVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKK307
CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFdlYktpdFVSSVNjaGVtZUhhbmRsZXI+IFVSSVNj
aGVtZUhhbmRsZXJNYXA7CisKIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogICAg
IFdLUmV0YWluUHRyPFdLQ29udGV4dFJlZj4gY29udGV4dDsKIAogICAgIEdSZWZQdHI8V2ViS2l0
Q29va2llTWFuYWdlcj4gY29va2llTWFuYWdlcjsKKyAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1
ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CisgICAgVVJJU2NoZW1lSGFuZGxlck1hcCB1
cmlTY2hlbWVIYW5kbGVyczsKIH07CiAKIHN0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFM
XSA9IHsgMCwgfTsKQEAgLTg5LDggKzEwOSwxMCBAQCBzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVm
YXVsdFdlYkNvbnRleHQoZ3BvaW50ZXIpCiB7CiAgICAgc3RhdGljIEdSZWZQdHI8V2ViS2l0V2Vi
Q29udGV4dD4gd2ViQ29udGV4dCA9IGFkb3B0R1JlZihXRUJLSVRfV0VCX0NPTlRFWFQoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX1dFQl9DT05URVhULCBOVUxMKSkpOwogICAgIHdlYkNvbnRleHQt
PnByaXYtPmNvbnRleHQgPSBXS0NvbnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOworICAg
IHdlYkNvbnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyID0gV0tDb250ZXh0R2V0U291cFJlcXVl
c3RNYW5hZ2VyKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCkpOwogICAgIFdLQ29udGV4
dFNldENhY2hlTW9kZWwod2ViQ29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKSwga1dLQ2FjaGVN
b2RlbFByaW1hcnlXZWJCcm93c2VyKTsKICAgICBhdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4
dCh3ZWJDb250ZXh0LmdldCgpKTsKKyAgICBhdHRhY2hSZXF1ZXN0TWFuYWdlckNsaWVudFRvQ29u
dGV4dCh3ZWJDb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4gd2ViQ29udGV4dC5nZXQoKTsKIH0K
IApAQCAtMjM2LDYgKzI1OCw1NiBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbgogICAgIHJldHVy
biBwcml2LT5jb29raWVNYW5hZ2VyLmdldCgpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfY29u
dGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRl
eHQKKyAqIEBzY2hlbWU6IHRoZSBuZXR3b3JrIHNjaGVtZSB0byByZWdpc3RlcgorICogQGNhbGxi
YWNrOiBhICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sKKyAqIEB1c2VyX2RhdGE6IGRh
dGEgdG8gcGFzcyB0byBjYWxsYmFjayBmdW5jdGlvbgorICoKKyAqIFJlZ2lzdGVyIEBzY2hlbWUg
aW4gQGNvbnRleHQsIHNvIHRoYXQgd2hlbiBhbiBVUkkgcmVxdWVzdCB3aXRoIEBzY2hlbWUgaXMg
bWFkZSBpbiB0aGUKKyAqICNXZWJLaXRXZWJDb250ZXh0LCB0aGUgI1dlYktpdFVSSVNjaGVtZVJl
cXVlc3RDYWxsYmFjayByZWdpc3RlcmVkIHdpbGwgYmUgY2FsbGVkIHdpdGggYQorICogI1dlYktp
dFVSSVNjaGVtZVJlcXVlc3QuCisgKiBJdCBpcyBwb3NzaWJsZSB0byBoYW5kbGUgVVJJIHNjaGVt
ZSByZXF1ZXN0cyBhc3luY2hyb25vdXNseSwgYnkgY2FsbGluZyBnX29iamVjdF9yZWYoKSBvbiB0
aGUKKyAqICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0IGFuZCBjYWxsaW5nIHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZmluaXNoKCkgbGF0ZXIgd2hlbiB0aGUgZGF0YSBvZgorICogdGhlIHJlcXVl
c3QgaXMgYXZhaWxhYmxlLgorICoKKyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5n
PgorICogc3RhdGljIHZvaWQKKyAqIGFib3V0X3VyaV9zY2hlbWVfcmVxdWVzdF9jYiAoV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgdXNlcl9kYXRhKQorICogeworICogICAgIGdjaGFy
ICAgICAgICpjb250ZW50czsKKyAqICAgICBnc3NpemUgICAgICAgY29udGVudHNfbGVuZ3RoOwor
ICogICAgIGNvbnN0IGdjaGFyICpwYXRoOworICoKKyAqICAgICBwYXRoID0gd2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfcGF0aCAocmVxdWVzdCk7CisgKiAgICAgaWYgKCFnX3N0cmNtcDAg
KHBhdGgsICJwbHVnaW5zIikpIHsKKyAqICAgICAgICAgLzwhLS0gLS0+KiBTZXQgY29udGVudHMg
b2YgcGx1Z2lucyBhYm91dCBwYWdlIHRvIGNvbnRlbnRzLCBhbmQgaXRzIGxlbmd0aCB0byBjb250
ZW50c19sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMCAocGF0
aCwgIm1lbW9yeSIpKSB7CisgKiAgICAgICAgIC88IS0tIC0tPiogU2V0IGNvbnRlbnRzIG9mIG1l
bW9yeSBhYm91dCBwYWdlIHRvIGNvbnRlbnRzLCBhbmQgaXRzIGxlbmd0aCB0byBjb250ZW50c19s
ZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMCAocGF0aCwgImFw
cGxpY2F0aW9ucyIpKSB7CisgKiAgICAgICAgIC88IS0tIC0tPiogU2V0IGNvbnRlbnRzIG9mIGFw
cGxpY2F0aW9ucyBhYm91dCBwYWdlIHRvIGNvbnRlbnRzLCBhbmQgaXRzIGxlbmd0aCB0byBjb250
ZW50c19sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAgIGNvbnRl
bnRzID0gZ19zdHJkdXBfcHJpbnRmICgiJmx0O2h0bWwmZ3Q7Jmx0O2JvZHkmZ3Q7Jmx0O3AmZ3Q7
SW52YWxpZCBhYm91dDolcyBwYWdlJmx0Oy9wJmd0OyZsdDsvYm9keSZndDsmbHQ7L2h0bWwmZ3Q7
IiwgcGF0aCk7CisgKiAgICAgICAgIGNvbnRlbnRzX2xlbmd0aCA9IC0xOworICogICAgIH0KKyAq
ICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaCAocmVxdWVzdCwgY29udGVudHMs
IGNvbnRlbnRzX2xlbmd0aCwgInRleHQvaHRtbCIpOworICogICAgIGdfZnJlZSAoY29udGVudHMp
OworICogfQorICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhhbXBsZT4KKyAqLwordm9p
ZCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZShXZWJLaXRXZWJDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBjaGFyKiBzY2hlbWUsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxs
YmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgZ19yZXR1cm5faWZfZmFp
bChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
c2NoZW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNhbGxiYWNrKTsKKworICAgIGNvbnRleHQt
PnByaXYtPnVyaVNjaGVtZUhhbmRsZXJzLnNldChTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSksIFdl
YktpdFVSSVNjaGVtZUhhbmRsZXIoY2FsbGJhY2ssIHVzZXJEYXRhKSk7CisgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHdrU2NoZW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKHNjaGVtZSkpOworICAgIFdLU291cFJlcXVlc3RNYW5hZ2VyUmVnaXN0ZXJVUklTY2hl
bWUoY29udGV4dC0+cHJpdi0+cmVxdWVzdE1hbmFnZXIuZ2V0KCksIHdrU2NoZW1lLmdldCgpKTsK
K30KKwogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2Fk
KFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCkKIHsKICAgICBHUmVmUHRyPFdlYktpdERvd25sb2Fk
PiBkb3dubG9hZCA9IGRvd25sb2Fkc01hcCgpLmdldCh3a0Rvd25sb2FkKTsKQEAgLTI2NCwzICsz
MzYsMTYgQEAgV0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQoV2ViS2l0
V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+Y29udGV4dC5n
ZXQoKTsKIH0KIAorV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgd2Via2l0V2ViQ29udGV4dEdldFJl
cXVlc3RNYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCit7CisgICAgcmV0dXJuIGNv
bnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyLmdldCgpOworfQorCit2b2lkIHdlYmtpdFdlYkNv
bnRleHRSZWNlaXZlZFVSSVJlcXVlc3QoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRVUklTY2hlbWVIYW5kbGVy
IGhhbmRsZXIgPSBjb250ZXh0LT5wcml2LT51cmlTY2hlbWVIYW5kbGVycy5nZXQod2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpKTsKKyAgICBpZiAoIWhhbmRsZXIu
Y2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIGhhbmRsZXIuY2FsbGJhY2socmVxdWVz
dCwgaGFuZGxlci51c2VyRGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKaW5kZXggNDViNmU2Yy4uODMxMzIwMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0Q29va2llTWFu
YWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RG93bmxvYWQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVNjaGVt
ZVJlcXVlc3QuaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC01OCw2ICs1OSwxNyBAQCB0eXBlZGVm
IGVudW0gewogICAgIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NVTUVOVF9CUk9XU0VSCiB9IFdlYktp
dENhY2hlTW9kZWw7CiAKKy8qKgorICogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrOgor
ICogQHJlcXVlc3Q6IHRoZSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICogQHVzZXJfZGF0YTog
dXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAqCisgKiBUeXBlIGRlZmluaXRpb24g
Zm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gYW4gVVJJIHJlcXVl
c3QgaXMKKyAqIG1hZGUgZm9yIGEgdXNlciByZWdpc3RlcmVkIFVSSSBzY2hlbWUuCisgKi8KK3R5
cGVkZWYgdm9pZCAoKiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2spIChXZWJLaXRVUklT
Y2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CisKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0ICAgICAgICBXZWJLaXRXZWJDb250ZXh0Owog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRDbGFzcyAgIFdlYktpdFdlYkNvbnRleHRD
bGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSBXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZTsKQEAgLTgwLDIzICs5MiwyOSBAQCBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRl
eHRDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0
X3R5cGUgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfdHlwZSAgICAg
ICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250ZXh0ICoKLXdlYmtpdF93
ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgKHZvaWQpOword2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0ICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRfQVBJIHZvaWQKLXdlYmtpdF93
ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwgICAgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRDYWNoZU1vZGVs
ICBjYWNoZV9tb2RlbCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hlX21vZGVsICAgICAo
V2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2RlbCAgICAgICAgICAgICAgIGNh
Y2hlX21vZGVsKTsKIFdFQktJVF9BUEkgV2ViS2l0Q2FjaGVNb2RlbAotd2Via2l0X3dlYl9jb250
ZXh0X2dldF9jYWNoZV9tb2RlbCAgICAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCk7Cit3ZWJr
aXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAg
ICAgICAgICAgKmNvbnRleHQpOwogCiBXRUJLSVRfQVBJIFdlYktpdERvd25sb2FkICoKLXdlYmtp
dF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRl
eHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAg
ICAgICp1cmkpOword2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSAgICAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICp1cmkpOwog
CiBXRUJLSVRfQVBJIFdlYktpdENvb2tpZU1hbmFnZXIgKgotd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9jb29raWVfbWFuYWdlciAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCk7Cit3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAg
ICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfY29udGV4dF9yZWdp
c3Rlcl91cmlfc2NoZW1lIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAg
ICAgICAgICAgICAgICAqc2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcl9kYXRhKTsKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKaW5k
ZXggZDJkZDgxMy4uNDgzZTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCkBAIC0yNiwxNiArMjYs
MTUgQEAKICNpZm5kZWYgV2ViS2l0V2ViQ29udGV4dFByaXZhdGVfaAogI2RlZmluZSBXZWJLaXRX
ZWJDb250ZXh0UHJpdmF0ZV9oCiAKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVk
ZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHQu
aCIKLSNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KLQotR19CRUdJTl9ERUNMUwogCiBXS0Nv
bnRleHRSZWYgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChXZWJLaXRXZWJDb250ZXh0Kik7
CiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoV0tE
b3dubG9hZFJlZik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVEb3dubG9hZChXS0Rvd25s
b2FkUmVmKTsKIHZvaWQgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChXZWJLaXRXZWJD
b250ZXh0KiwgV2ViS2l0RG93bmxvYWQqKTsKLQotR19FTkRfREVDTFMKK1dLU291cFJlcXVlc3RN
YW5hZ2VyUmVmIHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1ZXN0TWFuYWdlcihXZWJLaXRXZWJDb250
ZXh0Kik7Cit2b2lkIHdlYmtpdFdlYkNvbnRleHRSZWNlaXZlZFVSSVJlcXVlc3QoV2ViS2l0V2Vi
Q29udGV4dCosIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqKTsKIAogI2VuZGlmIC8vIFdlYktpdFdl
YkNvbnRleHRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDMyYzcyNTUuLjU4ZWYw
YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMzAsNiArMzAsNyBAQAogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRFcnJvci54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4
bWwvV2ViS2l0RmluZENvbnRyb2xsZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdENvb2tpZU1hbmFnZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dl
YktpdFVSSVNjaGVtZVJlcXVlc3QueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8aW5kZXggaWQ9
ImluZGV4LWFsbCI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBkYzM4MDk1Li4yYjA5
MjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTMwLDYgKzMwLDEwIEBAIHdlYmtp
dF93ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9h
ZF91cmkKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIKIAorPFNVQlNFQ1RJ
T04gIFVSSSBTY2hlbWU+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sKK3dlYmtpdF93
ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lCisKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgog
V2ViS2l0V2ViQ29udGV4dENsYXNzCiBXRUJLSVRfV0VCX0NPTlRFWFQKQEAgLTU3MywzICs1Nzcs
MjUgQEAgV0VCS0lUX0NPT0tJRV9NQU5BR0VSX0dFVF9DTEFTUwogV2ViS2l0Q29va2llTWFuYWdl
clByaXZhdGUKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNUSU9OPgorCis8
U0VDVElPTj4KKzxGSUxFPldlYktpdFVSSVNjaGVtZVJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRVUklT
Y2hlbWVSZXF1ZXN0Cit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUKK3dlYmtp
dF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaQord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9n
ZXRfcGF0aAord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gKKworPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBFX1VSSV9T
Q0hFTUVfUkVRVUVTVAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVAorV0VCS0lUX0lTX1VSSV9T
Q0hFTUVfUkVRVUVTVAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUworV0VCS0lUX0lT
X1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUworV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9HRVRf
Q0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2
YXRlCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsu
dHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsu
dHlwZXMKaW5kZXggNDNhYjRmNS4uNWQyZDdjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTQsMyArMTQs
NCBAQCB3ZWJraXRfc2NyaXB0X2RpYWxvZ19nZXRfdHlwZQogd2Via2l0X2phdmFzY3JpcHRfcmVz
dWx0X2dldF90eXBlCiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF90eXBlCiB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X3R5cGUKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3R5cGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJL
aXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBhZDdjZTViLi41ODQ1YTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2Vi
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
VGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yMCw4ICsyMCwxMSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5o
IgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1Jl
ZlB0ci5oPgogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKIHsKQEAgLTI5LDkgKzMyLDg0IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJD
b250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
ZGVmYXVsdCgpKTsKIH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIdG1sID0gIjxodG1sPjxi
b2R5PkJhcjwvYm9keT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRWNob0h0bWxGb3Jt
YXQgPSAiPGh0bWw+PGJvZHk+JXM8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIFVSSVNjaGVtZVRl
c3Q6IHB1YmxpYyBXZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklY
VFVSRShVUklTY2hlbWVUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHVyaVNjaGVtZVJlcXVlc3RD
YWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0
YSkKKyAgICB7CisgICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxVUklT
Y2hlbWVUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3Qg
PSByZXF1ZXN0OworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpLCAiZm9vIikpCisgICAgICAg
ICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChyZXF1ZXN0LCByZWludGVycHJl
dF9jYXN0PGdjb25zdHBvaW50ZXI+KGtCYXJIdG1sKSwgLTEsICJ0ZXh0L2h0bWwiKTsKKyAgICAg
ICAgZWxzZSBpZiAoIWdfc3RyY21wMCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCksICJlY2hvIikpIHsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gZWNob0h0
bWwoZ19zdHJkdXBfcHJpbnRmKGtFY2hvSHRtbEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfcGF0aChyZXF1ZXN0KSkpOworICAgICAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9maW5pc2gocmVxdWVzdCwgcmVpbnRlcnByZXRfY2FzdDxnY29uc3Rwb2ludGVyPihl
Y2hvSHRtbC5nZXQoKSksIC0xLCAidGV4dC9odG1sIik7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBVUklTY2hlbWVUZXN0KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9yZWdp
c3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCAiZm9vIiwg
dXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgd2Via2l0X3dlYl9jb250
ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCks
ICJlY2hvIiwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdm9pZCByZXNvdXJjZUdldERhdGFDYWxsYmFjayhHT2JqZWN0KiBvYmplY3QsIEdBc3lu
Y1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7CisgICAgICAgIHNpemVf
dCBkYXRhU2l6ZTsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9yOworICAgICAgICB1bnNp
Z25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YV9maW5pc2goV0VC
S0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6ZSwgJmVycm9yLm91dFB0
cigpKTsKKyAgICAgICAgZ19hc3NlcnQoZGF0YSk7CisKKyAgICAgICAgVVJJU2NoZW1lVGVzdCog
dGVzdCA9IHN0YXRpY19jYXN0PFVSSVNjaGVtZVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRl
c3QtPm1fcmVzb3VyY2VEYXRhLnNldChyZWludGVycHJldF9jYXN0PGNoYXIqPihkYXRhKSk7Cisg
ICAgICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhU2l6ZSA9IGRhdGFTaXplOworICAgICAgICBnX21h
aW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKworICAgIHZvaWQgY2hlY2tN
YWluUmVzb3VyY2VEYXRhKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3VyY2VEYXRhU2l6ZSA9IDA7
CisgICAgICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpOworICAgICAgICBnX2Fzc2VydChyZXNvdXJjZSk7
CisKKyAgICAgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShyZXNvdXJjZSwgcmVzb3Vy
Y2VHZXREYXRhQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWlu
TG9vcCk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfc2NoZW1lKG1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSksICJmb28iKSkgeworICAgICAg
ICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihrQmFy
SHRtbCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEuZ2V0
KCksIGtCYXJIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfSBlbHNlIGlmICgh
Z19zdHJjbXAwKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShtX3VyaVNjaGVt
ZVJlcXVlc3QuZ2V0KCkpLCAiZWNobyIpKSB7CisgICAgICAgICAgICBHT3duUHRyPGNoYXI+IGVj
aG9IdG1sKGdfc3RyZHVwX3ByaW50ZihrRWNob0h0bWxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3BhdGgobV91cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSkpOworICAgICAgICAg
ICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0sIHN0cmxlbihlY2hvSHRt
bC5nZXQoKSkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9yZXNvdXJjZURhdGEu
Z2V0KCksIGVjaG9IdG1sLmdldCgpLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7CisgICAgc2l6ZV90IG1f
cmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IG1f
dXJpU2NoZW1lUmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0VVJJU2No
ZW1lKFVSSVNjaGVtZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9h
ZFVSSSgiZm9vOmJsYW5rIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgdGVzdC0+Y2hlY2tNYWluUmVzb3VyY2VEYXRhKCk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKCJl
Y2hvOmhlbGxvIHdvcmxkIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7Cisg
ICAgdGVzdC0+Y2hlY2tNYWluUmVzb3VyY2VEYXRhKCk7Cit9CisKIHZvaWQgYmVmb3JlQWxsKCkK
IHsKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1jb250ZXh0Iiwg
dGVzdFdlYkNvbnRleHREZWZhdWx0KTsKKyAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdl
YkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKIH0KIAog
dm9pZCBhZnRlckFsbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKaW5kZXggNWU3ZjZjYS4uNGJjNGFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250
ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNvdXJjZS5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4K
</data>
<flag name="review"
          id="142567"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="142577"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140497</attachid>
            <date>2012-05-07 02:34:28 -0700</date>
            <delta_ts>2012-05-08 06:53:07 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk-register-uri-scheme2.diff</filename>
            <type>text/plain</type>
            <size>37832</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwM2QxMDk1Li44NjIxZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAg
QEAKKzIwMTItMDUtMDcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gcmVnaXN0ZXIgY3VzdG9tIFVSSSBzY2hlbWVz
IHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGRpZFJlY2VpdmVVUklSZXF1ZXN0KTogQ2FsbGJhY2sgZW1pdHRlZCBieSB0
aGUgQyBBUEkgd2hlbiBhCisgICAgICAgIHJlcXVlc3QgZm9yIGEgY3VzdG9tIFVSSSBzY2hlbWUg
aGFzIGJlZW4gcmVjZWl2ZWQuIENhbGwKKyAgICAgICAgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVk
VVJJUmVxdWVzdCgpIHRvIGhhbmRsZSB0aGUgcmVxdWVzdC4KKyAgICAgICAgKGF0dGFjaFJlcXVl
c3RNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgV0tTb3Vw
UmVxdWVzdE1hbmFnZXJDbGllbnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UmVxdWVzdE1hbmFnZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RG
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZSk6IENyZWF0ZSBhIG5ldwor
ICAgICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0IGZvciB0aGUgZ2l2ZW4gVVJJIGFuZCByZXF1
ZXN0IGlkZW50aWZpZXIuCisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9z
Y2hlbWUpOiBSZXR1cm4gdGhlIHNjaGVtZSBvZiB0aGUKKyAgICAgICAgcmVxdWVzdC4KKyAgICAg
ICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaSk6IFJldHVybiB0aGUgZnVsbCBV
Ukkgb2YgdGhlCisgICAgICAgIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF9wYXRoKTogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBVUkkuCisgICAgICAgICh3
ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENhbGxiYWNrKTogUmVhZCBjYWxsYmFjayBlbWl0dGVk
IHdoZW4KKyAgICAgICAgcmVhZGluZyB0aGUgY29udGVudHMgaW5wdXQgc3RyZWFtLgorICAgICAg
ICAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gpOiBGaW5pc2ggdGhlIHJlcXVlc3Qg
YnkgY2FsbGluZworICAgICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclNlbmRVUklSZXF1ZXN0KCkg
dG8gc2VuZCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgIHJlcXVlc3QgdG8gdGhlIFdlYlBy
b2Nlc3MuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdFVSSVNjaGVtZUhhbmRsZXI6OldlYktp
dFVSSVNjaGVtZUhhbmRsZXIpOiBIZWxwZXIgc3RydWN0IHRvCisgICAgICAgIHNhdmUgY2FsbGJh
Y2sgYW5kIHVzZXIgZGF0YSBvZiByZWdpc3RlcmVkIFVSSSBzY2hlbWVzLgorICAgICAgICAoY3Jl
YXRlRGVmYXVsdFdlYkNvbnRleHQpOiBJbml0aWFsaXplIHRoZSBTb3VwUmVxdWVzdE1hbmFnZXIu
CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSk6IFB1Ymxp
YyBBUEkgdG8gcmVnaXN0ZXIgYQorICAgICAgICBjdXN0b20gVVJJIHNjaGVtZSBwcm92aWRpbmcg
YSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvCisgICAgICAgIGhhbmRsZSByZXF1ZXN0
cyBmb3IgdGhhdCBVUkkgc2NoZW1lLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFJlcXVl
c3RNYW5hZ2VyKTogSGVscGVyIHByaXZhdGUgbWV0aG9kIHRvCisgICAgICAgIHJldHVybiB0aGUg
U291cFJlcXVlc3RNYW5hZ2VyLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJ
UmVxdWVzdCk6IEdldCB0aGUKKyAgICAgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciBmb3IgdGhl
IGdpdmVuIHJlcXVlc3QgaWRlbnRpZmllciBhbmQgY2FsbAorICAgICAgICB0aGUgY2FsbGJhY2su
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkCisgICAg
ICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQgd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29u
dGV4dFVSSVNjaGVtZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmguCisK
IDIwMTItMDUtMDYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1MjY1CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCmluZGV4IGE2YjQyYTYuLjRhZjdkZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBA
IC0xMDgsNiArMTA4LDcgQEAgbGlid2Via2l0Mmd0a2luY2x1ZGVfSEVBREVSUyA9IFwKIAkkKFdl
YktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNldHRpbmdzLmggXAogCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmggXAorCSQoV2ViS2l0MikvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaCBcCkBAIC02MDYsNiArNjA3LDggQEAgd2Via2l0Ml9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlv
blByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRl
LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1h
bmFnZXJDbGllbnQuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5jcHAgXApA
QCAtNjI1LDYgKzYyOCw5IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZVByaXZhdGUuaCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3Qu
aCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dFByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRQcml2YXRlLmgKaW5kZXggNGI3ZTlhZC4uNjRlNGUzNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMjcsMTEg
KzI3LDEzIEBACiAjZGVmaW5lIFdlYktpdFByaXZhdGVfaAogCiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0FQSUNhc3QuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dFNvdXAuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLRG93bmxvYWQuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRmluZE9wdGlvbnMu
aD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLRnVsbFNjcmVlbkNsaWVudEd0ay5oPgogI2luY2x1ZGUg
PFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS1NvdXBSZXF1ZXN0TWFuYWdlci5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIu
aD4KICNpbmNsdWRlIDxnbGliLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhmNDNhYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xp
ZW50LmNwcApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdl
ckNsaWVudC5oIgorCisjaW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHZvaWQg
ZGlkUmVjZWl2ZVVSSVJlcXVlc3QoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgc291cFJlcXVlc3RN
YW5hZ2VyUmVmLCBXS1VSTFJlZiB1cmxSZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+IHJl
cXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZShzb3VwUmVxdWVz
dE1hbmFnZXJSZWYsIHVybFJlZiwgcmVxdWVzdElEKSk7CisgICAgd2Via2l0V2ViQ29udGV4dFJl
Y2VpdmVkVVJJUmVxdWVzdChXRUJLSVRfV0VCX0NPTlRFWFQoY2xpZW50SW5mbyksIHJlcXVlc3Qu
Z2V0KCkpOworfQorCit2b2lkIGF0dGFjaFJlcXVlc3RNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KFdl
YktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCit7CisgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJD
bGllbnQgd2tSZXF1ZXN0TWFuYWdlckNsaWVudCA9IHsKKyAgICAgICAga1dLU291cFJlcXVlc3RN
YW5hZ2VyQ2xpZW50Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYkNvbnRleHQsIC8vIGNsaWVu
dEluZm8KKyAgICAgICAgZGlkUmVjZWl2ZVVSSVJlcXVlc3QKKyAgICB9OworICAgIFdLU291cFJl
cXVlc3RNYW5hZ2VyU2V0Q2xpZW50KHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1ZXN0TWFuYWdlcih3
ZWJDb250ZXh0KSwgJndrUmVxdWVzdE1hbmFnZXJDbGllbnQpOworfQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFn
ZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzY1NTk0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UmVxdWVzdE1hbmFnZXJDbGllbnQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnRf
aAorI2RlZmluZSBXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudF9oCisKKyNpbmNsdWRlICJXZWJL
aXRXZWJDb250ZXh0LmgiCisKK3ZvaWQgYXR0YWNoUmVxdWVzdE1hbmFnZXJDbGllbnRUb0NvbnRl
eHQoV2ViS2l0V2ViQ29udGV4dCopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU3ZGVkYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVl
c3QuY3BwCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxp
YSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0LmgiCisKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvR093blB0clNvdXAuaD4KKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
KyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitHX0RFRklORV9UWVBFKFdlYktp
dFVSSVNjaGVtZVJlcXVlc3QsIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3QsIEdfVFlQRV9PQkpF
Q1QpCisKK3N0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUgeworICAgIFdLUmV0
YWluUHRyPFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmPiB3a1JlcXVlc3RNYW5hZ2VyOworICAgIHVp
bnQ2NF90IHJlcXVlc3RJRDsKKyAgICBDU3RyaW5nIHVyaTsKKyAgICBHT3duUHRyPFNvdXBVUkk+
IHNvdXBVUkk7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2lu
aXQoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShyZXF1
ZXN0LCBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVl
c3RQcml2YXRlKTsKKyAgICByZXF1ZXN0LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdl
YktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFVS
SVNjaGVtZVJlcXVlc3RGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV0VCS0lUX1VS
SV9TQ0hFTUVfUkVRVUVTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0VVJJU2NoZW1lUmVxdWVzdFBy
aXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF91
cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3Mq
IHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpF
Q1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJr
aXRVUklTY2hlbWVSZXF1ZXN0RmluYWxpemU7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKSk7Cit9
CisKK1dlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RDcmVhdGUo
V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgd2tSZXF1ZXN0TWFuYWdlciwgV0tVUkxSZWYgd2tVUkws
IHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1
ZXN0ID0gV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
VVJJX1NDSEVNRV9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+cHJpdi0+d2tSZXF1ZXN0
TWFuYWdlciA9IHdrUmVxdWVzdE1hbmFnZXI7CisgICAgcmVxdWVzdC0+cHJpdi0+dXJpID0gdG9J
bXBsKHdrVVJMKS0+c3RyaW5nKCkudXRmOCgpOworICAgIHJlcXVlc3QtPnByaXYtPnJlcXVlc3RJ
RCA9IHJlcXVlc3RJRDsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKworLyoqCisgKiB3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWU6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHNjaGVtZSBvZiBAcmVxdWVzdAorICoK
KyAqIFJldHVybnM6IHRoZSBVUkkgc2NoZW1lIG9mIEByZXF1ZXN0CisgKi8KK2NvbnN0IGNoYXIq
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19VUklf
U0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFyZXF1ZXN0LT5wcml2LT5z
b3VwVVJJKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNldChzb3VwX3VyaV9uZXco
cmVxdWVzdC0+cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5z
b3VwVVJJLT5zY2hlbWU7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9n
ZXRfdXJpOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QKKyAqCisgKiBH
ZXQgdGhlIFVSSSBvZiBAcmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRoZSBmdWxsIFVSSSBvZiBA
cmVxdWVzdAorICovCitjb25zdCBjaGFyKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF91
cmkoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUKHJlcXVlc3QpLCAwKTsKKworICAg
IHJldHVybiByZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF91
cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGg6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHBhdGggb2YgQHJlcXVlc3QKKyAqCisgKiBS
ZXR1cm5zOiB0aGUgVVJJIHBhdGggb2YgQHJlcXVlc3QKKyAqLworY29uc3QgY2hhciogd2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19VUklfU0NIRU1FX1JF
UVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFyZXF1ZXN0LT5wcml2LT5zb3VwVVJJKQor
ICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNldChzb3VwX3VyaV9uZXcocmVxdWVzdC0+
cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLT5w
YXRoOworfQorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGdSZWFkQnVmZmVyU2l6ZSA9IDgx
OTI7CisKK3N0cnVjdCBVUklTY2hlbWVSZXF1ZXN0UmVhZERhdGEgeworICAgIFVSSVNjaGVtZVJl
cXVlc3RSZWFkRGF0YShXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBHSW5wdXRTdHJl
YW0qIHN0cmVhbSwgZ3NpemUgc3RyZWFtTGVuZ3RoLCBjb25zdCBjaGFyKiBtaW1lVHlwZSkKKyAg
ICAgICAgOiByZXF1ZXN0KHJlcXVlc3QpCisgICAgICAgICwgc3RyZWFtKHN0cmVhbSkKKyAgICAg
ICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIHN0cmVhbURhdGEucmVzZXJ2
ZUNhcGFjaXR5KHN0cmVhbUxlbmd0aCk7CisgICAgfQorICAgIEdSZWZQdHI8V2ViS2l0VVJJU2No
ZW1lUmVxdWVzdD4gcmVxdWVzdDsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gc3RyZWFtOwor
ICAgIGNoYXIgYnVmZmVyW2dSZWFkQnVmZmVyU2l6ZV07CisgICAgQ1N0cmluZyBtaW1lVHlwZTsK
KyAgICBWZWN0b3I8Y2hhcj4gc3RyZWFtRGF0YTsKK307CisKK3N0YXRpYyB2b2lkIHdlYmtpdFVS
SVNjaGVtZVJlcXVlc3RSZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIFVSSVNjaGVtZVJlcXVlc3RSZWFkRGF0YSogZGF0YSkKK3sKKyAg
ICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goaW5wdXRTdHJl
YW0sIHJlc3VsdCwgMCk7CisgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkgeworICAgICAgICBkZWxl
dGUgZGF0YTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghYnl0ZXNSZWFkKSB7
CisgICAgICAgIGlmIChkYXRhLT5zdHJlYW1EYXRhLnNpemUoKSA9PSBkYXRhLT5zdHJlYW1EYXRh
LmNhcGFjaXR5KCkpIHsKKyAgICAgICAgICAgIFdLUmV0YWluUHRyPFdLRGF0YVJlZj4gd2tEYXRh
KEFkb3B0V0ssIFdLRGF0YUNyZWF0ZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihkYXRhLT5zdHJlYW1EYXRhLmRhdGEoKSksIGRhdGEtPnN0cmVhbURhdGEuc2l6ZSgpKSk7
CisgICAgICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tNaW1lVHlwZSA9IGFkb3B0
V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGF0YS0+bWltZVR5cGUuZGF0YSgpKSk7
CisgICAgICAgICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlckhhbmRsZVVSSVJlcXVlc3QoZGF0YS0+
cmVxdWVzdC0+cHJpdi0+d2tSZXF1ZXN0TWFuYWdlci5nZXQoKSwgd2tEYXRhLmdldCgpLCB3a01p
bWVUeXBlLmdldCgpLCBkYXRhLT5yZXF1ZXN0LT5wcml2LT5yZXF1ZXN0SUQpOworICAgICAgICB9
CisgICAgICAgIGRlbGV0ZSBkYXRhOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGF0
YS0+c3RyZWFtRGF0YS5hcHBlbmQoZGF0YS0+YnVmZmVyLCBieXRlc1JlYWQpOworICAgIGdfaW5w
dXRfc3RyZWFtX3JlYWRfYXN5bmMoaW5wdXRTdHJlYW0sIGRhdGEtPmJ1ZmZlciwgZ1JlYWRCdWZm
ZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYmtpdFVSSVNjaGVt
ZVJlcXVlc3RSZWFkQ2FsbGJhY2spLCBkYXRhKTsKK30KKworLyoqCisgKiB3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2ZpbmlzaDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0CisgKiBAc3RyZWFtOiBhICNHSW5wdXRTdHJlYW0gdG8gcmVhZCB0aGUgY29udGVudHMgb2Yg
dGhlIHJlcXVlc3QKKyAqIEBzdHJlYW1fbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJlYW0K
KyAqIEBtaW1lX3R5cGU6IHRoZSBjb250ZW50IHR5cGUgb2YgdGhlIHN0cmVhbQorICoKKyAqIEZp
bmlzaCBhICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0IGJ5IHNldHRpbmcgdGhlIGNvbnRlbnRzIG9m
IHRoZSByZXF1ZXN0IGFuZCBpdHMgbWltZSB0eXBlLgorICovCit2b2lkIHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZmluaXNoKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIEdJbnB1
dFN0cmVhbSogaW5wdXRTdHJlYW0sIGdzaXplIHN0cmVhbUxlbmd0aCwgY29uc3QgZ2NoYXIqIG1p
bWVUeXBlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVR
VUVTVChyZXF1ZXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChHX0lTX0lOUFVUX1NUUkVBTShp
bnB1dFN0cmVhbSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyZWFtTGVuZ3RoID4gMCk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChtaW1lVHlwZSk7CisKKyAgICBVUklTY2hlbWVSZXF1ZXN0UmVh
ZERhdGEqIGRhdGEgPSBuZXcgVVJJU2NoZW1lUmVxdWVzdFJlYWREYXRhKHJlcXVlc3QsIGlucHV0
U3RyZWFtLCBzdHJlYW1MZW5ndGgsIG1pbWVUeXBlKTsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFk
X2FzeW5jKGlucHV0U3RyZWFtLCBkYXRhLT5idWZmZXIsIGdSZWFkQnVmZmVyU2l6ZSwgR19QUklP
UklUWV9ERUZBVUxULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy
ZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENh
bGxiYWNrKSwgZGF0YSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZjczZjI0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaApAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChf
X1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNl
cnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4i
CisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0X2gKKyNkZWZpbmUgV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdF9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNUICAgICAgICAgICAgKHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVT
VChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJL
SVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QpKQorI2Rl
ZmluZSBXRUJLSVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUKG9iaikgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCkp
CisjZGVmaW5lIFdFQktJVF9VUklfU0NIRU1FX1JFUVVFU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFV
RVNULCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVVJJ
X1NDSEVNRV9SRVFVRVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGts
YXNzKSwgIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCkpCisjZGVmaW5lIFdFQktJVF9V
UklfU0NIRU1FX1JFUVVFU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNULCBXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0Q2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dCAgICAgICAgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRV
UklTY2hlbWVSZXF1ZXN0Q2xhc3MgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3M7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUgV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdFByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCB7CisgICAg
R09iamVjdCBwYXJlbnQ7CisKKyAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSAqcHJp
djsKK307CisKK3N0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENsYXNzIHsKKyAgICBHT2Jq
ZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZSAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBjb25zdCBn
Y2hhciAqCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUgKFdlYktpdFVSSVNj
aGVtZVJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtp
dF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaSAgICAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAq
cmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9nZXRfcGF0aCAgIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaCAgICAgKFdl
YktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdJbnB1dFN0cmVhbSAgICAgICAgICAgKnN0cmVhbSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3NpemUgICAgICAgICAgICAgICAgICAgc3RyZWFt
X2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2No
YXIgICAgICAgICAgICAqbWltZV90eXBlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xZmVmMDVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaApAQCAtMCwwICsxLDI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdFByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJp
dmF0ZV9oCisKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIu
aD4KKworV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogd2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0
ZShXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiwgV0tVUkxSZWYsIHVpbnQ2NF90IHJlcXVlc3RJRCk7
CisKKyNlbmRpZiAvLyBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmlu
ZGV4IDBiNjhjMDguLmE2YTU3ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5j
bHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXREb3du
bG9hZENsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5oIgotI2luY2x1
ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVu
dC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CkBAIC0zOCwxMCAr
MzgsMzAgQEAgZW51bSB7CiAgICAgTEFTVF9TSUdOQUwKIH07CiAKK3N0cnVjdCBXZWJLaXRVUklT
Y2hlbWVIYW5kbGVyIHsKKyAgICBXZWJLaXRVUklTY2hlbWVIYW5kbGVyKCkKKyAgICAgICAgOiBj
YWxsYmFjaygwKQorICAgICAgICAsIHVzZXJEYXRhKDApCisgICAgeworICAgIH0KKyAgICBXZWJL
aXRVUklTY2hlbWVIYW5kbGVyKFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFj
aywgdm9pZCogdXNlckRhdGEpCisgICAgICAgIDogY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAg
ICwgdXNlckRhdGEodXNlckRhdGEpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrOworICAgIHZvaWQqIHVzZXJEYXRhOwor
fTsKKwordHlwZWRlZiBIYXNoTWFwPFN0cmluZywgV2ViS2l0VVJJU2NoZW1lSGFuZGxlcj4gVVJJ
U2NoZW1lSGFuZGxlck1hcDsKKwogc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAg
ICAgV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0OwogCiAgICAgR1JlZlB0cjxXZWJL
aXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOworICAgIFdLUmV0YWluUHRyPFdLU291cFJl
cXVlc3RNYW5hZ2VyUmVmPiByZXF1ZXN0TWFuYWdlcjsKKyAgICBVUklTY2hlbWVIYW5kbGVyTWFw
IHVyaVNjaGVtZUhhbmRsZXJzOwogfTsKIAogc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdO
QUxdID0geyAwLCB9OwpAQCAtODksOCArMTA5LDEwIEBAIHN0YXRpYyBncG9pbnRlciBjcmVhdGVE
ZWZhdWx0V2ViQ29udGV4dChncG9pbnRlcikKIHsKICAgICBzdGF0aWMgR1JlZlB0cjxXZWJLaXRX
ZWJDb250ZXh0PiB3ZWJDb250ZXh0ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfQ09OVEVYVChnX29i
amVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsIE5VTEwpKSk7CiAgICAgd2ViQ29udGV4
dC0+cHJpdi0+Y29udGV4dCA9IFdLQ29udGV4dEdldFNoYXJlZFByb2Nlc3NDb250ZXh0KCk7Cisg
ICAgd2ViQ29udGV4dC0+cHJpdi0+cmVxdWVzdE1hbmFnZXIgPSBXS0NvbnRleHRHZXRTb3VwUmVx
dWVzdE1hbmFnZXIod2ViQ29udGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKSk7CiAgICAgV0tDb250
ZXh0U2V0Q2FjaGVNb2RlbCh3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpLCBrV0tDYWNo
ZU1vZGVsUHJpbWFyeVdlYkJyb3dzZXIpOwogICAgIGF0dGFjaERvd25sb2FkQ2xpZW50VG9Db250
ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOworICAgIGF0dGFjaFJlcXVlc3RNYW5hZ2VyQ2xpZW50VG9D
b250ZXh0KHdlYkNvbnRleHQuZ2V0KCkpOwogICAgIHJldHVybiB3ZWJDb250ZXh0LmdldCgpOwog
fQogCkBAIC0yMzYsNiArMjU4LDU5IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdF93ZWJf
Y29udGV4dF9nZXRfY29va2llX21hbmFnZXIoV2ViS2l0V2ViQ29udGV4dCogY29uCiAgICAgcmV0
dXJuIHByaXYtPmNvb2tpZU1hbmFnZXIuZ2V0KCk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl9j
b250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWU6CisgKiBAY29udGV4dDogYSAjV2ViS2l0V2ViQ29u
dGV4dAorICogQHNjaGVtZTogdGhlIG5ldHdvcmsgc2NoZW1lIHRvIHJlZ2lzdGVyCisgKiBAY2Fs
bGJhY2s6IGEgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjaworICogQHVzZXJfZGF0YTog
ZGF0YSB0byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogUmVnaXN0ZXIgQHNjaGVt
ZSBpbiBAY29udGV4dCwgc28gdGhhdCB3aGVuIGFuIFVSSSByZXF1ZXN0IHdpdGggQHNjaGVtZSBp
cyBtYWRlIGluIHRoZQorICogI1dlYktpdFdlYkNvbnRleHQsIHRoZSAjV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdENhbGxiYWNrIHJlZ2lzdGVyZWQgd2lsbCBiZSBjYWxsZWQgd2l0aCBhCisgKiAjV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdC4KKyAqIEl0IGlzIHBvc3NpYmxlIHRvIGhhbmRsZSBVUkkgc2No
ZW1lIHJlcXVlc3RzIGFzeW5jaHJvbm91c2x5LCBieSBjYWxsaW5nIGdfb2JqZWN0X3JlZigpIG9u
IHRoZQorICogI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QgYW5kIGNhbGxpbmcgd2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9maW5pc2goKSBsYXRlciB3aGVuIHRoZSBkYXRhIG9mCisgKiB0aGUgcmVx
dWVzdCBpcyBhdmFpbGFibGUuCisgKgorICogPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rp
bmc+CisgKiBzdGF0aWMgdm9pZAorICogYWJvdXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2NiIChXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LAorICogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBncG9pbnRlciAgICAgICAgICAgICAgICB1c2VyX2RhdGEpCisgKiB7CisgKiAgICAgR0lu
cHV0U3RyZWFtICpzdHJlYW07CisgKiAgICAgZ3NpemUgICAgICAgICBzdHJlYW1fbGVuZ3RoOwor
ICogICAgIGNvbnN0IGdjaGFyICAqcGF0aDsKKyAqCisgKiAgICAgcGF0aCA9IHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGggKHJlcXVlc3QpOworICogICAgIGlmICghZ19zdHJjbXAw
IChwYXRoLCAicGx1Z2lucyIpKSB7CisgKiAgICAgICAgIC88IS0tIC0tPiogQ3JlYXRlIGEgR0lu
cHV0U3RyZWFtIHdpdGggdGhlIGNvbnRlbnRzIG9mIHBsdWdpbnMgYWJvdXQgcGFnZSwgYW5kIHNl
dCBpdHMgbGVuZ3RoIHRvIHN0cmVhbV9sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSBp
ZiAoIWdfc3RyY21wMCAocGF0aCwgIm1lbW9yeSIpKSB7CisgKiAgICAgICAgIC88IS0tIC0tPiog
Q3JlYXRlIGEgR0lucHV0U3RyZWFtIHdpdGggdGhlIGNvbnRlbnRzIG9mIG1lbW9yeSBhYm91dCBw
YWdlLCBhbmQgc2V0IGl0cyBsZW5ndGggdG8gc3RyZWFtX2xlbmd0aCAqPCEtLSAtLT4vCisgKiAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwIChwYXRoLCAiYXBwbGljYXRpb25zIikpIHsKKyAqICAg
ICAgICAgLzwhLS0gLS0+KiBDcmVhdGUgYSBHSW5wdXRTdHJlYW0gd2l0aCB0aGUgY29udGVudHMg
b2YgYXBwbGljYXRpb25zIGFib3V0IHBhZ2UsIGFuZCBzZXQgaXRzIGxlbmd0aCB0byBzdHJlYW1f
bGVuZ3RoICo8IS0tIC0tPi8KKyAqICAgICB9IGVsc2UgeworICogICAgICAgICBnY2hhciAqY29u
dGVudHM7CisgKgorICogICAgICAgICBjb250ZW50cyA9IGdfc3RyZHVwX3ByaW50ZiAoIiZsdDto
dG1sJmd0OyZsdDtib2R5Jmd0OyZsdDtwJmd0O0ludmFsaWQgYWJvdXQ6JXMgcGFnZSZsdDsvcCZn
dDsmbHQ7L2JvZHkmZ3Q7Jmx0Oy9odG1sJmd0OyIsIHBhdGgpOworICogICAgICAgICBzdHJlYW1f
bGVuZ3RoID0gc3RybGVuIChjb250ZW50cyk7CisgKiAgICAgICAgIHN0cmVhbSA9IGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhIChjb250ZW50cywgc3RyZWFtX2xlbmd0aCwgZ19m
cmVlKTsKKyAqICAgICB9CisgKiAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gg
KHJlcXVlc3QsIHN0cmVhbSwgc3RyZWFtX2xlbmd0aCwgInRleHQvaHRtbCIpOworICogICAgIGdf
b2JqZWN0X3VucmVmIChzdHJlYW0pOworICogfQorICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9y
bWFsZXhhbXBsZT4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3Nj
aGVtZShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiBzY2hlbWUsIFdlYktp
dFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgdXNlckRhdGEpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc2NoZW1lKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKGNhbGxi
YWNrKTsKKworICAgIGNvbnRleHQtPnByaXYtPnVyaVNjaGVtZUhhbmRsZXJzLnNldChTdHJpbmc6
OmZyb21VVEY4KHNjaGVtZSksIFdlYktpdFVSSVNjaGVtZUhhbmRsZXIoY2FsbGJhY2ssIHVzZXJE
YXRhKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrU2NoZW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHNjaGVtZSkpOworICAgIFdLU291cFJlcXVlc3RN
YW5hZ2VyUmVnaXN0ZXJVUklTY2hlbWUoY29udGV4dC0+cHJpdi0+cmVxdWVzdE1hbmFnZXIuZ2V0
KCksIHdrU2NoZW1lLmdldCgpKTsKK30KKwogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRl
eHRHZXRPckNyZWF0ZURvd25sb2FkKFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCkKIHsKICAgICBH
UmVmUHRyPFdlYktpdERvd25sb2FkPiBkb3dubG9hZCA9IGRvd25sb2Fkc01hcCgpLmdldCh3a0Rv
d25sb2FkKTsKQEAgLTI2NCwzICszMzksMTYgQEAgV0tDb250ZXh0UmVmIHdlYmtpdFdlYkNvbnRl
eHRHZXRXS0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKICAgICByZXR1cm4gY29u
dGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKTsKIH0KIAorV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYg
d2Via2l0V2ViQ29udGV4dEdldFJlcXVlc3RNYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyLmdldCgpOwor
fQorCit2b2lkIHdlYmtpdFdlYkNvbnRleHRSZWNlaXZlZFVSSVJlcXVlc3QoV2ViS2l0V2ViQ29u
dGV4dCogY29udGV4dCwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBX
ZWJLaXRVUklTY2hlbWVIYW5kbGVyIGhhbmRsZXIgPSBjb250ZXh0LT5wcml2LT51cmlTY2hlbWVI
YW5kbGVycy5nZXQod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3Qp
KTsKKyAgICBpZiAoIWhhbmRsZXIuY2FsbGJhY2spCisgICAgICAgIHJldHVybjsKKworICAgIGhh
bmRsZXIuY2FsbGJhY2socmVxdWVzdCwgaGFuZGxlci51c2VyRGF0YSk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKaW5kZXgg
NDViNmU2Yy4uODMxMzIwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0Q29va2llTWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RGVm
aW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0RG93bmxvYWQuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC01
OCw2ICs1OSwxNyBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9DQUNIRV9NT0RFTF9ET0NV
TUVOVF9CUk9XU0VSCiB9IFdlYktpdENhY2hlTW9kZWw7CiAKKy8qKgorICogV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdENhbGxiYWNrOgorICogQHJlcXVlc3Q6IHRoZSAjV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdAorICogQHVzZXJfZGF0YTogdXNlciBkYXRhIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKKyAq
CisgKiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBi
YWNrIHdoZW4gYW4gVVJJIHJlcXVlc3QgaXMKKyAqIG1hZGUgZm9yIGEgdXNlciByZWdpc3RlcmVk
IFVSSSBzY2hlbWUuCisgKi8KK3R5cGVkZWYgdm9pZCAoKiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
Q2FsbGJhY2spIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CisKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0ICAgICAg
ICBXZWJLaXRXZWJDb250ZXh0OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRDbGFz
cyAgIFdlYktpdFdlYkNvbnRleHRDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250
ZXh0UHJpdmF0ZSBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZTsKQEAgLTgwLDIzICs5MiwyOSBAQCBz
dHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRDbGFzcyB7CiB9OwogCiBXRUJLSVRfQVBJIEdUeXBlCi13
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3R5cGUgICAgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJf
Y29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSBXZWJLaXRX
ZWJDb250ZXh0ICoKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgKHZvaWQp
Oword2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0ICAgICAgICAgKHZvaWQpOwogCiBXRUJL
SVRfQVBJIHZvaWQKLXdlYmtpdF93ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwgICAgKFdlYktp
dFdlYkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJLaXRDYWNoZU1vZGVsICBjYWNoZV9tb2RlbCk7Cit3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X2NhY2hlX21vZGVsICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVN
b2RlbCAgICAgICAgICAgICAgIGNhY2hlX21vZGVsKTsKIFdFQktJVF9BUEkgV2ViS2l0Q2FjaGVN
b2RlbAotd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbCAgICAoV2ViS2l0V2ViQ29u
dGV4dCAqY29udGV4dCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsICAgICAo
V2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOwogCiBXRUJLSVRfQVBJIFdl
YktpdERvd25sb2FkICoKLXdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgKFdl
YktpdFdlYkNvbnRleHQgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBnY2hhciAgICAgICp1cmkpOword2Via2l0X3dlYl9jb250ZXh0X2Rvd25s
b2FkX3VyaSAgICAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAg
ICAgICAgICAgICAgICp1cmkpOwogCiBXRUJLSVRfQVBJIFdlYktpdENvb2tpZU1hbmFnZXIgKgot
d2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlciAoV2ViS2l0V2ViQ29udGV4dCAq
Y29udGV4dCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyICAoV2ViS2l0
V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dl
YmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lIChXZWJLaXRXZWJDb250ZXh0ICAg
ICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAqc2NoZW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFj
ayBjYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p
bnRlciAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKIAogR19FTkRfREVDTFMKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkNvbnRleHRQcml2YXRlLmgKaW5kZXggZDJkZDgxMy4uNDgzZTk2NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJp
dmF0ZS5oCkBAIC0yNiwxNiArMjYsMTUgQEAKICNpZm5kZWYgV2ViS2l0V2ViQ29udGV4dFByaXZh
dGVfaAogI2RlZmluZSBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZV9oCiAKKyNpbmNsdWRlICJXZWJL
aXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIgogI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHQuaCIKLSNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KLQot
R19CRUdJTl9ERUNMUwogCiBXS0NvbnRleHRSZWYgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4
dChXZWJLaXRXZWJDb250ZXh0Kik7CiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdl
dE9yQ3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRS
ZW1vdmVEb3dubG9hZChXS0Rvd25sb2FkUmVmKTsKIHZvaWQgd2Via2l0V2ViQ29udGV4dERvd25s
b2FkU3RhcnRlZChXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0RG93bmxvYWQqKTsKLQotR19FTkRf
REVDTFMKK1dLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1ZXN0
TWFuYWdlcihXZWJLaXRXZWJDb250ZXh0Kik7Cit2b2lkIHdlYmtpdFdlYkNvbnRleHRSZWNlaXZl
ZFVSSVJlcXVlc3QoV2ViS2l0V2ViQ29udGV4dCosIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqKTsK
IAogI2VuZGlmIC8vIFdlYktpdFdlYkNvbnRleHRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
CmluZGV4IDgyMTEyN2YuLjAxMGVlZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMzEsNiAr
MzEsNyBAQAogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRGaWxlQ2hvb3NlclJlcXVl
c3QueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250cm9sbGVy
LnhtbCIvPgogICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRDb29raWVNYW5hZ2VyLnht
bCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lnht
bCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGluZGV4IGlkPSJpbmRleC1hbGwiPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rp
b25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1zZWN0aW9ucy50eHQKaW5kZXggZGM1ZTY1YS4uYTUzZDU4MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0CkBAIC0zMCw2ICszMCwxMCBAQCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X2NhY2hl
X21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpCiB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyCiAKKzxTVUJTRUNUSU9OICBVUkkgU2NoZW1lPgorV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrCit3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJp
X3NjaGVtZQorCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYkNvbnRleHRDbGFzcwog
V0VCS0lUX1dFQl9DT05URVhUCkBAIC01OTcsMyArNjAxLDI1IEBAIFdFQktJVF9DT09LSUVfTUFO
QUdFUl9HRVRfQ0xBU1MKIFdlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlCiB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X3R5cGUKIDwvU0VDVElPTj4KKworPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRV
UklTY2hlbWVSZXF1ZXN0PC9GSUxFPgorV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAord2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF91cmkKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGgKK3dlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZmluaXNoCisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdENsYXNzCitXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QKK1dFQktJVF9V
UklfU0NIRU1FX1JFUVVFU1QKK1dFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1QKK1dFQktJVF9V
UklfU0NIRU1FX1JFUVVFU1RfQ0xBU1MKK1dFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1RfQ0xB
U1MKK1dFQktJVF9VUklfU0NIRU1FX1JFUVVFU1RfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9OIFBy
aXZhdGU+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZQord2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9nZXRfdHlwZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IDFjYTgyMWIuLjUy
N2I0MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGsudHlwZXMKQEAgLTE1LDMgKzE1LDQgQEAgd2Via2l0X3NjcmlwdF9kaWFs
b2dfZ2V0X3R5cGUKIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF9nZXRfdHlwZQogd2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfdHlwZQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF90eXBlCit3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5j
cHAKaW5kZXggYWQ3Y2U1Yi4uMzhhMGIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNw
cApAQCAtMjAsOCArMjAsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIlRl
c3RNYWluLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKICNpbmNsdWRlIDxndGsvZ3RrLmg+
CiAjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogc3RhdGljIHZvaWQg
dGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CkBAIC0y
OSw5ICszMiw5MiBAQCBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Rl
ZmF1bHQoKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSk7CiB9CiAKK3N0YXRp
YyBjb25zdCBjaGFyKiBrQmFySHRtbCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+PC9odG1sPiI7
CitzdGF0aWMgY29uc3QgY2hhcioga0VjaG9IdG1sRm9ybWF0ID0gIjxodG1sPjxib2R5PiVzPC9i
b2R5PjwvaHRtbD4iOworCitjbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3Qg
eworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoVVJJU2NoZW1lVGVzdCk7CisK
KyAgICBzdGF0aWMgdm9pZCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdCogcmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBVUklT
Y2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsK
KyAgICAgICAgdGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgdGVz
dC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0
KSk7CisKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRH
UmVmKGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAgICAgIHNpemVfdCBpbnB1dFN0
cmVhbUxlbmd0aCA9IDA7CisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSwgImZvbyIpKSB7CisgICAgICAgICAgICBpbnB1
dFN0cmVhbUxlbmd0aCA9IHN0cmxlbihrQmFySHRtbCk7CisgICAgICAgICAgICBnX21lbW9yeV9p
bnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdl
dCgpKSwgcmVpbnRlcnByZXRfY2FzdDxnY29uc3Rwb2ludGVyPihrQmFySHRtbCksIGlucHV0U3Ry
ZWFtTGVuZ3RoLCAwKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSwgImVjaG8iKSkgeworICAgICAgICAg
ICAgY2hhciogZWNob0h0bWwgPSBnX3N0cmR1cF9wcmludGYoa0VjaG9IdG1sRm9ybWF0LCB3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKHJlcXVlc3QpKTsKKyAgICAgICAgICAgIGlu
cHV0U3RyZWFtTGVuZ3RoID0gc3RybGVuKGVjaG9IdG1sKTsKKyAgICAgICAgICAgIGdfbWVtb3J5
X2lucHV0X3N0cmVhbV9hZGRfZGF0YShHX01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0u
Z2V0KCkpLCByZWludGVycHJldF9jYXN0PGdjb25zdHBvaW50ZXI+KGVjaG9IdG1sKSwgaW5wdXRT
dHJlYW1MZW5ndGgsIGdfZnJlZSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW5wdXRTdHJl
YW1MZW5ndGgpCisgICAgICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChy
ZXF1ZXN0LCBpbnB1dFN0cmVhbS5nZXQoKSwgaW5wdXRTdHJlYW1MZW5ndGgsICJ0ZXh0L2h0bWwi
KTsKKyAgICB9CisKKyAgICBVUklTY2hlbWVUZXN0KCkKKyAgICB7CisgICAgICAgIHdlYmtpdF93
ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVm
YXVsdCgpLCAiZm9vIiwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAg
d2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUod2Via2l0X3dlYl9jb250ZXh0
X2dldF9kZWZhdWx0KCksICJlY2hvIiwgdXJpU2NoZW1lUmVxdWVzdENhbGxiYWNrLCB0aGlzKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUdldERhdGFDYWxsYmFjayhHT2JqZWN0
KiBvYmplY3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7
CisgICAgICAgIHNpemVfdCBkYXRhU2l6ZTsKKyAgICAgICAgR093blB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICB1bnNpZ25lZCBjaGFyKiBkYXRhID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
ZGF0YV9maW5pc2goV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLCByZXN1bHQsICZkYXRhU2l6
ZSwgJmVycm9yLm91dFB0cigpKTsKKyAgICAgICAgZ19hc3NlcnQoZGF0YSk7CisKKyAgICAgICAg
VVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRpY19jYXN0PFVSSVNjaGVtZVRlc3QqPih1c2VyRGF0
YSk7CisgICAgICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhLnNldChyZWludGVycHJldF9jYXN0PGNo
YXIqPihkYXRhKSk7CisgICAgICAgIHRlc3QtPm1fcmVzb3VyY2VEYXRhU2l6ZSA9IGRhdGFTaXpl
OworICAgICAgICBnX21haW5fbG9vcF9xdWl0KHRlc3QtPm1fbWFpbkxvb3ApOworICAgIH0KKwor
ICAgIHZvaWQgY2hlY2tNYWluUmVzb3VyY2VEYXRhKCkKKyAgICB7CisgICAgICAgIG1fcmVzb3Vy
Y2VEYXRhU2l6ZSA9IDA7CisgICAgICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShtX3dlYlZpZXcpOworICAgICAgICBnX2Fz
c2VydChyZXNvdXJjZSk7CisKKyAgICAgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfZGF0YShy
ZXNvdXJjZSwgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2ssIHRoaXMpOworICAgICAgICBnX21haW5f
bG9vcF9ydW4obV9tYWluTG9vcCk7CisKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAod2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKG1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSksICJm
b28iKSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwg
PT0sIHN0cmxlbihrQmFySHRtbCkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAobV9y
ZXNvdXJjZURhdGEuZ2V0KCksIGtCYXJIdG1sLCBtX3Jlc291cmNlRGF0YVNpemUpKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3Nj
aGVtZShtX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpLCAiZWNobyIpKSB7CisgICAgICAgICAgICBH
T3duUHRyPGNoYXI+IGVjaG9IdG1sKGdfc3RyZHVwX3ByaW50ZihrRWNob0h0bWxGb3JtYXQsIHdl
YmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGgobV91cmlTY2hlbWVSZXF1ZXN0LmdldCgp
KSkpOworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KG1fcmVzb3VyY2VEYXRhU2l6ZSwgPT0s
IHN0cmxlbihlY2hvSHRtbC5nZXQoKSkpOworICAgICAgICAgICAgZ19hc3NlcnQoIXN0cm5jbXAo
bV9yZXNvdXJjZURhdGEuZ2V0KCksIGVjaG9IdG1sLmdldCgpLCBtX3Jlc291cmNlRGF0YVNpemUp
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdPd25QdHI8Y2hhcj4gbV9yZXNvdXJjZURhdGE7
CisgICAgc2l6ZV90IG1fcmVzb3VyY2VEYXRhU2l6ZTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVNj
aGVtZVJlcXVlc3Q+IG1fdXJpU2NoZW1lUmVxdWVzdDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJDb250ZXh0VVJJU2NoZW1lKFVSSVNjaGVtZVRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7
CisgICAgdGVzdC0+bG9hZFVSSSgiZm9vOmJsYW5rIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+Y2hlY2tNYWluUmVzb3VyY2VEYXRhKCk7CisKKyAgICB0
ZXN0LT5sb2FkVVJJKCJlY2hvOmhlbGxvIHdvcmxkIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9h
ZEZpbmlzaGVkKCk7CisgICAgdGVzdC0+Y2hlY2tNYWluUmVzb3VyY2VEYXRhKCk7Cit9CisKIHZv
aWQgYmVmb3JlQWxsKCkKIHsKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVm
YXVsdC1jb250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKKyAgICBVUklTY2hlbWVUZXN0
OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVtZSIsIHRlc3RXZWJDb250ZXh0VVJJ
U2NoZW1lKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay93ZWJraXQyLmgKaW5kZXggYzU0NjBmMy4uNDU3OGVlYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVS
SVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CisjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNvdXJj
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140709</attachid>
            <date>2012-05-08 06:53:07 -0700</date>
            <delta_ts>2012-05-10 04:24:06 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-uri-request-stream2.diff</filename>
            <type>text/plain</type>
            <size>37812</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMjY0NzA1Li5mYTQ5ZDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAg
QEAKKzIwMTItMDUtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gcmVnaXN0ZXIgY3VzdG9tIFVSSSBzY2hlbWVz
IHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlv
bi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKGRpZFJlY2VpdmVVUklSZXF1ZXN0KTogQ2FsbGJhY2sgZW1pdHRlZCBieSB0
aGUgQyBBUEkgd2hlbiBhCisgICAgICAgIHJlcXVlc3QgZm9yIGEgY3VzdG9tIFVSSSBzY2hlbWUg
aGFzIGJlZW4gcmVjZWl2ZWQuIENhbGwKKyAgICAgICAgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVk
VVJJUmVxdWVzdCgpIHRvIGhhbmRsZSB0aGUgcmVxdWVzdC4KKyAgICAgICAgKGF0dGFjaFJlcXVl
c3RNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KTogSW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgV0tTb3Vw
UmVxdWVzdE1hbmFnZXJDbGllbnQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UmVxdWVzdE1hbmFnZXJDbGllbnQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3Vy
aV9zY2hlbWVfcmVxdWVzdF9pbml0KToKKyAgICAgICAgKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RG
aW5hbGl6ZSk6CisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2NsYXNzX2luaXQp
OgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZSk6IENyZWF0ZSBhIG5ldwor
ICAgICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0IGZvciB0aGUgZ2l2ZW4gVVJJIGFuZCByZXF1
ZXN0IGlkZW50aWZpZXIuCisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9z
Y2hlbWUpOiBSZXR1cm4gdGhlIHNjaGVtZSBvZiB0aGUKKyAgICAgICAgcmVxdWVzdC4KKyAgICAg
ICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaSk6IFJldHVybiB0aGUgZnVsbCBV
Ukkgb2YgdGhlCisgICAgICAgIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF9wYXRoKTogUmV0dXJuIHRoZSBwYXRoIG9mIHRoZSBVUkkuCisgICAgICAgICh3
ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENhbGxiYWNrKTogUmVhZCBjYWxsYmFjayBlbWl0dGVk
IHdoZW4KKyAgICAgICAgcmVhZGluZyB0aGUgY29udGVudHMgaW5wdXQgc3RyZWFtLgorICAgICAg
ICAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gpOiBGaW5pc2ggdGhlIHJlcXVlc3Qg
YnkgY2FsbGluZworICAgICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclNlbmRVUklSZXF1ZXN0KCkg
dG8gc2VuZCB0aGUgY29udGVudHMgb2YgdGhlCisgICAgICAgIHJlcXVlc3QgdG8gdGhlIFdlYlBy
b2Nlc3MuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdFVSSVNjaGVtZUhhbmRsZXI6OldlYktp
dFVSSVNjaGVtZUhhbmRsZXIpOiBIZWxwZXIgc3RydWN0IHRvCisgICAgICAgIHNhdmUgY2FsbGJh
Y2sgYW5kIHVzZXIgZGF0YSBvZiByZWdpc3RlcmVkIFVSSSBzY2hlbWVzLgorICAgICAgICAoY3Jl
YXRlRGVmYXVsdFdlYkNvbnRleHQpOiBJbml0aWFsaXplIHRoZSBTb3VwUmVxdWVzdE1hbmFnZXIu
CisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSk6IFB1Ymxp
YyBBUEkgdG8gcmVnaXN0ZXIgYQorICAgICAgICBjdXN0b20gVVJJIHNjaGVtZSBwcm92aWRpbmcg
YSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvCisgICAgICAgIGhhbmRsZSByZXF1ZXN0
cyBmb3IgdGhhdCBVUkkgc2NoZW1lLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFJlcXVl
c3RNYW5hZ2VyKTogSGVscGVyIHByaXZhdGUgbWV0aG9kIHRvCisgICAgICAgIHJldHVybiB0aGUg
U291cFJlcXVlc3RNYW5hZ2VyLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJ
UmVxdWVzdCk6IEdldCB0aGUKKyAgICAgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciBmb3IgdGhl
IGdpdmVuIHJlcXVlc3QgaWRlbnRpZmllciBhbmQgY2FsbAorICAgICAgICB0aGUgY2FsbGJhY2su
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkCisgICAg
ICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQgd2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29u
dGV4dFVSSVNjaGVtZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmguCisK
IDIwMTItMDUtMDcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgUmVmYWN0b3Igd2luZG93Q2xpcFJlY3RGb3JMYXllciB0byByZW1vdmUgdGhlIGV4
cGxpY2l0IFJlbmRlckxheWVyIGRlcGVuZGVuY3kKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggNGQw
ODc5YS4uMTU3OTNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTEwOCw2ICsxMDgsNyBAQCBs
aWJ3ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0U2V0dGluZ3MuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVUklSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VVJJUmVzcG9uc2UuaCBcCisJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklT
Y2hlbWVSZXF1ZXN0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Q29udGV4dC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291
cmNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIFwK
QEAgLTYwNiw2ICs2MDcsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHAgXAor
CVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xp
ZW50LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc291cmNl
TG9hZENsaWVudC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFJlc291cmNlTG9hZENsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmNwcCBcCkBAIC02MjUsNiArNjI4LDkgQEAg
d2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVUklSZXNwb25zZS5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVSSVJlc3BvbnNlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVSSVJlc3BvbnNlUHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCVNv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5o
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUu
aAppbmRleCA0YjdlOWFkLi42NGU0ZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0yNywxMSArMjcsMTMgQEAKICNkZWZpbmUg
V2ViS2l0UHJpdmF0ZV9oCiAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQVBJQ2FzdC5oPgorI2luY2x1
ZGUgPFdlYktpdDIvV0tDb250ZXh0U291cC5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tEb3dubG9h
ZC5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tGaW5kT3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tGdWxsU2NyZWVuQ2xpZW50R3RrLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUuaD4KKyNpbmNs
dWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1ZGUgPGdsaWIu
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJl
cXVlc3RNYW5hZ2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4yOGY0M2FjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmgiCisKKyNpbmNs
dWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdl
YkNvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlVVJJUmVxdWVz
dChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLVVJMUmVm
IHVybFJlZiwgdWludDY0X3QgcmVxdWVzdElELCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3
ZWJraXRVUklTY2hlbWVSZXF1ZXN0Q3JlYXRlKHNvdXBSZXF1ZXN0TWFuYWdlclJlZiwgdXJsUmVm
LCByZXF1ZXN0SUQpKTsKKyAgICB3ZWJraXRXZWJDb250ZXh0UmVjZWl2ZWRVUklSZXF1ZXN0KFdF
QktJVF9XRUJfQ09OVEVYVChjbGllbnRJbmZvKSwgcmVxdWVzdC5nZXQoKSk7Cit9CisKK3ZvaWQg
YXR0YWNoUmVxdWVzdE1hbmFnZXJDbGllbnRUb0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogd2Vi
Q29udGV4dCkKK3sKKyAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlckNsaWVudCB3a1JlcXVlc3RNYW5h
Z2VyQ2xpZW50ID0geworICAgICAgICBrV0tTb3VwUmVxdWVzdE1hbmFnZXJDbGllbnRDdXJyZW50
VmVyc2lvbiwKKyAgICAgICAgd2ViQ29udGV4dCwgLy8gY2xpZW50SW5mbworICAgICAgICBkaWRS
ZWNlaXZlVVJJUmVxdWVzdAorICAgIH07CisgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJTZXRDbGll
bnQod2Via2l0V2ViQ29udGV4dEdldFJlcXVlc3RNYW5hZ2VyKHdlYkNvbnRleHQpLCAmd2tSZXF1
ZXN0TWFuYWdlckNsaWVudCk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjU1OTQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVu
dC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiBXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudF9oCisjZGVmaW5lIFdlYktpdFJl
cXVlc3RNYW5hZ2VyQ2xpZW50X2gKKworI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHQuaCIKKwor
dm9pZCBhdHRhY2hSZXF1ZXN0TWFuYWdlckNsaWVudFRvQ29udGV4dChXZWJLaXRXZWJDb250ZXh0
Kik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5jNDNlN2NiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAKQEAgLTAsMCArMSwx
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCIKKworI2luY2x1ZGUg
IldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9HT3du
UHRyU291cC5oPgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZ1JlYWRCdWZmZXJT
aXplID0gODE5MjsKKworR19ERUZJTkVfVFlQRShXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LCB3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0LCBHX1RZUEVfT0JKRUNUKQorCitzdHJ1Y3QgX1dlYktpdFVS
SVNjaGVtZVJlcXVlc3RQcml2YXRlIHsKKyAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFu
YWdlclJlZj4gd2tSZXF1ZXN0TWFuYWdlcjsKKyAgICB1aW50NjRfdCByZXF1ZXN0SUQ7CisgICAg
Q1N0cmluZyB1cmk7CisgICAgR093blB0cjxTb3VwVVJJPiBzb3VwVVJJOworCisgICAgR1JlZlB0
cjxHSW5wdXRTdHJlYW0+IHN0cmVhbTsKKyAgICB1aW50NjRfdCBzdHJlYW1MZW5ndGg7CisgICAg
Y2hhciByZWFkQnVmZmVyW2dSZWFkQnVmZmVyU2l6ZV07CisgICAgdWludDY0X3QgYnl0ZXNSZWFk
OworICAgIENTdHJpbmcgbWltZVR5cGU7Cit9OworCitzdGF0aWMgdm9pZCB3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2luaXQoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShyZXF1ZXN0LCBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdlYktp
dFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKTsKKyAgICByZXF1ZXN0LT5wcml2ID0gcHJpdjsKKyAg
ICBuZXcgKHByaXYpIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVChvYmplY3QpLT5wcml2LT5+V2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdFByaXZhdGUoKTsKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3NfaW5pdChXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0Q2xhc3MqIHJlcXVlc3RDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVxdWVzdENsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRVUklTY2hlbWVSZXF1ZXN0RmluYWxpemU7CisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKHJlcXVlc3RDbGFzcywgc2l6ZW9mKFdlYktpdFVSSVNjaGVtZVJlcXVl
c3RQcml2YXRlKSk7Cit9CisKK1dlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHdlYmtpdFVSSVNjaGVt
ZVJlcXVlc3RDcmVhdGUoV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgd2tSZXF1ZXN0TWFuYWdlciwg
V0tVUkxSZWYgd2tVUkwsIHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICBXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0KiByZXF1ZXN0ID0gV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVChnX29iamVjdF9u
ZXcoV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNULCBOVUxMKSk7CisgICAgcmVxdWVzdC0+
cHJpdi0+d2tSZXF1ZXN0TWFuYWdlciA9IHdrUmVxdWVzdE1hbmFnZXI7CisgICAgcmVxdWVzdC0+
cHJpdi0+dXJpID0gdG9JbXBsKHdrVVJMKS0+c3RyaW5nKCkudXRmOCgpOworICAgIHJlcXVlc3Qt
PnByaXYtPnJlcXVlc3RJRCA9IHJlcXVlc3RJRDsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwor
LyoqCisgKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWU6CisgKiBAcmVxdWVz
dDogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHNjaGVtZSBv
ZiBAcmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRoZSBVUkkgc2NoZW1lIG9mIEByZXF1ZXN0Cisg
Ki8KK2NvbnN0IGNoYXIqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFy
ZXF1ZXN0LT5wcml2LT5zb3VwVVJJKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNl
dChzb3VwX3VyaV9uZXcocmVxdWVzdC0+cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiBy
ZXF1ZXN0LT5wcml2LT5zb3VwVVJJLT5zY2hlbWU7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9z
Y2hlbWVfcmVxdWVzdF9nZXRfdXJpOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdFVSSVNjaGVtZVJl
cXVlc3QKKyAqCisgKiBHZXQgdGhlIFVSSSBvZiBAcmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRo
ZSBmdWxsIFVSSSBvZiBAcmVxdWVzdAorICovCitjb25zdCBjaGFyKiB3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF91cmkoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUKHJlcXVl
c3QpLCAwKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpOworfQorCisv
KioKKyAqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGg6CisgKiBAcmVxdWVzdDog
YSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHBhdGggb2YgQHJl
cXVlc3QKKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIHBhdGggb2YgQHJlcXVlc3QKKyAqLworY29u
c3QgY2hhciogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aChXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19VUklfU0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFyZXF1ZXN0LT5w
cml2LT5zb3VwVVJJKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNldChzb3VwX3Vy
aV9uZXcocmVxdWVzdC0+cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiByZXF1ZXN0LT5w
cml2LT5zb3VwVVJJLT5wYXRoOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRVUklTY2hlbWVSZXF1
ZXN0UmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiBzY2hlbWVSZXF1ZXN0KQoreworICAgIEdS
ZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZihzY2hlbWVS
ZXF1ZXN0KTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5p
c2goaW5wdXRTdHJlYW0sIHJlc3VsdCwgMCk7CisgICAgaWYgKGJ5dGVzUmVhZCA9PSAtMSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFieXRlc1JlYWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKiBwcml2ID0gcmVxdWVzdC0+cHJpdjsK
KyAgICBXS1JldGFpblB0cjxXS0RhdGFSZWY+IHdrRGF0YShBZG9wdFdLLCBXS0RhdGFDcmVhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocHJpdi0+cmVhZEJ1ZmZlciks
IGJ5dGVzUmVhZCkpOworICAgIGlmICghcHJpdi0+Ynl0ZXNSZWFkKSB7CisgICAgICAgIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB3a01pbWVUeXBlID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhwcml2LT5taW1lVHlwZS5kYXRhKCkpKTsKKyAgICAgICAgV0tTb3VwUmVx
dWVzdE1hbmFnZXJIYW5kbGVVUklSZXF1ZXN0KHByaXYtPndrUmVxdWVzdE1hbmFnZXIuZ2V0KCks
IHdrRGF0YS5nZXQoKSwgcHJpdi0+c3RyZWFtTGVuZ3RoLCB3a01pbWVUeXBlLmdldCgpLCBwcml2
LT5yZXF1ZXN0SUQpOworICAgIH0gZWxzZQorICAgICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlckFk
ZERhdGFUb1VSSVJlcXVlc3QocHJpdi0+d2tSZXF1ZXN0TWFuYWdlci5nZXQoKSwgd2tEYXRhLmdl
dCgpLCBwcml2LT5yZXF1ZXN0SUQpOworCisgICAgcHJpdi0+Ynl0ZXNSZWFkICs9IGJ5dGVzUmVh
ZDsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGlucHV0U3RyZWFtLCBwcml2LT5yZWFk
QnVmZmVyLCBnUmVhZEJ1ZmZlclNpemUsIEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4od2Via2l0VVJJU2NoZW1lUmVxdWVzdFJlYWRDYWxsYmFjayksIGdfb2JqZWN0X3JlZihyZXF1
ZXN0LmdldCgpKSk7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5p
c2g6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICogQHN0cmVhbTog
YSAjR0lucHV0U3RyZWFtIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSByZXF1ZXN0CisgKiBA
c3RyZWFtX2xlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgc3RyZWFtCisgKiBAbWltZV90eXBlOiB0
aGUgY29udGVudCB0eXBlIG9mIHRoZSBzdHJlYW0KKyAqCisgKiBGaW5pc2ggYSAjV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdCBieSBzZXR0aW5nIHRoZSBjb250ZW50cyBvZiB0aGUgcmVxdWVzdCBhbmQg
aXRzIG1pbWUgdHlwZS4KKyAqLwordm9pZCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2Zpbmlz
aChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBHSW5wdXRTdHJlYW0qIGlucHV0U3Ry
ZWFtLCBndWludDY0IHN0cmVhbUxlbmd0aCwgY29uc3QgZ2NoYXIqIG1pbWVUeXBlKQoreworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVTVChyZXF1ZXN0KSk7
CisgICAgZ19yZXR1cm5faWZfZmFpbChHX0lTX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbSkpOwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyZWFtTGVuZ3RoID4gMCk7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChtaW1lVHlwZSk7CisKKyAgICByZXF1ZXN0LT5wcml2LT5zdHJlYW0gPSBpbnB1dFN0cmVh
bTsKKyAgICByZXF1ZXN0LT5wcml2LT5zdHJlYW1MZW5ndGggPSBzdHJlYW1MZW5ndGg7CisgICAg
cmVxdWVzdC0+cHJpdi0+Ynl0ZXNSZWFkID0gMDsKKyAgICByZXF1ZXN0LT5wcml2LT5taW1lVHlw
ZSA9IG1pbWVUeXBlOworICAgIGdfaW5wdXRfc3RyZWFtX3JlYWRfYXN5bmMoaW5wdXRTdHJlYW0s
IHJlcXVlc3QtPnByaXYtPnJlYWRCdWZmZXIsIGdSZWFkQnVmZmVyU2l6ZSwgR19QUklPUklUWV9E
RUZBVUxULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENhbGxiYWNr
KSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDk0OGNmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oCkBA
IC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lm
ICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJ
TEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVk
IGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RfaAor
I2RlZmluZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0X2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0
Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMK
KworI2RlZmluZSBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QgICAgICAgICAgICAod2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVVJJX1ND
SEVNRV9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1Qo
KG9iaiksIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdCkpCisjZGVmaW5lIFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVVJJX1NDSEVN
RV9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9VUklf
U0NIRU1FX1JFUVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNUKSkKKyNkZWZp
bmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdl
YktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVUklT
Y2hlbWVSZXF1ZXN0ICAgICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0OwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcyAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RD
bGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSBXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1
ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3Mg
eworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBl
Cit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlICAgKHZvaWQpOworCitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZSAo
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIgKgord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpICAgIChXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoICAgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJl
cXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmlu
aXNoICAgICAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0lucHV0U3RyZWFtICAgICAgICAgICAqc3RyZWFtLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludDY0ICAgICAgICAgICAg
ICAgICBzdHJlYW1fbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICptaW1lX3R5cGUpOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjFmZWYwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFVSSVNjaGVt
ZVJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRl
ICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS1NvdXBSZXF1
ZXN0TWFuYWdlci5oPgorCitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiB3ZWJraXRVUklTY2hlbWVS
ZXF1ZXN0Q3JlYXRlKFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmLCBXS1VSTFJlZiwgdWludDY0X3Qg
cmVxdWVzdElEKTsKKworI2VuZGlmIC8vIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5jcHAKaW5kZXggMGI2OGMwOC4uYTZhNTdlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTI0LDcgKzI0
LDcgQEAKICNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYktpdERvd25sb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRl
LmgiCi0jaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFJlcXVlc3RN
YW5hZ2VyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4K
QEAgLTM4LDEwICszOCwzMCBAQCBlbnVtIHsKICAgICBMQVNUX1NJR05BTAogfTsKIAorc3RydWN0
IFdlYktpdFVSSVNjaGVtZUhhbmRsZXIgeworICAgIFdlYktpdFVSSVNjaGVtZUhhbmRsZXIoKQor
ICAgICAgICA6IGNhbGxiYWNrKDApCisgICAgICAgICwgdXNlckRhdGEoMCkKKyAgICB7CisgICAg
fQorICAgIFdlYktpdFVSSVNjaGVtZUhhbmRsZXIoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxi
YWNrIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKKyAgICAgICAgOiBjYWxsYmFjayhjYWxsYmFj
aykKKyAgICAgICAgLCB1c2VyRGF0YSh1c2VyRGF0YSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7CisgICAgdm9pZCog
dXNlckRhdGE7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBXZWJLaXRVUklTY2hlbWVI
YW5kbGVyPiBVUklTY2hlbWVIYW5kbGVyTWFwOworCiBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQ
cml2YXRlIHsKICAgICBXS1JldGFpblB0cjxXS0NvbnRleHRSZWY+IGNvbnRleHQ7CiAKICAgICBH
UmVmUHRyPFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CisgICAgV0tSZXRhaW5Q
dHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOworICAgIFVSSVNjaGVt
ZUhhbmRsZXJNYXAgdXJpU2NoZW1lSGFuZGxlcnM7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFs
c1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC04OSw4ICsxMDksMTAgQEAgc3RhdGljIGdwb2lu
dGVyIGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KGdwb2ludGVyKQogewogICAgIHN0YXRpYyBHUmVm
UHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNvbnRleHQgPSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9D
T05URVhUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwgTlVMTCkpKTsKICAg
ICB3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0ID0gV0tDb250ZXh0R2V0U2hhcmVkUHJvY2Vzc0Nv
bnRleHQoKTsKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5yZXF1ZXN0TWFuYWdlciA9IFdLQ29udGV4
dEdldFNvdXBSZXF1ZXN0TWFuYWdlcih3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpKTsK
ICAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0
KCksIGtXS0NhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3Nlcik7CiAgICAgYXR0YWNoRG93bmxvYWRD
bGllbnRUb0NvbnRleHQod2ViQ29udGV4dC5nZXQoKSk7CisgICAgYXR0YWNoUmVxdWVzdE1hbmFn
ZXJDbGllbnRUb0NvbnRleHQod2ViQ29udGV4dC5nZXQoKSk7CiAgICAgcmV0dXJuIHdlYkNvbnRl
eHQuZ2V0KCk7CiB9CiAKQEAgLTIzNiw2ICsyNTgsNTkgQEAgV2ViS2l0Q29va2llTWFuYWdlciog
d2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcihXZWJLaXRXZWJDb250ZXh0KiBj
b24KICAgICByZXR1cm4gcHJpdi0+Y29va2llTWFuYWdlci5nZXQoKTsKIH0KIAorLyoqCisgKiB3
ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZToKKyAqIEBjb250ZXh0OiBhICNX
ZWJLaXRXZWJDb250ZXh0CisgKiBAc2NoZW1lOiB0aGUgbmV0d29yayBzY2hlbWUgdG8gcmVnaXN0
ZXIKKyAqIEBjYWxsYmFjazogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrCisgKiBA
dXNlcl9kYXRhOiBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisgKiBSZWdp
c3RlciBAc2NoZW1lIGluIEBjb250ZXh0LCBzbyB0aGF0IHdoZW4gYW4gVVJJIHJlcXVlc3Qgd2l0
aCBAc2NoZW1lIGlzIG1hZGUgaW4gdGhlCisgKiAjV2ViS2l0V2ViQ29udGV4dCwgdGhlICNXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgcmVnaXN0ZXJlZCB3aWxsIGJlIGNhbGxlZCB3aXRo
IGEKKyAqICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LgorICogSXQgaXMgcG9zc2libGUgdG8gaGFu
ZGxlIFVSSSBzY2hlbWUgcmVxdWVzdHMgYXN5bmNocm9ub3VzbHksIGJ5IGNhbGxpbmcgZ19vYmpl
Y3RfcmVmKCkgb24gdGhlCisgKiAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCBhbmQgY2FsbGluZyB3
ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaCgpIGxhdGVyIHdoZW4gdGhlIGRhdGEgb2YK
KyAqIHRoZSByZXF1ZXN0IGlzIGF2YWlsYWJsZS4KKyAqCisgKiA8aW5mb3JtYWxleGFtcGxlPjxw
cm9ncmFtbGlzdGluZz4KKyAqIHN0YXRpYyB2b2lkCisgKiBhYm91dF91cmlfc2NoZW1lX3JlcXVl
c3RfY2IgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsCisgKiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgIHVzZXJfZGF0YSkKKyAqIHsK
KyAqICAgICBHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKyAqICAgICBnc2l6ZSAgICAgICAgIHN0cmVh
bV9sZW5ndGg7CisgKiAgICAgY29uc3QgZ2NoYXIgICpwYXRoOworICoKKyAqICAgICBwYXRoID0g
d2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aCAocmVxdWVzdCk7CisgKiAgICAgaWYg
KCFnX3N0cmNtcDAgKHBhdGgsICJwbHVnaW5zIikpIHsKKyAqICAgICAgICAgLzwhLS0gLS0+KiBD
cmVhdGUgYSBHSW5wdXRTdHJlYW0gd2l0aCB0aGUgY29udGVudHMgb2YgcGx1Z2lucyBhYm91dCBw
YWdlLCBhbmQgc2V0IGl0cyBsZW5ndGggdG8gc3RyZWFtX2xlbmd0aCAqPCEtLSAtLT4vCisgKiAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwIChwYXRoLCAibWVtb3J5IikpIHsKKyAqICAgICAgICAg
LzwhLS0gLS0+KiBDcmVhdGUgYSBHSW5wdXRTdHJlYW0gd2l0aCB0aGUgY29udGVudHMgb2YgbWVt
b3J5IGFib3V0IHBhZ2UsIGFuZCBzZXQgaXRzIGxlbmd0aCB0byBzdHJlYW1fbGVuZ3RoICo8IS0t
IC0tPi8KKyAqICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAgKHBhdGgsICJhcHBsaWNhdGlvbnMi
KSkgeworICogICAgICAgICAvPCEtLSAtLT4qIENyZWF0ZSBhIEdJbnB1dFN0cmVhbSB3aXRoIHRo
ZSBjb250ZW50cyBvZiBhcHBsaWNhdGlvbnMgYWJvdXQgcGFnZSwgYW5kIHNldCBpdHMgbGVuZ3Ro
IHRvIHN0cmVhbV9sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSB7CisgKiAgICAgICAg
IGdjaGFyICpjb250ZW50czsKKyAqCisgKiAgICAgICAgIGNvbnRlbnRzID0gZ19zdHJkdXBfcHJp
bnRmICgiJmx0O2h0bWwmZ3Q7Jmx0O2JvZHkmZ3Q7Jmx0O3AmZ3Q7SW52YWxpZCBhYm91dDolcyBw
YWdlJmx0Oy9wJmd0OyZsdDsvYm9keSZndDsmbHQ7L2h0bWwmZ3Q7IiwgcGF0aCk7CisgKiAgICAg
ICAgIHN0cmVhbV9sZW5ndGggPSBzdHJsZW4gKGNvbnRlbnRzKTsKKyAqICAgICAgICAgc3RyZWFt
ID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGNvbnRlbnRzLCBzdHJlYW1f
bGVuZ3RoLCBnX2ZyZWUpOworICogICAgIH0KKyAqICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2ZpbmlzaCAocmVxdWVzdCwgc3RyZWFtLCBzdHJlYW1fbGVuZ3RoLCAidGV4dC9odG1sIik7
CisgKiAgICAgZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7CisgKiB9CisgKiA8L3Byb2dyYW1saXN0
aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4dF9yZWdp
c3Rlcl91cmlfc2NoZW1lKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHNj
aGVtZSwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1
c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChj
b250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzY2hlbWUpOworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoY2FsbGJhY2spOworCisgICAgY29udGV4dC0+cHJpdi0+dXJpU2NoZW1lSGFuZGxlcnMu
c2V0KFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSwgV2ViS2l0VVJJU2NoZW1lSGFuZGxlcihjYWxs
YmFjaywgdXNlckRhdGEpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tTY2hlbWUo
QWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NoZW1lKSk7CisgICAgV0tT
b3VwUmVxdWVzdE1hbmFnZXJSZWdpc3RlclVSSVNjaGVtZShjb250ZXh0LT5wcml2LT5yZXF1ZXN0
TWFuYWdlci5nZXQoKSwgd2tTY2hlbWUuZ2V0KCkpOworfQorCiBXZWJLaXREb3dubG9hZCogd2Vi
a2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
KQogewogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxvYWRzTWFw
KCkuZ2V0KHdrRG93bmxvYWQpOwpAQCAtMjY0LDMgKzMzOSwxNiBAQCBXS0NvbnRleHRSZWYgd2Vi
a2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogICAg
IHJldHVybiBjb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpOwogfQogCitXS1NvdXBSZXF1ZXN0
TWFuYWdlclJlZiB3ZWJraXRXZWJDb250ZXh0R2V0UmVxdWVzdE1hbmFnZXIoV2ViS2l0V2ViQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+cmVxdWVzdE1hbmFn
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJUmVxdWVzdChX
ZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0
KQoreworICAgIFdlYktpdFVSSVNjaGVtZUhhbmRsZXIgaGFuZGxlciA9IGNvbnRleHQtPnByaXYt
PnVyaVNjaGVtZUhhbmRsZXJzLmdldCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hl
bWUocmVxdWVzdCkpOworICAgIGlmICghaGFuZGxlci5jYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
OworCisgICAgaGFuZGxlci5jYWxsYmFjayhyZXF1ZXN0LCBoYW5kbGVyLnVzZXJEYXRhKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuaAppbmRleCA0NWI2ZTZjLi44MzEzMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCkBAIC0yOCw2ICsyOCw3IEBACiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRDb29raWVNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8d2Via2l0
Mi9XZWJLaXREZWZpbmVzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREb3dubG9hZC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgogCiBHX0JFR0lOX0RF
Q0xTCiAKQEAgLTU4LDYgKzU5LDE3IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX0NBQ0hF
X01PREVMX0RPQ1VNRU5UX0JST1dTRVIKIH0gV2ViS2l0Q2FjaGVNb2RlbDsKIAorLyoqCisgKiBX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2s6CisgKiBAcmVxdWVzdDogdGhlICNXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0CisgKiBAdXNlcl9kYXRhOiB1c2VyIGRhdGEgcGFzc2VkIHRvIHRoZSBj
YWxsYmFjaworICoKKyAqIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwg
YmUgY2FsbGVkIGJhY2sgd2hlbiBhbiBVUkkgcmVxdWVzdCBpcworICogbWFkZSBmb3IgYSB1c2Vy
IHJlZ2lzdGVyZWQgVVJJIHNjaGVtZS4KKyAqLwordHlwZWRlZiB2b2lkICgqIFdlYktpdFVSSVNj
aGVtZVJlcXVlc3RDYWxsYmFjaykgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIg
ICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKKwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkNv
bnRleHQgICAgICAgIFdlYktpdFdlYkNvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
Q29udGV4dENsYXNzICAgV2ViS2l0V2ViQ29udGV4dENsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYkNvbnRleHRQcml2YXRlIFdlYktpdFdlYkNvbnRleHRQcml2YXRlOwpAQCAtODAsMjMg
KzkyLDI5IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dENsYXNzIHsKIH07CiAKIFdFQktJVF9B
UEkgR1R5cGUKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRfdHlwZSAgICAgICAgICAgKHZvaWQpOwor
d2Via2l0X3dlYl9jb250ZXh0X2dldF90eXBlICAgICAgICAgICAgKHZvaWQpOwogCiBXRUJLSVRf
QVBJIFdlYktpdFdlYkNvbnRleHQgKgotd2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0ICAg
ICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQgICAgICAgICAodm9p
ZCk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2Rl
bCAgICAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdENhY2hlTW9kZWwgIGNhY2hlX21vZGVsKTsKK3dlYmtpdF93
ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAg
ICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRDYWNoZU1vZGVsICAgICAgICAgICAgICAgY2FjaGVfbW9kZWwpOwogV0VCS0lUX0FQSSBX
ZWJLaXRDYWNoZU1vZGVsCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsICAgIChX
ZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVf
bW9kZWwgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CiAKIFdF
QktJVF9BUEkgV2ViS2l0RG93bmxvYWQgKgotd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3Vy
aSAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAqY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgKnVyaSk7Cit3ZWJraXRfd2ViX2Nv
bnRleHRfZG93bmxvYWRfdXJpICAgICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Z2NoYXIgICAgICAgICAgICAgICAgICAgKnVyaSk7CiAKIFdFQktJVF9BUEkgV2ViS2l0Q29va2ll
TWFuYWdlciAqCi13ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyIChXZWJLaXRX
ZWJDb250ZXh0ICpjb250ZXh0KTsKK3dlYmtpdF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFn
ZXIgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUgKFdlYktpdFdl
YkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgICAgICpzY2hlbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdENhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOwogCiBHX0VO
RF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAppbmRleCBkMmRkODEzLi40ODNlOTY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YkNvbnRleHRQcml2YXRlLmgKQEAgLTI2LDE2ICsyNiwxNSBAQAogI2lmbmRlZiBXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZV9oCiAjZGVmaW5lIFdlYktpdFdlYkNvbnRleHRQcml2YXRlX2gKIAorI2lu
Y2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dC5oIgotI2luY2x1ZGUgPFdlYktpdDIvV2Vi
S2l0Mi5oPgotCi1HX0JFR0lOX0RFQ0xTCiAKIFdLQ29udGV4dFJlZiB3ZWJraXRXZWJDb250ZXh0
R2V0V0tDb250ZXh0KFdlYktpdFdlYkNvbnRleHQqKTsKIFdlYktpdERvd25sb2FkKiB3ZWJraXRX
ZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChXS0Rvd25sb2FkUmVmKTsKIHZvaWQgd2Via2l0
V2ViQ29udGV4dFJlbW92ZURvd25sb2FkKFdLRG93bmxvYWRSZWYpOwogdm9pZCB3ZWJraXRXZWJD
b250ZXh0RG93bmxvYWRTdGFydGVkKFdlYktpdFdlYkNvbnRleHQqLCBXZWJLaXREb3dubG9hZCop
OwotCi1HX0VORF9ERUNMUworV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYgd2Via2l0V2ViQ29udGV4
dEdldFJlcXVlc3RNYW5hZ2VyKFdlYktpdFdlYkNvbnRleHQqKTsKK3ZvaWQgd2Via2l0V2ViQ29u
dGV4dFJlY2VpdmVkVVJJUmVxdWVzdChXZWJLaXRXZWJDb250ZXh0KiwgV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdCopOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViQ29udGV4dFByaXZhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRv
Y3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1kb2NzLnNnbWwKaW5kZXggODIxMTI3Zi4uMDEwZWVkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
CkBAIC0zMSw2ICszMSw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbGVD
aG9vc2VyUmVxdWVzdC54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0Rmlu
ZENvbnRyb2xsZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdENvb2tp
ZU1hbmFnZXIueG1sIi8+CisgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFVSSVNjaGVt
ZVJlcXVlc3QueG1sIi8+CiAgIDwvY2hhcHRlcj4KIAogICA8aW5kZXggaWQ9ImluZGV4LWFsbCI+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBkYzVlNjVhLi5hNTNkNTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTMwLDYgKzMwLDEwIEBAIHdlYmtpdF93ZWJfY29udGV4
dF9zZXRfY2FjaGVfbW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkKIHdlYmtp
dF93ZWJfY29udGV4dF9nZXRfY29va2llX21hbmFnZXIKIAorPFNVQlNFQ1RJT04gIFVSSSBTY2hl
bWU+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sKK3dlYmtpdF93ZWJfY29udGV4dF9y
ZWdpc3Rlcl91cmlfc2NoZW1lCisKIDxTVUJTRUNUSU9OIFN0YW5kYXJkPgogV2ViS2l0V2ViQ29u
dGV4dENsYXNzCiBXRUJLSVRfV0VCX0NPTlRFWFQKQEAgLTU5NywzICs2MDEsMjUgQEAgV0VCS0lU
X0NPT0tJRV9NQU5BR0VSX0dFVF9DTEFTUwogV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUKIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxG
SUxFPldlYktpdFVSSVNjaGVtZVJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
Cit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUKK3dlYmtpdF91cmlfc2NoZW1l
X3JlcXVlc3RfZ2V0X3VyaQord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aAord2Vi
a2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gKKworPFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitX
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVT
VAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVAorV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVT
VAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUworV0VCS0lUX0lTX1VSSV9TQ0hFTUVf
UkVRVUVTVF9DTEFTUworV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlCit3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKaW5kZXgg
MWNhODIxYi4uNTI3YjQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTUsMyArMTUsNCBAQCB3ZWJraXRf
c2NyaXB0X2RpYWxvZ19nZXRfdHlwZQogd2Via2l0X2phdmFzY3JpcHRfcmVzdWx0X2dldF90eXBl
CiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF90eXBlCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0
X3R5cGUKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJDb250ZXh0LmNwcAppbmRleCBhZDdjZTViLi5lZTNmNDI0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdl
YkNvbnRleHQuY3BwCkBAIC0yMCw4ICsyMCwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAj
aW5jbHVkZSAiVGVzdE1haW4uaCIKKyNpbmNsdWRlICJXZWJWaWV3VGVzdC5oIgogI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBz
dGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRl
cikKIHsKQEAgLTI5LDkgKzMyLDkzIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVs
dChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfZGVmYXVsdCgpID09IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKTsK
IH0KIAorc3RhdGljIGNvbnN0IGNoYXIqIGtCYXJIdG1sID0gIjxodG1sPjxib2R5PkJhcjwvYm9k
eT48L2h0bWw+IjsKK3N0YXRpYyBjb25zdCBjaGFyKiBrRWNob0h0bWxGb3JtYXQgPSAiPGh0bWw+
PGJvZHk+JXM8L2JvZHk+PC9odG1sPiI7CisKK2NsYXNzIFVSSVNjaGVtZVRlc3Q6IHB1YmxpYyBX
ZWJWaWV3VGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklTY2hl
bWVUZXN0KTsKKworICAgIHN0YXRpYyB2b2lkIHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBncG9pbnRlciB1c2VyRGF0YSkKKyAgICB7Cisg
ICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3QgPSBzdGF0aWNfY2FzdDxVUklTY2hlbWVUZXN0Kj4o
dXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QgPSByZXF1ZXN0Owor
ICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKHJlcXVlc3QpKTsKKworICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJl
YW0gPSBhZG9wdEdSZWYoZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ldygpKTsKKyAgICAgICAgdGVz
dC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChpbnB1dFN0
cmVhbS5nZXQoKSkpOworICAgICAgICBzaXplX3QgaW5wdXRTdHJlYW1MZW5ndGggPSAwOworICAg
ICAgICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUo
cmVxdWVzdCksICJmb28iKSkgeworICAgICAgICAgICAgaW5wdXRTdHJlYW1MZW5ndGggPSBzdHJs
ZW4oa0Jhckh0bWwpOworICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRh
KEdfTUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIHJlaW50ZXJwcmV0X2Nh
c3Q8Z2NvbnN0cG9pbnRlcj4oa0Jhckh0bWwpLCBpbnB1dFN0cmVhbUxlbmd0aCwgMCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9z
Y2hlbWUocmVxdWVzdCksICJlY2hvIikpIHsKKyAgICAgICAgICAgIGNoYXIqIGVjaG9IdG1sID0g
Z19zdHJkdXBfcHJpbnRmKGtFY2hvSHRtbEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfcGF0aChyZXF1ZXN0KSk7CisgICAgICAgICAgICBpbnB1dFN0cmVhbUxlbmd0aCA9IHN0
cmxlbihlY2hvSHRtbCk7CisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2Rh
dGEoR19NRU1PUllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVpbnRlcnByZXRf
Y2FzdDxnY29uc3Rwb2ludGVyPihlY2hvSHRtbCksIGlucHV0U3RyZWFtTGVuZ3RoLCBnX2ZyZWUp
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlucHV0U3RyZWFtTGVuZ3RoKQorICAgICAgICAg
ICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0u
Z2V0KCksIGlucHV0U3RyZWFtTGVuZ3RoLCAidGV4dC9odG1sIik7CisgICAgfQorCisgICAgVVJJ
U2NoZW1lVGVzdCgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJf
dXJpX3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgImZvbyIsIHVyaVNj
aGVtZVJlcXVlc3RDYWxsYmFjaywgdGhpcyk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9y
ZWdpc3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCAiZWNo
byIsIHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjaywgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBzaXplX3QgZGF0
YVNpemU7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdW5zaWduZWQg
Y2hhciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9X
RUJfUkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7
CisgICAgICAgIGdfYXNzZXJ0KGRhdGEpOworCisgICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3Qg
PSBzdGF0aWNfY2FzdDxVUklTY2hlbWVUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5t
X3Jlc291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOworICAgICAg
ICB0ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICAgICAgZ19tYWluX2xv
b3BfcXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICB2b2lkIGNoZWNrTWFpblJl
c291cmNlRGF0YSgpCisgICAgeworICAgICAgICBtX3Jlc291cmNlRGF0YVNpemUgPSAwOworICAg
ICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21h
aW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UpOworCisg
ICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIHJlc291cmNlR2V0
RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworCisgICAgICAgIGlmICghZ19zdHJjbXAwKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0
X3NjaGVtZShtX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpLCAiZm9vIikpIHsKKyAgICAgICAgICAg
IGdfYXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oa0Jhckh0bWwp
KTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgpLCBr
QmFySHRtbCwgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3Ry
Y21wMCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUobV91cmlTY2hlbWVSZXF1
ZXN0LmdldCgpKSwgImVjaG8iKSkgeworICAgICAgICAgICAgR093blB0cjxjaGFyPiBlY2hvSHRt
bChnX3N0cmR1cF9wcmludGYoa0VjaG9IdG1sRm9ybWF0LCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1
ZXN0X2dldF9wYXRoKG1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSkpKTsKKyAgICAgICAgICAgIGdf
YXNzZXJ0X2NtcGludChtX3Jlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZWNob0h0bWwuZ2V0
KCkpKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0KCFzdHJuY21wKG1fcmVzb3VyY2VEYXRhLmdldCgp
LCBlY2hvSHRtbC5nZXQoKSwgbV9yZXNvdXJjZURhdGFTaXplKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBHT3duUHRyPGNoYXI+IG1fcmVzb3VyY2VEYXRhOworICAgIHNpemVfdCBtX3Jlc291
cmNlRGF0YVNpemU7CisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiBtX3VyaVNj
aGVtZVJlcXVlc3Q7Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZShV
UklTY2hlbWVUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkko
ImZvbzpibGFuayIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHRl
c3QtPmNoZWNrTWFpblJlc291cmNlRGF0YSgpOworCisgICAgdGVzdC0+bG9hZFVSSSgiZWNobzpo
ZWxsbyB3b3JsZCIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIHRl
c3QtPmNoZWNrTWFpblJlc291cmNlRGF0YSgpOworfQorCiB2b2lkIGJlZm9yZUFsbCgpCiB7CiAg
ICAgVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250ZXh0IiwgImRlZmF1bHQtY29udGV4dCIsIHRlc3RX
ZWJDb250ZXh0RGVmYXVsdCk7CisgICAgVVJJU2NoZW1lVGVzdDo6YWRkKCJXZWJLaXRXZWJDb250
ZXh0IiwgInVyaS1zY2hlbWUiLCB0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk7CiB9CiAKIHZvaWQg
YWZ0ZXJBbGwoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCmlu
ZGV4IGM1NDYwZjMuLjQ1NzhlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3dlYmtpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmgKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNl
dHRpbmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRVUklSZXNwb25zZS5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29udGV4dC5o
PgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViUmVzb3VyY2UuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFdlYlZpZXcuaD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141144</attachid>
            <date>2012-05-10 04:24:06 -0700</date>
            <delta_ts>2012-06-01 07:01:34 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-uri-sceheme-api4.diff</filename>
            <type>text/plain</type>
            <size>38086</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0MmFjMDQyLi41MjdkNmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTItMDUtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gcmVnaXN0ZXIgY3VzdG9tIFVSSSBzY2hlbWVz
IHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAoZGlkUmVjZWl2ZVVSSVJlcXVlc3QpOiBDYWxsYmFjayBlbWl0dGVk
IGJ5IHRoZSBDIEFQSSB3aGVuIGEKKyAgICAgICAgcmVxdWVzdCBmb3IgYSBjdXN0b20gVVJJIHNj
aGVtZSBoYXMgYmVlbiByZWNlaXZlZC4gQ2FsbAorICAgICAgICB3ZWJraXRXZWJDb250ZXh0UmVj
ZWl2ZWRVUklSZXF1ZXN0KCkgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LgorICAgICAgICAoYXR0YWNo
UmVxdWVzdE1hbmFnZXJDbGllbnRUb0NvbnRleHQpOiBJbml0aWFsaXplIHRoZQorICAgICAgICBX
S1NvdXBSZXF1ZXN0TWFuYWdlckNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2luaXQpOgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVx
dWVzdEZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3Nf
aW5pdCk6CisgICAgICAgICh3ZWJraXRVUklTY2hlbWVSZXF1ZXN0Q3JlYXRlKTogQ3JlYXRlIGEg
bmV3CisgICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgZm9yIHRoZSBnaXZlbiBVUkkgYW5k
IHJlcXVlc3QgaWRlbnRpZmllci4KKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3Rf
Z2V0X3NjaGVtZSk6IFJldHVybiB0aGUgc2NoZW1lIG9mIHRoZQorICAgICAgICByZXF1ZXN0Lgor
ICAgICAgICAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpKTogUmV0dXJuIHRoZSBm
dWxsIFVSSSBvZiB0aGUKKyAgICAgICAgcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZ2V0X3BhdGgpOiBSZXR1cm4gdGhlIHBhdGggb2YgdGhlIFVSSS4KKyAgICAg
ICAgKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RSZWFkQ2FsbGJhY2spOiBSZWFkIGNhbGxiYWNrIGVt
aXR0ZWQgd2hlbgorICAgICAgICByZWFkaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgaW5wdXQgc3Ry
ZWFtLgorICAgICAgICAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gpOiBGaW5pc2gg
dGhlIHJlcXVlc3QgYnkgcmVhZGluZworICAgICAgICB0aGUgY29udGVudHMgb2YgdGhlIGlucHV0
IHN0cmVhbSBhbmQgc2VuZGluZyB0aGUgZGF0YSB0byB0aGUKKyAgICAgICAgV2ViUHJvY2Vzcy4K
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQ
cml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuY3BwOgorICAgICAgICAoV2ViS2l0VVJJU2NoZW1lSGFuZGxlcjo6V2ViS2l0VVJJU2No
ZW1lSGFuZGxlcik6IEhlbHBlciBzdHJ1Y3QgdG8KKyAgICAgICAgc2F2ZSBjYWxsYmFjayBhbmQg
dXNlciBkYXRhIG9mIHJlZ2lzdGVyZWQgVVJJIHNjaGVtZXMuCisgICAgICAgIChfV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGUpOgorICAgICAgICAoY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQpOiBJbml0
aWFsaXplIHRoZSBTb3VwUmVxdWVzdE1hbmFnZXIuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRl
eHRfcmVnaXN0ZXJfdXJpX3NjaGVtZSk6IFB1YmxpYyBBUEkgdG8gcmVnaXN0ZXIgYQorICAgICAg
ICBjdXN0b20gVVJJIHNjaGVtZSBwcm92aWRpbmcgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2Fs
bGVkIHRvCisgICAgICAgIGhhbmRsZSByZXF1ZXN0cyBmb3IgdGhhdCBVUkkgc2NoZW1lLgorICAg
ICAgICAod2Via2l0V2ViQ29udGV4dEdldFJlcXVlc3RNYW5hZ2VyKTogSGVscGVyIHByaXZhdGUg
bWV0aG9kIHRvCisgICAgICAgIHJldHVybiB0aGUgU291cFJlcXVlc3RNYW5hZ2VyLgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJUmVxdWVzdCk6IEdldCB0aGUKKyAgICAgICAg
V2ViS2l0VVJJU2NoZW1lSGFuZGxlciBmb3IgdGhlIGdpdmVuIHJlcXVlc3QgaWRlbnRpZmllciBh
bmQgY2FsbAorICAgICAgICB0aGUgY2FsbGJhY2suCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkCisgICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qg
c2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2Vj
dGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfdHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2Vi
S2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk6Cisg
ICAgICAgIChiZWZvcmVBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aDogSW5jbHVkZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmguCisKIDIwMTItMDUtMDkgIEd5dXlv
dW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBNb3ZlIHN1c3Bl
bmRBbmltYXRpb25zIHRvIHVzZSBJbnRlcm5hbHMgaW50ZXJmYWNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KaW5kZXggZDg3ZTA5OC4uMGI2ZDYxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC0xMDQsNiArMTA0LDcgQEAgd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChX
ZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIp
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmggXApAQCAtNTk3LDYgKzU5OCw4IEBAIHdlYmtpdDJfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRPcGVyYXRp
b25Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0
ZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RN
YW5hZ2VyQ2xpZW50LmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc3BvbnNlUG9saWN5RGVjaXNpb24uY3BwIFwK
QEAgLTYxNiw2ICs2MTksOSBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVJlc3BvbnNlLmNwcCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuaCBcCiAJU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVzcG9uc2VQcml2YXRlLmggXAorCVNvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuY3BwIFwK
KwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0
LmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJl
cXVlc3RQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHRQcml2YXRlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UHJpdmF0ZS5oCmluZGV4IDRiN2U5YWQuLjY0ZTRlMzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKQEAgLTI3LDEx
ICsyNywxMyBAQAogI2RlZmluZSBXZWJLaXRQcml2YXRlX2gKIAogI2luY2x1ZGUgPFdlYktpdDIv
V0tBUElDYXN0Lmg+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHRTb3VwLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS0Rvd25sb2FkLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZpbmRPcHRpb25z
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Z1bGxTY3JlZW5DbGllbnRHdGsuaD4KICNpbmNsdWRl
IDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIuaD4K
ICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQy
Lmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4ZjQzYWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNs
aWVudC5jcHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFn
ZXJDbGllbnQuaCIKKworI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgi
CisjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HUmVmUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyB2b2lk
IGRpZFJlY2VpdmVVUklSZXF1ZXN0KFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHNvdXBSZXF1ZXN0
TWFuYWdlclJlZiwgV0tVUkxSZWYgdXJsUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiBy
ZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RDcmVhdGUoc291cFJlcXVl
c3RNYW5hZ2VyUmVmLCB1cmxSZWYsIHJlcXVlc3RJRCkpOworICAgIHdlYmtpdFdlYkNvbnRleHRS
ZWNlaXZlZFVSSVJlcXVlc3QoV0VCS0lUX1dFQl9DT05URVhUKGNsaWVudEluZm8pLCByZXF1ZXN0
LmdldCgpKTsKK30KKwordm9pZCBhdHRhY2hSZXF1ZXN0TWFuYWdlckNsaWVudFRvQ29udGV4dChX
ZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQoreworICAgIFdLU291cFJlcXVlc3RNYW5hZ2Vy
Q2xpZW50IHdrUmVxdWVzdE1hbmFnZXJDbGllbnQgPSB7CisgICAgICAgIGtXS1NvdXBSZXF1ZXN0
TWFuYWdlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICB3ZWJDb250ZXh0LCAvLyBjbGll
bnRJbmZvCisgICAgICAgIGRpZFJlY2VpdmVVUklSZXF1ZXN0CisgICAgfTsKKyAgICBXS1NvdXBS
ZXF1ZXN0TWFuYWdlclNldENsaWVudCh3ZWJraXRXZWJDb250ZXh0R2V0UmVxdWVzdE1hbmFnZXIo
d2ViQ29udGV4dCksICZ3a1JlcXVlc3RNYW5hZ2VyQ2xpZW50KTsKK30KKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGll
bnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5h
Z2VyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM2NTU5NAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmgKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50
X2gKKyNkZWZpbmUgV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnRfaAorCisjaW5jbHVkZSAiV2Vi
S2l0V2ViQ29udGV4dC5oIgorCit2b2lkIGF0dGFjaFJlcXVlc3RNYW5hZ2VyQ2xpZW50VG9Db250
ZXh0KFdlYktpdFdlYkNvbnRleHQqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMWZlNzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1
ZXN0LmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdC5oIgorCisjaW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0dPd25QdHJTb3VwLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBnUmVhZEJ1ZmZlclNpemUgPSA4MTkyOworCitHX0RFRklORV9UWVBFKFdlYktpdFVS
SVNjaGVtZVJlcXVlc3QsIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1Qp
CisKK3N0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUgeworICAgIFdLUmV0YWlu
UHRyPFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmPiB3a1JlcXVlc3RNYW5hZ2VyOworICAgIHVpbnQ2
NF90IHJlcXVlc3RJRDsKKyAgICBDU3RyaW5nIHVyaTsKKyAgICBHT3duUHRyPFNvdXBVUkk+IHNv
dXBVUkk7CisKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gc3RyZWFtOworICAgIHVpbnQ2NF90
IHN0cmVhbUxlbmd0aDsKKyAgICBjaGFyIHJlYWRCdWZmZXJbZ1JlYWRCdWZmZXJTaXplXTsKKyAg
ICB1aW50NjRfdCBieXRlc1JlYWQ7CisgICAgQ1N0cmluZyBtaW1lVHlwZTsKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfaW5pdChXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKiBwcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1VSSV9T
Q0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUpOworICAgIHJlcXVl
c3QtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0VVJJU2NoZW1lUmVxdWVzdEZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKG9iamVj
dCktPnByaXYtPn5XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9jbGFz
c19pbml0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RGaW5h
bGl6ZTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2Yo
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUpKTsKK30KKworV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdCogd2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZShXS1NvdXBSZXF1ZXN0TWFuYWdlclJl
ZiB3a1JlcXVlc3RNYW5hZ2VyLCBXS1VSTFJlZiB3a1VSTCwgdWludDY0X3QgcmVxdWVzdElEKQor
eworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QgPSBXRUJLSVRfVVJJX1NDSEVN
RV9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIE5V
TEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT53a1JlcXVlc3RNYW5hZ2VyID0gd2tSZXF1ZXN0TWFu
YWdlcjsKKyAgICByZXF1ZXN0LT5wcml2LT51cmkgPSB0b0ltcGwod2tVUkwpLT5zdHJpbmcoKS51
dGY4KCk7CisgICAgcmVxdWVzdC0+cHJpdi0+cmVxdWVzdElEID0gcmVxdWVzdElEOworICAgIHJl
dHVybiByZXF1ZXN0OworfQorCisvKioKKyAqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0
X3NjaGVtZToKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0CisgKgorICog
R2V0IHRoZSBVUkkgc2NoZW1lIG9mIEByZXF1ZXN0CisgKgorICogUmV0dXJuczogdGhlIFVSSSBz
Y2hlbWUgb2YgQHJlcXVlc3QKKyAqLworY29uc3QgY2hhciogd2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfc2NoZW1lKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVTVChyZXF1ZXN0
KSwgMCk7CisKKyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPnNvdXBVUkkpCisgICAgICAgIHJlcXVl
c3QtPnByaXYtPnNvdXBVUkkuc2V0KHNvdXBfdXJpX25ldyhyZXF1ZXN0LT5wcml2LT51cmkuZGF0
YSgpKSk7CisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNvdXBVUkktPnNjaGVtZTsKK30KKwor
LyoqCisgKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF91cmk6CisgKiBAcmVxdWVzdDog
YSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIG9mIEByZXF1ZXN0
CisgKgorICogUmV0dXJuczogdGhlIGZ1bGwgVVJJIG9mIEByZXF1ZXN0CisgKi8KK2NvbnN0IGNo
YXIqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaShXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19VUklf
U0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgcmV0dXJuIHJlcXVlc3QtPnByaXYt
PnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRf
cGF0aDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0CisgKgorICogR2V0
IHRoZSBVUkkgcGF0aCBvZiBAcmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRoZSBVUkkgcGF0aCBv
ZiBAcmVxdWVzdAorICovCitjb25zdCBjaGFyKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF9wYXRoKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVTVChyZXF1ZXN0KSwgMCk7CisK
KyAgICBpZiAoIXJlcXVlc3QtPnByaXYtPnNvdXBVUkkpCisgICAgICAgIHJlcXVlc3QtPnByaXYt
PnNvdXBVUkkuc2V0KHNvdXBfdXJpX25ldyhyZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpKSk7Cisg
ICAgcmV0dXJuIHJlcXVlc3QtPnByaXYtPnNvdXBVUkktPnBhdGg7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RSZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0
cmVhbSwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHNjaGVt
ZVJlcXVlc3QpCit7CisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiByZXF1ZXN0
ID0gYWRvcHRHUmVmKHNjaGVtZVJlcXVlc3QpOworICAgIGdzc2l6ZSBieXRlc1JlYWQgPSBnX2lu
cHV0X3N0cmVhbV9yZWFkX2ZpbmlzaChpbnB1dFN0cmVhbSwgcmVzdWx0LCAwKTsKKyAgICBpZiAo
Ynl0ZXNSZWFkID09IC0xKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0UHJpdmF0ZSogcHJpdiA9IHJlcXVlc3QtPnByaXY7CisgICAgV0tSZXRhaW5QdHI8V0tE
YXRhUmVmPiB3a0RhdGEoQWRvcHRXSywgV0tEYXRhQ3JlYXRlKGJ5dGVzUmVhZCA/IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KHByaXYtPnJlYWRCdWZmZXIpIDogMCwgYnl0
ZXNSZWFkKSk7CisgICAgaWYgKCFwcml2LT5ieXRlc1JlYWQpIHsKKyAgICAgICAgV0tSZXRhaW5Q
dHI8V0tTdHJpbmdSZWY+IHdrTWltZVR5cGUgPSAhcHJpdi0+bWltZVR5cGUuaXNOdWxsKCkgPyBh
ZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHByaXYtPm1pbWVUeXBlLmRhdGEo
KSkpIDogMDsKKyAgICAgICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJEaWRIYW5kbGVVUklSZXF1ZXN0
KHByaXYtPndrUmVxdWVzdE1hbmFnZXIuZ2V0KCksIHdrRGF0YS5nZXQoKSwgcHJpdi0+c3RyZWFt
TGVuZ3RoLCB3a01pbWVUeXBlLmdldCgpLCBwcml2LT5yZXF1ZXN0SUQpOworICAgIH0gZWxzZSBp
ZiAoYnl0ZXNSZWFkIHx8ICghYnl0ZXNSZWFkICYmICFwcml2LT5zdHJlYW1MZW5ndGgpKQorICAg
ICAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlckRpZFJlY2VpdmVVUklSZXF1ZXN0RGF0YShwcml2LT53
a1JlcXVlc3RNYW5hZ2VyLmdldCgpLCB3a0RhdGEuZ2V0KCksIHByaXYtPnJlcXVlc3RJRCk7CisK
KyAgICBpZiAoIWJ5dGVzUmVhZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+Ynl0ZXNS
ZWFkICs9IGJ5dGVzUmVhZDsKKyAgICBnX2lucHV0X3N0cmVhbV9yZWFkX2FzeW5jKGlucHV0U3Ry
ZWFtLCBwcml2LT5yZWFkQnVmZmVyLCBnUmVhZEJ1ZmZlclNpemUsIEdfUFJJT1JJVFlfREVGQVVM
VCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Fz
eW5jUmVhZHlDYWxsYmFjaz4od2Via2l0VVJJU2NoZW1lUmVxdWVzdFJlYWRDYWxsYmFjayksIGdf
b2JqZWN0X3JlZihyZXF1ZXN0LmdldCgpKSk7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hl
bWVfcmVxdWVzdF9maW5pc2g6CisgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVz
dAorICogQHN0cmVhbTogYSAjR0lucHV0U3RyZWFtIHRvIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRo
ZSByZXF1ZXN0CisgKiBAc3RyZWFtX2xlbmd0aDogdGhlIGxlbmd0aCBvZiB0aGUgc3RyZWFtIG9y
IC0xIGlmIG5vdCBrbm93bgorICogQG1pbWVfdHlwZTogKGFsbG93LW5vbmUpOiB0aGUgY29udGVu
dCB0eXBlIG9mIHRoZSBzdHJlYW0gb3IgJU5VTEwgaWYgbm90IGtub3duCisgKgorICogRmluaXNo
IGEgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QgYnkgc2V0dGluZyB0aGUgY29udGVudHMgb2YgdGhl
IHJlcXVlc3QgYW5kIGl0cyBtaW1lIHR5cGUuCisgKi8KK3ZvaWQgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9maW5pc2goV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCwgR0lucHV0U3Ry
ZWFtKiBpbnB1dFN0cmVhbSwgZ2ludDY0IHN0cmVhbUxlbmd0aCwgY29uc3QgZ2NoYXIqIG1pbWVU
eXBlKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVT
VChyZXF1ZXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChHX0lTX0lOUFVUX1NUUkVBTShpbnB1
dFN0cmVhbSkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoc3RyZWFtTGVuZ3RoID09IC0xIHx8IHN0
cmVhbUxlbmd0aCA+IDApOworCisgICAgcmVxdWVzdC0+cHJpdi0+c3RyZWFtID0gaW5wdXRTdHJl
YW07CisgICAgLy8gV2UgdXNlIC0xIGluIHRoZSBBUEkgZm9yIGNvbnNpc3RlbmN5IHdpdGggc291
cCB3aGVuIHRoZSBjb250ZW50IGxlbmd0aCBpcyBub3Qga25vd24sIGJ1dCAwIGludGVybmFsbHku
CisgICAgcmVxdWVzdC0+cHJpdi0+c3RyZWFtTGVuZ3RoID0gc3RyZWFtTGVuZ3RoID09IC0xID8g
MCA6IHN0cmVhbUxlbmd0aDsKKyAgICByZXF1ZXN0LT5wcml2LT5ieXRlc1JlYWQgPSAwOworICAg
IHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0gbWltZVR5cGU7CisgICAgZ19pbnB1dF9zdHJlYW1f
cmVhZF9hc3luYyhpbnB1dFN0cmVhbSwgcmVxdWVzdC0+cHJpdi0+cmVhZEJ1ZmZlciwgZ1JlYWRC
dWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHdlYmtpdFVSSVNj
aGVtZVJlcXVlc3RSZWFkQ2FsbGJhY2spLCBnX29iamVjdF9yZWYocmVxdWVzdCkpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjIxNDQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklTY2hlbWVSZXF1ZXN0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYm
ICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Vi
a2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdF9oCisjZGVmaW5lIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RfaAor
CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVf
UkVRVUVTVCAgICAgICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlKCkp
CisjZGVmaW5lIFdFQktJVF9VUklfU0NIRU1FX1JFUVVFU1Qob2JqKSAgICAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9SRVFV
RVNULCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KSkKKyNkZWZpbmUgV0VCS0lUX0lTX1VSSV9TQ0hF
TUVfUkVRVUVTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfVVJJX1ND
SEVNRV9SRVFVRVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGts
YXNzKSwgIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9VUklf
U0NIRU1FX1JFUVVFU1QpKQorI2RlZmluZSBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUX0dFVF9D
TEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBF
X1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENsYXNzKSkKKwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFVSSVNjaGVtZVJlcXVlc3QgICAgICAgIFdlYktpdFVSSVNjaGVt
ZVJlcXVlc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENsYXNzICAg
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdENsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFVSSVNj
aGVtZVJlcXVlc3RQcml2YXRlIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlOworCitzdHJ1
Y3QgX1dlYktpdFVSSVNjaGVtZVJlcXVlc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAg
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktp
dFVSSVNjaGVtZVJlcXVlc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsK
K307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3R5
cGUgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3VyaV9zY2hl
bWVfcmVxdWVzdF9nZXRfc2NoZW1lIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KTsK
KworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF91cmkgICAgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGggICAoV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2ggICAgIChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpy
ZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSW5wdXRTdHJl
YW0gICAgICAgICAgICpzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdpbnQ2NCAgICAgICAgICAgICAgICAgIHN0cmVhbV9sZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgKm1pbWVfdHlw
ZSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZlZjA1YwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVt
ZVJlcXVlc3RQcml2YXRlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlX2gK
KyNkZWZpbmUgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGVfaAorCisjaW5jbHVkZSAiV2Vi
S2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCIKKyNpbmNs
dWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5hZ2VyLmg+CisKK1dlYktpdFVSSVNjaGVtZVJl
cXVlc3QqIHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RDcmVhdGUoV0tTb3VwUmVxdWVzdE1hbmFnZXJS
ZWYsIFdLVVJMUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQpOworCisjZW5kaWYgLy8gV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdFByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCAwYjY4YzA4Li5hNmE1N2U1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0LmNwcApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFn
ZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRDbGllbnQuaCIKICNpbmNsdWRl
ICJXZWJLaXREb3dubG9hZFByaXZhdGUuaCIKLSNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL2dvYmplY3QvR1JlZlB0ci5oPgpAQCAtMzgsMTAgKzM4LDMwIEBAIGVudW0gewogICAgIExB
U1RfU0lHTkFMCiB9OwogCitzdHJ1Y3QgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciB7CisgICAgV2Vi
S2l0VVJJU2NoZW1lSGFuZGxlcigpCisgICAgICAgIDogY2FsbGJhY2soMCkKKyAgICAgICAgLCB1
c2VyRGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlcihXZWJL
aXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAg
ICAgICA6IGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFj
ayBjYWxsYmFjazsKKyAgICB2b2lkKiB1c2VyRGF0YTsKK307CisKK3R5cGVkZWYgSGFzaE1hcDxT
dHJpbmcsIFdlYktpdFVSSVNjaGVtZUhhbmRsZXI+IFVSSVNjaGVtZUhhbmRsZXJNYXA7CisKIHN0
cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogICAgIFdLUmV0YWluUHRyPFdLQ29udGV4
dFJlZj4gY29udGV4dDsKIAogICAgIEdSZWZQdHI8V2ViS2l0Q29va2llTWFuYWdlcj4gY29va2ll
TWFuYWdlcjsKKyAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVz
dE1hbmFnZXI7CisgICAgVVJJU2NoZW1lSGFuZGxlck1hcCB1cmlTY2hlbWVIYW5kbGVyczsKIH07
CiAKIHN0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKQEAgLTg5LDgg
KzEwOSwxMCBAQCBzdGF0aWMgZ3BvaW50ZXIgY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQoZ3BvaW50
ZXIpCiB7CiAgICAgc3RhdGljIEdSZWZQdHI8V2ViS2l0V2ViQ29udGV4dD4gd2ViQ29udGV4dCA9
IGFkb3B0R1JlZihXRUJLSVRfV0VCX0NPTlRFWFQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9DT05URVhULCBOVUxMKSkpOwogICAgIHdlYkNvbnRleHQtPnByaXYtPmNvbnRleHQgPSBXS0Nv
bnRleHRHZXRTaGFyZWRQcm9jZXNzQ29udGV4dCgpOworICAgIHdlYkNvbnRleHQtPnByaXYtPnJl
cXVlc3RNYW5hZ2VyID0gV0tDb250ZXh0R2V0U291cFJlcXVlc3RNYW5hZ2VyKHdlYkNvbnRleHQt
PnByaXYtPmNvbnRleHQuZ2V0KCkpOwogICAgIFdLQ29udGV4dFNldENhY2hlTW9kZWwod2ViQ29u
dGV4dC0+cHJpdi0+Y29udGV4dC5nZXQoKSwga1dLQ2FjaGVNb2RlbFByaW1hcnlXZWJCcm93c2Vy
KTsKICAgICBhdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4dCh3ZWJDb250ZXh0LmdldCgpKTsK
KyAgICBhdHRhY2hSZXF1ZXN0TWFuYWdlckNsaWVudFRvQ29udGV4dCh3ZWJDb250ZXh0LmdldCgp
KTsKICAgICByZXR1cm4gd2ViQ29udGV4dC5nZXQoKTsKIH0KIApAQCAtMjM2LDYgKzI1OCw1OSBA
QCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5h
Z2VyKFdlYktpdFdlYkNvbnRleHQqIGNvbgogICAgIHJldHVybiBwcml2LT5jb29raWVNYW5hZ2Vy
LmdldCgpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfY29udGV4dF9yZWdpc3Rlcl91cmlfc2No
ZW1lOgorICogQGNvbnRleHQ6IGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIEBzY2hlbWU6IHRoZSBu
ZXR3b3JrIHNjaGVtZSB0byByZWdpc3RlcgorICogQGNhbGxiYWNrOiBhICNXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0Q2FsbGJhY2sKKyAqIEB1c2VyX2RhdGE6IGRhdGEgdG8gcGFzcyB0byBjYWxsYmFj
ayBmdW5jdGlvbgorICoKKyAqIFJlZ2lzdGVyIEBzY2hlbWUgaW4gQGNvbnRleHQsIHNvIHRoYXQg
d2hlbiBhbiBVUkkgcmVxdWVzdCB3aXRoIEBzY2hlbWUgaXMgbWFkZSBpbiB0aGUKKyAqICNXZWJL
aXRXZWJDb250ZXh0LCB0aGUgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjayByZWdpc3Rl
cmVkIHdpbGwgYmUgY2FsbGVkIHdpdGggYQorICogI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuCisg
KiBJdCBpcyBwb3NzaWJsZSB0byBoYW5kbGUgVVJJIHNjaGVtZSByZXF1ZXN0cyBhc3luY2hyb25v
dXNseSwgYnkgY2FsbGluZyBnX29iamVjdF9yZWYoKSBvbiB0aGUKKyAqICNXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0IGFuZCBjYWxsaW5nIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKCkg
bGF0ZXIgd2hlbiB0aGUgZGF0YSBvZgorICogdGhlIHJlcXVlc3QgaXMgYXZhaWxhYmxlLgorICoK
KyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogc3RhdGljIHZvaWQKKyAq
IGFib3V0X3VyaV9zY2hlbWVfcmVxdWVzdF9jYiAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVx
dWVzdCwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAg
ICAgICAgdXNlcl9kYXRhKQorICogeworICogICAgIEdJbnB1dFN0cmVhbSAqc3RyZWFtOworICog
ICAgIGdzaXplICAgICAgICAgc3RyZWFtX2xlbmd0aDsKKyAqICAgICBjb25zdCBnY2hhciAgKnBh
dGg7CisgKgorICogICAgIHBhdGggPSB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRo
IChyZXF1ZXN0KTsKKyAqICAgICBpZiAoIWdfc3RyY21wMCAocGF0aCwgInBsdWdpbnMiKSkgewor
ICogICAgICAgICAvPCEtLSAtLT4qIENyZWF0ZSBhIEdJbnB1dFN0cmVhbSB3aXRoIHRoZSBjb250
ZW50cyBvZiBwbHVnaW5zIGFib3V0IHBhZ2UsIGFuZCBzZXQgaXRzIGxlbmd0aCB0byBzdHJlYW1f
bGVuZ3RoICo8IS0tIC0tPi8KKyAqICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAgKHBhdGgsICJt
ZW1vcnkiKSkgeworICogICAgICAgICAvPCEtLSAtLT4qIENyZWF0ZSBhIEdJbnB1dFN0cmVhbSB3
aXRoIHRoZSBjb250ZW50cyBvZiBtZW1vcnkgYWJvdXQgcGFnZSwgYW5kIHNldCBpdHMgbGVuZ3Ro
IHRvIHN0cmVhbV9sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSBpZiAoIWdfc3RyY21w
MCAocGF0aCwgImFwcGxpY2F0aW9ucyIpKSB7CisgKiAgICAgICAgIC88IS0tIC0tPiogQ3JlYXRl
IGEgR0lucHV0U3RyZWFtIHdpdGggdGhlIGNvbnRlbnRzIG9mIGFwcGxpY2F0aW9ucyBhYm91dCBw
YWdlLCBhbmQgc2V0IGl0cyBsZW5ndGggdG8gc3RyZWFtX2xlbmd0aCAqPCEtLSAtLT4vCisgKiAg
ICAgfSBlbHNlIHsKKyAqICAgICAgICAgZ2NoYXIgKmNvbnRlbnRzOworICoKKyAqICAgICAgICAg
Y29udGVudHMgPSBnX3N0cmR1cF9wcmludGYgKCImbHQ7aHRtbCZndDsmbHQ7Ym9keSZndDsmbHQ7
cCZndDtJbnZhbGlkIGFib3V0OiVzIHBhZ2UmbHQ7L3AmZ3Q7Jmx0Oy9ib2R5Jmd0OyZsdDsvaHRt
bCZndDsiLCBwYXRoKTsKKyAqICAgICAgICAgc3RyZWFtX2xlbmd0aCA9IHN0cmxlbiAoY29udGVu
dHMpOworICogICAgICAgICBzdHJlYW0gPSBnX21lbW9yeV9pbnB1dF9zdHJlYW1fbmV3X2Zyb21f
ZGF0YSAoY29udGVudHMsIHN0cmVhbV9sZW5ndGgsIGdfZnJlZSk7CisgKiAgICAgfQorICogICAg
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoIChyZXF1ZXN0LCBzdHJlYW0sIHN0cmVh
bV9sZW5ndGgsICJ0ZXh0L2h0bWwiKTsKKyAqICAgICBnX29iamVjdF91bnJlZiAoc3RyZWFtKTsK
KyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KK3ZvaWQg
d2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUoV2ViS2l0V2ViQ29udGV4dCog
Y29udGV4dCwgY29uc3QgY2hhciogc2NoZW1lLCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJh
Y2sgY2FsbGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9DT05URVhUKGNvbnRleHQpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKHNj
aGVtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChjYWxsYmFjayk7CisKKyAgICBjb250ZXh0LT5w
cml2LT51cmlTY2hlbWVIYW5kbGVycy5zZXQoU3RyaW5nOjpmcm9tVVRGOChzY2hlbWUpLCBXZWJL
aXRVUklTY2hlbWVIYW5kbGVyKGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIFdLUmV0YWluUHRy
PFdLU3RyaW5nUmVmPiB3a1NjaGVtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhzY2hlbWUpKTsKKyAgICBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZ2lzdGVyVVJJU2NoZW1l
KGNvbnRleHQtPnByaXYtPnJlcXVlc3RNYW5hZ2VyLmdldCgpLCB3a1NjaGVtZS5nZXQoKSk7Cit9
CisKIFdlYktpdERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChX
S0Rvd25sb2FkUmVmIHdrRG93bmxvYWQpCiB7CiAgICAgR1JlZlB0cjxXZWJLaXREb3dubG9hZD4g
ZG93bmxvYWQgPSBkb3dubG9hZHNNYXAoKS5nZXQod2tEb3dubG9hZCk7CkBAIC0yNjQsMyArMzM5
LDE2IEBAIFdLQ29udGV4dFJlZiB3ZWJraXRXZWJDb250ZXh0R2V0V0tDb250ZXh0KFdlYktpdFdl
YkNvbnRleHQqIGNvbnRleHQpCiAgICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0
KCk7CiB9CiAKK1dLU291cFJlcXVlc3RNYW5hZ2VyUmVmIHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1
ZXN0TWFuYWdlcihXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIHJldHVybiBjb250
ZXh0LT5wcml2LT5yZXF1ZXN0TWFuYWdlci5nZXQoKTsKK30KKwordm9pZCB3ZWJraXRXZWJDb250
ZXh0UmVjZWl2ZWRVUklSZXF1ZXN0KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdFVS
SVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciBo
YW5kbGVyID0gY29udGV4dC0+cHJpdi0+dXJpU2NoZW1lSGFuZGxlcnMuZ2V0KHdlYmtpdF91cmlf
c2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShyZXF1ZXN0KSk7CisgICAgaWYgKCFoYW5kbGVyLmNh
bGxiYWNrKQorICAgICAgICByZXR1cm47CisKKyAgICBoYW5kbGVyLmNhbGxiYWNrKHJlcXVlc3Qs
IGhhbmRsZXIudXNlckRhdGEpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDQ1YjZlNmMuLjgzMTMyMDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1hbmFn
ZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0Lmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNTgsNiArNTksMTcgQEAgdHlwZWRlZiBl
bnVtIHsKICAgICBXRUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUgogfSBXZWJLaXRD
YWNoZU1vZGVsOwogCisvKioKKyAqIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjazoKKyAq
IEByZXF1ZXN0OiB0aGUgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QKKyAqIEB1c2VyX2RhdGE6IHVz
ZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKgorICogVHlwZSBkZWZpbml0aW9uIGZv
ciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIGFuIFVSSSByZXF1ZXN0
IGlzCisgKiBtYWRlIGZvciBhIHVzZXIgcmVnaXN0ZXJlZCBVUkkgc2NoZW1lLgorICovCit0eXBl
ZGVmIHZvaWQgKCogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKSAoV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCiB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dCAgICAgICAgV2ViS2l0V2ViQ29udGV4dDsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0Q2xhc3MgICBXZWJLaXRXZWJDb250ZXh0Q2xh
c3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGU7CkBAIC04MCwyMyArOTIsMjkgQEAgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0
Q2xhc3MgewogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQotd2Via2l0X3dlYl9jb250ZXh0X2dldF90
eXBlICAgICAgICAgICAodm9pZCk7Cit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3R5cGUgICAgICAg
ICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCi13ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X2RlZmF1bHQgICAgICAgICh2b2lkKTsKK3dlYmtpdF93ZWJfY29udGV4dF9n
ZXRfZGVmYXVsdCAgICAgICAgICh2b2lkKTsKIAogV0VCS0lUX0FQSSB2b2lkCi13ZWJraXRfd2Vi
X2NvbnRleHRfc2V0X2NhY2hlX21vZGVsICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2RlbCAg
Y2FjaGVfbW9kZWwpOword2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbCAgICAgKFdl
YktpdFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdENhY2hlTW9kZWwgICAgICAgICAgICAgICBjYWNo
ZV9tb2RlbCk7CiBXRUJLSVRfQVBJIFdlYktpdENhY2hlTW9kZWwKLXdlYmtpdF93ZWJfY29udGV4
dF9nZXRfY2FjaGVfbW9kZWwgICAgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQpOword2Via2l0
X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbCAgICAgKFdlYktpdFdlYkNvbnRleHQgICAgICAg
ICAgICAgICpjb250ZXh0KTsKIAogV0VCS0lUX0FQSSBXZWJLaXREb3dubG9hZCAqCi13ZWJraXRf
d2ViX2NvbnRleHRfZG93bmxvYWRfdXJpICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICpjb250ZXh0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAg
ICAqdXJpKTsKK3dlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgIChXZWJLaXRX
ZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAqdXJpKTsKIAog
V0VCS0lUX0FQSSBXZWJLaXRDb29raWVNYW5hZ2VyICoKLXdlYmtpdF93ZWJfY29udGV4dF9nZXRf
Y29va2llX21hbmFnZXIgKFdlYktpdFdlYkNvbnRleHQgKmNvbnRleHQpOword2Via2l0X3dlYl9j
b250ZXh0X2dldF9jb29raWVfbWFuYWdlciAgKFdlYktpdFdlYkNvbnRleHQgICAgICAgICAgICAg
ICpjb250ZXh0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0
ZXJfdXJpX3NjaGVtZSAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAg
ICAgICAgICAgICAgKnNjaGVtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgICAgICAgICAgICAgICAgICAg
ICAgIHVzZXJfZGF0YSk7CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCmluZGV4
IGQyZGQ4MTMuLjQ4M2U5NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaApAQCAtMjYsMTYgKzI2LDE1
IEBACiAjaWZuZGVmIFdlYktpdFdlYkNvbnRleHRQcml2YXRlX2gKICNkZWZpbmUgV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGVfaAogCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XZWJLaXQyLmg+Ci0KLUdfQkVHSU5fREVDTFMKIAogV0tDb250
ZXh0UmVmIHdlYmtpdFdlYkNvbnRleHRHZXRXS0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCopOwog
V2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKFdLRG93
bmxvYWRSZWYpOwogdm9pZCB3ZWJraXRXZWJDb250ZXh0UmVtb3ZlRG93bmxvYWQoV0tEb3dubG9h
ZFJlZik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHREb3dubG9hZFN0YXJ0ZWQoV2ViS2l0V2ViQ29u
dGV4dCosIFdlYktpdERvd25sb2FkKik7Ci0KLUdfRU5EX0RFQ0xTCitXS1NvdXBSZXF1ZXN0TWFu
YWdlclJlZiB3ZWJraXRXZWJDb250ZXh0R2V0UmVxdWVzdE1hbmFnZXIoV2ViS2l0V2ViQ29udGV4
dCopOwordm9pZCB3ZWJraXRXZWJDb250ZXh0UmVjZWl2ZWRVUklSZXF1ZXN0KFdlYktpdFdlYkNv
bnRleHQqLCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Kik7CiAKICNlbmRpZiAvLyBXZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA4MjExMjdmLi4wMTBlZWRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTMxLDYgKzMxLDcgQEAKICAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0RmlsZUNob29zZXJSZXF1ZXN0LnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRGaW5kQ29udHJvbGxlci54bWwiLz4KICAgICA8eGk6aW5jbHVk
ZSBocmVmPSJ4bWwvV2ViS2l0Q29va2llTWFuYWdlci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBo
cmVmPSJ4bWwvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAg
IDxpbmRleCBpZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IGRj
NWU2NWEuLmE1M2Q1ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzAsNiArMzAs
MTAgQEAgd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbAogd2Via2l0X3dlYl9jb250
ZXh0X2Rvd25sb2FkX3VyaQogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcgog
Cis8U1VCU0VDVElPTiAgVVJJIFNjaGVtZT4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFj
aword2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUKKwogPFNVQlNFQ1RJT04g
U3RhbmRhcmQ+CiBXZWJLaXRXZWJDb250ZXh0Q2xhc3MKIFdFQktJVF9XRUJfQ09OVEVYVApAQCAt
NTk3LDMgKzYwMSwyNSBAQCBXRUJLSVRfQ09PS0lFX01BTkFHRVJfR0VUX0NMQVNTCiBXZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF90eXBlCiA8L1NF
Q1RJT04+CisKKzxTRUNUSU9OPgorPEZJTEU+V2ViS2l0VVJJU2NoZW1lUmVxdWVzdDwvRklMRT4K
K1dlYktpdFVSSVNjaGVtZVJlcXVlc3QKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3Nj
aGVtZQord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpCit3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2dldF9wYXRoCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaAorCis8
U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcworV0VCS0lU
X1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNUCitXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUCitXRUJL
SVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUCitXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUX0NMQVNT
CitXRUJLSVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUX0NMQVNTCitXRUJLSVRfVVJJX1NDSEVNRV9S
RVFVRVNUX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgorV2ViS2l0VVJJU2NoZW1l
UmVxdWVzdFByaXZhdGUKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3R5cGUKKzwvU0VD
VElPTj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay50eXBlcwppbmRleCAxY2E4MjFiLi41MjdiNDA0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBA
IC0xNSwzICsxNSw0IEBAIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2dldF90eXBlCiB3ZWJraXRfamF2
YXNjcmlwdF9yZXN1bHRfZ2V0X3R5cGUKIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3R5cGUKIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfdHlwZQord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9n
ZXRfdHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGFkN2NlNWIuLmRlY2Uw
NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RXZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKQEAgLTIwLDggKzIwLDExIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJUZXN0TWFpbi5oIgorI2luY2x1ZGUgIldl
YlZpZXdUZXN0LmgiCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogI2luY2x1ZGUgPHdlYmtpdDIvd2Vi
a2l0Mi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CiAKIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChU
ZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewpAQCAtMjksOSArMzIsOTEgQEAgc3RhdGljIHZv
aWQgdGVzdFdlYkNvbnRleHREZWZhdWx0KFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAg
Z19hc3NlcnQod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkgPT0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF9kZWZhdWx0KCkpOwogfQogCitzdGF0aWMgY29uc3QgY2hhcioga0Jhckh0bWwg
PSAiPGh0bWw+PGJvZHk+QmFyPC9ib2R5PjwvaHRtbD4iOworc3RhdGljIGNvbnN0IGNoYXIqIGtF
Y2hvSHRtbEZvcm1hdCA9ICI8aHRtbD48Ym9keT4lczwvYm9keT48L2h0bWw+IjsKKworY2xhc3Mg
VVJJU2NoZW1lVGVzdDogcHVibGljIFdlYlZpZXdUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dM
SUJfVEVTVF9GSVhUVVJFKFVSSVNjaGVtZVRlc3QpOworCisgICAgc3RhdGljIHZvaWQgdXJpU2No
ZW1lUmVxdWVzdENhbGxiYWNrKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqIHJlcXVlc3QsIGdwb2lu
dGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgVVJJU2NoZW1lVGVzdCogdGVzdCA9IHN0YXRp
Y19jYXN0PFVSSVNjaGVtZVRlc3QqPih1c2VyRGF0YSk7CisgICAgICAgIHRlc3QtPm1fdXJpU2No
ZW1lUmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRl
ZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworCisgICAgICAgIEdSZWZQdHI8
R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihnX21lbW9yeV9pbnB1dF9zdHJl
YW1fbmV3KCkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKGlucHV0U3RyZWFtLmdldCgpKSk7CisKKyAgICAgICAgaWYgKCFnX3N0
cmNtcDAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpLCAiZm9v
IikpIHsKKyAgICAgICAgICAgIHNpemVfdCBpbnB1dFN0cmVhbUxlbmd0aCA9IHN0cmxlbihrQmFy
SHRtbCk7CisgICAgICAgICAgICBnX21lbW9yeV9pbnB1dF9zdHJlYW1fYWRkX2RhdGEoR19NRU1P
UllfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtLmdldCgpKSwgcmVpbnRlcnByZXRfY2FzdDxnY29u
c3Rwb2ludGVyPihrQmFySHRtbCksIGlucHV0U3RyZWFtTGVuZ3RoLCAwKTsKKyAgICAgICAgICAg
IHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZmluaXNoKHJlcXVlc3QsIGlucHV0U3RyZWFtLmdl
dCgpLCBpbnB1dFN0cmVhbUxlbmd0aCwgInRleHQvaHRtbCIpOworICAgICAgICB9IGVsc2UgaWYg
KCFnX3N0cmNtcDAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKHJlcXVlc3Qp
LCAiZWNobyIpKSB7CisgICAgICAgICAgICBjaGFyKiBlY2hvSHRtbCA9IGdfc3RyZHVwX3ByaW50
ZihrRWNob0h0bWxGb3JtYXQsIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGgocmVx
dWVzdCkpOworICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhKEdfTUVN
T1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIHJlaW50ZXJwcmV0X2Nhc3Q8Z2Nv
bnN0cG9pbnRlcj4oZWNob0h0bWwpLCBzdHJsZW4oZWNob0h0bWwpLCBnX2ZyZWUpOworICAgICAg
ICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJl
YW0uZ2V0KCksIC0xLCAwKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFVSSVNjaGVtZVRlc3Qo
KQorICAgIHsKKyAgICAgICAgd2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUo
d2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCksICJmb28iLCB1cmlTY2hlbWVSZXF1ZXN0
Q2FsbGJhY2ssIHRoaXMpOworICAgICAgICB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJp
X3NjaGVtZSh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1bHQoKSwgImVjaG8iLCB1cmlTY2hl
bWVSZXF1ZXN0Q2FsbGJhY2ssIHRoaXMpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291
cmNlR2V0RGF0YUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IGdwb2ludGVyIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgc2l6ZV90IGRhdGFTaXplOworICAg
ICAgICBHT3duUHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRhdGEg
PSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9kYXRhX2ZpbmlzaChXRUJLSVRfV0VCX1JFU09VUkNF
KG9iamVjdCksIHJlc3VsdCwgJmRhdGFTaXplLCAmZXJyb3Iub3V0UHRyKCkpOworICAgICAgICBn
X2Fzc2VydChkYXRhKTsKKworICAgICAgICBVUklTY2hlbWVUZXN0KiB0ZXN0ID0gc3RhdGljX2Nh
c3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAgdGVzdC0+bV9yZXNvdXJjZURh
dGEuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICAgICAgdGVzdC0+bV9y
ZXNvdXJjZURhdGFTaXplID0gZGF0YVNpemU7CisgICAgICAgIGdfbWFpbl9sb29wX3F1aXQodGVz
dC0+bV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjaGVja01haW5SZXNvdXJjZURhdGEo
KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICAgICAgV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNl
KG1fd2ViVmlldyk7CisgICAgICAgIGdfYXNzZXJ0KHJlc291cmNlKTsKKworICAgICAgICB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9kYXRhKHJlc291cmNlLCByZXNvdXJjZUdldERhdGFDYWxsYmFj
aywgdGhpcyk7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKworICAgICAg
ICBpZiAoIWdfc3RyY21wMCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUobV91
cmlTY2hlbWVSZXF1ZXN0LmdldCgpKSwgImZvbyIpKSB7CisgICAgICAgICAgICBnX2Fzc2VydF9j
bXBpbnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGtCYXJIdG1sKSk7CisgICAgICAg
ICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwga0Jhckh0bWwsIG1f
cmVzb3VyY2VEYXRhU2l6ZSkpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAod2Via2l0
X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfc2NoZW1lKG1fdXJpU2NoZW1lUmVxdWVzdC5nZXQoKSks
ICJlY2hvIikpIHsKKyAgICAgICAgICAgIEdPd25QdHI8Y2hhcj4gZWNob0h0bWwoZ19zdHJkdXBf
cHJpbnRmKGtFY2hvSHRtbEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0
aChtX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBp
bnQobV9yZXNvdXJjZURhdGFTaXplLCA9PSwgc3RybGVuKGVjaG9IdG1sLmdldCgpKSk7CisgICAg
ICAgICAgICBnX2Fzc2VydCghc3RybmNtcChtX3Jlc291cmNlRGF0YS5nZXQoKSwgZWNob0h0bWwu
Z2V0KCksIG1fcmVzb3VyY2VEYXRhU2l6ZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgR093
blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURhdGFTaXpl
OworICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gbV91cmlTY2hlbWVSZXF1ZXN0
OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5sb2FkVVJJKCJmb286Ymxhbmsi
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB0ZXN0LT5jaGVja01h
aW5SZXNvdXJjZURhdGEoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoImVjaG86aGVsbG8gd29ybGQi
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICB0ZXN0LT5jaGVja01h
aW5SZXNvdXJjZURhdGEoKTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewogICAgIFRlc3Q6OmFk
ZCgiV2ViS2l0V2ViQ29udGV4dCIsICJkZWZhdWx0LWNvbnRleHQiLCB0ZXN0V2ViQ29udGV4dERl
ZmF1bHQpOworICAgIFVSSVNjaGVtZVRlc3Q6OmFkZCgiV2ViS2l0V2ViQ29udGV4dCIsICJ1cmkt
c2NoZW1lIiwgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBjNTQ2MGYz
Li40NTc4ZWVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93
ZWJraXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5o
CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRTZXR0aW5ncy5oPgog
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIv
V2ViS2l0VVJJUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVNjaGVtZVJl
cXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KICNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdlYlJlc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRX
ZWJWaWV3Lmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145296</attachid>
            <date>2012-06-01 07:01:34 -0700</date>
            <delta_ts>2012-06-06 09:04:45 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk2-custom-uri-schemes.diff</filename>
            <type>text/plain</type>
            <size>44470</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwNTcwODEyLi5hMGQwNTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEg
QEAKKzIwMTItMDYtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCBBUEkgdG8gcmVnaXN0ZXIgY3VzdG9tIFVSSSBzY2hlbWVz
IHRvIFdlYktpdDIgR1RLKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBp
bGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5jcHA6
IEFkZGVkLgorICAgICAgICAoZGlkUmVjZWl2ZVVSSVJlcXVlc3QpOiBDYWxsYmFjayBlbWl0dGVk
IGJ5IHRoZSBDIEFQSSB3aGVuIGEKKyAgICAgICAgcmVxdWVzdCBmb3IgYSBjdXN0b20gVVJJIHNj
aGVtZSBoYXMgYmVlbiByZWNlaXZlZC4gQ2FsbAorICAgICAgICB3ZWJraXRXZWJDb250ZXh0UmVj
ZWl2ZWRVUklSZXF1ZXN0KCkgdG8gaGFuZGxlIHRoZSByZXF1ZXN0LgorICAgICAgICAoZGlkRmFp
bFRvTG9hZFVSSVJlcXVlc3QpOiBDYWxsYmFjayBlbWl0dGVkIGJ5IHRoZSBDIEFQSSB3aGVuIGEK
KyAgICAgICAgcmVxdWVzdCBmb3IgYSBjdXN0b20gVVJJIHNjaGVtZSBmYWlsZWQgdG8gbG9hZC4g
Q2FsbAorICAgICAgICB3ZWJraXRXZWJDb250ZXh0RGlkRmFpbFRvTG9hZFVSSVJlcXVlc3QoKSB0
byBub2l0ZnkgdGhlIHdlYgorICAgICAgICBjb250ZXh0LgorICAgICAgICAoYXR0YWNoUmVxdWVz
dE1hbmFnZXJDbGllbnRUb0NvbnRleHQpOiBJbml0aWFsaXplIHRoZQorICAgICAgICBXS1NvdXBS
ZXF1ZXN0TWFuYWdlckNsaWVudC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRS
ZXF1ZXN0TWFuYWdlckNsaWVudC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRfdXJp
X3NjaGVtZV9yZXF1ZXN0X2luaXQpOgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVxdWVzdEZp
bmFsaXplKToKKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRVUklTY2hlbWVSZXF1ZXN0Q3JlYXRlKTogQ3JlYXRlIGEgbmV3Cisg
ICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgZm9yIHRoZSBnaXZlbiBVUkkgYW5kIHJlcXVl
c3QgaWRlbnRpZmllci4KKyAgICAgICAgKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RHZXRJRCk6IFJl
dHVybiB0aGUgcmVxdWVzdCBpZGVudGlmaWVyLgorICAgICAgICAod2Via2l0VVJJU2NoZW1lUmVx
dWVzdENhbmNlbCk6IENhbmNlbCB0aGUgcmVxdWVzdCBvcGVyYXRpb24uCisgICAgICAgICh3ZWJr
aXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUpOiBSZXR1cm4gdGhlIHNjaGVtZSBvZiB0
aGUKKyAgICAgICAgcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3Rf
Z2V0X3VyaSk6IFJldHVybiB0aGUgZnVsbCBVUkkgb2YgdGhlCisgICAgICAgIHJlcXVlc3QuCisg
ICAgICAgICh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoKTogUmV0dXJuIHRoZSBw
YXRoIG9mIHRoZSBVUkkuCisgICAgICAgICh3ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENhbGxi
YWNrKTogUmVhZCBjYWxsYmFjayBlbWl0dGVkIHdoZW4KKyAgICAgICAgcmVhZGluZyB0aGUgY29u
dGVudHMgb2YgdGhlIGlucHV0IHN0cmVhbS4KKyAgICAgICAgKHdlYmtpdF91cmlfc2NoZW1lX3Jl
cXVlc3RfZmluaXNoKTogRmluaXNoIHRoZSByZXF1ZXN0IGJ5IHJlYWRpbmcKKyAgICAgICAgdGhl
IGNvbnRlbnRzIG9mIHRoZSBpbnB1dCBzdHJlYW0gYW5kIHNlbmRpbmcgdGhlIGRhdGEgdG8gdGhl
CisgICAgICAgIFdlYlByb2Nlc3MuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYktpdFVSSVNjaGVt
ZUhhbmRsZXI6OldlYktpdFVSSVNjaGVtZUhhbmRsZXIpOiBIZWxwZXIgc3RydWN0IHRvCisgICAg
ICAgIHNhdmUgY2FsbGJhY2sgYW5kIHVzZXIgZGF0YSBvZiByZWdpc3RlcmVkIFVSSSBzY2hlbWVz
LgorICAgICAgICAoY3JlYXRlRGVmYXVsdFdlYkNvbnRleHQpOiBJbml0aWFsaXplIHRoZSBTb3Vw
UmVxdWVzdE1hbmFnZXIuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJp
X3NjaGVtZSk6IFB1YmxpYyBBUEkgdG8gcmVnaXN0ZXIgYQorICAgICAgICBjdXN0b20gVVJJIHNj
aGVtZSBwcm92aWRpbmcgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvCisgICAgICAg
IGhhbmRsZSByZXF1ZXN0cyBmb3IgdGhhdCBVUkkgc2NoZW1lLgorICAgICAgICAod2Via2l0V2Vi
Q29udGV4dEdldFJlcXVlc3RNYW5hZ2VyKTogSGVscGVyIHByaXZhdGUgbWV0aG9kIHRvCisgICAg
ICAgIHJldHVybiB0aGUgU291cFJlcXVlc3RNYW5hZ2VyLgorICAgICAgICAod2Via2l0V2ViQ29u
dGV4dFJlY2VpdmVkVVJJUmVxdWVzdCk6IEdldCB0aGUKKyAgICAgICAgV2ViS2l0VVJJU2NoZW1l
SGFuZGxlciBmb3IgdGhlIGdpdmVuIHJlcXVlc3QgaWRlbnRpZmllciBhbmQgY2FsbAorICAgICAg
ICB0aGUgY2FsbGJhY2suIFNhdmUgdGhlIHJlcXVlc3QgaW4gdGhlIHJlcXVlc3QgbWFwLgorICAg
ICAgICAod2Via2l0V2ViQ29udGV4dERpZEZhaWxUb0xvYWRVUklSZXF1ZXN0KTogQ2FuY2VsIHRo
ZSBvbmdvaW5nCisgICAgICAgIHJlcXVlc3QuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0RGlk
RmluaXNoVVJJUmVxdWVzdCk6IFJlbW92ZSB0aGUgcmVxdWVzdCBmcm9tIHRoZQorICAgICAgICBt
YXAuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkCisg
ICAgICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qgc2VjdGlvbi4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0OiBBZGQgbmV3IHN5bWJvbHMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQK
KyAgICAgICAgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZS4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAg
ICh0ZXN0V2ViQ29udGV4dFVSSVNjaGVtZSk6CisgICAgICAgIChiZWZvcmVBbGwpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0LmguCisKIDIwMTItMDUtMzEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIEFkZCB3ZWJraXRfZG93bmxvYWRfZ2V0X3JlcXVl
c3QgdG8gV2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFr
ZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXgg
YjFlZWEyNC4uZjE4MjZjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUu
bGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0xMDgs
NiArMTA4LDcgQEAgd2Via2l0Mmd0a19oX2FwaSArPSBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTZXR0aW5ncy5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFVSSVJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRVUklSZXNwb25zZS5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVS
SVNjaGVtZVJlcXVlc3QuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJDb250ZXh0LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5z
cGVjdG9yLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3Vy
Y2UuaCBcCkBAIC02MTMsNiArNjE0LDggQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcmludE9wZXJhdGlvblByaXZhdGUuaCBc
CiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmNwcCBcCisJU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQu
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFu
YWdlckNsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRS
ZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5jcHAgXApAQCAtNjMyLDYgKzYz
NSw5IEBAIHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZS5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRVUklSZXNwb25zZVByaXZhdGUuaCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAgXAorCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3QuaCBcCisJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNw
cCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFBy
aXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cml2YXRlLmgKaW5kZXggYjdjNTM3MC4uNDc1YzU5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApAQCAtMjcsNiArMjcsNyBAQAogI2Rl
ZmluZSBXZWJLaXRQcml2YXRlX2gKIAogI2luY2x1ZGUgPFdlYktpdDIvV0tBUElDYXN0Lmg+Cisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHRTb3VwLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Rv
d25sb2FkLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZpbmRPcHRpb25zLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS0Z1bGxTY3JlZW5DbGllbnRHdGsuaD4KQEAgLTM0LDYgKzM1LDcgQEAKICNpbmNs
dWRlIDxXZWJLaXQyL1dLSW5zcGVjdG9yQ2xpZW50R3RrLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTZXJpYWxpemVkU2NyaXB0VmFsdWUu
aD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU291cFJlcXVlc3RNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1N0cmluZy5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0Mi5oPgogI2luY2x1
ZGUgPGdsaWIuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi44ZWEwOWYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVxdWVzdE1hbmFnZXJDbGllbnQuY3BwCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50Lmgi
CisKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oIgorI2luY2x1ZGUg
IldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
VVJJUmVxdWVzdChXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBzb3VwUmVxdWVzdE1hbmFnZXJSZWYs
IFdLVVJMUmVmIHVybFJlZiwgdWludDY0X3QgcmVxdWVzdElELCBjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJLSVRfV0VCX0NP
TlRFWFQoY2xpZW50SW5mbyk7CisgICAgR1JlZlB0cjxXZWJLaXRVUklTY2hlbWVSZXF1ZXN0PiBy
ZXF1ZXN0ID0gYWRvcHRHUmVmKHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RDcmVhdGUod2ViQ29udGV4
dCwgc291cFJlcXVlc3RNYW5hZ2VyUmVmLCB1cmxSZWYsIHJlcXVlc3RJRCkpOworICAgIHdlYmtp
dFdlYkNvbnRleHRSZWNlaXZlZFVSSVJlcXVlc3Qod2ViQ29udGV4dCwgcmVxdWVzdC5nZXQoKSk7
Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxUb0xvYWRVUklSZXF1ZXN0KFdLU291cFJlcXVlc3RN
YW5hZ2VyUmVmLCB1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7
CisgICAgd2Via2l0V2ViQ29udGV4dERpZEZhaWxUb0xvYWRVUklSZXF1ZXN0KFdFQktJVF9XRUJf
Q09OVEVYVChjbGllbnRJbmZvKSwgcmVxdWVzdElEKTsKK30KKwordm9pZCBhdHRhY2hSZXF1ZXN0
TWFuYWdlckNsaWVudFRvQ29udGV4dChXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQorewor
ICAgIFdLU291cFJlcXVlc3RNYW5hZ2VyQ2xpZW50IHdrUmVxdWVzdE1hbmFnZXJDbGllbnQgPSB7
CisgICAgICAgIGtXS1NvdXBSZXF1ZXN0TWFuYWdlckNsaWVudEN1cnJlbnRWZXJzaW9uLAorICAg
ICAgICB3ZWJDb250ZXh0LCAvLyBjbGllbnRJbmZvCisgICAgICAgIGRpZFJlY2VpdmVVUklSZXF1
ZXN0LAorICAgICAgICBkaWRGYWlsVG9Mb2FkVVJJUmVxdWVzdAorICAgIH07CisgICAgV0tTb3Vw
UmVxdWVzdE1hbmFnZXJTZXRDbGllbnQod2Via2l0V2ViQ29udGV4dEdldFJlcXVlc3RNYW5hZ2Vy
KHdlYkNvbnRleHQpLCAmd2tSZXF1ZXN0TWFuYWdlckNsaWVudCk7Cit9CisKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlcXVlc3RNYW5hZ2VyQ2xp
ZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXF1ZXN0TWFu
YWdlckNsaWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzNjU1OTQK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVu
dF9oCisjZGVmaW5lIFdlYktpdFJlcXVlc3RNYW5hZ2VyQ2xpZW50X2gKKworI2luY2x1ZGUgIldl
YktpdFdlYkNvbnRleHQuaCIKKwordm9pZCBhdHRhY2hSZXF1ZXN0TWFuYWdlckNsaWVudFRvQ29u
dGV4dChXZWJLaXRXZWJDb250ZXh0Kik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJjMWZhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdC5jcHAKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJl
cXVlc3QuaCIKKworI2luY2x1ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0dP
d25QdHJTb3VwLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CisjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBnUmVhZEJ1ZmZl
clNpemUgPSA4MTkyOworCitHX0RFRklORV9UWVBFKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QsIHdl
YmtpdF91cmlfc2NoZW1lX3JlcXVlc3QsIEdfVFlQRV9PQkpFQ1QpCisKK3N0cnVjdCBfV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUgeworICAgIFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRl
eHQ7CisgICAgV0tSZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHdrUmVxdWVzdE1h
bmFnZXI7CisgICAgdWludDY0X3QgcmVxdWVzdElEOworICAgIENTdHJpbmcgdXJpOworICAgIEdP
d25QdHI8U291cFVSST4gc291cFVSSTsKKworICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBzdHJl
YW07CisgICAgdWludDY0X3Qgc3RyZWFtTGVuZ3RoOworICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxl
PiBjYW5jZWxsYWJsZTsKKyAgICBjaGFyIHJlYWRCdWZmZXJbZ1JlYWRCdWZmZXJTaXplXTsKKyAg
ICB1aW50NjRfdCBieXRlc1JlYWQ7CisgICAgQ1N0cmluZyBtaW1lVHlwZTsKK307CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfaW5pdChXZWJLaXRVUklTY2hlbWVSZXF1
ZXN0KiByZXF1ZXN0KQoreworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlKiBwcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHJlcXVlc3QsIFdFQktJVF9UWVBFX1VSSV9T
Q0hFTUVfUkVRVUVTVCwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUpOworICAgIHJlcXVl
c3QtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJpdikgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdFBy
aXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0VVJJU2NoZW1lUmVxdWVzdEZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKG9iamVj
dCktPnByaXYtPn5XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZSgpOworICAgIEdfT0JKRUNU
X0NMQVNTKHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUo
b2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9jbGFz
c19pbml0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcyogcmVxdWVzdENsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhyZXF1ZXN0Q2xhc3Mp
OworICAgIG9iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFVSSVNjaGVtZVJlcXVlc3RGaW5h
bGl6ZTsKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUocmVxdWVzdENsYXNzLCBzaXplb2Yo
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdFByaXZhdGUpKTsKK30KKworV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdCogd2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0ZShXZWJLaXRXZWJDb250ZXh0KiB3ZWJD
b250ZXh0LCBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiB3a1JlcXVlc3RNYW5hZ2VyLCBXS1VSTFJl
ZiB3a1VSTCwgdWludDY0X3QgcmVxdWVzdElEKQoreworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVl
c3QqIHJlcXVlc3QgPSBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIE5VTEwpKTsKKyAgICByZXF1ZXN0LT5wcml2LT53
ZWJDb250ZXh0ID0gd2ViQ29udGV4dDsKKyAgICByZXF1ZXN0LT5wcml2LT53a1JlcXVlc3RNYW5h
Z2VyID0gd2tSZXF1ZXN0TWFuYWdlcjsKKyAgICByZXF1ZXN0LT5wcml2LT51cmkgPSB0b0ltcGwo
d2tVUkwpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgcmVxdWVzdC0+cHJpdi0+cmVxdWVzdElEID0g
cmVxdWVzdElEOworICAgIHJldHVybiByZXF1ZXN0OworfQorCit1aW50NjRfdCB3ZWJraXRVUklT
Y2hlbWVSZXF1ZXN0R2V0SUQoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICByZXR1cm4gcmVxdWVzdC0+cHJpdi0+cmVxdWVzdElEOworfQorCit2b2lkIHdlYmtpdFVSSVNj
aGVtZVJlcXVlc3RDYW5jZWwoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAg
ICBpZiAocmVxdWVzdC0+cHJpdi0+Y2FuY2VsbGFibGUuZ2V0KCkpCisgICAgICAgIGdfY2FuY2Vs
bGFibGVfY2FuY2VsKHJlcXVlc3QtPnByaXYtPmNhbmNlbGxhYmxlLmdldCgpKTsKK30KKworLyoq
CisgKiB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWU6CisgKiBAcmVxdWVzdDog
YSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHNjaGVtZSBvZiBA
cmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRoZSBVUkkgc2NoZW1lIG9mIEByZXF1ZXN0CisgKi8K
K2NvbnN0IGNoYXIqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3NjaGVtZShXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFyZXF1
ZXN0LT5wcml2LT5zb3VwVVJJKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNldChz
b3VwX3VyaV9uZXcocmVxdWVzdC0+cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiByZXF1
ZXN0LT5wcml2LT5zb3VwVVJJLT5zY2hlbWU7Cit9CisKKy8qKgorICogd2Via2l0X3VyaV9zY2hl
bWVfcmVxdWVzdF9nZXRfdXJpOgorICogQHJlcXVlc3Q6IGEgI1dlYktpdFVSSVNjaGVtZVJlcXVl
c3QKKyAqCisgKiBHZXQgdGhlIFVSSSBvZiBAcmVxdWVzdAorICoKKyAqIFJldHVybnM6IHRoZSBm
dWxsIFVSSSBvZiBAcmVxdWVzdAorICovCitjb25zdCBjaGFyKiB3ZWJraXRfdXJpX3NjaGVtZV9y
ZXF1ZXN0X2dldF91cmkoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVVJJX1NDSEVNRV9SRVFVRVNUKHJlcXVlc3Qp
LCAwKTsKKworICAgIHJldHVybiByZXF1ZXN0LT5wcml2LT51cmkuZGF0YSgpOworfQorCisvKioK
KyAqIHdlYmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3BhdGg6CisgKiBAcmVxdWVzdDogYSAj
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdAorICoKKyAqIEdldCB0aGUgVVJJIHBhdGggb2YgQHJlcXVl
c3QKKyAqCisgKiBSZXR1cm5zOiB0aGUgVVJJIHBhdGggb2YgQHJlcXVlc3QKKyAqLworY29uc3Qg
Y2hhciogd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aChXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0KiByZXF1ZXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19V
UklfU0NIRU1FX1JFUVVFU1QocmVxdWVzdCksIDApOworCisgICAgaWYgKCFyZXF1ZXN0LT5wcml2
LT5zb3VwVVJJKQorICAgICAgICByZXF1ZXN0LT5wcml2LT5zb3VwVVJJLnNldChzb3VwX3VyaV9u
ZXcocmVxdWVzdC0+cHJpdi0+dXJpLmRhdGEoKSkpOworICAgIHJldHVybiByZXF1ZXN0LT5wcml2
LT5zb3VwVVJJLT5wYXRoOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRVUklTY2hlbWVSZXF1ZXN0
UmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJlYW0sIEdBc3luY1Jlc3VsdCogcmVz
dWx0LCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiBzY2hlbWVSZXF1ZXN0KQoreworICAgIEdSZWZQ
dHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZihzY2hlbWVSZXF1
ZXN0KTsKKyAgICBnc3NpemUgYnl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2go
aW5wdXRTdHJlYW0sIHJlc3VsdCwgMCk7CisgICAgLy8gRklYTUU6IG5vdGlmeSB0aGUgV2ViUHJv
Y2VzcyB0aGF0IHdlIGZhaWxlZCB0byByZWFkIGZyb20gdGhlIHVzZXIgc3RyZWFtLgorICAgIGlm
IChieXRlc1JlYWQgPT0gLTEpIHsKKyAgICAgICAgd2Via2l0V2ViQ29udGV4dERpZEZpbmlzaFVS
SVJlcXVlc3QocmVxdWVzdC0+cHJpdi0+d2ViQ29udGV4dCwgcmVxdWVzdC0+cHJpdi0+cmVxdWVz
dElEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYktpdFVSSVNjaGVtZVJlcXVl
c3RQcml2YXRlKiBwcml2ID0gcmVxdWVzdC0+cHJpdjsKKyAgICBXS1JldGFpblB0cjxXS0RhdGFS
ZWY+IHdrRGF0YShBZG9wdFdLLCBXS0RhdGFDcmVhdGUoYnl0ZXNSZWFkID8gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4ocHJpdi0+cmVhZEJ1ZmZlcikgOiAwLCBieXRlc1Jl
YWQpKTsKKyAgICBpZiAoIXByaXYtPmJ5dGVzUmVhZCkgeworICAgICAgICAvLyBGaXJzdCBjaHVu
ayByZWFkLiBJbiBjYXNlIG9mIGVtcHR5IHJlcGx5IGFuIGVtcHR5IFdLRGF0YVJlZiBpcyBzZW50
IHRvIHRoZSBXZWJQcm9jZXNzLgorICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tN
aW1lVHlwZSA9ICFwcml2LT5taW1lVHlwZS5pc051bGwoKSA/IGFkb3B0V0soV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcocHJpdi0+bWltZVR5cGUuZGF0YSgpKSkgOiAwOworICAgICAgICBX
S1NvdXBSZXF1ZXN0TWFuYWdlckRpZEhhbmRsZVVSSVJlcXVlc3QocHJpdi0+d2tSZXF1ZXN0TWFu
YWdlci5nZXQoKSwgd2tEYXRhLmdldCgpLCBwcml2LT5zdHJlYW1MZW5ndGgsIHdrTWltZVR5cGUu
Z2V0KCksIHByaXYtPnJlcXVlc3RJRCk7CisgICAgfSBlbHNlIGlmIChieXRlc1JlYWQgfHwgKCFi
eXRlc1JlYWQgJiYgIXByaXYtPnN0cmVhbUxlbmd0aCkpIHsKKyAgICAgICAgLy8gU3Vic2VxdWVu
dCBjaHVuayByZWFkLiBXZSBvbmx5IHNlbmQgYW4gZW1wdHkgV0tEYXRhUmVmIHRvIHRoZSBXZWJQ
cm9jZXNzIHdoZW4gc3RyZWFtIGxlbmd0aCBpcyB1bmtub3duLgorICAgICAgICBXS1NvdXBSZXF1
ZXN0TWFuYWdlckRpZFJlY2VpdmVVUklSZXF1ZXN0RGF0YShwcml2LT53a1JlcXVlc3RNYW5hZ2Vy
LmdldCgpLCB3a0RhdGEuZ2V0KCksIHByaXYtPnJlcXVlc3RJRCk7CisgICAgfQorCisgICAgaWYg
KCFieXRlc1JlYWQpIHsKKyAgICAgICAgd2Via2l0V2ViQ29udGV4dERpZEZpbmlzaFVSSVJlcXVl
c3QocmVxdWVzdC0+cHJpdi0+d2ViQ29udGV4dCwgcmVxdWVzdC0+cHJpdi0+cmVxdWVzdElEKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByaXYtPmJ5dGVzUmVhZCArPSBieXRlc1Jl
YWQ7CisgICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpbnB1dFN0cmVhbSwgcHJpdi0+cmVh
ZEJ1ZmZlciwgZ1JlYWRCdWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIHByaXYtPmNhbmNl
bGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJraXRVUklTY2hlbWVSZXF1ZXN0UmVhZENhbGxi
YWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QuZ2V0KCkpKTsKK30KKworLyoqCisgKiB3ZWJraXRf
dXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaDoKKyAqIEByZXF1ZXN0OiBhICNXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0CisgKiBAc3RyZWFtOiBhICNHSW5wdXRTdHJlYW0gdG8gcmVhZCB0aGUgY29udGVu
dHMgb2YgdGhlIHJlcXVlc3QKKyAqIEBzdHJlYW1fbGVuZ3RoOiB0aGUgbGVuZ3RoIG9mIHRoZSBz
dHJlYW0gb3IgLTEgaWYgbm90IGtub3duCisgKiBAbWltZV90eXBlOiAoYWxsb3ctbm9uZSk6IHRo
ZSBjb250ZW50IHR5cGUgb2YgdGhlIHN0cmVhbSBvciAlTlVMTCBpZiBub3Qga25vd24KKyAqCisg
KiBGaW5pc2ggYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCBieSBzZXR0aW5nIHRoZSBjb250ZW50
cyBvZiB0aGUgcmVxdWVzdCBhbmQgaXRzIG1pbWUgdHlwZS4KKyAqLwordm9pZCB3ZWJraXRfdXJp
X3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiByZXF1ZXN0LCBH
SW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCBnaW50NjQgc3RyZWFtTGVuZ3RoLCBjb25zdCBnY2hh
ciogbWltZVR5cGUpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfVVJJX1NDSEVN
RV9SRVFVRVNUKHJlcXVlc3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKEdfSVNfSU5QVVRfU1RS
RUFNKGlucHV0U3RyZWFtKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzdHJlYW1MZW5ndGggPT0g
LTEgfHwgc3RyZWFtTGVuZ3RoID49IDApOworCisgICAgcmVxdWVzdC0+cHJpdi0+c3RyZWFtID0g
aW5wdXRTdHJlYW07CisgICAgLy8gV2UgdXNlIC0xIGluIHRoZSBBUEkgZm9yIGNvbnNpc3RlbmN5
IHdpdGggc291cCB3aGVuIHRoZSBjb250ZW50IGxlbmd0aCBpcyBub3Qga25vd24sIGJ1dCAwIGlu
dGVybmFsbHkuCisgICAgcmVxdWVzdC0+cHJpdi0+c3RyZWFtTGVuZ3RoID0gc3RyZWFtTGVuZ3Ro
ID09IC0xID8gMCA6IHN0cmVhbUxlbmd0aDsKKyAgICByZXF1ZXN0LT5wcml2LT5jYW5jZWxsYWJs
ZSA9IGFkb3B0R1JlZihnX2NhbmNlbGxhYmxlX25ldygpKTsKKyAgICByZXF1ZXN0LT5wcml2LT5i
eXRlc1JlYWQgPSAwOworICAgIHJlcXVlc3QtPnByaXYtPm1pbWVUeXBlID0gbWltZVR5cGU7Cisg
ICAgZ19pbnB1dF9zdHJlYW1fcmVhZF9hc3luYyhpbnB1dFN0cmVhbSwgcmVxdWVzdC0+cHJpdi0+
cmVhZEJ1ZmZlciwgZ1JlYWRCdWZmZXJTaXplLCBHX1BSSU9SSVRZX0RFRkFVTFQsIHJlcXVlc3Qt
PnByaXYtPmNhbmNlbGxhYmxlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxHQXN5bmNSZWFkeUNhbGxiYWNrPih3ZWJraXRVUklTY2hlbWVSZXF1
ZXN0UmVhZENhbGxiYWNrKSwgZ19vYmplY3RfcmVmKHJlcXVlc3QpKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3Qu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVl
c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGYyMTQ0Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJU2No
ZW1lUmVxdWVzdC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFVSSVNj
aGVtZVJlcXVlc3RfaAorI2RlZmluZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0X2gKKworI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1Qg
ICAgICAgICAgICAod2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfVVJJX1NDSEVNRV9SRVFVRVNUKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1VSSV9TQ0hFTUVfUkVRVUVTVCwgV2Vi
S2l0VVJJU2NoZW1lUmVxdWVzdCkpCisjZGVmaW5lIFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVF
U1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lU
X1RZUEVfVVJJX1NDSEVNRV9SRVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVR
VUVTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9VUklfU0NIRU1FX1JFUVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19VUklfU0NIRU1FX1JFUVVFU1RfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVVJJX1NDSEVNRV9S
RVFVRVNUKSkKKyNkZWZpbmUgV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9HRVRfQ0xBU1Mob2Jq
KSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9VUklfU0NI
RU1FX1JFUVVFU1QsIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICAgICAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0
OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFVSSVNjaGVtZVJlcXVlc3RDbGFzcyAgIFdlYktpdFVS
SVNjaGVtZVJlcXVlc3RDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRVUklTY2hlbWVSZXF1
ZXN0UHJpdmF0ZSBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJL
aXRVUklTY2hlbWVSZXF1ZXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFVS
SVNjaGVtZVJlcXVlc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7Cit9OworCitX
RUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF91cmlfc2NoZW1lX3JlcXVl
c3RfZ2V0X3NjaGVtZSAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCk7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfdXJpICAg
IChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0KTsKKworV0VCS0lUX0FQSSBjb25zdCBn
Y2hhciAqCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRoICAgKFdlYktpdFVSSVNj
aGVtZVJlcXVlc3QgKnJlcXVlc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF91cmlfc2No
ZW1lX3JlcXVlc3RfZmluaXNoICAgICAoV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0lucHV0U3RyZWFtICAgICAg
ICAgICAqc3RyZWFtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50
NjQgICAgICAgICAgICAgICAgICBzdHJlYW1fbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICptaW1lX3R5cGUpOworCitH
X0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OTgxM2QKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0
UHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0UHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlX2gKKworI2luY2x1ZGUgIldlYktpdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0V2ViQ29udGV4dC5oIgorI2luY2x1ZGUgPFdlYktpdDIvV0tTb3VwUmVxdWVzdE1hbmFnZXIu
aD4KKworV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCogd2Via2l0VVJJU2NoZW1lUmVxdWVzdENyZWF0
ZShXZWJLaXRXZWJDb250ZXh0KiwgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWYsIFdLVVJMUmVmLCB1
aW50NjRfdCByZXF1ZXN0SUQpOwordWludDY0X3Qgd2Via2l0VVJJU2NoZW1lUmVxdWVzdEdldElE
KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqKTsKK3ZvaWQgd2Via2l0VVJJU2NoZW1lUmVxdWVzdENh
bmNlbChXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Kik7CisKKyNlbmRpZiAvLyBXZWJLaXRVUklTY2hl
bWVSZXF1ZXN0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDY4MWMwZDEuLmNlYjg4YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuY3BwCkBAIC0yNiw2ICsyNiw4IEBACiAjaW5jbHVkZSAiV2ViS2l0RG93bmxvYWRQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0UGx1Z2luUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRSZXF1ZXN0TWFuYWdlckNsaWVudC5oIgorI2luY2x1
ZGUgIldlYktpdFVSSVNjaGVtZVJlcXVlc3RQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNDAsMTAgKzQyLDMyIEBAIGVudW0gewogICAgIExBU1Rf
U0lHTkFMCiB9OwogCitzdHJ1Y3QgV2ViS2l0VVJJU2NoZW1lSGFuZGxlciB7CisgICAgV2ViS2l0
VVJJU2NoZW1lSGFuZGxlcigpCisgICAgICAgIDogY2FsbGJhY2soMCkKKyAgICAgICAgLCB1c2Vy
RGF0YSgwKQorICAgIHsKKyAgICB9CisgICAgV2ViS2l0VVJJU2NoZW1lSGFuZGxlcihXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQorICAgICAg
ICA6IGNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIHVzZXJEYXRhKHVzZXJEYXRhKQorICAg
IHsKKyAgICB9CisKKyAgICBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgY2FsbGJhY2s7
CisgICAgdm9pZCogdXNlckRhdGE7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBXZWJL
aXRVUklTY2hlbWVIYW5kbGVyPiBVUklTY2hlbWVIYW5kbGVyTWFwOwordHlwZWRlZiBIYXNoTWFw
PHVpbnQ2NF90LCBHUmVmUHRyPFdlYktpdFVSSVNjaGVtZVJlcXVlc3Q+ID4gVVJJU2NoZW1lUmVx
dWVzdE1hcDsKKwogc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSB7CiAgICAgV0tSZXRh
aW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0OwogCiAgICAgR1JlZlB0cjxXZWJLaXRDb29raWVN
YW5hZ2VyPiBjb29raWVNYW5hZ2VyOworICAgIFdLUmV0YWluUHRyPFdLU291cFJlcXVlc3RNYW5h
Z2VyUmVmPiByZXF1ZXN0TWFuYWdlcjsKKyAgICBVUklTY2hlbWVIYW5kbGVyTWFwIHVyaVNjaGVt
ZUhhbmRsZXJzOworICAgIFVSSVNjaGVtZVJlcXVlc3RNYXAgdXJpU2NoZW1lUmVxdWVzdHM7CiB9
OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC05MSw4
ICsxMTUsMTAgQEAgc3RhdGljIGdwb2ludGVyIGNyZWF0ZURlZmF1bHRXZWJDb250ZXh0KGdwb2lu
dGVyKQogewogICAgIHN0YXRpYyBHUmVmUHRyPFdlYktpdFdlYkNvbnRleHQ+IHdlYkNvbnRleHQg
PSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9DT05URVhUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfQ09OVEVYVCwgTlVMTCkpKTsKICAgICB3ZWJDb250ZXh0LT5wcml2LT5jb250ZXh0ID0gV0tD
b250ZXh0R2V0U2hhcmVkUHJvY2Vzc0NvbnRleHQoKTsKKyAgICB3ZWJDb250ZXh0LT5wcml2LT5y
ZXF1ZXN0TWFuYWdlciA9IFdLQ29udGV4dEdldFNvdXBSZXF1ZXN0TWFuYWdlcih3ZWJDb250ZXh0
LT5wcml2LT5jb250ZXh0LmdldCgpKTsKICAgICBXS0NvbnRleHRTZXRDYWNoZU1vZGVsKHdlYkNv
bnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksIGtXS0NhY2hlTW9kZWxQcmltYXJ5V2ViQnJvd3Nl
cik7CiAgICAgYXR0YWNoRG93bmxvYWRDbGllbnRUb0NvbnRleHQod2ViQ29udGV4dC5nZXQoKSk7
CisgICAgYXR0YWNoUmVxdWVzdE1hbmFnZXJDbGllbnRUb0NvbnRleHQod2ViQ29udGV4dC5nZXQo
KSk7CiAgICAgcmV0dXJuIHdlYkNvbnRleHQuZ2V0KCk7CiB9CiAKQEAgLTMxNyw2ICszNDMsNTkg
QEAgR0xpc3QqIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19maW5pc2goV2ViS2l0V2Vi
Q29udGV4dCogY29udGV4dCwgR0FzeW5jUmUKICAgICByZXR1cm4gcGx1Z2luczsKIH0KIAorLyoq
CisgKiB3ZWJraXRfd2ViX2NvbnRleHRfcmVnaXN0ZXJfdXJpX3NjaGVtZToKKyAqIEBjb250ZXh0
OiBhICNXZWJLaXRXZWJDb250ZXh0CisgKiBAc2NoZW1lOiB0aGUgbmV0d29yayBzY2hlbWUgdG8g
cmVnaXN0ZXIKKyAqIEBjYWxsYmFjazogYSAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNr
CisgKiBAdXNlcl9kYXRhOiBkYXRhIHRvIHBhc3MgdG8gY2FsbGJhY2sgZnVuY3Rpb24KKyAqCisg
KiBSZWdpc3RlciBAc2NoZW1lIGluIEBjb250ZXh0LCBzbyB0aGF0IHdoZW4gYW4gVVJJIHJlcXVl
c3Qgd2l0aCBAc2NoZW1lIGlzIG1hZGUgaW4gdGhlCisgKiAjV2ViS2l0V2ViQ29udGV4dCwgdGhl
ICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2sgcmVnaXN0ZXJlZCB3aWxsIGJlIGNhbGxl
ZCB3aXRoIGEKKyAqICNXZWJLaXRVUklTY2hlbWVSZXF1ZXN0LgorICogSXQgaXMgcG9zc2libGUg
dG8gaGFuZGxlIFVSSSBzY2hlbWUgcmVxdWVzdHMgYXN5bmNocm9ub3VzbHksIGJ5IGNhbGxpbmcg
Z19vYmplY3RfcmVmKCkgb24gdGhlCisgKiAjV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCBhbmQgY2Fs
bGluZyB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2ZpbmlzaCgpIGxhdGVyIHdoZW4gdGhlIGRh
dGEgb2YKKyAqIHRoZSByZXF1ZXN0IGlzIGF2YWlsYWJsZS4KKyAqCisgKiA8aW5mb3JtYWxleGFt
cGxlPjxwcm9ncmFtbGlzdGluZz4KKyAqIHN0YXRpYyB2b2lkCisgKiBhYm91dF91cmlfc2NoZW1l
X3JlcXVlc3RfY2IgKFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJlcXVlc3QsCisgKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgIHVzZXJfZGF0YSkK
KyAqIHsKKyAqICAgICBHSW5wdXRTdHJlYW0gKnN0cmVhbTsKKyAqICAgICBnc2l6ZSAgICAgICAg
IHN0cmVhbV9sZW5ndGg7CisgKiAgICAgY29uc3QgZ2NoYXIgICpwYXRoOworICoKKyAqICAgICBw
YXRoID0gd2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9nZXRfcGF0aCAocmVxdWVzdCk7CisgKiAg
ICAgaWYgKCFnX3N0cmNtcDAgKHBhdGgsICJwbHVnaW5zIikpIHsKKyAqICAgICAgICAgLzwhLS0g
LS0+KiBDcmVhdGUgYSBHSW5wdXRTdHJlYW0gd2l0aCB0aGUgY29udGVudHMgb2YgcGx1Z2lucyBh
Ym91dCBwYWdlLCBhbmQgc2V0IGl0cyBsZW5ndGggdG8gc3RyZWFtX2xlbmd0aCAqPCEtLSAtLT4v
CisgKiAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwIChwYXRoLCAibWVtb3J5IikpIHsKKyAqICAg
ICAgICAgLzwhLS0gLS0+KiBDcmVhdGUgYSBHSW5wdXRTdHJlYW0gd2l0aCB0aGUgY29udGVudHMg
b2YgbWVtb3J5IGFib3V0IHBhZ2UsIGFuZCBzZXQgaXRzIGxlbmd0aCB0byBzdHJlYW1fbGVuZ3Ro
ICo8IS0tIC0tPi8KKyAqICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAgKHBhdGgsICJhcHBsaWNh
dGlvbnMiKSkgeworICogICAgICAgICAvPCEtLSAtLT4qIENyZWF0ZSBhIEdJbnB1dFN0cmVhbSB3
aXRoIHRoZSBjb250ZW50cyBvZiBhcHBsaWNhdGlvbnMgYWJvdXQgcGFnZSwgYW5kIHNldCBpdHMg
bGVuZ3RoIHRvIHN0cmVhbV9sZW5ndGggKjwhLS0gLS0+LworICogICAgIH0gZWxzZSB7CisgKiAg
ICAgICAgIGdjaGFyICpjb250ZW50czsKKyAqCisgKiAgICAgICAgIGNvbnRlbnRzID0gZ19zdHJk
dXBfcHJpbnRmICgiJmx0O2h0bWwmZ3Q7Jmx0O2JvZHkmZ3Q7Jmx0O3AmZ3Q7SW52YWxpZCBhYm91
dDolcyBwYWdlJmx0Oy9wJmd0OyZsdDsvYm9keSZndDsmbHQ7L2h0bWwmZ3Q7IiwgcGF0aCk7Cisg
KiAgICAgICAgIHN0cmVhbV9sZW5ndGggPSBzdHJsZW4gKGNvbnRlbnRzKTsKKyAqICAgICAgICAg
c3RyZWFtID0gZ19tZW1vcnlfaW5wdXRfc3RyZWFtX25ld19mcm9tX2RhdGEgKGNvbnRlbnRzLCBz
dHJlYW1fbGVuZ3RoLCBnX2ZyZWUpOworICogICAgIH0KKyAqICAgICB3ZWJraXRfdXJpX3NjaGVt
ZV9yZXF1ZXN0X2ZpbmlzaCAocmVxdWVzdCwgc3RyZWFtLCBzdHJlYW1fbGVuZ3RoLCAidGV4dC9o
dG1sIik7CisgKiAgICAgZ19vYmplY3RfdW5yZWYgKHN0cmVhbSk7CisgKiB9CisgKiA8L3Byb2dy
YW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICovCit2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9yZWdpc3Rlcl91cmlfc2NoZW1lKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNo
YXIqIHNjaGVtZSwgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLCBncG9p
bnRlciB1c2VyRGF0YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09O
VEVYVChjb250ZXh0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChzY2hlbWUpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoY2FsbGJhY2spOworCisgICAgY29udGV4dC0+cHJpdi0+dXJpU2NoZW1lSGFu
ZGxlcnMuc2V0KFN0cmluZzo6ZnJvbVVURjgoc2NoZW1lKSwgV2ViS2l0VVJJU2NoZW1lSGFuZGxl
cihjYWxsYmFjaywgdXNlckRhdGEpKTsKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tT
Y2hlbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoc2NoZW1lKSk7Cisg
ICAgV0tTb3VwUmVxdWVzdE1hbmFnZXJSZWdpc3RlclVSSVNjaGVtZShjb250ZXh0LT5wcml2LT5y
ZXF1ZXN0TWFuYWdlci5nZXQoKSwgd2tTY2hlbWUuZ2V0KCkpOworfQorCiBXZWJLaXREb3dubG9h
ZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxvYWQoV0tEb3dubG9hZFJlZiB3a0Rv
d25sb2FkKQogewogICAgIEdSZWZQdHI8V2ViS2l0RG93bmxvYWQ+IGRvd25sb2FkID0gZG93bmxv
YWRzTWFwKCkuZ2V0KHdrRG93bmxvYWQpOwpAQCAtMzQ1LDMgKzQyNCwzMCBAQCBXS0NvbnRleHRS
ZWYgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0
KQogICAgIHJldHVybiBjb250ZXh0LT5wcml2LT5jb250ZXh0LmdldCgpOwogfQogCitXS1NvdXBS
ZXF1ZXN0TWFuYWdlclJlZiB3ZWJraXRXZWJDb250ZXh0R2V0UmVxdWVzdE1hbmFnZXIoV2ViS2l0
V2ViQ29udGV4dCogY29udGV4dCkKK3sKKyAgICByZXR1cm4gY29udGV4dC0+cHJpdi0+cmVxdWVz
dE1hbmFnZXIuZ2V0KCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViQ29udGV4dFJlY2VpdmVkVVJJUmVx
dWVzdChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBXZWJLaXRVUklTY2hlbWVSZXF1ZXN0KiBy
ZXF1ZXN0KQoreworICAgIFdlYktpdFVSSVNjaGVtZUhhbmRsZXIgaGFuZGxlciA9IGNvbnRleHQt
PnByaXYtPnVyaVNjaGVtZUhhbmRsZXJzLmdldCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dl
dF9zY2hlbWUocmVxdWVzdCkpOworICAgIGlmICghaGFuZGxlci5jYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuOworCisgICAgY29udGV4dC0+cHJpdi0+dXJpU2NoZW1lUmVxdWVzdHMuc2V0KHdlYmtp
dFVSSVNjaGVtZVJlcXVlc3RHZXRJRChyZXF1ZXN0KSwgcmVxdWVzdCk7CisgICAgaGFuZGxlci5j
YWxsYmFjayhyZXF1ZXN0LCBoYW5kbGVyLnVzZXJEYXRhKTsKK30KKwordm9pZCB3ZWJraXRXZWJD
b250ZXh0RGlkRmFpbFRvTG9hZFVSSVJlcXVlc3QoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwg
dWludDY0X3QgcmVxdWVzdElEKQoreworICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVz
dD4gcmVxdWVzdCA9IGNvbnRleHQtPnByaXYtPnVyaVNjaGVtZVJlcXVlc3RzLmdldChyZXF1ZXN0
SUQpOworICAgIGlmICghcmVxdWVzdC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYmtp
dFVSSVNjaGVtZVJlcXVlc3RDYW5jZWwocmVxdWVzdC5nZXQoKSk7Cit9CisKK3ZvaWQgd2Via2l0
V2ViQ29udGV4dERpZEZpbmlzaFVSSVJlcXVlc3QoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwg
dWludDY0X3QgcmVxdWVzdElEKQoreworICAgIGNvbnRleHQtPnByaXYtPnVyaVNjaGVtZVJlcXVl
c3RzLnJlbW92ZShyZXF1ZXN0SUQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5oCmluZGV4IDAyZWY3M2QuLjEzMjUwMTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250
ZXh0LmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdENvb2tpZU1h
bmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERvd25sb2FkLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklTY2hl
bWVSZXF1ZXN0Lmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNTgsNiArNTksMTcgQEAgdHlwZWRl
ZiBlbnVtIHsKICAgICBXRUJLSVRfQ0FDSEVfTU9ERUxfRE9DVU1FTlRfQlJPV1NFUgogfSBXZWJL
aXRDYWNoZU1vZGVsOwogCisvKioKKyAqIFdlYktpdFVSSVNjaGVtZVJlcXVlc3RDYWxsYmFjazoK
KyAqIEByZXF1ZXN0OiB0aGUgI1dlYktpdFVSSVNjaGVtZVJlcXVlc3QKKyAqIEB1c2VyX2RhdGE6
IHVzZXIgZGF0YSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCisgKgorICogVHlwZSBkZWZpbml0aW9u
IGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIGFuIFVSSSByZXF1
ZXN0IGlzCisgKiBtYWRlIGZvciBhIHVzZXIgcmVnaXN0ZXJlZCBVUkkgc2NoZW1lLgorICovCit0
eXBlZGVmIHZvaWQgKCogV2ViS2l0VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrKSAoV2ViS2l0VVJJ
U2NoZW1lUmVxdWVzdCAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworCiB0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dCAgICAgICAgV2ViS2l0V2ViQ29udGV4dDsK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJDb250ZXh0Q2xhc3MgICBXZWJLaXRXZWJDb250ZXh0
Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgV2ViS2l0V2Vi
Q29udGV4dFByaXZhdGU7CkBAIC04NiwzMyArOTgsMzcgQEAgV0VCS0lUX0FQSSBXZWJLaXRXZWJD
b250ZXh0ICoKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCAgICAgICAgICAgICAgICAg
ICAgICAodm9pZCk7CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl9jb250ZXh0X3NldF9j
YWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdENhY2hlTW9kZWwgICAgY2FjaGVfbW9kZWwpOword2Via2l0X3dlYl9jb250ZXh0X3NldF9j
YWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAg
ICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0Q2FjaGVNb2RlbCAgICAgICAgICAgICAgIGNhY2hlX21vZGVsKTsKIFdF
QktJVF9BUEkgV2ViS2l0Q2FjaGVNb2RlbAotd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9t
b2RlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQpOword2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgIChXZWJLaXRX
ZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CiAKIFdFQktJVF9BUEkgV2ViS2l0RG93
bmxvYWQgKgotd2Via2l0X3dlYl9jb250ZXh0X2Rvd25sb2FkX3VyaSAgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAqdXJpKTsK
K3dlYmtpdF93ZWJfY29udGV4dF9kb3dubG9hZF91cmkgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAg
ICAgICAgICp1cmkpOwogCiBXRUJLSVRfQVBJIFdlYktpdENvb2tpZU1hbmFnZXIgKgotd2Via2l0
X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlciAgICAgICAgICAgICAgIChXZWJLaXRXZWJD
b250ZXh0ICAgKmNvbnRleHQpOword2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdl
ciAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7
CiAKIFdFQktJVF9BUEkgdm9pZAotd2Via2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3Bs
dWdpbnNfZGlyZWN0b3J5IChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAqZGlyZWN0b3J5KTsKK3dlYmtpdF93ZWJfY29udGV4dF9zZXRfYWRkaXRpb25hbF9wbHVn
aW5zX2RpcmVjdG9yeSAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGdjaGFyICAgICAgICAgICAgICAgICAgICpkaXJlY3RvcnkpOwogCiBXRUJLSVRfQVBJIHZvaWQK
LXdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2lucyAgICAgICAgICAgICAgICAgICAgICAoV2Vi
S2l0V2ViQ29udGV4dCAgICpjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgKmNhbmNlbGxhYmxlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgIHVzZXJfZGF0YSk7Cit3
ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYkNvbnRleHQgICAgICAgICAgICAgICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2VsbGFibGUgICAgICAgICAgICAg
ICAgICAqY2FuY2VsbGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2FsbGJhY2sgICAgICAgICAgICBjYWxsYmFjaywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Bv
aW50ZXIgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CiAKIFdFQktJVF9BUEkgR0xp
c3QgKgotd2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5zX2ZpbmlzaCAgICAgICAgICAgICAg
IChXZWJLaXRXZWJDb250ZXh0ICAgKmNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAqcmVzdWx0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJy
b3IgICAgICAgICAgICAqKmVycm9yKTsKLQord2Via2l0X3dlYl9jb250ZXh0X2dldF9wbHVnaW5z
X2ZpbmlzaCAgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29u
dGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAg
ICAgICAgICAgICAqKmVycm9yKTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9jb250ZXh0
X3JlZ2lzdGVyX3VyaV9zY2hlbWUgICAgICAgICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAg
ICAgICAgICAqY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAgICAgKnNjaGVtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
VVJJU2NoZW1lUmVxdWVzdENhbGxiYWNrIGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcl9kYXRhKTsKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRl
LmgKaW5kZXggZDJkZDgxMy4uOWU1NTM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCkBAIC0yNiwx
NiArMjYsMTcgQEAKICNpZm5kZWYgV2ViS2l0V2ViQ29udGV4dFByaXZhdGVfaAogI2RlZmluZSBX
ZWJLaXRXZWJDb250ZXh0UHJpdmF0ZV9oCiAKKyNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisj
aW5jbHVkZSAiV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNv
bnRleHQuaCIKLSNpbmNsdWRlIDxXZWJLaXQyL1dlYktpdDIuaD4KLQotR19CRUdJTl9ERUNMUwog
CiBXS0NvbnRleHRSZWYgd2Via2l0V2ViQ29udGV4dEdldFdLQ29udGV4dChXZWJLaXRXZWJDb250
ZXh0Kik7CiBXZWJLaXREb3dubG9hZCogd2Via2l0V2ViQ29udGV4dEdldE9yQ3JlYXRlRG93bmxv
YWQoV0tEb3dubG9hZFJlZik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVEb3dubG9hZChX
S0Rvd25sb2FkUmVmKTsKIHZvaWQgd2Via2l0V2ViQ29udGV4dERvd25sb2FkU3RhcnRlZChXZWJL
aXRXZWJDb250ZXh0KiwgV2ViS2l0RG93bmxvYWQqKTsKLQotR19FTkRfREVDTFMKK1dLU291cFJl
cXVlc3RNYW5hZ2VyUmVmIHdlYmtpdFdlYkNvbnRleHRHZXRSZXF1ZXN0TWFuYWdlcihXZWJLaXRX
ZWJDb250ZXh0Kik7Cit2b2lkIHdlYmtpdFdlYkNvbnRleHRSZWNlaXZlZFVSSVJlcXVlc3QoV2Vi
S2l0V2ViQ29udGV4dCosIFdlYktpdFVSSVNjaGVtZVJlcXVlc3QqKTsKK3ZvaWQgd2Via2l0V2Vi
Q29udGV4dERpZEZhaWxUb0xvYWRVUklSZXF1ZXN0KFdlYktpdFdlYkNvbnRleHQqLCB1aW50NjRf
dCByZXF1ZXN0SUQpOwordm9pZCB3ZWJraXRXZWJDb250ZXh0RGlkRmluaXNoVVJJUmVxdWVzdChX
ZWJLaXRXZWJDb250ZXh0KiwgdWludDY0X3QgcmVxdWVzdElEKTsKIAogI2VuZGlmIC8vIFdlYktp
dFdlYkNvbnRleHRQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2NzLnNnbWwgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCmluZGV4IDkwMDA1YWMuLjk5
MzI5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1kb2NzLnNnbWwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbApAQCAtMzQsNiArMzQsNyBAQAogICAgIDx4aTpp
bmNsdWRlIGhyZWY9InhtbC9XZWJLaXRDb29raWVNYW5hZ2VyLnhtbCIvPgogICAgIDx4aTppbmNs
dWRlIGhyZWY9InhtbC9XZWJLaXRQbHVnaW4ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdFdlYkluc3BlY3Rvci54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwv
V2ViS2l0VVJJU2NoZW1lUmVxdWVzdC54bWwiLz4KICAgPC9jaGFwdGVyPgogCiAgIDxpbmRleCBp
ZD0iaW5kZXgtYWxsIj4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CmluZGV4IDZkZGUwODYuLjcz
ZmMwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mv
d2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dApAQCAtMzMsNiArMzMsMTAgQEAgd2Vi
a2l0X3dlYl9jb250ZXh0X3NldF9hZGRpdGlvbmFsX3BsdWdpbnNfZGlyZWN0b3J5CiB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3BsdWdpbnMKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfcGx1Z2luc19m
aW5pc2gKIAorPFNVQlNFQ1RJT04gVVJJIFNjaGVtZT4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RD
YWxsYmFjaword2Via2l0X3dlYl9jb250ZXh0X3JlZ2lzdGVyX3VyaV9zY2hlbWUKKwogPFNVQlNF
Q1RJT04gU3RhbmRhcmQ+CiBXZWJLaXRXZWJDb250ZXh0Q2xhc3MKIFdFQktJVF9XRUJfQ09OVEVY
VApAQCAtNjg1LDMgKzY4OSwyNCBAQCBXRUJLSVRfV0VCX0lOU1BFQ1RPUl9HRVRfQ0xBU1MKIHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2dldF90eXBlCiBXZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlCiA8
L1NFQ1RJT04+CisKKzxGSUxFPldlYktpdFVSSVNjaGVtZVJlcXVlc3Q8L0ZJTEU+CitXZWJLaXRV
UklTY2hlbWVSZXF1ZXN0Cit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9zY2hlbWUKK3dl
YmtpdF91cmlfc2NoZW1lX3JlcXVlc3RfZ2V0X3VyaQord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVz
dF9nZXRfcGF0aAord2Via2l0X3VyaV9zY2hlbWVfcmVxdWVzdF9maW5pc2gKKworPFNVQlNFQ1RJ
T04gU3RhbmRhcmQ+CitXZWJLaXRVUklTY2hlbWVSZXF1ZXN0Q2xhc3MKK1dFQktJVF9UWVBFX1VS
SV9TQ0hFTUVfUkVRVUVTVAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVAorV0VCS0lUX0lTX1VS
SV9TQ0hFTUVfUkVRVUVTVAorV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUworV0VCS0lU
X0lTX1VSSV9TQ0hFTUVfUkVRVUVTVF9DTEFTUworV0VCS0lUX1VSSV9TQ0hFTUVfUkVRVUVTVF9H
RVRfQ0xBU1MKKworPFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFVSSVNjaGVtZVJlcXVlc3RQ
cml2YXRlCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCis8L1NFQ1RJT04+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGsudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGsudHlwZXMKaW5kZXggOTJiNmZiNC4uZDE1NTk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBlcwpAQCAtMTgsMyAr
MTgsNCBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X3R5cGUKIHdlYmtpdF9wbHVnaW5fZ2V0
X3R5cGUKIHdlYmtpdF9taW1lX2luZm9fZ2V0X3R5cGUKIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dl
dF90eXBlCit3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF90eXBlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0V2ViQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0V2ViS2l0
V2ViQ29udGV4dC5jcHAKaW5kZXggMjE2YTVjOS4uZTdkNDNhMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFdlYktpdFdlYkNvbnRleHQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RXZWJLaXRX
ZWJDb250ZXh0LmNwcApAQCAtMTksMTAgKzE5LDEzIEBACiAKICNpbmNsdWRlICJjb25maWcuaCIK
IAotI2luY2x1ZGUgIlRlc3RNYWluLmgiCisjaW5jbHVkZSAiTG9hZFRyYWNraW5nVGVzdC5oIgog
I2luY2x1ZGUgPGd0ay9ndGsuaD4KICNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdDIuaD4KKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dERlZmF1bHQoVGVzdCogdGVzdCwg
Z2NvbnN0cG9pbnRlcikKIHsKQEAgLTEwNiwxMCArMTA5LDEzMyBAQCBzdGF0aWMgdm9pZCB0ZXN0
V2ViQ29udGV4dEdldFBsdWdpbnMoUGx1Z2luc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAg
ICAgZ19hc3NlcnRfY21wc3RyKGV4dGVuc2lvbnNbMF0sID09LCAidGVzdG5ldHNjYXBlIik7CiB9
CiAKK3N0YXRpYyBjb25zdCBjaGFyKiBrQmFySFRNTCA9ICI8aHRtbD48Ym9keT5CYXI8L2JvZHk+
PC9odG1sPiI7CitzdGF0aWMgY29uc3QgY2hhcioga0VjaG9IVE1MRm9ybWF0ID0gIjxodG1sPjxi
b2R5PiVzPC9ib2R5PjwvaHRtbD4iOworCitjbGFzcyBVUklTY2hlbWVUZXN0OiBwdWJsaWMgTG9h
ZFRyYWNraW5nVGVzdCB7CitwdWJsaWM6CisgICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShVUklT
Y2hlbWVUZXN0KTsKKworICAgIHN0cnVjdCBVUklTY2hlbWVIYW5kbGVyIHsKKyAgICAgICAgVVJJ
U2NoZW1lSGFuZGxlcigpCisgICAgICAgICAgICA6IHJlcGx5TGVuZ3RoKDApCisgICAgICAgICAg
ICAsIHJlcGx5V2l0aFBhdGgoZmFsc2UpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IFVSSVNjaGVtZUhhbmRsZXIoY29uc3QgY2hhciogcmVwbHksIGludCByZXBseUxlbmd0aCwgY29u
c3QgY2hhciogbWltZVR5cGUsIGJvb2wgcmVwbHlXaXRoUGF0aCA9IGZhbHNlKQorICAgICAgICAg
ICAgOiByZXBseShyZXBseSkKKyAgICAgICAgICAgICwgcmVwbHlMZW5ndGgocmVwbHlMZW5ndGgp
CisgICAgICAgICAgICAsIG1pbWVUeXBlKG1pbWVUeXBlKQorICAgICAgICAgICAgLCByZXBseVdp
dGhQYXRoKHJlcGx5V2l0aFBhdGgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIENT
dHJpbmcgcmVwbHk7CisgICAgICAgIGludCByZXBseUxlbmd0aDsKKyAgICAgICAgQ1N0cmluZyBt
aW1lVHlwZTsKKyAgICAgICAgYm9vbCByZXBseVdpdGhQYXRoOworICAgIH07CisKKyAgICBzdGF0
aWMgdm9pZCB1cmlTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCog
cmVxdWVzdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBVUklTY2hlbWVUZXN0
KiB0ZXN0ID0gc3RhdGljX2Nhc3Q8VVJJU2NoZW1lVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAg
dGVzdC0+bV91cmlTY2hlbWVSZXF1ZXN0ID0gcmVxdWVzdDsKKyAgICAgICAgdGVzdC0+YXNzZXJ0
T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXF1ZXN0KSk7CisKKyAg
ICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKGdfbWVt
b3J5X2lucHV0X3N0cmVhbV9uZXcoKSk7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVs
ZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QoaW5wdXRTdHJlYW0uZ2V0KCkpKTsKKworICAg
ICAgICBTdHJpbmcgc2NoZW1lKFN0cmluZzo6ZnJvbVVURjgod2Via2l0X3VyaV9zY2hlbWVfcmVx
dWVzdF9nZXRfc2NoZW1lKHJlcXVlc3QpKSk7CisgICAgICAgIGdfYXNzZXJ0KCFzY2hlbWUuaXNF
bXB0eSgpKTsKKyAgICAgICAgZ19hc3NlcnQodGVzdC0+bV9oYW5kbGVyc01hcC5jb250YWlucyhz
Y2hlbWUpKTsKKyAgICAgICAgY29uc3QgVVJJU2NoZW1lSGFuZGxlciYgaGFuZGxlciA9IHRlc3Qt
Pm1faGFuZGxlcnNNYXAuZ2V0KHNjaGVtZSk7CisKKyAgICAgICAgaWYgKGhhbmRsZXIucmVwbHlX
aXRoUGF0aCkgeworICAgICAgICAgICAgY2hhciogcmVwbHlIVE1MID0gZ19zdHJkdXBfcHJpbnRm
KGhhbmRsZXIucmVwbHkuZGF0YSgpLCB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF9wYXRo
KHJlcXVlc3QpKTsKKyAgICAgICAgICAgIGdfbWVtb3J5X2lucHV0X3N0cmVhbV9hZGRfZGF0YShH
X01FTU9SWV9JTlBVVF9TVFJFQU0oaW5wdXRTdHJlYW0uZ2V0KCkpLCByZXBseUhUTUwsIHN0cmxl
bihyZXBseUhUTUwpLCBnX2ZyZWUpOworICAgICAgICB9IGVsc2UgaWYgKCFoYW5kbGVyLnJlcGx5
LmlzTnVsbCgpKQorICAgICAgICAgICAgZ19tZW1vcnlfaW5wdXRfc3RyZWFtX2FkZF9kYXRhKEdf
TUVNT1JZX0lOUFVUX1NUUkVBTShpbnB1dFN0cmVhbS5nZXQoKSksIGhhbmRsZXIucmVwbHkuZGF0
YSgpLCBoYW5kbGVyLnJlcGx5Lmxlbmd0aCgpLCAwKTsKKyAgICAgICAgd2Via2l0X3VyaV9zY2hl
bWVfcmVxdWVzdF9maW5pc2gocmVxdWVzdCwgaW5wdXRTdHJlYW0uZ2V0KCksIGhhbmRsZXIucmVw
bHlMZW5ndGgsIGhhbmRsZXIubWltZVR5cGUuZGF0YSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
Z2lzdGVyVVJJU2NoZW1lSGFuZGxlcihjb25zdCBjaGFyKiBzY2hlbWUsIGNvbnN0IGNoYXIqIHJl
cGx5LCBpbnQgcmVwbHlMZW5ndGgsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBib29sIHJlcGx5V2l0
aFBhdGggPSBmYWxzZSkKKyAgICB7CisgICAgICAgIG1faGFuZGxlcnNNYXAuc2V0KFN0cmluZzo6
ZnJvbVVURjgoc2NoZW1lKSwgVVJJU2NoZW1lSGFuZGxlcihyZXBseSwgcmVwbHlMZW5ndGgsIG1p
bWVUeXBlLCByZXBseVdpdGhQYXRoKSk7CisgICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9yZWdp
c3Rlcl91cmlfc2NoZW1lKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBzY2hlbWUs
IHVyaVNjaGVtZVJlcXVlc3RDYWxsYmFjaywgdGhpcyk7CisgICAgfQorCisgICAgc3RhdGljIHZv
aWQgcmVzb3VyY2VHZXREYXRhQ2FsbGJhY2soR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpCisgICAgeworICAgICAgICBzaXplX3QgZGF0YVNp
emU7CisgICAgICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgdW5zaWduZWQgY2hh
ciogZGF0YSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGFfZmluaXNoKFdFQktJVF9XRUJf
UkVTT1VSQ0Uob2JqZWN0KSwgcmVzdWx0LCAmZGF0YVNpemUsICZlcnJvci5vdXRQdHIoKSk7Cisg
ICAgICAgIGdfYXNzZXJ0KGRhdGEpOworCisgICAgICAgIFVSSVNjaGVtZVRlc3QqIHRlc3QgPSBz
dGF0aWNfY2FzdDxVUklTY2hlbWVUZXN0Kj4odXNlckRhdGEpOworICAgICAgICB0ZXN0LT5tX3Jl
c291cmNlRGF0YS5zZXQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0YSkpOworICAgICAgICB0
ZXN0LT5tX3Jlc291cmNlRGF0YVNpemUgPSBkYXRhU2l6ZTsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cXVpdCh0ZXN0LT5tX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBtYWluUmVz
b3VyY2VEYXRhKHNpemVfdCYgbWFpblJlc291cmNlRGF0YVNpemUpCisgICAgeworICAgICAgICBt
X3Jlc291cmNlRGF0YVNpemUgPSAwOworICAgICAgICBtX3Jlc291cmNlRGF0YS5jbGVhcigpOwor
ICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KTsKKyAgICAgICAgZ19hc3NlcnQocmVzb3VyY2UpOwor
CisgICAgICAgIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X2RhdGEocmVzb3VyY2UsIDAsIHJlc291
cmNlR2V0RGF0YUNhbGxiYWNrLCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFp
bkxvb3ApOworCisgICAgICAgIG1haW5SZXNvdXJjZURhdGFTaXplID0gbV9yZXNvdXJjZURhdGFT
aXplOworICAgICAgICByZXR1cm4gbV9yZXNvdXJjZURhdGEuZ2V0KCk7CisgICAgfQorCisgICAg
R093blB0cjxjaGFyPiBtX3Jlc291cmNlRGF0YTsKKyAgICBzaXplX3QgbV9yZXNvdXJjZURhdGFT
aXplOworICAgIEdSZWZQdHI8V2ViS2l0VVJJU2NoZW1lUmVxdWVzdD4gbV91cmlTY2hlbWVSZXF1
ZXN0OworICAgIEhhc2hNYXA8U3RyaW5nLCBVUklTY2hlbWVIYW5kbGVyPiBtX2hhbmRsZXJzTWFw
OworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYkNvbnRleHRVUklTY2hlbWUoVVJJU2NoZW1lVGVz
dCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKK3sKKyAgICB0ZXN0LT5yZWdpc3RlclVSSVNjaGVtZUhh
bmRsZXIoImZvbyIsIGtCYXJIVE1MLCBzdHJsZW4oa0JhckhUTUwpLCAidGV4dC9odG1sIik7Cisg
ICAgdGVzdC0+bG9hZFVSSSgiZm9vOmJsYW5rIik7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgc2l6ZV90IG1haW5SZXNvdXJjZURhdGFTaXplID0gMDsKKyAgICBjb25z
dCBjaGFyKiBtYWluUmVzb3VyY2VEYXRhID0gdGVzdC0+bWFpblJlc291cmNlRGF0YShtYWluUmVz
b3VyY2VEYXRhU2l6ZSk7CisgICAgZ19hc3NlcnRfY21waW50KG1haW5SZXNvdXJjZURhdGFTaXpl
LCA9PSwgc3RybGVuKGtCYXJIVE1MKSk7CisgICAgZ19hc3NlcnQoIXN0cm5jbXAobWFpblJlc291
cmNlRGF0YSwga0JhckhUTUwsIG1haW5SZXNvdXJjZURhdGFTaXplKSk7CisKKyAgICB0ZXN0LT5y
ZWdpc3RlclVSSVNjaGVtZUhhbmRsZXIoImVjaG8iLCBrRWNob0hUTUxGb3JtYXQsIC0xLCAidGV4
dC9odG1sIiwgdHJ1ZSk7CisgICAgdGVzdC0+bG9hZFVSSSgiZWNobzpoZWxsbyB3b3JsZCIpOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIEdPd25QdHI8Y2hhcj4gZWNo
b0hUTUwoZ19zdHJkdXBfcHJpbnRmKGtFY2hvSFRNTEZvcm1hdCwgd2Via2l0X3VyaV9zY2hlbWVf
cmVxdWVzdF9nZXRfcGF0aCh0ZXN0LT5tX3VyaVNjaGVtZVJlcXVlc3QuZ2V0KCkpKSk7CisgICAg
bWFpblJlc291cmNlRGF0YVNpemUgPSAwOworICAgIG1haW5SZXNvdXJjZURhdGEgPSB0ZXN0LT5t
YWluUmVzb3VyY2VEYXRhKG1haW5SZXNvdXJjZURhdGFTaXplKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQobWFpblJlc291cmNlRGF0YVNpemUsID09LCBzdHJsZW4oZWNob0hUTUwuZ2V0KCkpKTsKKyAg
ICBnX2Fzc2VydCghc3RybmNtcChtYWluUmVzb3VyY2VEYXRhLCBlY2hvSFRNTC5nZXQoKSwgbWFp
blJlc291cmNlRGF0YVNpemUpKTsKKworICAgIHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxl
cigibm9taW1lIiwga0JhckhUTUwsIC0xLCAwKTsKKyAgICB0ZXN0LT5tX2xvYWRFdmVudHMuY2xl
YXIoKTsKKyAgICB0ZXN0LT5sb2FkVVJJKCJub21pbWU6Zm9vIGJhciIpOworICAgIHRlc3QtPndh
aXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAgIGdfYXNzZXJ0KHRlc3QtPm1fbG9hZEV2ZW50cy5j
b250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpQcm92aXNpb25hbExvYWRGYWlsZWQpKTsKKworICAg
IHRlc3QtPnJlZ2lzdGVyVVJJU2NoZW1lSGFuZGxlcigiZW1wdHkiLCAwLCAwLCAidGV4dC9odG1s
Iik7CisgICAgdGVzdC0+bV9sb2FkRXZlbnRzLmNsZWFyKCk7CisgICAgdGVzdC0+bG9hZFVSSSgi
ZW1wdHk6bm90aGluZyIpOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworICAg
IGdfYXNzZXJ0KCF0ZXN0LT5tX2xvYWRFdmVudHMuY29udGFpbnMoTG9hZFRyYWNraW5nVGVzdDo6
UHJvdmlzaW9uYWxMb2FkRmFpbGVkKSk7CisgICAgZ19hc3NlcnQoIXRlc3QtPm1fbG9hZEV2ZW50
cy5jb250YWlucyhMb2FkVHJhY2tpbmdUZXN0OjpMb2FkRmFpbGVkKSk7Cit9CisKIHZvaWQgYmVm
b3JlQWxsKCkKIHsKICAgICBUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAiZGVmYXVsdC1j
b250ZXh0IiwgdGVzdFdlYkNvbnRleHREZWZhdWx0KTsKICAgICBQbHVnaW5zVGVzdDo6YWRkKCJX
ZWJLaXRXZWJDb250ZXh0IiwgImdldC1wbHVnaW5zIiwgdGVzdFdlYkNvbnRleHRHZXRQbHVnaW5z
KTsKKyAgICBVUklTY2hlbWVUZXN0OjphZGQoIldlYktpdFdlYkNvbnRleHQiLCAidXJpLXNjaGVt
ZSIsIHRlc3RXZWJDb250ZXh0VVJJU2NoZW1lKTsKIH0KIAogdm9pZCBhZnRlckFsbCgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggY2M1YzM0OS4uOTU2
Nzc5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0
Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAt
NDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dFVSSVJlc3BvbnNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklTY2hlbWVSZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRXZWJJbnNwZWN0b3IuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlJl
c291cmNlLmg+Cg==
</data>
<flag name="review"
          id="152384"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>