<?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>168230</bug_id>
          
          <creation_ts>2017-02-13 05:09:14 -0800</creation_ts>
          <short_desc>[GTK] Update cookie manager API to properly work with ephemeral sessions</short_desc>
          <delta_ts>2017-02-15 11:00:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=168375</see_also>
          <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>168229</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1276171</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-13 05:09:14 -0800</bug_when>
    <thetext>WebKitCookieManager is associated to a particular WebKitWebContexst and uses the default session ID unconditionally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276174</commentid>
    <comment_count>1</comment_count>
      <attachid>301345</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-13 05:24:50 -0800</bug_when>
    <thetext>Created attachment 301345
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276498</commentid>
    <comment_count>2</comment_count>
      <attachid>301345</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-13 17:59:45 -0800</bug_when>
    <thetext>Comment on attachment 301345
Patch

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

It looks mostly good, but I&apos;d like to review this one again after you answer my questions about why you used the weak pointer, which I hope was just a mistake.

&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:217
&gt; +    // FIXME: Add support for deleting cookies modified since the given timestamp. It should probably be added to libsoup.
&gt; +    if (timestamp == std::chrono::system_clock::from_time_t(0))
&gt; +        deleteAllCookies(session);

Are you planning to fix this soon? I don&apos;t think we should proceed with these API changes if the API does not work properly. At least add a runtime warning using g_warning().

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:40
&gt; + * The WebKitCookieManager defines how to setup and handle cookies.

setup (noun) -&gt; set up (verb)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:43
&gt;   * store cookies, with webkit_cookie_manager_set_persistent_storage(),

Remove the comma

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:144
&gt; +    g_object_add_weak_pointer(G_OBJECT(dataManager), reinterpret_cast&lt;void**&gt;(&amp;manager-&gt;priv-&gt;dataManager));

Why is the weak pointer needed? I would expect WebKitCookieManager to be owned by the WebKitWebsiteDataManager, so WebKitWebsiteDataManager would keep a ref to ensure the WebKitCookieManager is never destroyed first. Is there some really good reason you don&apos;t do that? I think it should be a normal raw pointer instead.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:165
&gt;   * By default, @cookie_manager doesn&apos;t store the cookies persistenly, so you need to call this

Preexisting problem, but let&apos;s fix it now: persistenly -&gt; persistently

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:176
&gt; +    for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager-&gt;priv-&gt;dataManager)) {

This is a big problem. Either manager-&gt;priv-&gt;dataManager can be legitimately null here, or you should not have used a weak pointer.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:197
&gt; +    g_return_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager-&gt;priv-&gt;dataManager));

Ditto. If you&apos;re going to use the weak pointer, then the entire class needs to be prepared to deal with the WebKitWebsiteDataManager being null. There&apos;s no point to the weak pointer otherwise.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:82
&gt;   * webkit_web_context_get_security_manager() for that.

Remove &quot;for that&quot;: the sentence works better without them.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:698
&gt;  WebKitCookieManager* webkit_web_context_get_cookie_manager(WebKitWebContext* context)

I think you should document that this function returns the WebKitCookieManager of this context&apos;s WebKitWebsiteDataManager. I know it&apos;s an implementation detail, but otherwise I think it&apos;s kind of confusing why both WebKitWebContext and WebKitWebsiteDataManager have a WebKitCookieManager.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2286
&gt; + * Get the #WebKitWebsiteDataManager associated to @web_view. If @web_view is not ephemeral

Add a comma after &quot;ephemeral&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2287
&gt; + * the returned #WebKitWebsiteDataManager will be the same as the #WebKitWebView:web-context one.

&quot;the #WebKitWebView:web-context one&quot; doesn&apos;t sound great. I would write: &quot;will be the same as the #WebKitWebsiteDataManager of @web_view&apos;s #WebKitWebContext.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:103
&gt; +    GRefPtr&lt;WebKitCookieManager&gt; cookieManager;

Aha, so you do keep a ref! Good! Then you don&apos;t need the weak pointer in WebKitCookieManager, right? Surely the WebKitCookieManager cannot outlive the WebKitWebsiteDataManager due to this ref.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:104
&gt; +    Vector&lt;WebProcessPool*&gt; processPools;

Is it possible to use Vector&lt;WebProcessPool&amp;&gt; to clarify that the process pools are not null?

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp:54
&gt; +#if PLATFORM(GTK)
&gt; +    if (hostName == &quot;localhost&quot;)
&gt; +        return hostName;
&gt; +#endif

I think this should be an #else condition, not a GTK-specific condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276502</commentid>
    <comment_count>3</comment_count>
      <attachid>301345</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-13 18:08:07 -0800</bug_when>
    <thetext>Comment on attachment 301345
Patch

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

&gt;&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:217
&gt;&gt; +        deleteAllCookies(session);
&gt; 
&gt; Are you planning to fix this soon? I don&apos;t think we should proceed with these API changes if the API does not work properly. At least add a runtime warning using g_warning().

(Sad OK if you add the g_warning().)

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:115
&gt; +    if (manager-&gt;priv-&gt;dataManager) {
&gt; +        g_object_remove_weak_pointer(G_OBJECT(manager-&gt;priv-&gt;dataManager), reinterpret_cast&lt;void**&gt;(&amp;manager-&gt;priv-&gt;dataManager));
&gt; +
&gt; +        auto sessionID = webkitWebsiteDataManagerGetDataStore(manager-&gt;priv-&gt;dataManager).websiteDataStore().sessionID();
&gt; +        for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager-&gt;priv-&gt;dataManager))
&gt; +            processPool-&gt;supplement&lt;WebCookieManagerProxy&gt;()-&gt;stopObservingCookieChanges(sessionID);
&gt; +
&gt; +        manager-&gt;priv-&gt;dataManager = nullptr;
&gt; +    }

Actually, I wonder if we should do this in ~_WebKitCookieManagerPrivate() instead of dispose. Because the object should technically be left in valid state after dispose, but all of the functions are going to hit criticals if priv-&gt;dataManager is null. Since we&apos;re not keeping a strong reference to it, it can&apos;t be involved in a reference cycle, so it should be safer to do in the destructor instead of dispose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276670</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-14 03:37:14 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 301345 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301345&amp;action=review
&gt; 
&gt; It looks mostly good, but I&apos;d like to review this one again after you answer
&gt; my questions about why you used the weak pointer, which I hope was just a
&gt; mistake.
&gt; 
&gt; &gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:217
&gt; &gt; +    // FIXME: Add support for deleting cookies modified since the given timestamp. It should probably be added to libsoup.
&gt; &gt; +    if (timestamp == std::chrono::system_clock::from_time_t(0))
&gt; &gt; +        deleteAllCookies(session);
&gt; 
&gt; Are you planning to fix this soon? I don&apos;t think we should proceed with
&gt; these API changes if the API does not work properly. At least add a runtime
&gt; warning using g_warning().

No, I don&apos;t have time, I&apos;ll add the warning.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:40
&gt; &gt; + * The WebKitCookieManager defines how to setup and handle cookies.
&gt; 
&gt; setup (noun) -&gt; set up (verb)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:43
&gt; &gt;   * store cookies, with webkit_cookie_manager_set_persistent_storage(),
&gt; 
&gt; Remove the comma
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:144
&gt; &gt; +    g_object_add_weak_pointer(G_OBJECT(dataManager), reinterpret_cast&lt;void**&gt;(&amp;manager-&gt;priv-&gt;dataManager));
&gt; 
&gt; Why is the weak pointer needed? I would expect WebKitCookieManager to be
&gt; owned by the WebKitWebsiteDataManager, so WebKitWebsiteDataManager would
&gt; keep a ref to ensure the WebKitCookieManager is never destroyed first. Is
&gt; there some really good reason you don&apos;t do that? I think it should be a
&gt; normal raw pointer instead.

The cookie manager can&apos;t be created by the user, it&apos;s always created and owned by the website data manager. However, nothing prevents the user from taking a ref to the returned cookie manager. It&apos;s a programmer error to use the cookie manager after the data manager is destroyed, that&apos;s why all methods are protected with g_return_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager-&gt;priv-&gt;dataManager)). I don&apos;t want to take a reference to the data manager. Maybe it isn&apos;t worth it just to handle a corner case, so I can simply remove the weak point and use a plan pointer. Users will get a crash sooner or layer in both cases I&apos;m afraid.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:165
&gt; &gt;   * By default, @cookie_manager doesn&apos;t store the cookies persistenly, so you need to call this
&gt; 
&gt; Preexisting problem, but let&apos;s fix it now: persistenly -&gt; persistently
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:176
&gt; &gt; +    for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager-&gt;priv-&gt;dataManager)) {
&gt; 
&gt; This is a big problem. Either manager-&gt;priv-&gt;dataManager can be legitimately
&gt; null here, or you should not have used a weak pointer.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:197
&gt; &gt; +    g_return_if_fail(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager-&gt;priv-&gt;dataManager));
&gt; 
&gt; Ditto. If you&apos;re going to use the weak pointer, then the entire class needs
&gt; to be prepared to deal with the WebKitWebsiteDataManager being null. There&apos;s
&gt; no point to the weak pointer otherwise.

It deals with that already, but using g_return macros.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:82
&gt; &gt;   * webkit_web_context_get_security_manager() for that.
&gt; 
&gt; Remove &quot;for that&quot;: the sentence works better without them.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:698
&gt; &gt;  WebKitCookieManager* webkit_web_context_get_cookie_manager(WebKitWebContext* context)
&gt; 
&gt; I think you should document that this function returns the
&gt; WebKitCookieManager of this context&apos;s WebKitWebsiteDataManager. I know it&apos;s
&gt; an implementation detail, but otherwise I think it&apos;s kind of confusing why
&gt; both WebKitWebContext and WebKitWebsiteDataManager have a
&gt; WebKitCookieManager.
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2286
&gt; &gt; + * Get the #WebKitWebsiteDataManager associated to @web_view. If @web_view is not ephemeral
&gt; 
&gt; Add a comma after &quot;ephemeral&quot;
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp:2287
&gt; &gt; + * the returned #WebKitWebsiteDataManager will be the same as the #WebKitWebView:web-context one.
&gt; 
&gt; &quot;the #WebKitWebView:web-context one&quot; doesn&apos;t sound great. I would write:
&gt; &quot;will be the same as the #WebKitWebsiteDataManager of @web_view&apos;s
&gt; #WebKitWebContext.&quot;
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:103
&gt; &gt; +    GRefPtr&lt;WebKitCookieManager&gt; cookieManager;
&gt; 
&gt; Aha, so you do keep a ref! Good! Then you don&apos;t need the weak pointer in
&gt; WebKitCookieManager, right? Surely the WebKitCookieManager cannot outlive
&gt; the WebKitWebsiteDataManager due to this ref.

Not surely, but I guess we should assume it, yes.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:104
&gt; &gt; +    Vector&lt;WebProcessPool*&gt; processPools;
&gt; 
&gt; Is it possible to use Vector&lt;WebProcessPool&amp;&gt; to clarify that the process
&gt; pools are not null?

No, I don&apos;t think Vector can contain references.

&gt; &gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp:54
&gt; &gt; +#if PLATFORM(GTK)
&gt; &gt; +    if (hostName == &quot;localhost&quot;)
&gt; &gt; +        return hostName;
&gt; &gt; +#endif
&gt; 
&gt; I think this should be an #else condition, not a GTK-specific condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276671</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-14 03:39:13 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 301345 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=301345&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/network/soup/CookieJarSoup.cpp:217
&gt; &gt;&gt; +        deleteAllCookies(session);
&gt; &gt; 
&gt; &gt; Are you planning to fix this soon? I don&apos;t think we should proceed with these API changes if the API does not work properly. At least add a runtime warning using g_warning().
&gt; 
&gt; (Sad OK if you add the g_warning().)
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitCookieManager.cpp:115
&gt; &gt; +    if (manager-&gt;priv-&gt;dataManager) {
&gt; &gt; +        g_object_remove_weak_pointer(G_OBJECT(manager-&gt;priv-&gt;dataManager), reinterpret_cast&lt;void**&gt;(&amp;manager-&gt;priv-&gt;dataManager));
&gt; &gt; +
&gt; &gt; +        auto sessionID = webkitWebsiteDataManagerGetDataStore(manager-&gt;priv-&gt;dataManager).websiteDataStore().sessionID();
&gt; &gt; +        for (auto* processPool : webkitWebsiteDataManagerGetProcessPools(manager-&gt;priv-&gt;dataManager))
&gt; &gt; +            processPool-&gt;supplement&lt;WebCookieManagerProxy&gt;()-&gt;stopObservingCookieChanges(sessionID);
&gt; &gt; +
&gt; &gt; +        manager-&gt;priv-&gt;dataManager = nullptr;
&gt; &gt; +    }
&gt; 
&gt; Actually, I wonder if we should do this in ~_WebKitCookieManagerPrivate()
&gt; instead of dispose. Because the object should technically be left in valid
&gt; state after dispose, but all of the functions are going to hit criticals if
&gt; priv-&gt;dataManager is null. Since we&apos;re not keeping a strong reference to it,
&gt; it can&apos;t be involved in a reference cycle, so it should be safer to do in
&gt; the destructor instead of dispose.

I want to stop observing cookie changes asap, and I need to nullify the pointer to ensure it doesn&apos;t happen twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276672</commentid>
    <comment_count>6</comment_count>
      <attachid>301483</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-14 03:43:45 -0800</bug_when>
    <thetext>Created attachment 301483
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276767</commentid>
    <comment_count>7</comment_count>
      <attachid>301483</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-14 08:46:08 -0800</bug_when>
    <thetext>Comment on attachment 301483
Patch

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        WebKitCookieManager is associated to a particular WebKitWebContexst and uses the default session ID

WebKitWebContext

&gt; Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp:52
&gt;  #if PLATFORM(COCOA)
&gt;      if (hostName == String(kCFHTTPCookieLocalFileDomain))
&gt;          return displayNameForLocalFiles();
&gt; +#elif PLATFORM(GTK)
&gt; +    if (hostName == &quot;localhost&quot;)
&gt; +        return hostName;
&gt;  #endif

Why not use #else? All non-cocoa ports must want this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1276849</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-02-14 11:45:58 -0800</bug_when>
    <thetext>I would put the weak pointer back, with a comment explaining why it&apos;s there. It&apos;s not great, but I don&apos;t have a better solution, and it seems safer than using a raw pointer. Believe it or not, I just didn&apos;t consider that the user could ref the SoupCookieManager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1277093</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-14 23:36:50 -0800</bug_when>
    <thetext>Committed r212345: &lt;http://trac.webkit.org/changeset/212345&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301345</attachid>
            <date>2017-02-13 05:24:50 -0800</date>
            <delta_ts>2017-02-14 03:43:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-cookies-api.diff</filename>
            <type>text/plain</type>
            <size>58908</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZTViMmI4ODc2Yy4uZTE5NjI4ZDYzYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxOCBAQAogMjAxNy0wMi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKKyAgICAgICAgW0dUS10gVXBkYXRlIGNvb2tpZSBtYW5hZ2VyIEFQSSB0byBw
cm9wZXJseSB3b3JrIHdpdGggZXBoZW1lcmFsIHNlc3Npb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgyMzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gZm9yIGRlbGV0
ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIHdoZW4g
dGhlIHRpbWVzcGFuIGlzIDAsIHdlIG5lZWQKKyAgICAgICAgbmV3IGxpYnNvdXAgQVBJIHRvIHN1
cHBvcnQgcmVtb3ZpbmcgcmVjZW50bHkgbW9kaWZpZWQgY29va2llcy4KKworICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKworMjAxNy0wMi0xMyAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgQ29va2llTWFuYWdl
ciBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgc2Vzc2lvbgogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MjI5CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAppbmRleCA2
NDE0OTNmYmJmYS4uMGE5NWQwOTNlNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQ29va2llSmFyU291cC5jcHAKQEAgLTIxMCw4ICsyMTAsMTEg
QEAgdm9pZCBkZWxldGVBbGxDb29raWVzKGNvbnN0IE5ldHdvcmtTdG9yYWdlU2Vzc2lvbiYgc2Vz
c2lvbikKICAgICB9CiB9CiAKLXZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29u
c3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiwgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGlt
ZV9wb2ludCkKK3ZvaWQgZGVsZXRlQWxsQ29va2llc01vZGlmaWVkU2luY2UoY29uc3QgTmV0d29y
a1N0b3JhZ2VTZXNzaW9uJiBzZXNzaW9uLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1l
X3BvaW50IHRpbWVzdGFtcCkKIHsKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGRlbGV0
aW5nIGNvb2tpZXMgbW9kaWZpZWQgc2luY2UgdGhlIGdpdmVuIHRpbWVzdGFtcC4gSXQgc2hvdWxk
IHByb2JhYmx5IGJlIGFkZGVkIHRvIGxpYnNvdXAuCisgICAgaWYgKHRpbWVzdGFtcCA9PSBzdGQ6
OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjpmcm9tX3RpbWVfdCgwKSkKKyAgICAgICAgZGVsZXRlQWxs
Q29va2llcyhzZXNzaW9uKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDE5NWVhOGRkYWI1Li4yNjE3
NmEwNjg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDY5IEBACiAyMDE3LTAyLTEzICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBVcGRh
dGUgY29va2llIG1hbmFnZXIgQVBJIHRvIHByb3Blcmx5IHdvcmsgd2l0aCBlcGhlbWVyYWwgc2Vz
c2lvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2
ODIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YktpdENvb2tpZU1hbmFnZXIgaXMgYXNzb2NpYXRlZCB0byBhIHBhcnRpY3VsYXIgV2ViS2l0V2Vi
Q29udGV4c3QgYW5kIHVzZXMgdGhlIGRlZmF1bHQgc2Vzc2lvbiBJRAorICAgICAgICB1bmNvbmRp
dGlvbmFsbHkuIEl0IHNob3VsZCBiZSBhc3NvY2lhdGVkIHRvIGEgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyIGluc3RlYWQgYW5kIHVzZSBpdHMgc2Vzc2lvbiBJRC4gVGhpcworICAgICAgICBwYXRj
aCBhbHNvIGFkZHMgc3VwcG9ydCBmb3IgaGFuZGxpbmcgY29va2llcyB3aXRoIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciBhbmQgZGVwcmVjYXRlcworICAgICAgICB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKCksIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxl
dGVfY29va2llc19mb3JfZG9tYWluKCkgYW5kCisgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9kZWxldGVfYWxsX2Nvb2tpZXMoKS4gSXQgYWxzbyBhZGRzIEFQSSB0byBnZXQgdGhlIHRoZSBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgb2YgYQorICAgICAgICBXZWJLaXRXZWJWaWV3LCBzaW5j
ZSBpdCdzIHRoZSBvbmx5IHdheSB0byBnZXQgdGhlIFdlYktpdENvb2tpZU1hbmFnZXIgYXNzb2Np
YXRlZCB0byBhbiBlcGhlbWVyYWwgd2ViIHZpZXcuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKHdlYmtpdENvb2tpZU1hbmFn
ZXJEaXNwb3NlKTogU3RvcCBvYnNlcnZpbmcgY29va2llIGNoYW5nZXMuCisgICAgICAgICh3ZWJr
aXRfY29va2llX21hbmFnZXJfY2xhc3NfaW5pdCk6IEFkZCBkaXNwb3NlIGltcGxlbWVudGF0aW9u
LgorICAgICAgICAod2Via2l0Q29va2llTWFuYWdlckNyZWF0ZSk6IENyZWF0ZSB0aGUgV2ViS2l0
Q29va2llTWFuYWdlciB3aXRoIGEgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICAgICAgICAo
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3NldF9wZXJzaXN0ZW50X3N0b3JhZ2UpOiBXb3JrIHdpdGgg
YWxsIGNvbnRleHRzIGhhdmluZyB0aGUgc2Vzc2lvbi4KKyAgICAgICAgKHdlYmtpdF9jb29raWVf
bWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeSk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nvb2tp
ZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5KTogVXNlIGFueSBjb250ZXh0IGhhdmluZyB0aGUg
c2Vzc2lvbi4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRo
X2Nvb2tpZXMpOiBEZXByZWNhdGUgYW5kIGltcGxlbWVudCB1c2luZyBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0
aF9jb29raWVzX2ZpbmlzaCk6IERpdHRvLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2Vy
X2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4pOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMpOiBEaXR0by4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwOgorICAgICAgICAo
YXR0YWNoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KToKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHA6CisgICAgICAgIChhdHRh
Y2hEb3dubG9hZENsaWVudFRvQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0SW5qZWN0ZWRCdW5kbGVDbGllbnQuY3BwOgorICAgICAgICAoYXR0YWNoSW5qZWN0ZWRC
dW5kbGVDbGllbnRUb0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFNlY3VyaXR5TWFuYWdlci5jcHA6CisgICAgICAgIChyZWdpc3RlclNlY3VyaXR5UG9saWN5Rm9y
VVJJU2NoZW1lKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0
LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6IENhbGwgd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bvb2wuCisgICAgICAgICh3ZWJraXRXZWJDb250
ZXh0RGlzcG9zZSk6IENhbGwgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bv
b2wuCisgICAgICAgICh3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tpZV9tYW5hZ2VyKTogUmV0
dXJuIHRoZSBXZWJLaXRDb29raWVNYW5hZ2VyIG9mIHRoZSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wpOiBNYWtlIGl0IHJl
dHVybiBhIHJlZmVyZW5jZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJD
b250ZXh0UHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXcuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKTogQ2FsbCB3ZWJraXRX
ZWJzaXRlRGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbCB3aGVuIGNyZWF0aW5nIGEgZXBoZW1lcmFs
IHdlYiB2aWV3LgorICAgICAgICAod2Via2l0V2ViVmlld0Rpc3Bvc2UpOiBDYWxsIHdlYmtpdFdl
YnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sIGlmIG5lZWRlZC4KKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIpOiBSZXR1cm4gdGhlIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciBvciB0aGUgY29udGV4dCBvbmUuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYnNpdGVEYXRhLmNwcDogQWRkIHN1cHBvcnQgZm9yIENvb2tpZXMgdHlwZS4KKyAg
ICAgICAgKHJlY29yZENvbnRhaW5zU3VwcG9ydGVkRGF0YVR5cGVzKToKKyAgICAgICAgKHRvV2Vi
S2l0V2Vic2l0ZURhdGFUeXBlcyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2Vic2l0ZURhdGEuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZh
dGU6On5fV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSk6IEVuc3VyZSBhbGwgY29udGV4
dHMgd2VyZSB1bnJlZ2lzdGVyZWQuCisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJB
ZGRQcm9jZXNzUG9vbCk6IFJlZ2lzdGVyIHRoZSBwcm9jZXNzIHBvb2wgaW4gdGhlIHNlc3Npb24u
CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbCk6IFVu
cmVnaXN0ZXIgdGhlIHByb2Nlc3MgcG9sbCBmcm9tIHRoZSBzZXNzaW9uLgorICAgICAgICAod2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKTogUmV0dXJuIHRoZSBsaXN0IG9m
IHByb2NlcyBwb29scyByZWdpc3RlcmVkLgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcik6IFJldHVybiB0aGUgV2ViS2l0Q29va2llTWFuYWdl
ci4KKyAgICAgICAgKHRvV2Vic2l0ZURhdGFUeXBlcyk6IEFkZCBDb29raWVzLgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4
dDogQWRkIG5ldyBzeW1ib2xzLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJz
aXRlRGF0YVJlY29yZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYnNpdGVEYXRhUmVjb3JkOjpk
aXNwbGF5TmFtZUZvckNvb2tpZUhvc3ROYW1lKTogSGFuZGxlIGxvY2FsaG9zdCBhcyBhIHNwZWNp
YWwgY2FzZSBoZXJlIGZvciBiYWNrd2FyZHMKKyAgICAgICAgY29tcGF0aWJpbGl0eS4KKworMjAx
Ny0wMi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAg
ICAgICAgQ29va2llTWFuYWdlciBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgc2Vzc2lvbgog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4MjI5CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tp
ZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29v
a2llTWFuYWdlci5jcHAKaW5kZXggYzAzY2MwYTk3ZDMuLjVkYzI1M2ZhNzk4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5h
Z2VyLmNwcApAQCAtMjAsMTEgKzIwLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCi0jaW5jbHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNv
b2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRl
LmgiCiAjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVzLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVjb3JkLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIv
R1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMzUsMTUgKzM3
LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgKiBAU2hvcnRfZGVzY3JpcHRpb246IERl
ZmluZXMgaG93IHRvIGhhbmRsZSBjb29raWVzIGluIGEgI1dlYktpdFdlYkNvbnRleHQKICAqIEBU
aXRsZTogV2ViS2l0Q29va2llTWFuYWdlcgogICoKLSAqIFRoZSAjV2ViS2l0Q29va2llTWFuYWdl
ciBkZWZpbmVzIGhvdyB0byBoYW5kbGUgY29va2llcyBpbiBhCi0gKiAjV2ViS2l0V2ViQ29udGV4
dC4gR2V0IGl0IGZyb20gdGhlIGNvbnRleHQgd2l0aAotICogd2Via2l0X3dlYl9jb250ZXh0X2dl
dF9jb29raWVfbWFuYWdlcigpLCBhbmQgdXNlIGl0IHRvIHNldCB3aGVyZSB0bworICogVGhlIFdl
YktpdENvb2tpZU1hbmFnZXIgZGVmaW5lcyBob3cgdG8gc2V0dXAgYW5kIGhhbmRsZSBjb29raWVz
LgorICogWW91IGNhbiBnZXQgaXQgZnJvbSBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgd2l0
aAorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcigpLCBh
bmQgdXNlIGl0IHRvIHNldCB3aGVyZSB0bwogICogc3RvcmUgY29va2llcywgd2l0aCB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSgpLAotICogdG8gZ2V0IHRoZSBs
aXN0IG9mIGRvbWFpbnMgd2l0aCBjb29raWVzLCB3aXRoCi0gKiB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKCksIG9yIHRvIHNldCB0aGUKLSAqIGFjY2VwdGFu
Y2UgcG9saWN5LCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeSgp
Ci0gKiAoYW1vbmcgb3RoZXIgYWN0aW9ucykuCi0gKgorICogb3IgdG8gc2V0IHRoZSBhY2NlcHRh
bmNlIHBvbGljeSwgd2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3ko
KS4KICAqLwogCiBlbnVtIHsKQEAgLTUzLDEyICs1MSw3IEBAIGVudW0gewogfTsKIAogc3RydWN0
IF9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSB7Ci0gICAgfl9XZWJLaXRDb29raWVNYW5hZ2Vy
UHJpdmF0ZSgpCi0gICAgewotICAgICAgICB3ZWJDb29raWVNYW5hZ2VyLT5zdG9wT2JzZXJ2aW5n
Q29va2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0g
ICAgfQotCi0gICAgUmVmUHRyPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gd2ViQ29va2llTWFuYWdl
cjsKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwogfTsKIAogc3Rh
dGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTA4LDkgKzEwMSwy
NiBAQCBzdGF0aWMgaW5saW5lIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgdG9IVFRQQ29va2llQWNj
ZXB0UG9saWN5KFdlYktpdENvb2tpZUFjY2VwdAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgd2Vi
a2l0Q29va2llTWFuYWdlckRpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdENv
b2tpZU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KTsKKyAg
ICBpZiAobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpIHsKKyAgICAgICAgZ19vYmplY3RfcmVt
b3ZlX3dlYWtfcG9pbnRlcihHX09CSkVDVChtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpKTsKKwor
ICAgICAgICBhdXRvIHNlc3Npb25JRCA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFT
dG9yZShtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikud2Vic2l0ZURhdGFTdG9yZSgpLnNlc3Np
b25JRCgpOworICAgICAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkKKyAg
ICAgICAgICAgIHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4o
KS0+c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklEKTsKKworICAgICAgICBtYW5h
Z2VyLT5wcml2LT5kYXRhTWFuYWdlciA9IG51bGxwdHI7CisgICAgfQorCisgICAgR19PQkpFQ1Rf
Q0xBU1Mod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0
KTsKK30KKwogc3RhdGljIHZvaWQgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2NsYXNzX2luaXQoV2Vi
S2l0Q29va2llTWFuYWdlckNsYXNzKiBmaW5kQ2xhc3MpCiB7CiAgICAgR09iamVjdENsYXNzKiBn
T2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhmaW5kQ2xhc3MpOworICAgIGdPYmplY3RDbGFz
cy0+ZGlzcG9zZSA9IHdlYmtpdENvb2tpZU1hbmFnZXJEaXNwb3NlOwogCiAgICAgLyoqCiAgICAg
ICogV2ViS2l0Q29va2llTWFuYWdlcjo6Y2hhbmdlZDoKQEAgLTEyNywyNiArMTM3LDE3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9jbGFzc19pbml0KFdlYktpdENvb2tpZU1h
bmFnZXJDbGFzcyogZmluZENsYXNzCiAgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvb2tpZXNEaWRDaGFuZ2UoV0tDb29raWVNYW5hZ2VyUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29v
a2llTWFuYWdlckNyZWF0ZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyKQog
ewotICAgIGdfc2lnbmFsX2VtaXQoV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGNsaWVudEluZm8pLCBz
aWduYWxzW0NIQU5HRURdLCAwKTsKLX0KLQotV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29v
a2llTWFuYWdlckNyZWF0ZShXZWJDb29raWVNYW5hZ2VyUHJveHkqIHdlYkNvb2tpZU1hbmFnZXIp
Ci17Ci0gICAgV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9DT09LSUVfTUFO
QUdFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfQ09PS0lFX01BTkFHRVIsIE5VTEwpKTsKLSAg
ICBtYW5hZ2VyLT5wcml2LT53ZWJDb29raWVNYW5hZ2VyID0gd2ViQ29va2llTWFuYWdlcjsKLQot
ICAgIFdLQ29va2llTWFuYWdlckNsaWVudFYwIHdrQ29va2llTWFuYWdlckNsaWVudCA9IHsKLSAg
ICAgICAgewotICAgICAgICAgICAgMCwgLy8gdmVyc2lvbgotICAgICAgICAgICAgbWFuYWdlciwg
Ly8gY2xpZW50SW5mbwotICAgICAgICB9LAotICAgICAgICBjb29raWVzRGlkQ2hhbmdlCi0gICAg
fTsKLSAgICBXS0Nvb2tpZU1hbmFnZXJTZXRDbGllbnQodG9BUEkod2ViQ29va2llTWFuYWdlciks
ICZ3a0Nvb2tpZU1hbmFnZXJDbGllbnQuYmFzZSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+d2ViQ29v
a2llTWFuYWdlci0+c3RhcnRPYnNlcnZpbmdDb29raWVDaGFuZ2VzKFdlYkNvcmU6OlNlc3Npb25J
RDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKLQorICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFn
ZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJ
RV9NQU5BR0VSLCBudWxscHRyKSk7CisgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBk
YXRhTWFuYWdlcjsKKyAgICBnX29iamVjdF9hZGRfd2Vha19wb2ludGVyKEdfT0JKRUNUKGRhdGFN
YW5hZ2VyKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZtYW5hZ2VyLT5wcml2LT5kYXRhTWFu
YWdlcikpOworICAgIGF1dG8gc2Vzc2lvbklEID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0
RGF0YVN0b3JlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKS53ZWJzaXRlRGF0YVN0b3JlKCku
c2Vzc2lvbklEKCk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5Pigp
LT5zdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoc2Vzc2lvbklELCBbbWFuYWdlcl0geworICAg
ICAgICAgICAgZ19zaWduYWxfZW1pdChtYW5hZ2VyLCBzaWduYWxzW0NIQU5HRURdLCAwKTsKKyAg
ICAgICAgfSk7CisgICAgfQogICAgIHJldHVybiBtYW5hZ2VyOwogfQogCkBAIC0xNjMsMTUgKzE2
NCwyNCBAQCBXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKFdl
YkNvb2tpZU1hbmFnZXJQcm94eSogd2ViQ29va2llTQogICogc2lnbmFsIGlzIGVtaXR0ZWQuCiAg
KiBCeSBkZWZhdWx0LCBAY29va2llX21hbmFnZXIgZG9lc24ndCBzdG9yZSB0aGUgY29va2llcyBw
ZXJzaXN0ZW5seSwgc28geW91IG5lZWQgdG8gY2FsbCB0aGlzCiAgKiBtZXRob2QgdG8ga2VlcCBj
b29raWVzIHNhdmVkIGFjcm9zcyBzZXNzaW9ucy4KKyAqCisgKiBUaGlzIG1ldGhvZCBzaG91bGQg
bmV2ZXIgYmUgY2FsbGVkIG9uIGEgI1dlYktpdENvb2tpZU1hbmFnZXIgYXNzb2NpYXRlZCB0byBh
biBlcGhlbWVyYWwgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KICAqLwogdm9pZCB3ZWJraXRf
Y29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgV2ViS2l0Q29va2llUGVyc2lzdGVudFN0
b3JhZ2Ugc3RvcmFnZSkKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVf
TUFOQUdFUihtYW5hZ2VyKSk7CiAgICAgZ19yZXR1cm5faWZfZmFpbChmaWxlbmFtZSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbCghd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJh
bChtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpOwogCi0gICAgbWFuYWdlci0+cHJpdi0+d2Vi
Q29va2llTWFuYWdlci0+c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV2ViQ29yZTo6U2Vzc2lv
bklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIG1hbmFnZXItPnByaXYtPndlYkNvb2tpZU1h
bmFnZXItPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFN0cmluZzo6ZnJvbVVURjgoZmlsZW5h
bWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOwotICAgIG1h
bmFnZXItPnByaXYtPndlYkNvb2tpZU1hbmFnZXItPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdl
cyhXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgZm9yIChhdXRv
KiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyht
YW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKKyAgICAgICAgYXV0byogY29va2llTWFuYWdl
ciA9IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKTsKKwor
ICAgICAgICBjb29raWVNYW5hZ2VyLT5zdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJDb3Jl
OjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAgICAgIGNvb2tpZU1hbmFnZXIt
PnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFN0cmluZzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0
b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFnZSkpOworICAgICAgICBjb29r
aWVNYW5hZ2VyLT5zdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMoV2ViQ29yZTo6U2Vzc2lvbklE
OjpkZWZhdWx0U2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAgICAgICAgICBnX3NpZ25hbF9l
bWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgICAgICB9KTsKKyAgICB9CiB9
CiAKIC8qKgpAQCAtMTg0LDggKzE5NCwxMCBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9z
ZXRfcGVyc2lzdGVudF9zdG9yYWdlKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsCiB2b2lk
IHdlYmtpdF9jb29raWVfbWFuYWdlcl9zZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyLCBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5KQogewogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyLT5w
cml2LT5kYXRhTWFuYWdlcikpOwogCi0gICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdl
ci0+c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9s
aWN5KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCisgICAgICAg
IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRU
UENvb2tpZUFjY2VwdFBvbGljeSh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiB9
CiAKIHN0YXRpYyB2b2lkIHdlYmtpdENvb2tpZU1hbmFnZXJHZXRBY2NlcHRQb2xpY3lDYWxsYmFj
ayhXS0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBXS0Vycm9yUmVmLCB2b2lkKiBjb250
ZXh0KQpAQCAtMjA5LDkgKzIyMSwxOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRDb29raWVNYW5hZ2Vy
R2V0QWNjZXB0UG9saWN5Q2FsbGJhY2soV0tIVFRQQ29va2llQWNjZXB0UG9saWN5CiB2b2lkIHdl
YmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2Vy
KiBtYW5hZ2VyLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNr
IGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIp
KTsKIAotICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwg
Y2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICBtYW5hZ2VyLT5wcml2LT53ZWJDb29raWVNYW5hZ2Vy
LT5nZXRIVFRQQ29va2llQWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tI
VFRQQ29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5Pih0YXNrLCB3ZWJr
aXRDb29raWVNYW5hZ2VyR2V0QWNjZXB0UG9saWN5Q2FsbGJhY2spKTsKKyAgICBHUmVmUHRyPEdU
YXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNh
bGxiYWNrLCB1c2VyRGF0YSkpOworCisgICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBh
bGwgcHJvY2VzcyBwb29scyBoYXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sg
YW55LgorICAgIGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7CisgICAgaWYg
KHByb2Nlc3NQb29scy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFz
ay5nZXQoKSwgV0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koCisgICAg
ICAgIHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tIVFRQQ29va2llQWNjZXB0UG9saWN5LCBI
VFRQQ29va2llQWNjZXB0UG9saWN5Pih0YXNrLmxlYWtSZWYoKSwgd2Via2l0Q29va2llTWFuYWdl
ckdldEFjY2VwdFBvbGljeUNhbGxiYWNrKSk7CiB9CiAKIC8qKgpAQCAtMjMzLDI1ICsyNTUsNiBA
QCBXZWJLaXRDb29raWVBY2NlcHRQb2xpY3kgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2Nl
cHRfcG9saWN5X2ZpbmlzaChXZWJLaXRDbwogICAgIHJldHVybiByZXR1cm5WYWx1ZSA9PSAtMSA/
IFdFQktJVF9DT09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSA6IHN0YXRpY19jYXN0
PFdlYktpdENvb2tpZUFjY2VwdFBvbGljeT4ocmV0dXJuVmFsdWUpOwogfQogCi1zdGF0aWMgdm9p
ZCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0RG9tYWluc1dpdGhDb29raWVzQ2FsbGJhY2soV0tBcnJh
eVJlZiB3a0RvbWFpbnMsIFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgR1JlZlB0
cjxHVGFzaz4gdGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29udGV4dCkpOwotICAgIGlmIChnX3Rh
c2tfcmV0dXJuX2Vycm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdldCgpKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgQVBJOjpBcnJheSogZG9tYWlucyA9IHRvSW1wbCh3a0RvbWFpbnMpOwotICAgIEdQ
dHJBcnJheSogcmV0dXJuVmFsdWUgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoZG9tYWlucy0+c2l6
ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRvbWFpbnMtPnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIEFQSTo6U3RyaW5nKiBkb21haW5TdHJpbmcgPSBzdGF0aWNfY2FzdDxBUEk6OlN0
cmluZyo+KGRvbWFpbnMtPmF0KGkpKTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IGRvbWFpblN0
cmluZy0+c3RyaW5nKCk7Ci0gICAgICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXR1cm5WYWx1ZSwgZ19zdHJk
dXAoZG9tYWluLnV0ZjgoKS5kYXRhKCkpKTsKLSAgICB9Ci0gICAgZ19wdHJfYXJyYXlfYWRkKHJl
dHVyblZhbHVlLCAwKTsKLSAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgZ19w
dHJfYXJyYXlfZnJlZShyZXR1cm5WYWx1ZSwgRkFMU0UpLCByZWludGVycHJldF9jYXN0PEdEZXN0
cm95Tm90aWZ5PihnX3N0cmZyZWV2KSk7Ci19Ci0KIC8qKgogICogd2Via2l0X2Nvb2tpZV9tYW5h
Z2VyX2dldF9kb21haW5zX3dpdGhfY29va2llczoKICAqIEBjb29raWVfbWFuYWdlcjogYSAjV2Vi
S2l0Q29va2llTWFuYWdlcgpAQCAtMjYzLDEzICsyNjYsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0
Q29va2llTWFuYWdlckdldERvbWFpbnNXaXRoQ29va2llc0NhbGxiYWNrKFdLQXJyYXlSZWYgd2tE
b21haW4KICAqCiAgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3
aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKICAqIHdlYmtpdF9jb29raWVfbWFuYWdl
cl9nZXRfZG9tYWluc193aXRoX2Nvb2tpZXNfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2Yg
dGhlIG9wZXJhdGlvbi4KKyAqCisgKiBEZXByZWNhdGVkOiAyLjE2OiBVc2Ugd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2ZldGNoKCkgaW5zdGVhZC4KICAqLwogdm9pZCB3ZWJraXRfY29va2ll
X21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsIEdDYW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2Fs
bGJhY2ssIGdwb2ludGVyIHVzZXJEYXRhKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpOwog
CiAgICAgR1Rhc2sqIHRhc2sgPSBnX3Rhc2tfbmV3KG1hbmFnZXIsIGNhbmNlbGxhYmxlLCBjYWxs
YmFjaywgdXNlckRhdGEpOwotICAgIG1hbmFnZXItPnByaXYtPndlYkNvb2tpZU1hbmFnZXItPmdl
dEhvc3RuYW1lc1dpdGhDb29raWVzKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25J
RCgpLCB0b0dlbmVyaWNDYWxsYmFja0Z1bmN0aW9uKHRhc2ssIHdlYmtpdENvb2tpZU1hbmFnZXJH
ZXREb21haW5zV2l0aENvb2tpZXNDYWxsYmFjaykpOworICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9mZXRjaChtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlciwgV0VCS0lUX1dFQlNJVEVf
REFUQV9DT09LSUVTLCBjYW5jZWxsYWJsZSwgW10oR09iamVjdCogb2JqZWN0LCBHQXN5bmNSZXN1
bHQqIHJlc3VsdCwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihHX1RBU0sodXNlckRhdGEpKTsKKyAgICAgICAgR0Vycm9yKiBlcnJv
ciA9IG51bGxwdHI7CisgICAgICAgIEdVbmlxdWVQdHI8R0xpc3Q+IGRhdGFMaXN0KHdlYmtpdF93
ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaF9maW5pc2goV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5B
R0VSKG9iamVjdCksIHJlc3VsdCwgJmVycm9yKSk7CisgICAgICAgIGlmIChlcnJvcikgeworICAg
ICAgICAgICAgZ190YXNrX3JldHVybl9lcnJvcih0YXNrLmdldCgpLCBlcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBHUHRyQXJyYXkqIGRvbWFpbnMgPSBn
X3B0cl9hcnJheV9zaXplZF9uZXcoZ19saXN0X2xlbmd0aChkYXRhTGlzdC5nZXQoKSkpOworICAg
ICAgICBmb3IgKEdMaXN0KiBpdGVtID0gZGF0YUxpc3QuZ2V0KCk7IGl0ZW07IGl0ZW0gPSBnX2xp
c3RfbmV4dChpdGVtKSkgeworICAgICAgICAgICAgYXV0byogZGF0YSA9IHN0YXRpY19jYXN0PFdl
YktpdFdlYnNpdGVEYXRhKj4oaXRlbS0+ZGF0YSk7CisgICAgICAgICAgICBnX3B0cl9hcnJheV9h
ZGQoZG9tYWlucywgZ19zdHJkdXAod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSkp
OworICAgICAgICAgICAgd2Via2l0X3dlYnNpdGVfZGF0YV91bnJlZihkYXRhKTsKKyAgICAgICAg
fQorICAgICAgICBnX3B0cl9hcnJheV9hZGQoZG9tYWlucywgbnVsbHB0cik7CisgICAgICAgIGdf
dGFza19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgpLCBnX3B0cl9hcnJheV9mcmVlKGRvbWFpbnMs
IEZBTFNFKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ19zdHJmcmVldikpOwor
ICAgIH0sIHRhc2spOwogfQogCiAvKioKQEAgLTI4NCwxMSArMzA3LDEzIEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llcyhXZWJLaXRDb29raWVNYW5h
Z2VyKiBtYW5hZ2VyCiAgKgogICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChhcnJheSB6ZXJv
LXRlcm1pbmF0ZWQ9MSk6IEEgJU5VTEwgdGVybWluYXRlZCBhcnJheSBvZiBkb21haW4gbmFtZXMK
ICAqICAgIG9yICVOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKgorICogRGVwcmVjYXRlZDogMi4x
NjogVXNlIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9mZXRjaF9maW5pc2goKSBpbnN0ZWFk
LgogICovCiBnY2hhcioqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nv
b2tpZXNfZmluaXNoKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdBc3luY1Jlc3VsdCog
cmVzdWx0LCBHRXJyb3IqKiBlcnJvcikKIHsKLSAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIDApOwotICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIpLCAwKTsKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGdfdGFza19pc192YWxpZChyZXN1bHQsIG1hbmFnZXIp
LCBudWxscHRyKTsKIAogICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqKj4oZ190YXNr
X3Byb3BhZ2F0ZV9wb2ludGVyKEdfVEFTSyhyZXN1bHQpLCBlcnJvcikpOwogfQpAQCAtMjk5LDEz
ICszMjQsMjEgQEAgZ2NoYXIqKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0
aF9jb29raWVzX2ZpbmlzaChXZWJLaXRDb29raWVNYW5hZ2UKICAqIEBkb21haW46IGEgZG9tYWlu
IG5hbWUKICAqCiAgKiBSZW1vdmUgYWxsIGNvb2tpZXMgb2YgQGNvb2tpZV9tYW5hZ2VyIGZvciB0
aGUgZ2l2ZW4gQGRvbWFpbi4KKyAqCisgKiBEZXByZWNhdGVkOiAyLjE2OiBVc2Ugd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZSgpIGluc3RlYWQuCiAgKi8KIHZvaWQgd2Via2l0X2Nv
b2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4oV2ViS2l0Q29va2llTWFuYWdl
ciogbWFuYWdlciwgY29uc3QgZ2NoYXIqIGRvbWFpbikKIHsKICAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChkb21haW4pOwotCi0gICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+ZGVsZXRl
Q29va2llc0Zvckhvc3RuYW1lKFdlYkNvcmU6OlNlc3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgp
LCBTdHJpbmc6OmZyb21VVEY4KGRvbWFpbikpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyKSk7CisK
KyAgICBXZWJzaXRlRGF0YVJlY29yZCByZWNvcmQ7CisgICAgcmVjb3JkLmFkZENvb2tpZUhvc3RO
YW1lKFN0cmluZzo6ZnJvbVVURjgoZG9tYWluKSk7CisgICAgYXV0byogZGF0YSA9IHdlYmtpdFdl
YnNpdGVEYXRhQ3JlYXRlKFdURk1vdmUocmVjb3JkKSk7CisgICAgR0xpc3QgZGF0YUxpc3QgPSB7
IGRhdGEsIG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfcmVtb3ZlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyLCBXRUJLSVRfV0VCU0lURV9EQVRB
X0NPT0tJRVMsICZkYXRhTGlzdCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgd2Vi
a2l0X3dlYnNpdGVfZGF0YV91bnJlZihkYXRhKTsKIH0KIAogLyoqCkBAIC0zMTMsMTAgKzM0Niwx
MyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWlu
KFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZQogICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJL
aXRDb29raWVNYW5hZ2VyCiAgKgogICogRGVsZXRlIGFsbCBjb29raWVzIG9mIEBjb29raWVfbWFu
YWdlcgorICoKKyAqIERlcHJlY2F0ZWQ6IDIuMTY6IFVzZSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfY2xlYXIoKSBpbnN0ZWFkLgogICovCiB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9k
ZWxldGVfYWxsX2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlcikKIHsKICAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlci0+
cHJpdi0+ZGF0YU1hbmFnZXIpKTsKIAotICAgIG1hbmFnZXItPnByaXYtPndlYkNvb2tpZU1hbmFn
ZXItPmRlbGV0ZUFsbENvb2tpZXMoV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklE
KCkpOworICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcihtYW5hZ2VyLT5wcml2
LT5kYXRhTWFuYWdlciwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTLCAwLCBudWxscHRyLCBu
dWxscHRyLCBudWxscHRyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuaAppbmRleCBmMjVmMWEyYjBjOC4uZWUxN2Qy
MjA0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENvb2tpZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRDb29raWVNYW5hZ2VyLmgKQEAgLTEwNywyMiArMTA3LDIyIEBAIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeV9maW5pc2ggICAgICAgIChXZWJLaXRDb29raWVNYW5h
Z2VyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAgICAgICAgICAg
ICAgICAgICAgICAqKmVycm9yKTsKIAotV0VCS0lUX0FQSSB2b2lkCitXRUJLSVRfREVQUkVDQVRF
RF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNoKSB2b2lkCiB3ZWJraXRfY29v
a2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzICAgICAgICAoV2ViS2l0Q29va2ll
TWFuYWdlciAgICAgICAgICAqY29va2llX21hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAg
ICAgICAqY2FuY2VsbGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICAgICAgY2FsbGJhY2ss
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgdXNlcl9kYXRhKTsKIAotV0VCS0lUX0FQSSBn
Y2hhciAqKgorV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9mZXRjaF9maW5pc2gpIGdjaGFyICoqCiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFp
bnNfd2l0aF9jb29raWVzX2ZpbmlzaCAoV2ViS2l0Q29va2llTWFuYWdlciAgICAgICAgICAqY29v
a2llX21hbmFnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICAgICAqcmVzdWx0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFcnJvciAg
ICAgICAgICAgICAgICAgICAgICAqKmVycm9yKTsKIAotV0VCS0lUX0FQSSB2b2lkCitXRUJLSVRf
REVQUkVDQVRFRF9GT1Iod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZSkgdm9pZAog
d2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9jb29raWVzX2Zvcl9kb21haW4gICAgICAgKFdl
YktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgICAgKmRvbWFpbik7CiAKLVdFQktJVF9BUEkgdm9pZAorV0VCS0lUX0RFUFJF
Q0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcikgdm9pZAogd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2RlbGV0ZV9hbGxfY29va2llcyAgICAgICAgICAgICAgKFdlYktpdENv
b2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyKTsKIAogR19FTkRfREVDTFMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1h
bmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRD
b29raWVNYW5hZ2VyUHJpdmF0ZS5oCmluZGV4IDZiZTg0YWZhZWZlLi43NWFjNmYyODdlZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFu
YWdlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0xNywxMiArMTcsOSBAQAogICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRDb29raWVNYW5hZ2VyUHJp
dmF0ZV9oCi0jZGVmaW5lIFdlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlX2gKKyNwcmFnbWEgb25j
ZQogCi0jaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogI2luY2x1ZGUgIldlYktpdFBy
aXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaCIKIAotV2ViS2l0
Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXQ6OldlYkNvb2tp
ZU1hbmFnZXJQcm94eSopOwotCi0jZW5kaWYgLy8gV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGVf
aAorV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0Q29va2llTWFuYWdlckNyZWF0ZShXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQuY3BwCmluZGV4IGNiMmYzMTQxOGE5Li4yNWU3NzMzNDJhOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDdXN0
b21Qcm90b2NvbE1hbmFnZXJDbGllbnQuY3BwCkBAIC01Nyw2ICs1Nyw1IEBAIHByaXZhdGU6CiAK
IHZvaWQgYXR0YWNoQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50VG9Db250ZXh0KFdlYktpdFdl
YkNvbnRleHQqIHdlYkNvbnRleHQpCiB7Ci0gICAgYXV0byogcHJvY2Vzc1Bvb2wgPSB3ZWJraXRX
ZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViQ29udGV4dCk7Ci0gICAgcHJvY2Vzc1Bvb2wtPnNl
dEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4od2ViQ29udGV4dCkpOworICAgIHdlYmtpdFdlYkNvbnRleHRHZXRQ
cm9jZXNzUG9vbCh3ZWJDb250ZXh0KS5zZXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3Rk
OjptYWtlX3VuaXF1ZTxDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KHdlYkNvbnRleHQpKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERv
d25sb2FkQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dERvd25sb2FkQ2xpZW50LmNwcAppbmRleCBlODMzOGJjOTdlMi4uYTYxMzNjOTFjMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdERvd25sb2FkQ2xp
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3du
bG9hZENsaWVudC5jcHAKQEAgLTExNiw2ICsxMTYsNSBAQCBwcml2YXRlOgogCiB2b2lkIGF0dGFj
aERvd25sb2FkQ2xpZW50VG9Db250ZXh0KFdlYktpdFdlYkNvbnRleHQqIHdlYkNvbnRleHQpCiB7
Ci0gICAgYXV0byogcHJvY2Vzc1Bvb2wgPSB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wo
d2ViQ29udGV4dCk7Ci0gICAgcHJvY2Vzc1Bvb2wtPnNldERvd25sb2FkQ2xpZW50KHN0ZDo6bWFr
ZV91bmlxdWU8RG93bmxvYWRDbGllbnQ+KHdlYkNvbnRleHQpKTsKKyAgICB3ZWJraXRXZWJDb250
ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViQ29udGV4dCkuc2V0RG93bmxvYWRDbGllbnQoc3RkOjptYWtl
X3VuaXF1ZTxEb3dubG9hZENsaWVudD4od2ViQ29udGV4dCkpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5qZWN0ZWRCdW5kbGVDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5qZWN0ZWRCdW5k
bGVDbGllbnQuY3BwCmluZGV4IGYzMDRkMmY4YWEyLi4wZWM0NGQ0NjNmZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5qZWN0ZWRCdW5kbGVDbGll
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEluamVj
dGVkQnVuZGxlQ2xpZW50LmNwcApAQCAtMTQwLDUgKzE0MCw1IEBAIHZvaWQgYXR0YWNoSW5qZWN0
ZWRCdW5kbGVDbGllbnRUb0NvbnRleHQoV2ViS2l0V2ViQ29udGV4dCogd2ViQ29udGV4dCkKICAg
ICAgICAgMCwgLy8gZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRs
ZQogICAgICAgICBnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEKICAgICB9
OwotICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKHdlYmtpdFdlYkNv
bnRleHRHZXRQcm9jZXNzUG9vbCh3ZWJDb250ZXh0KSksICZ3a0luamVjdGVkQnVuZGxlQ2xpZW50
LmJhc2UpOworICAgIFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KHRvQVBJKCZ3ZWJr
aXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViQ29udGV4dCkpLCAmd2tJbmplY3RlZEJ1bmRs
ZUNsaWVudC5iYXNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFNlY3VyaXR5TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU1hbmFnZXIuY3BwCmluZGV4IGVlMzYyNmZiZTdlLi43
MjQ1ZGQ1ZWUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0U2VjdXJpdHlNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRTZWN1cml0eU1hbmFnZXIuY3BwCkBAIC02OSw3ICs2OSw3IEBAIFdlYktp
dFNlY3VyaXR5TWFuYWdlciogd2Via2l0U2VjdXJpdHlNYW5hZ2VyQ3JlYXRlKFdlYktpdFdlYkNv
bnRleHQqIHdlYkNvbnRleHQpCiBzdGF0aWMgdm9pZCByZWdpc3RlclNlY3VyaXR5UG9saWN5Rm9y
VVJJU2NoZW1lKFdlYktpdFNlY3VyaXR5TWFuYWdlciogbWFuYWdlciwgY29uc3QgY2hhciogc2No
ZW1lLCBTZWN1cml0eVBvbGljeSBwb2xpY3kpCiB7CiAgICAgU3RyaW5nIHVybFNjaGVtZSA9IFN0
cmluZzo6ZnJvbVVURjgoc2NoZW1lKTsKLSAgICBXZWJQcm9jZXNzUG9vbCogcHJvY2Vzc1Bvb2wg
PSB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wobWFuYWdlci0+cHJpdi0+d2ViQ29udGV4
dCk7CisgICAgYXV0byYgcHJvY2Vzc1Bvb2wgPSB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bv
b2wobWFuYWdlci0+cHJpdi0+d2ViQ29udGV4dCk7CiAKICAgICAvLyBXZSBrZWVwIHRoZSBXZWJD
b3JlOjpTY2hlbWVSZWdpc3RyeSBvZiB0aGUgVUkgcHJvY2VzcyBpbiBzeW5jIHdpdGggdGhlCiAg
ICAgLy8gd2ViIHByb2Nlc3Mgb25lLCBzbyB0aGF0IHdlIGNhbiByZXR1cm4gdGhlIFNlY3VyaXR5
UG9saWN5IGZvcgpAQCAtNzcsMjcgKzc3LDI3IEBAIHN0YXRpYyB2b2lkIHJlZ2lzdGVyU2VjdXJp
dHlQb2xpY3lGb3JVUklTY2hlbWUoV2ViS2l0U2VjdXJpdHlNYW5hZ2VyKiBtYW5hZ2VyLCBjCiAg
ICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIFNlY3VyaXR5UG9saWN5TG9jYWw6CiAgICAg
ICAgIFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJs
U2NoZW1lKTsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1
cmxTY2hlbWUpOworICAgICAgICBwcm9jZXNzUG9vbC5yZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwo
dXJsU2NoZW1lKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZWN1cml0eVBvbGljeU5vQWNj
ZXNzOgogICAgICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVB
c05vQWNjZXNzKHVybFNjaGVtZSk7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclVSTFNj
aGVtZUFzTm9BY2Nlc3ModXJsU2NoZW1lKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wucmVnaXN0ZXJV
UkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U2VjdXJpdHlQb2xpY3lEaXNwbGF5SXNvbGF0ZWQ6CiAgICAgICAgIFdlYkNvcmU6OlNjaGVtZVJl
Z2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKHVybFNjaGVtZSk7Ci0g
ICAgICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKHVy
bFNjaGVtZSk7CisgICAgICAgIHByb2Nlc3NQb29sLnJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5
SXNvbGF0ZWQodXJsU2NoZW1lKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZWN1cml0eVBv
bGljeVNlY3VyZToKICAgICAgICAgV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnk6OnJlZ2lzdGVyVVJM
U2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKLSAgICAgICAgcHJvY2Vzc1Bvb2wtPnJlZ2lzdGVy
VVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wucmVnaXN0
ZXJVUkxTY2hlbWVBc1NlY3VyZSh1cmxTY2hlbWUpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFNlY3VyaXR5UG9saWN5Q09SU0VuYWJsZWQ6CiAgICAgICAgIFdlYkNvcmU6OlNjaGVtZVJlZ2lz
dHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQodXJsU2NoZW1lKTsKLSAgICAgICAg
cHJvY2Vzc1Bvb2wtPnJlZ2lzdGVyVVJMU2NoZW1lQXNDT1JTRW5hYmxlZCh1cmxTY2hlbWUpOwor
ICAgICAgICBwcm9jZXNzUG9vbC5yZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQodXJsU2No
ZW1lKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZWN1cml0eVBvbGljeUVtcHR5RG9jdW1l
bnQ6CiAgICAgICAgIFdlYkNvcmU6OlNjaGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFz
RW1wdHlEb2N1bWVudCh1cmxTY2hlbWUpOwotICAgICAgICBwcm9jZXNzUG9vbC0+cmVnaXN0ZXJV
UkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQodXJsU2NoZW1lKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wu
cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQodXJsU2NoZW1lKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcAppbmRleCBjZmViNGQ5MDAzYy4uZjEwYjk0ZDI5NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuY3BwCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSAiVGV4dENoZWNrZXIuaCIKICNp
bmNsdWRlICJUZXh0Q2hlY2tlclN0YXRlLmgiCiAjaW5jbHVkZSAiV2ViQ2VydGlmaWNhdGVJbmZv
LmgiCi0jaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclByb3h5LmgiCiAjaW5jbHVkZSAiV2ViR2Vv
bG9jYXRpb25NYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJp
dmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgog
I2luY2x1ZGUgIldlYktpdERvd25sb2FkQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0RG93bmxv
YWRQcml2YXRlLmgiCkBAIC03OSwxMCArNzcsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
ICogWW91IGNhbiBkZWZpbmUgdGhlICNXZWJLaXRDYWNoZU1vZGVsIGFuZCAjV2ViS2l0UHJvY2Vz
c01vZGVsIHdpdGgKICAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwoKSBhbmQK
ICAqIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfcHJvY2Vzc19tb2RlbCgpLCBkZXBlbmRpbmcgb24g
dGhlIG5lZWRzIG9mCi0gKiB5b3VyIGFwcGxpY2F0aW9uLiBZb3UgY2FuIGFjY2VzcyB0aGUgI1dl
YktpdENvb2tpZU1hbmFnZXIgb3IgdGhlCi0gKiAjV2ViS2l0U2VjdXJpdHlNYW5hZ2VyIHRvIHNw
ZWNpZnkgdGhlIGJlaGF2aW91ciBvZiB5b3VyIGFwcGxpY2F0aW9uCi0gKiByZWdhcmRpbmcgY29v
a2llcyBhbmQgc2VjdXJpdHksIHVzaW5nCi0gKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2Nvb2tp
ZV9tYW5hZ2VyKCkgYW5kCisgKiB5b3VyIGFwcGxpY2F0aW9uLiBZb3UgY2FuIGFjY2VzcyB0aGUg
I1dlYktpdFNlY3VyaXR5TWFuYWdlciB0byBzcGVjaWZ5CisgKiB0aGUgYmVoYXZpb3VyIG9mIHlv
dXIgYXBwbGljYXRpb24gcmVnYXJkaW5nIHNlY3VyaXR5IHVzaW5nCiAgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3NlY3VyaXR5X21hbmFnZXIoKSBmb3IgdGhhdC4KICAqCiAgKiBJdCBpcyBhbHNv
IHBvc3NpYmxlIHRvIGNoYW5nZSB5b3VyIHByZWZlcnJlZCBsYW5ndWFnZSBvciBlbmFibGUKQEAg
LTE1Nyw3ICsxNTMsNiBAQCBzdHJ1Y3QgX1dlYktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBS
ZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+IHByb2Nlc3NQb29sOwogICAgIGJvb2wgY2xpZW50c0RldGFj
aGVkOwogCi0gICAgR1JlZlB0cjxXZWJLaXRDb29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwog
ICAgIEdSZWZQdHI8V2ViS2l0RmF2aWNvbkRhdGFiYXNlPiBmYXZpY29uRGF0YWJhc2U7CiAgICAg
R1JlZlB0cjxXZWJLaXRTZWN1cml0eU1hbmFnZXI+IHNlY3VyaXR5TWFuYWdlcjsKICAgICBVUklT
Y2hlbWVIYW5kbGVyTWFwIHVyaVNjaGVtZUhhbmRsZXJzOwpAQCAtMjczLDYgKzI2OCw4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAg
ICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpCiAgICAgICAgIHByaXYtPndlYnNpdGVE
YXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUod2Vi
c2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25Gb3JXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24o
Y29uZmlndXJhdGlvbikpKTsKIAorICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nl
c3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnByaXYtPnByb2Nlc3NQb29s
KTsKKwogICAgIHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMOwogICAgIHByaXYtPnByb2Nlc3NQb29sLT5zZXRJZ25vcmVUTFNFcnJvcnMoZmFsc2Up
OwogCkBAIC0zMDMsNiArMzAwLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHREaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldEN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudChudWxscHRyKTsKICAgICB9CiAKKyAgICBpZiAocHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyKSB7CisgICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJl
bW92ZVByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgKnByaXYtPnBy
b2Nlc3NQb29sKTsKKyAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsK
KyAgICB9CisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2NvbnRleHRfcGFyZW50X2Ns
YXNzKS0+ZGlzcG9zZShvYmplY3QpOwogfQogCkBAIC02OTUsMTMgKzY5Nyw5IEBAIFdlYktpdERv
d25sb2FkKiB3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKFdlYktpdFdlYkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0CiAgKi8KIFdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfY29va2llX21hbmFnZXIoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKIHsKLSAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCksIDAp
OwotCi0gICAgV2ViS2l0V2ViQ29udGV4dFByaXZhdGUqIHByaXYgPSBjb250ZXh0LT5wcml2Owot
ICAgIGlmICghcHJpdi0+Y29va2llTWFuYWdlcikKLSAgICAgICAgcHJpdi0+Y29va2llTWFuYWdl
ciA9IGFkb3B0R1JlZih3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKHByaXYtPnByb2Nlc3NQb29s
LT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKSkpOworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CiAKLSAg
ICByZXR1cm4gcHJpdi0+Y29va2llTWFuYWdlci5nZXQoKTsKKyAgICByZXR1cm4gd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcihjb250ZXh0LT5wcml2LT53ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpOwogfQogCiBzdGF0aWMgdm9pZCBlbnN1cmVGYXZpY29uRGF0
YWJhc2UoV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKQEAgLTE0MzUsMTEgKzE0MzMsMTEgQEAg
R1ZhcmlhbnQqIHdlYmtpdFdlYkNvbnRleHRJbml0aWFsaXplV2ViRXh0ZW5zaW9ucyhXZWJLaXRX
ZWJDb250ZXh0KiBjb250ZXh0KQogICAgICAgICBjb250ZXh0LT5wcml2LT53ZWJFeHRlbnNpb25z
SW5pdGlhbGl6YXRpb25Vc2VyRGF0YS5nZXQoKSk7CiB9CiAKLVdlYlByb2Nlc3NQb29sKiB3ZWJr
aXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCkKK1dl
YlByb2Nlc3NQb29sJiB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0V2ViQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VCX0NPTlRFWFQoY29u
dGV4dCkpOwogCi0gICAgcmV0dXJuIGNvbnRleHQtPnByaXYtPnByb2Nlc3NQb29sLmdldCgpOwor
ICAgIHJldHVybiAqY29udGV4dC0+cHJpdi0+cHJvY2Vzc1Bvb2w7CiB9CiAKIHZvaWQgd2Via2l0
V2ViQ29udGV4dFN0YXJ0TG9hZGluZ0N1c3RvbVByb3RvY29sKFdlYktpdFdlYkNvbnRleHQqIGNv
bnRleHQsIHVpbnQ2NF90IGN1c3RvbVByb3RvY29sSUQsIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
UmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eSYgbWFu
YWdlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkNvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCmluZGV4IGI5NGU1MTg2YzkzLi5jMmIyOWFjNzRmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dFByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJDb250ZXh0UHJpdmF0ZS5oCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViUHJv
Y2Vzc1Bvb2wuaCIKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgogCi1XZWJL
aXQ6OldlYlByb2Nlc3NQb29sKiB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0
V2ViQ29udGV4dCopOworV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYgd2Via2l0V2ViQ29udGV4dEdl
dFByb2Nlc3NQb29sKFdlYktpdFdlYkNvbnRleHQqKTsKIFdlYktpdERvd25sb2FkKiB3ZWJraXRX
ZWJDb250ZXh0R2V0T3JDcmVhdGVEb3dubG9hZChXZWJLaXQ6OkRvd25sb2FkUHJveHkqKTsKIFdl
YktpdERvd25sb2FkKiB3ZWJraXRXZWJDb250ZXh0U3RhcnREb3dubG9hZChXZWJLaXRXZWJDb250
ZXh0KiwgY29uc3QgY2hhciogdXJpLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogdm9pZCB3ZWJr
aXRXZWJDb250ZXh0UmVtb3ZlRG93bmxvYWQoV2ViS2l0OjpEb3dubG9hZFByb3h5Kik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCmlu
ZGV4IGJkZjc4ZGZlYTVkLi5mNjkzZDY3N2Y3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKQEAgLTYyLDYgKzYyLDcgQEAKICNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJW
aWV3UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdTZXNzaW9uU3RhdGVQcml2YXRl
LmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQVBJQ2FzdC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2VydGlmaWNhdGVJbmZvLmg+CkBA
IC02NTUsOCArNjU2LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZChH
T2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKCFwcml2LT5zZXR0aW5ncykKICAgICAgICAgcHJpdi0+
c2V0dGluZ3MgPSBhZG9wdEdSZWYod2Via2l0X3NldHRpbmdzX25ldygpKTsKIAotICAgIGlmIChw
cml2LT5pc0VwaGVtZXJhbCAmJiAhd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChwcml2
LT5jb250ZXh0LmdldCgpKSkKKyAgICBpZiAocHJpdi0+aXNFcGhlbWVyYWwgJiYgIXdlYmtpdF93
ZWJfY29udGV4dF9pc19lcGhlbWVyYWwocHJpdi0+Y29udGV4dC5nZXQoKSkpIHsKICAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9uZXdfZXBoZW1lcmFsKCkpOworICAgICAgICB3ZWJraXRXZWJzaXRlRGF0YU1hbmFn
ZXJBZGRQcm9jZXNzUG9vbChwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCksIHdlYmtpdFdl
YkNvbnRleHRHZXRQcm9jZXNzUG9vbChwcml2LT5jb250ZXh0LmdldCgpKSk7CisgICAgfQogCiAg
ICAgd2Via2l0V2ViQ29udGV4dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KHByaXYtPmNvbnRleHQuZ2V0
KCksIHdlYlZpZXcsIHByaXYtPnVzZXJDb250ZW50TWFuYWdlci5nZXQoKSwgcHJpdi0+cmVsYXRl
ZFZpZXcpOwogCkBAIC03ODUsNiArNzg4LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdE
aXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAgICAgd2Via2l0V2ViQ29udGV4dFdlYlZpZXdE
ZXN0cm95ZWQod2ViVmlldy0+cHJpdi0+Y29udGV4dC5nZXQoKSwgd2ViVmlldyk7CiAgICAgfQog
CisgICAgaWYgKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikgeworICAgICAgICB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbCh3ZWJWaWV3LT5wcml2LT53
ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCksIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9jZXNzUG9vbCh3
ZWJWaWV3LT5wcml2LT5jb250ZXh0LmdldCgpKSk7CisgICAgICAgIHdlYlZpZXctPnByaXYtPndl
YnNpdGVEYXRhTWFuYWdlciA9IG51bGxwdHI7CisgICAgfQorCiAgICAgR19PQkpFQ1RfQ0xBU1Mo
d2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIApAQCAt
MjI3Miw2ICsyMjgwLDI3IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3Cisg
KgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFzc29jaWF0ZWQgdG8gQHdl
Yl92aWV3LiBJZiBAd2ViX3ZpZXcgaXMgbm90IGVwaGVtZXJhbAorICogdGhlIHJldHVybmVkICNX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgI1dlYktpdFdl
YlZpZXc6d2ViLWNvbnRleHQgb25lLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
YSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogU2luY2U6IDIuMTYKKyAqLworV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBudWxscHRyKTsKKworICAgIGlmICh3ZWJW
aWV3LT5wcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIpCisgICAgICAgIHJldHVybiB3ZWJWaWV3LT5w
cml2LT53ZWJzaXRlRGF0YU1hbmFnZXIuZ2V0KCk7CisKKyAgICByZXR1cm4gd2Via2l0X3dlYl9j
b250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJWaWV3LT5wcml2LT5jb250ZXh0Lmdl
dCgpKTsKK30KKworLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfdHJ5X2Nsb3NlOgogICogQHdlYl92
aWV3OiBhICNXZWJLaXRXZWJWaWV3CiAgKgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IDcwNTE2NTg1MDNhLi40YjUyNGYxNWQwZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aApAQCAtMjc3LDYgKzI3Nyw5IEBAIHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF91c2VyX2NvbnRl
bnRfbWFuYWdlciAgICAgICAgKFdlYktpdFVzZXJDb250ZW50TWFuYWdlcgogV0VCS0lUX0FQSSBn
Ym9vbGVhbgogd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCAgICAgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitXRUJLSVRfQVBJ
IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldyk7CisKIFdFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvbnRleHQgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAgICAgICp3ZWJfdmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmNwcAppbmRleCA0ZjQwYjY3NGY0Ny4uNTlkZWE1
ODIyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYnNpdGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YS5jcHAKQEAgLTczLDcgKzczLDggQEAgc3RhdGljIGJvb2wgcmVjb3Jk
Q29udGFpbnNTdXBwb3J0ZWREYXRhVHlwZXMoY29uc3QgV2Vic2l0ZURhdGFSZWNvcmQmIHJlY29y
ZCkKICAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpMb2NhbFN0b3JhZ2UsCiAgICAgICAgIFdlYnNp
dGVEYXRhVHlwZTo6V2ViU1FMRGF0YWJhc2VzLAogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6Oklu
ZGV4ZWREQkRhdGFiYXNlcywKLSAgICAgICAgV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhCisg
ICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0luRGF0YSwKKyAgICAgICAgV2Vic2l0ZURhdGFU
eXBlOjpDb29raWVzCiAgICAgfTsKICAgICByZXR1cm4gcmVjb3JkLnR5cGVzLmNvbnRhaW5zKHR5
cGVzU3VwcG9ydGVkKTsKIH0KQEAgLTk3LDYgKzk4LDggQEAgc3RhdGljIFdlYktpdFdlYnNpdGVE
YXRhVHlwZXMgdG9XZWJLaXRXZWJzaXRlRGF0YVR5cGVzKE9wdGlvblNldDxXZWJzaXRlRGF0YVR5
cGUKICAgICAgICAgcmV0dXJuVmFsdWUgfD0gV0VCS0lUX1dFQlNJVEVfREFUQV9JTkRFWEVEREJf
REFUQUJBU0VTOwogICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OlBsdWdJ
bkRhdGEpKQogICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJ
Tl9EQVRBOworICAgIGlmICh0eXBlcy5jb250YWlucyhXZWJzaXRlRGF0YVR5cGU6OkNvb2tpZXMp
KQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVM7CiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYktpdFdlYnNpdGVEYXRhVHlwZXM+KHJldHVyblZhbHVl
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2Vic2l0ZURhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYnNpdGVEYXRhLmgKaW5kZXggNWU4YjZjODdkNGYuLjA2NTA0N2ZlMTdjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgK
QEAgLTQzLDYgKzQzLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhIFdlYktp
dFdlYnNpdGVEYXRhOwogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfV0VCU1FMX0RBVEFCQVNFUzog
V2ViU1FMIGRhdGFiYXNlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9EQVRB
QkFTRVM6IEluZGV4ZWREQiBkYXRhYmFzZXMuCiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVH
SU5fREFUQTogUGx1Z2lucyBkYXRhLgorICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzog
Q29va2llcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTDogQWxsIHR5cGVzLgogICoKICAq
IEVudW0gdmFsdWVzIHdpdGggZmxhZ3MgcmVwcmVzZW50aW5nIHR5cGVzIG9mIFdlYnNpdGUgZGF0
YS4KQEAgLTU4LDcgKzU5LDggQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VCU0lURV9E
QVRBX1dFQlNRTF9EQVRBQkFTRVMgICAgICAgICAgPSAxIDw8IDUsCiAgICAgV0VCS0lUX1dFQlNJ
VEVfREFUQV9JTkRFWEVEREJfREFUQUJBU0VTICAgICAgID0gMSA8PCA2LAogICAgIFdFQktJVF9X
RUJTSVRFX0RBVEFfUExVR0lOX0RBVEEgICAgICAgICAgICAgICA9IDEgPDwgNywKLSAgICBXRUJL
SVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAoMSA8PCA4KSAtIDEK
KyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMgICAgICAgICAgICAgICAgICAgPSAxIDw8
IDgsCisgICAgV0VCS0lUX1dFQlNJVEVfREFUQV9BTEwgICAgICAgICAgICAgICAgICAgICAgID0g
KDEgPDwgOSkgLSAxCiB9IFdlYktpdFdlYnNpdGVEYXRhVHlwZXM7CiAKIFdFQktJVF9BUEkgR1R5
cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCmluZGV4IDIyNmYyZjdlYmVlLi5mNTI5YzZmNjli
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVk
ZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgiCiAKICNpbmNsdWRlICJBUElXZWJzaXRlRGF0
YVN0b3JlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKICNpbmNs
dWRlICJXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0
V2Vic2l0ZURhdGFQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGFGZXRjaE9wdGlvbi5o
IgpAQCAtNjksNiArNzAsOCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogICogU2luY2U6IDIu
MTAKICAqLwogCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCiBlbnVtIHsKICAgICBQUk9QXzAs
CiAKQEAgLTgzLDYgKzg2LDExIEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXJQcml2YXRlIHsKKyAgICB+X1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZh
dGUoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHByb2Nlc3NQb29scy5pc0VtcHR5KCkpOworICAg
IH0KKwogICAgIFJlZlB0cjxBUEk6OldlYnNpdGVEYXRhU3RvcmU+IHdlYnNpdGVEYXRhU3RvcmU7
CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBiYXNlRGF0YURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRy
PGNoYXI+IGJhc2VDYWNoZURpcmVjdG9yeTsKQEAgLTkxLDYgKzk5LDkgQEAgc3RydWN0IF9XZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxp
Y2F0aW9uQ2FjaGVEaXJlY3Rvcnk7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiBpbmRleGVkREJEaXJl
Y3Rvcnk7CiAgICAgR1VuaXF1ZVB0cjxjaGFyPiB3ZWJTUUxEaXJlY3Rvcnk7CisKKyAgICBHUmVm
UHRyPFdlYktpdENvb2tpZU1hbmFnZXI+IGNvb2tpZU1hbmFnZXI7CisgICAgVmVjdG9yPFdlYlBy
b2Nlc3NQb29sKj4gcHJvY2Vzc1Bvb2xzOwogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyLCBHX1RZUEVf
T0JKRUNUKQpAQCAtMzY0LDYgKzM3NSwyMyBAQCBBUEk6OldlYnNpdGVEYXRhU3RvcmUmIHdlYmtp
dFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbgogICAg
IHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKIH0KIAordm9pZCB3ZWJraXRXZWJzaXRl
RGF0YU1hbmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFn
ZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKK3sKKyAgICBBU1NFUlQoIW1hbmFnZXIt
PnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bvb2wpKTsKKyAgICBtYW5hZ2Vy
LT5wcml2LT5wcm9jZXNzUG9vbHMuYXBwZW5kKCZwcm9jZXNzUG9vbCk7Cit9CisKK3ZvaWQgd2Vi
a2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiBtYW5hZ2VyLCBXZWJQcm9jZXNzUG9vbCYgcHJvY2Vzc1Bvb2wpCit7CisgICAgQVNT
RVJUKG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5jb250YWlucygmcHJvY2Vzc1Bvb2wpKTsK
KyAgICBtYW5hZ2VyLT5wcml2LT5wcm9jZXNzUG9vbHMucmVtb3ZlRmlyc3QoJnByb2Nlc3NQb29s
KTsKK30KKworY29uc3QgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldFByb2Nlc3NQb29scyhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIp
Cit7CisgICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29sczsKK30KKwogLyoqCiAg
KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3OgogICogQGZpcnN0X29wdGlvbl9uYW1l
OiBuYW1lIG9mIHRoZSBmaXJzdCBvcHRpb24gdG8gc2V0CkBAIC01NzYsNiArNjA0LDI2IEBAIGNv
bnN0IGdjaGFyKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3Rv
cnkoV2ViS2l0V2Vic2l0ZURhdGFNCiAgICAgcmV0dXJuIHByaXYtPndlYlNRTERpcmVjdG9yeS5n
ZXQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tp
ZV9tYW5hZ2VyOgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoK
KyAqIEdldCB0aGUgI1dlYktpdENvb2tpZU1hbmFnZXIgb2YgQG1hbmFnZXIuCisgKgorICogUmV0
dXJuczogKHRyYW5zZmVyIG5vbmUpOiBhICNXZWJLaXRDb29raWVNYW5hZ2VyCisgKgorICogU2lu
Y2U6IDIuMTYKKyAqLworV2ViS2l0Q29va2llTWFuYWdlciogd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcihXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFn
ZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9N
QU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIGlmICghbWFuYWdlci0+cHJpdi0+Y29v
a2llTWFuYWdlcikKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+Y29va2llTWFuYWdlciA9IGFkb3B0
R1JlZih3ZWJraXRDb29raWVNYW5hZ2VyQ3JlYXRlKG1hbmFnZXIpKTsKKworICAgIHJldHVybiBt
YW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyLmdldCgpOworfQorCiBzdGF0aWMgT3B0aW9uU2V0
PFdlYnNpdGVEYXRhVHlwZT4gdG9XZWJzaXRlRGF0YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlw
ZXMgdHlwZXMpCiB7CiAgICAgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gcmV0dXJuVmFsdWU7
CkBAIC01OTUsNiArNjQzLDggQEAgc3RhdGljIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHRv
V2Vic2l0ZURhdGFUeXBlcyhXZWJLaXRXZWJzaXRlRGF0YVR5cGVzIHR5cGUKICAgICAgICAgcmV0
dXJuVmFsdWUgfD0gV2Vic2l0ZURhdGFUeXBlOjpJbmRleGVkREJEYXRhYmFzZXM7CiAgICAgaWYg
KHR5cGVzICYgV0VCS0lUX1dFQlNJVEVfREFUQV9QTFVHSU5fREFUQSkKICAgICAgICAgcmV0dXJu
VmFsdWUgfD0gV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhOworICAgIGlmICh0eXBlcyAmIFdF
QktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUykKKyAgICAgICAgcmV0dXJuVmFsdWUgfD0gV2Vic2l0
ZURhdGFUeXBlOjpDb29raWVzOwogICAgIHJldHVybiByZXR1cm5WYWx1ZTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIuaAppbmRleCBhMmU3NDRjZWEyMS4uY2M2MmFkM2Q0MjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ci5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlci5oCkBAIC0yNSw2ICsyNSw3IEBACiAjZGVmaW5lIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcl9oCiAKICNpbmNsdWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJL
aXRDb29raWVNYW5hZ2VyLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJzaXRlRGF0YS5oPgogCkBAIC04OSw2ICs5MCw5IEBA
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeSAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViCiBXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSAgICAgICAgICAgICAg
ICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKIAorV0VCS0lUX0FQ
SSBXZWJLaXRDb29raWVNYW5hZ2VyICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
Y29va2llX21hbmFnZXIgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyICptYW5hZ2VyKTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZmV0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0V2Vic2l0
ZURhdGFUeXBlcyAgICB0eXBlcywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaApp
bmRleCBhMDBiMDYwNzVjYy4uNDYzNzlhYWYzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlLmgKQEAgLTE3LDE0ICsxNywxNiBAQAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCiAgKi8KIAotI2lmbmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlX2gK
LSNkZWZpbmUgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZV9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRhU3RvcmUuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2
YXRlLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0
YVN0b3JlLmgiCiAKIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQ3JlYXRlKFdlYktpdDo6V2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiYmKTsK
IEFQSTo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0
b3JlKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciopOwordm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJBZGRQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqLCBXZWJLaXQ6Oldl
YlByb2Nlc3NQb29sJik7Cit2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nl
c3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciosIFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wm
KTsKK2NvbnN0IFZlY3RvcjxXZWJLaXQ6OldlYlByb2Nlc3NQb29sKj4mIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqKTsKIAot
I2VuZGlmIC8vIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0
aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCAyMmI1OTZkMWFjNy4uOTk1NDk3MDc1NTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00
LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0xNjMsNiArMTYzLDcgQEAgd2Via2l0
X3dlYl92aWV3X25ld193aXRoX3VzZXJfY29udGVudF9tYW5hZ2VyCiB3ZWJraXRfd2ViX3ZpZXdf
aXNfZXBoZW1lcmFsCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQKIHdlYmtpdF93ZWJfdmll
d19nZXRfdXNlcl9jb250ZW50X21hbmFnZXIKK3dlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXIKIHdlYmtpdF93ZWJfdmlld190cnlfY2xvc2UKIHdlYmtpdF93ZWJfdmlld19s
b2FkX3VyaQogd2Via2l0X3dlYl92aWV3X2xvYWRfaHRtbApAQCAtMTI1Miw2ICsxMjUzLDcgQEAg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeQogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2Rp
cmVjdG9yeQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0
b3J5CiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkKK3dl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIKIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9mZXRjaAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2ZldGNo
X2ZpbmlzaAogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX3JlbW92ZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVjb3JkLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29y
ZC5jcHAKaW5kZXggMzBmMjhhMDVkNzguLjgwM2UxYWMzNTRjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5j
cHAKQEAgLTQ4LDYgKzQ4LDExIEBAIFN0cmluZyBXZWJzaXRlRGF0YVJlY29yZDo6ZGlzcGxheU5h
bWVGb3JDb29raWVIb3N0TmFtZShjb25zdCBTdHJpbmcmIGhvc3ROYW1lKQogICAgICAgICByZXR1
cm4gZGlzcGxheU5hbWVGb3JMb2NhbEZpbGVzKCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdU
SykKKyAgICBpZiAoaG9zdE5hbWUgPT0gImxvY2FsaG9zdCIpCisgICAgICAgIHJldHVybiBob3N0
TmFtZTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFBVQkxJQ19TVUZGSVhfTElTVCkKICAgICByZXR1
cm4gV2ViQ29yZTo6dG9wUHJpdmF0ZWx5Q29udHJvbGxlZERvbWFpbihob3N0TmFtZS5zdGFydHNX
aXRoKCcuJykgPyBob3N0TmFtZS5zdWJzdHJpbmcoMSkgOiBob3N0TmFtZSk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBlZTllMDlk
ZGNjYi4uZTAwMTliOTdiNGMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxNy0wMi0xMyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXBkYXRlIGNvb2tp
ZSBtYW5hZ2VyIEFQSSB0byBwcm9wZXJseSB3b3JrIHdpdGggZXBoZW1lcmFsIHNlc3Npb25zCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgyMzAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgdW5p
dCB0ZXN0cyBhbmQgYWRkIG5ldyBjYXNlcyBmb3IgdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBN
aW5pQnJvd3Nlci9ndGsvbWFpbi5jOgorICAgICAgICAoZ290V2Vic2l0ZURhdGFDYWxsYmFjayk6
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5h
Z2VyLmNwcDoKKyAgICAgICAgKHRlc3RDb29raWVNYW5hZ2VyRXBoZW1lcmFsKToKKyAgICAgICAg
KiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3Bw
OgorICAgICAgICAodGVzdFdlYkNvbnRleHRFcGhlbWVyYWwpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViVmlldy5jcHA6CisgICAgICAgICh0
ZXN0V2ViVmlld0VwaGVtZXJhbCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHA6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6Cisg
ICAgICAgICh0ZXN0V2Vic2l0ZURhdGFFcGhlbWVyYWwpOgorICAgICAgICAodGVzdFdlYnNpdGVE
YXRhQ29va2llcyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorCiAyMDE3LTAyLTEyICBNaWNoYWVs
IENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCBza2lwIGZsYWt5IFdlYktpdFByaW50T3BlcmF0aW9uL2N1c3RvbS13aWRnZXQgdGVzdApkaWZm
IC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2d0ay9tYWluLmMKaW5kZXggODQ0NmI0NjU0NTIuLmU1ZTU2MThjZDE4IDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9t
YWluLmMKQEAgLTM5Niw2ICszOTYsNyBAQCBzdGF0aWMgdm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxi
YWNrKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdQogICAgICAg
ICAiPC9zY3JpcHQ+PC9oZWFkPjxib2R5PlxuIik7CiAKICAgICBndWludDY0IHBhZ2VJRCA9IHdl
YmtpdF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93
ZWJfdmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShy
ZXN1bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkNvb2tpZXMiLCBXRUJLSVRfV0VCU0lURV9E
QVRBX0NPT0tJRVMsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3Vs
dCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiTWVtb3J5IENhY2hlIiwgV0VCS0lUX1dFQlNJVEVf
REFUQV9NRU1PUllfQ0FDSEUsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxl
KHJlc3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGlzayBDYWNoZSIsIFdFQktJVF9XRUJT
SVRFX0RBVEFfRElTS19DQUNIRSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNr
X2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFi
bGUocmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJTZXNzaW9uIFN0b3JhZ2UiLCBXRUJL
SVRfV0VCU0lURV9EQVRBX1NFU1NJT05fU1RPUkFHRSwgTlVMTCwgcGFnZUlEKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdl
ci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1h
bmFnZXIuY3BwCmluZGV4IDQ4OWQ3M2FmY2I0Li40Y2Q0YjVjOGNiYiAxMDA2NDQKLS0tIGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAor
KysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1hbmFn
ZXIuY3BwCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Nvb2tpZXNDaGFu
Z2VkKGZhbHNlKQogICAgICAgICAsIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNl
KQogICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9jb29raWVfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyKHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpKSkgPT0gbV9jb29raWVN
YW5hZ2VyKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFu
Z2VkIiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQog
CkBAIC0xMTMsNyArMTE0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdldERvbWFpbnNS
ZWFkeUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2lu
dGVyIHVzZXJEYXRhKQogICAgIHsKICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICBHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJFQ0FUSU9OUzsKICAgICAgICAgY2hh
cioqIGRvbWFpbnMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29r
aWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iu
b3V0UHRyKCkpOworICAgICAgICBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CiAgICAg
ICAgIGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CiAKICAgICAgICAgQ29va2llTWFuYWdlclRlc3Qq
IHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKQEAgLTEy
NSw3ICsxMjgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBnX3N0cmZyZWV2KG1fZG9tYWlu
cyk7CiAgICAgICAgIG1fZG9tYWlucyA9IDA7CisgICAgICAgIEdfR05VQ19CRUdJTl9JR05PUkVf
REVQUkVDQVRJT05TOwogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNf
d2l0aF9jb29raWVzKG1fY29va2llTWFuYWdlciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ss
IHRoaXMpOworICAgICAgICBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CiAgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKIAogICAgICAgICByZXR1cm4gbV9kb21haW5z
OwpAQCAtMTQ0LDEyICsxNDksMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZWxldGVDb29raWVz
Rm9yRG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKICAgICB7CisgICAgICAgIEdfR05VQ19CRUdJ
Tl9JR05PUkVfREVQUkVDQVRJT05TOwogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVs
ZXRlX2Nvb2tpZXNfZm9yX2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7CisgICAgICAg
IEdfR05VQ19FTkRfSUdOT1JFX0RFUFJFQ0FUSU9OUzsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0
ZUFsbENvb2tpZXMoKQogICAgIHsKKyAgICAgICAgR19HTlVDX0JFR0lOX0lHTk9SRV9ERVBSRUNB
VElPTlM7CiAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMo
bV9jb29raWVNYW5hZ2VyKTsKKyAgICAgICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05T
OwogICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsQ29va2llc0NoYW5nZWQoKQpAQCAtMzIwLDYg
KzMyOSwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckVwaGVtZXJhbChDb29raWVN
YW5hZ2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBkb21haW5zID0gdGVzdC0+Z2V0
RG9tYWlucygpOwogICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwogICAgIGdfYXNzZXJ0X2NtcGludChn
X3N0cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7CisKKyAgICBhdXRvKiB2aWV3RGF0YU1hbmFn
ZXIgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcuZ2V0
KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUih2aWV3RGF0
YU1hbmFnZXIpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlz
aGVzKEdfT0JKRUNUKHZpZXdEYXRhTWFuYWdlcikpOworICAgIGdfYXNzZXJ0KHZpZXdEYXRhTWFu
YWdlciAhPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtp
dF93ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgYXV0byogY29v
a2llTWFuYWdlciA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFn
ZXIodmlld0RhdGFNYW5hZ2VyKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09PS0lFX01BTkFH
RVIoY29va2llTWFuYWdlcikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5U
ZXN0RmluaXNoZXMoR19PQkpFQ1QoY29va2llTWFuYWdlcikpOworICAgIGdfYXNzZXJ0KGNvb2tp
ZU1hbmFnZXIgIT0gdGVzdC0+bV9jb29raWVNYW5hZ2VyKTsKKyAgICBHX0dOVUNfQkVHSU5fSUdO
T1JFX0RFUFJFQ0FUSU9OUzsKKyAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNf
d2l0aF9jb29raWVzKGNvb2tpZU1hbmFnZXIsIG51bGxwdHIsIFtdKEdPYmplY3QqIG9iamVjdCwg
R0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8q
IHRlc3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAg
ICAgR1VuaXF1ZVB0cjxjaGFyKj4gZG9tYWlucyh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Rv
bWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwg
cmVzdWx0LCBudWxscHRyKSk7CisgICAgICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgICAgICBn
X2Fzc2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zLmdldCgpKSwgPT0sIDEpOworICAg
ICAgICBnX2Fzc2VydF9jbXBzdHIoZG9tYWlucy5nZXQoKVswXSwgPT0sIGtGaXJzdFBhcnR5RG9t
YWluKTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfSwgdGVzdCk7CisgICAg
R19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0
LT5tX21haW5Mb29wKTsKIH0KIAogc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZl
ciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hU
YWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcAppbmRleCBhOGIxODFjZDRjMC4uZTdiMDNmZTBkZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcApAQCAtNTUsMTggKzU1LDIyIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RXBo
ZW1lcmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAKICAgICBHUmVmUHRyPFdlYktpdFdl
YlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsK
ICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3LmdldCgp
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cih3ZWJWaWV3LmdldCgpKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKSk7CiAKICAgICB3ZWJWaWV3
ID0gV0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHRlc3Qt
Pm1fd2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNf
ZXBoZW1lcmFsKHdlYlZpZXcuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcuZ2V0KCkpID09IG1hbmFnZXIpOwogCiAg
ICAgR1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKHdlYmtpdF93
ZWJfY29udGV4dF9uZXdfZXBoZW1lcmFsKCkpOwogICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29u
dGV4dF9pc19lcGhlbWVyYWwoY29udGV4dC5nZXQoKSkpOwogICAgIG1hbmFnZXIgPSB3ZWJraXRf
d2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNvbnRleHQuZ2V0KCkpOwogICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CiAgICAg
Z19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2Vy
KSk7CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdl
cih3ZWJWaWV3LmdldCgpKSAhPSBtYW5hZ2VyKTsKIAogICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQoY29udGV4dC5nZXQoKSkpOwog
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldy5nZXQoKSkp
OworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIo
d2ViVmlldy5nZXQoKSkgPT0gbWFuYWdlcik7CiAKICAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlcj4gZXBoZW1lcmFsTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfbmV3X2VwaGVtZXJhbCgpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsKGVwaGVtZXJhbE1hbmFnZXIuZ2V0KCkpKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
V2ViVmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdl
YktpdFdlYlZpZXcuY3BwCmluZGV4IDgzNDZhYTBmMjU4Li40ZTNkMWQ3ZTczZCAxMDA2NDQKLS0t
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3
LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCkBAIC0xMDgsNiArMTA4LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdF
cGhlbWVyYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfY29udGV4dF9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9jb250
ZXh0KHRlc3QtPm1fd2ViVmlldykpKTsKICAgICBhdXRvKiBtYW5hZ2VyID0gd2Via2l0X3dlYl9j
b250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkp
OwogICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFs
KG1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyKHRlc3QtPm1fd2ViVmlldykgPT0gbWFuYWdlcik7CiAgICAgd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2NsZWFyKG1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19D
QUNIRSwgMCwgbnVsbHB0ciwgW10oR09iamVjdCogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1
bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CiAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9jbGVhcl9maW5pc2goV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBy
ZXN1bHQsIG51bGxwdHIpOwogICAgICAgICBzdGF0aWNfY2FzdDxXZWJWaWV3VGVzdCo+KHVzZXJE
YXRhKS0+cXVpdE1haW5Mb29wKCk7CkBAIC0xMjEsNiArMTIyLDcgQEAgc3RhdGljIHZvaWQgdGVz
dFdlYlZpZXdFcGhlbWVyYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAg
ICAgIG51bGxwdHIpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFs
KHdlYlZpZXcuZ2V0KCkpKTsKICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9jb250ZXh0X2lzX2Vw
aGVtZXJhbCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldy5nZXQoKSkpKTsKKyAg
ICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZp
ZXcuZ2V0KCkpICE9IG1hbmFnZXIpOwogCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3Lmdl
dCgpLCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQp
LCB0ZXN0KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwgZ1Nl
cnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYnNpdGVEYXRhLmNwcCBiL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vic2l0ZURhdGEuY3BwCmluZGV4IGM4
NjllZWFkMzJkLi40OTU5ZTgzOGU3ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDcg
QEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioKIAogICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAi
L2VtcHR5IikpIHsKICAgICAgICAgY29uc3QgY2hhciogZW1wdHlIVE1MID0gIjxodG1sPjxib2R5
PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZSht
ZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJmb289YmFyOyBNYXgtQWdl
PTYwIik7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkp
OwogICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfT0spOwpAQCAtMjM3LDYgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUVw
aGVtZXJhbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCh3
ZWJraXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKHdlYkNvbnRleHQuZ2V0KCkpKTsKICAgICBH
UmVmUHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dl
Yl92aWV3X25ld193aXRoX2NvbnRleHQod2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldy5nZXQoKSkpOworICAgIGdfYXNz
ZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldy5nZXQo
KSkgPT0gbWFuYWdlci5nZXQoKSk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcuZ2V0
KCksICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZCks
IHRlc3QpOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LmdldCgpLCBrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOwpAQCAtNDg1LDYgKzQ4NywzNiBA
QCBzdGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFBcHBjYWNoZShXZWJzaXRlRGF0YVRlc3QqIHRl
c3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKIH0KIAorc3RhdGlj
IHZvaWQgdGVzdFdlYnNpdGVEYXRhQ29va2llcyhXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25z
dHBvaW50ZXIpCit7CisgICAgR0xpc3QqIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dF
QlNJVEVfREFUQV9DT09LSUVTKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3QpOworCisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOworICAg
IHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZGF0YUxpc3QgPSB0ZXN0LT5m
ZXRjaChXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMpOworICAgIGdfYXNzZXJ0KGRhdGFMaXN0
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwgMSk7
CisgICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRl
RGF0YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0sICIxMjcuMC4w
LjEiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVz
KGRhdGEpLCA9PSwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKTsKKyAgICAvLyBDb29raWVz
IHNpemUgaXMgdW5rbm93bi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2Rh
dGFfZ2V0X3NpemUoZGF0YSwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKSwgPT0sIDApOwor
CisgICAgR0xpc3QgcmVtb3ZlTGlzdCA9IHsgZGF0YSwgbnVsbHB0ciwgbnVsbHB0ciB9OworICAg
IHRlc3QtPnJlbW92ZShXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMsICZyZW1vdmVMaXN0KTsK
KyAgICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyk7
CisgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICBzdGF0
aWMgY29uc3QgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyBjYWNoZUFuZENvb2tpZVR5cGVzID0gc3Rh
dGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9DT09L
SUVTIHwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9E
QVRBX0RJU0tfQ0FDSEUpOworICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQ29va2llVHlwZXMsIDAp
OworICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goY2FjaGVBbmRDb29raWVUeXBlcyk7CisgICAg
Z19hc3NlcnQoIWRhdGFMaXN0KTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewogICAgIGtTZXJ2
ZXIgPSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwpAQCAtNDk2LDYgKzUyOCw3IEBAIHZvaWQgYmVm
b3JlQWxsKCkKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAi
c3RvcmFnZSIsIHRlc3RXZWJzaXRlRGF0YVN0b3JhZ2UpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6
YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJkYXRhYmFzZXMiLCB0ZXN0V2Vic2l0ZURhdGFEYXRh
YmFzZXMpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJh
cHBjYWNoZSIsIHRlc3RXZWJzaXRlRGF0YUFwcGNhY2hlKTsKKyAgICBXZWJzaXRlRGF0YVRlc3Q6
OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiY29va2llcyIsIHRlc3RXZWJzaXRlRGF0YUNvb2tp
ZXMpOwogfQogCiB2b2lkIGFmdGVyQWxsKCkK
</data>
<flag name="review"
          id="323167"
          type_id="1"
          status="-"
          setter="mcatanzaro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>301483</attachid>
            <date>2017-02-14 03:43:45 -0800</date>
            <delta_ts>2017-02-14 08:46:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-cookies-api.diff</filename>
            <type>text/plain</type>
            <size>58734</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MDNkMTNkMWI1NS4uYzM0NTFjMDM2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNy0wMi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXBkYXRlIGNvb2tpZSBtYW5hZ2VyIEFQSSB0byBw
cm9wZXJseSB3b3JrIHdpdGggZXBoZW1lcmFsIHNlc3Npb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgyMzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgaW1wbGVtZW50YXRpb24gZm9yIGRlbGV0
ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlLiBOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIHdoZW4g
dGhlIHRpbWVzcGFuIGlzIDAsIHdlIG5lZWQKKyAgICAgICAgbmV3IGxpYnNvdXAgQVBJIHRvIHN1
cHBvcnQgcmVtb3ZpbmcgcmVjZW50bHkgbW9kaWZpZWQgY29va2llcy4KKworICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmRlbGV0ZUFsbENvb2tpZXNNb2RpZmllZFNpbmNlKToKKwogMjAxNy0wMi0xNCAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgQ29va2llTWFuYWdl
ciBvbmx5IHdvcmtzIHdpdGggdGhlIGRlZmF1bHQgc2Vzc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCmluZGV4IDY0
MTQ5M2ZiYmZhLi4zMWYwMDlkMTdjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbmV0d29yay9zb3VwL0Nvb2tpZUphclNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Db29raWVKYXJTb3VwLmNwcApAQCAtMjEwLDggKzIxMCwxMyBA
QCB2b2lkIGRlbGV0ZUFsbENvb2tpZXMoY29uc3QgTmV0d29ya1N0b3JhZ2VTZXNzaW9uJiBzZXNz
aW9uKQogICAgIH0KIH0KIAotdm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShjb25z
dCBOZXR3b3JrU3RvcmFnZVNlc3Npb24mLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1l
X3BvaW50KQordm9pZCBkZWxldGVBbGxDb29raWVzTW9kaWZpZWRTaW5jZShjb25zdCBOZXR3b3Jr
U3RvcmFnZVNlc3Npb24mIHNlc3Npb24sIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVf
cG9pbnQgdGltZXN0YW1wKQogeworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZGVsZXRp
bmcgY29va2llcyBtb2RpZmllZCBzaW5jZSB0aGUgZ2l2ZW4gdGltZXN0YW1wLiBJdCBzaG91bGQg
cHJvYmFibHkgYmUgYWRkZWQgdG8gbGlic291cC4KKyAgICBpZiAodGltZXN0YW1wID09IHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OmZyb21fdGltZV90KDApKQorICAgICAgICBkZWxldGVBbGxD
b29raWVzKHNlc3Npb24pOworICAgIGVsc2UKKyAgICAgICAgZ193YXJuaW5nKCJEZWxldGluZyBj
b29raWVzIG1vZGlmaWVkIHNpbmNlIGEgZ2l2ZW4gdGltZSBzcGFuIGlzIG5vdCBzdXBwb3J0ZWQg
eWV0Iik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA4NDQ1MDNlMmI2Mi4uNzFkNWM0NWJkYTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw2NyBAQAorMjAxNy0wMi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gVXBkYXRlIGNvb2tpZSBt
YW5hZ2VyIEFQSSB0byBwcm9wZXJseSB3b3JrIHdpdGggZXBoZW1lcmFsIHNlc3Npb25zCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjgyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRDb29raWVN
YW5hZ2VyIGlzIGFzc29jaWF0ZWQgdG8gYSBwYXJ0aWN1bGFyIFdlYktpdFdlYkNvbnRleHN0IGFu
ZCB1c2VzIHRoZSBkZWZhdWx0IHNlc3Npb24gSUQKKyAgICAgICAgdW5jb25kaXRpb25hbGx5LiBJ
dCBzaG91bGQgYmUgYXNzb2NpYXRlZCB0byBhIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBpbnN0
ZWFkIGFuZCB1c2UgaXRzIHNlc3Npb24gSUQuIFRoaXMKKyAgICAgICAgcGF0Y2ggYWxzbyBhZGRz
IHN1cHBvcnQgZm9yIGhhbmRsaW5nIGNvb2tpZXMgd2l0aCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIgYW5kIGRlcHJlY2F0ZXMKKyAgICAgICAgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21h
aW5zX3dpdGhfY29va2llcygpLCB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Nvb2tpZXNf
Zm9yX2RvbWFpbigpIGFuZAorICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRlX2Fs
bF9jb29raWVzKCkuIEl0IGFsc28gYWRkcyBBUEkgdG8gZ2V0IHRoZSB0aGUgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyIG9mIGEKKyAgICAgICAgV2ViS2l0V2ViVmlldywgc2luY2UgaXQncyB0aGUg
b25seSB3YXkgdG8gZ2V0IHRoZSBXZWJLaXRDb29raWVNYW5hZ2VyIGFzc29jaWF0ZWQgdG8gYW4g
ZXBoZW1lcmFsIHdlYiB2aWV3LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q29va2llTWFuYWdlci5jcHA6CisgICAgICAgICh3ZWJraXRDb29raWVNYW5hZ2VyRGlzcG9zZSk6
IFN0b3Agb2JzZXJ2aW5nIGNvb2tpZSBjaGFuZ2VzLgorICAgICAgICAod2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2NsYXNzX2luaXQpOiBBZGQgZGlzcG9zZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgICAg
KHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUpOiBDcmVhdGUgdGhlIFdlYktpdENvb2tpZU1hbmFn
ZXIgd2l0aCBhIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KKyAgICAgICAgKHdlYmtpdF9jb29r
aWVfbWFuYWdlcl9zZXRfcGVyc2lzdGVudF9zdG9yYWdlKTogV29yayB3aXRoIGFsbCBjb250ZXh0
cyBoYXZpbmcgdGhlIHNlc3Npb24uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfc2V0
X2FjY2VwdF9wb2xpY3kpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9n
ZXRfYWNjZXB0X3BvbGljeSk6IFVzZSBhbnkgY29udGV4dCBoYXZpbmcgdGhlIHNlc3Npb24uCisg
ICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKTog
RGVwcmVjYXRlIGFuZCBpbXBsZW1lbnQgdXNpbmcgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgor
ICAgICAgICAod2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19m
aW5pc2gpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llc19mb3JfZG9tYWluKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfY29va2llX21hbmFnZXJf
ZGVsZXRlX2FsbF9jb29raWVzKTogRGl0dG8uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0Q29va2llTWFuYWdlci5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dENvb2tpZU1hbmFnZXJQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcDoKKyAgICAgICAgKGF0dGFjaEN1c3Rv
bVByb3RvY29sTWFuYWdlckNsaWVudFRvQ29udGV4dCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwOgorICAgICAgICAoYXR0YWNoRG93bmxvYWRD
bGllbnRUb0NvbnRleHQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEluamVj
dGVkQnVuZGxlQ2xpZW50LmNwcDoKKyAgICAgICAgKGF0dGFjaEluamVjdGVkQnVuZGxlQ2xpZW50
VG9Db250ZXh0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU1h
bmFnZXIuY3BwOgorICAgICAgICAocmVnaXN0ZXJTZWN1cml0eVBvbGljeUZvclVSSVNjaGVtZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAg
ICAgICh3ZWJraXRXZWJDb250ZXh0Q29uc3RydWN0ZWQpOiBDYWxsIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckFkZFByb2Nlc3NQb29sLgorICAgICAgICAod2Via2l0V2ViQ29udGV4dERpc3Bvc2Up
OiBDYWxsIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sLgorICAgICAg
ICAod2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcik6IFJldHVybiB0aGUgV2Vi
S2l0Q29va2llTWFuYWdlciBvZiB0aGUgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICAgICAg
ICAod2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKTogTWFrZSBpdCByZXR1cm4gYSByZWZl
cmVuY2UuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdDb25zdHJ1Y3RlZCk6IENhbGwgd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQWRkUHJvY2Vzc1Bvb2wgd2hlbiBjcmVhdGluZyBhIGVwaGVtZXJhbCB3ZWIgdmlldy4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdEaXNwb3NlKTogQ2FsbCB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJSZW1vdmVQcm9jZXNzUG9vbCBpZiBuZWVkZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKTogUmV0dXJuIHRoZSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgb3IgdGhlIGNvbnRleHQgb25lLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJz
aXRlRGF0YS5jcHA6IEFkZCBzdXBwb3J0IGZvciBDb29raWVzIHR5cGUuCisgICAgICAgIChyZWNv
cmRDb250YWluc1N1cHBvcnRlZERhdGFUeXBlcyk6CisgICAgICAgICh0b1dlYktpdFdlYnNpdGVE
YXRhVHlwZXMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRh
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlOjp+X1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUpOiBFbnN1cmUgYWxsIGNvbnRleHRzIHdlcmUgdW5y
ZWdpc3RlcmVkLgorICAgICAgICAod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQWRkUHJvY2Vzc1Bv
b2wpOiBSZWdpc3RlciB0aGUgcHJvY2VzcyBwb29sIGluIHRoZSBzZXNzaW9uLgorICAgICAgICAo
d2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vzc1Bvb2wpOiBVbnJlZ2lzdGVyIHRo
ZSBwcm9jZXNzIHBvbGwgZnJvbSB0aGUgc2Vzc2lvbi4KKyAgICAgICAgKHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckdldFByb2Nlc3NQb29scyk6IFJldHVybiB0aGUgbGlzdCBvZiBwcm9jZXMgcG9v
bHMgcmVnaXN0ZXJlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
Y29va2llX21hbmFnZXIpOiBSZXR1cm4gdGhlIFdlYktpdENvb2tpZU1hbmFnZXIuCisgICAgICAg
ICh0b1dlYnNpdGVEYXRhVHlwZXMpOiBBZGQgQ29va2llcy4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6IEFkZCBuZXcg
c3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNv
cmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJzaXRlRGF0YVJlY29yZDo6ZGlzcGxheU5hbWVG
b3JDb29raWVIb3N0TmFtZSk6IEhhbmRsZSBsb2NhbGhvc3QgYXMgYSBzcGVjaWFsIGNhc2UgaGVy
ZSBmb3IgYmFja3dhcmRzCisgICAgICAgIGNvbXBhdGliaWxpdHkuCisKIDIwMTctMDItMTQgIENh
cmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtTT1VQ
XSBFbnN1cmUgYSByZXNwb25zZSBNSU1FIHR5cGUgd2hlbiBDb250ZW50LVR5cGUgaXMgbWlzc2lu
ZyBhbmQgc25pZmZpbmcgbm90IGFsbG93ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5jcHAKaW5kZXggYzAzY2MwYTk3
ZDMuLmNmOTE4ODBiYzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmNwcApAQCAtMjAsMTEgKzIwLDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q29va2llTWFuYWdlci5oIgogCi0j
aW5jbHVkZSAiQVBJU3RyaW5nLmgiCiAjaW5jbHVkZSAiU291cENvb2tpZVBlcnNpc3RlbnRTdG9y
YWdlVHlwZS5oIgogI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQcm94eS5oIgogI2luY2x1ZGUg
IldlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0RW51bVR5cGVz
LmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYktpdFdlYnNpdGVEYXRhUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYnNpdGVEYXRhUmVj
b3JkLmgiCiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KIApAQCAtMzUsMTUgKzM3LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CiAgKiBAU2hvcnRfZGVzY3JpcHRpb246IERlZmluZXMgaG93IHRvIGhhbmRsZSBjb29raWVzIGlu
IGEgI1dlYktpdFdlYkNvbnRleHQKICAqIEBUaXRsZTogV2ViS2l0Q29va2llTWFuYWdlcgogICoK
LSAqIFRoZSAjV2ViS2l0Q29va2llTWFuYWdlciBkZWZpbmVzIGhvdyB0byBoYW5kbGUgY29va2ll
cyBpbiBhCi0gKiAjV2ViS2l0V2ViQ29udGV4dC4gR2V0IGl0IGZyb20gdGhlIGNvbnRleHQgd2l0
aAotICogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcigpLCBhbmQgdXNlIGl0
IHRvIHNldCB3aGVyZSB0bwotICogc3RvcmUgY29va2llcywgd2l0aCB3ZWJraXRfY29va2llX21h
bmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZSgpLAotICogdG8gZ2V0IHRoZSBsaXN0IG9mIGRv
bWFpbnMgd2l0aCBjb29raWVzLCB3aXRoCi0gKiB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2Rv
bWFpbnNfd2l0aF9jb29raWVzKCksIG9yIHRvIHNldCB0aGUKLSAqIGFjY2VwdGFuY2UgcG9saWN5
LCB3aXRoIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNjZXB0X3BvbGljeSgpCi0gKiAoYW1v
bmcgb3RoZXIgYWN0aW9ucykuCi0gKgorICogVGhlIFdlYktpdENvb2tpZU1hbmFnZXIgZGVmaW5l
cyBob3cgdG8gc2V0IHVwIGFuZCBoYW5kbGUgY29va2llcy4KKyAqIFlvdSBjYW4gZ2V0IGl0IGZy
b20gYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIHdpdGgKKyAqIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIoKSwgYW5kIHVzZSBpdCB0byBzZXQgd2hlcmUg
dG8KKyAqIHN0b3JlIGNvb2tpZXMgd2l0aCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNp
c3RlbnRfc3RvcmFnZSgpLAorICogb3IgdG8gc2V0IHRoZSBhY2NlcHRhbmNlIHBvbGljeSwgd2l0
aCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3koKS4KICAqLwogCiBlbnVt
IHsKQEAgLTUzLDEyICs1MSw3IEBAIGVudW0gewogfTsKIAogc3RydWN0IF9XZWJLaXRDb29raWVN
YW5hZ2VyUHJpdmF0ZSB7Ci0gICAgfl9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZSgpCi0gICAg
ewotICAgICAgICB3ZWJDb29raWVNYW5hZ2VyLT5zdG9wT2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhX
ZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0gICAgfQotCi0gICAgUmVm
UHRyPFdlYkNvb2tpZU1hbmFnZXJQcm94eT4gd2ViQ29va2llTWFuYWdlcjsKKyAgICBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqIGRhdGFNYW5hZ2VyOwogfTsKIAogc3RhdGljIGd1aW50IHNpZ25h
bHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAtMTA4LDkgKzEwMSwyNCBAQCBzdGF0aWMgaW5s
aW5lIEhUVFBDb29raWVBY2NlcHRQb2xpY3kgdG9IVFRQQ29va2llQWNjZXB0UG9saWN5KFdlYktp
dENvb2tpZUFjY2VwdAogICAgIH0KIH0KIAorc3RhdGljIHZvaWQgd2Via2l0Q29va2llTWFuYWdl
ckRpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KTsKKyAgICBpZiAobWFuYWdlci0+
cHJpdi0+ZGF0YU1hbmFnZXIpIHsKKyAgICAgICAgYXV0byBzZXNzaW9uSUQgPSB3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIpLndl
YnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICAgICAgZm9yIChhdXRvKiBwcm9jZXNz
UG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5w
cml2LT5kYXRhTWFuYWdlcikpCisgICAgICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVudDxX
ZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnN0b3BPYnNlcnZpbmdDb29raWVDaGFuZ2VzKHNlc3Np
b25JRCk7CisKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIgPSBudWxscHRyOwor
ICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9jb29raWVfbWFuYWdlcl9wYXJlbnRf
Y2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF9jb29raWVf
bWFuYWdlcl9jbGFzc19pbml0KFdlYktpdENvb2tpZU1hbmFnZXJDbGFzcyogZmluZENsYXNzKQog
ewogICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MoZmluZENs
YXNzKTsKKyAgICBnT2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRDb29raWVNYW5hZ2VyRGlz
cG9zZTsKIAogICAgIC8qKgogICAgICAqIFdlYktpdENvb2tpZU1hbmFnZXI6OmNoYW5nZWQ6CkBA
IC0xMjcsMjYgKzEzNSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfY2xh
c3NfaW5pdChXZWJLaXRDb29raWVNYW5hZ2VyQ2xhc3MqIGZpbmRDbGFzcwogICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDApOwogfQogCi1zdGF0aWMgdm9pZCBjb29raWVzRGlkQ2hh
bmdlKFdLQ29va2llTWFuYWdlclJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK1dlYktpdENv
b2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiBkYXRhTWFuYWdlcikKIHsKLSAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9DT09LSUVf
TUFOQUdFUihjbGllbnRJbmZvKSwgc2lnbmFsc1tDSEFOR0VEXSwgMCk7Ci19Ci0KLVdlYktpdENv
b2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViQ29va2llTWFuYWdlclBy
b3h5KiB3ZWJDb29raWVNYW5hZ2VyKQotewotICAgIFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFn
ZXIgPSBXRUJLSVRfQ09PS0lFX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX0NPT0tJ
RV9NQU5BR0VSLCBOVUxMKSk7Ci0gICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlciA9
IHdlYkNvb2tpZU1hbmFnZXI7Ci0KLSAgICBXS0Nvb2tpZU1hbmFnZXJDbGllbnRWMCB3a0Nvb2tp
ZU1hbmFnZXJDbGllbnQgPSB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIDAsIC8vIHZlcnNpb24K
LSAgICAgICAgICAgIG1hbmFnZXIsIC8vIGNsaWVudEluZm8KLSAgICAgICAgfSwKLSAgICAgICAg
Y29va2llc0RpZENoYW5nZQotICAgIH07Ci0gICAgV0tDb29raWVNYW5hZ2VyU2V0Q2xpZW50KHRv
QVBJKHdlYkNvb2tpZU1hbmFnZXIpLCAmd2tDb29raWVNYW5hZ2VyQ2xpZW50LmJhc2UpOwotICAg
IG1hbmFnZXItPnByaXYtPndlYkNvb2tpZU1hbmFnZXItPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hh
bmdlcyhXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7Ci0KKyAgICBXZWJL
aXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX0NPT0tJRV9NQU5BR0VSKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9DT09LSUVfTUFOQUdFUiwgbnVsbHB0cikpOworICAgIG1hbmFnZXIt
PnByaXYtPmRhdGFNYW5hZ2VyID0gZGF0YU1hbmFnZXI7CisgICAgYXV0byBzZXNzaW9uSUQgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3RvcmUobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIpLndlYnNpdGVEYXRhU3RvcmUoKS5zZXNzaW9uSUQoKTsKKyAgICBmb3IgKGF1dG8qIHBy
b2Nlc3NQb29sIDogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKG1hbmFn
ZXItPnByaXYtPmRhdGFNYW5hZ2VyKSkgeworICAgICAgICBwcm9jZXNzUG9vbC0+c3VwcGxlbWVu
dDxXZWJDb29raWVNYW5hZ2VyUHJveHk+KCktPnN0YXJ0T2JzZXJ2aW5nQ29va2llQ2hhbmdlcyhz
ZXNzaW9uSUQsIFttYW5hZ2VyXSB7CisgICAgICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIs
IHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAgICAgICB9KTsKKyAgICB9CiAgICAgcmV0dXJuIG1h
bmFnZXI7CiB9CiAKQEAgLTE2MSwxNyArMTU5LDI2IEBAIFdlYktpdENvb2tpZU1hbmFnZXIqIHdl
YmtpdENvb2tpZU1hbmFnZXJDcmVhdGUoV2ViQ29va2llTWFuYWdlclByb3h5KiB3ZWJDb29raWVN
CiAgKiBDb29raWVzIGFyZSBpbml0aWFsbHkgcmVhZCBmcm9tIEBmaWxlbmFtZSB0byBjcmVhdGUg
YW4gaW5pdGlhbCBzZXQgb2YgY29va2llcy4KICAqIFRoZW4sIG5vbi1zZXNzaW9uIGNvb2tpZXMg
d2lsbCBiZSB3cml0dGVuIHRvIEBmaWxlbmFtZSB3aGVuIHRoZSBXZWJLaXRDb29raWVNYW5hZ2Vy
OjpjaGFuZ2VkCiAgKiBzaWduYWwgaXMgZW1pdHRlZC4KLSAqIEJ5IGRlZmF1bHQsIEBjb29raWVf
bWFuYWdlciBkb2Vzbid0IHN0b3JlIHRoZSBjb29raWVzIHBlcnNpc3Rlbmx5LCBzbyB5b3UgbmVl
ZCB0byBjYWxsIHRoaXMKKyAqIEJ5IGRlZmF1bHQsIEBjb29raWVfbWFuYWdlciBkb2Vzbid0IHN0
b3JlIHRoZSBjb29raWVzIHBlcnNpc3RlbnRseSwgc28geW91IG5lZWQgdG8gY2FsbCB0aGlzCiAg
KiBtZXRob2QgdG8ga2VlcCBjb29raWVzIHNhdmVkIGFjcm9zcyBzZXNzaW9ucy4KKyAqCisgKiBU
aGlzIG1ldGhvZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIG9uIGEgI1dlYktpdENvb2tpZU1hbmFn
ZXIgYXNzb2NpYXRlZCB0byBhbiBlcGhlbWVyYWwgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4K
ICAqLwogdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJfc2V0X3BlcnNpc3RlbnRfc3RvcmFnZShX
ZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgV2ViS2l0
Q29va2llUGVyc2lzdGVudFN0b3JhZ2Ugc3RvcmFnZSkKIHsKICAgICBnX3JldHVybl9pZl9mYWls
KFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAgICAgZ19yZXR1cm5faWZfZmFp
bChmaWxlbmFtZSk7CisgICAgZ19yZXR1cm5faWZfZmFpbCghd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpOwogCi0gICAg
bWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+c3RvcE9ic2VydmluZ0Nvb2tpZUNoYW5n
ZXMoV2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpOwotICAgIG1hbmFnZXIt
PnByaXYtPndlYkNvb2tpZU1hbmFnZXItPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFN0cmlu
Zzo6ZnJvbVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUo
c3RvcmFnZSkpOwotICAgIG1hbmFnZXItPnByaXYtPndlYkNvb2tpZU1hbmFnZXItPnN0YXJ0T2Jz
ZXJ2aW5nQ29va2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQo
KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpIHsKKyAgICAgICAg
YXV0byogY29va2llTWFuYWdlciA9IHByb2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1h
bmFnZXJQcm94eT4oKTsKKworICAgICAgICBjb29raWVNYW5hZ2VyLT5zdG9wT2JzZXJ2aW5nQ29v
a2llQ2hhbmdlcyhXZWJDb3JlOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSk7CisgICAg
ICAgIGNvb2tpZU1hbmFnZXItPnNldENvb2tpZVBlcnNpc3RlbnRTdG9yYWdlKFN0cmluZzo6ZnJv
bVVURjgoZmlsZW5hbWUpLCB0b1NvdXBDb29raWVQZXJzaXN0ZW50U3RvcmFnZVR5cGUoc3RvcmFn
ZSkpOworICAgICAgICBjb29raWVNYW5hZ2VyLT5zdGFydE9ic2VydmluZ0Nvb2tpZUNoYW5nZXMo
V2ViQ29yZTo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCksIFttYW5hZ2VyXSB7CisgICAg
ICAgICAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ0hBTkdFRF0sIDApOworICAg
ICAgICB9KTsKKyAgICB9CiB9CiAKIC8qKgpAQCAtMTg1LDcgKzE5Miw4IEBAIHZvaWQgd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX3NldF9hY2NlcHRfcG9saWN5KFdlYktpdENvb2tpZU1hbmFnZXIqIG1h
bmFnZXIsIFdlYktpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01B
TkFHRVIobWFuYWdlcikpOwogCi0gICAgbWFuYWdlci0+cHJpdi0+d2ViQ29va2llTWFuYWdlci0+
c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeSh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5
KSk7CisgICAgZm9yIChhdXRvKiBwcm9jZXNzUG9vbCA6IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckdldFByb2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcikpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zdXBwbGVtZW50PFdlYkNvb2tpZU1hbmFnZXJQcm94eT4oKS0+c2V0SFRUUENv
b2tpZUFjY2VwdFBvbGljeSh0b0hUVFBDb29raWVBY2NlcHRQb2xpY3kocG9saWN5KSk7CiB9CiAK
IHN0YXRpYyB2b2lkIHdlYmtpdENvb2tpZU1hbmFnZXJHZXRBY2NlcHRQb2xpY3lDYWxsYmFjayhX
S0hUVFBDb29raWVBY2NlcHRQb2xpY3kgcG9saWN5LCBXS0Vycm9yUmVmLCB2b2lkKiBjb250ZXh0
KQpAQCAtMjEwLDggKzIxOCwxNyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfYWNj
ZXB0X3BvbGljeShXZWJLaXRDb29raWVNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuYwogewogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpKTsKIAotICAg
IEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyhtYW5hZ2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ss
IHVzZXJEYXRhKTsKLSAgICBtYW5hZ2VyLT5wcml2LT53ZWJDb29raWVNYW5hZ2VyLT5nZXRIVFRQ
Q29va2llQWNjZXB0UG9saWN5KHRvR2VuZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tIVFRQQ29va2ll
QWNjZXB0UG9saWN5LCBIVFRQQ29va2llQWNjZXB0UG9saWN5Pih0YXNrLCB3ZWJraXRDb29raWVN
YW5hZ2VyR2V0QWNjZXB0UG9saWN5Q2FsbGJhY2spKTsKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNr
ID0gYWRvcHRHUmVmKGdfdGFza19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1
c2VyRGF0YSkpOworCisgICAgLy8gVGhlIHBvbGljeSBpcyB0aGUgc2FtZSBpbiBhbGwgcHJvY2Vz
cyBwb29scyBoYXZpbmcgdGhlIHNhbWUgc2Vzc2lvbiBJRCwgc28ganVzdCBhc2sgYW55LgorICAg
IGNvbnN0IGF1dG8mIHByb2Nlc3NQb29scyA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFBy
b2Nlc3NQb29scyhtYW5hZ2VyLT5wcml2LT5kYXRhTWFuYWdlcik7CisgICAgaWYgKHByb2Nlc3NQ
b29scy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZ190YXNrX3JldHVybl9pbnQodGFzay5nZXQoKSwg
V0VCS0lUX0NPT0tJRV9QT0xJQ1lfQUNDRVBUX05PX1RISVJEX1BBUlRZKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIHByb2Nlc3NQb29sc1swXS0+c3VwcGxlbWVudDxXZWJDb29raWVN
YW5hZ2VyUHJveHk+KCktPmdldEhUVFBDb29raWVBY2NlcHRQb2xpY3koCisgICAgICAgIHRvR2Vu
ZXJpY0NhbGxiYWNrRnVuY3Rpb248V0tIVFRQQ29va2llQWNjZXB0UG9saWN5LCBIVFRQQ29va2ll
QWNjZXB0UG9saWN5Pih0YXNrLmxlYWtSZWYoKSwgd2Via2l0Q29va2llTWFuYWdlckdldEFjY2Vw
dFBvbGljeUNhbGxiYWNrKSk7CiB9CiAKIC8qKgpAQCAtMjMzLDI1ICsyNTAsNiBAQCBXZWJLaXRD
b29raWVBY2NlcHRQb2xpY3kgd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9hY2NlcHRfcG9saWN5
X2ZpbmlzaChXZWJLaXRDbwogICAgIHJldHVybiByZXR1cm5WYWx1ZSA9PSAtMSA/IFdFQktJVF9D
T09LSUVfUE9MSUNZX0FDQ0VQVF9OT19USElSRF9QQVJUWSA6IHN0YXRpY19jYXN0PFdlYktpdENv
b2tpZUFjY2VwdFBvbGljeT4ocmV0dXJuVmFsdWUpOwogfQogCi1zdGF0aWMgdm9pZCB3ZWJraXRD
b29raWVNYW5hZ2VyR2V0RG9tYWluc1dpdGhDb29raWVzQ2FsbGJhY2soV0tBcnJheVJlZiB3a0Rv
bWFpbnMsIFdLRXJyb3JSZWYsIHZvaWQqIGNvbnRleHQpCi17Ci0gICAgR1JlZlB0cjxHVGFzaz4g
dGFzayA9IGFkb3B0R1JlZihHX1RBU0soY29udGV4dCkpOwotICAgIGlmIChnX3Rhc2tfcmV0dXJu
X2Vycm9yX2lmX2NhbmNlbGxlZCh0YXNrLmdldCgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
QVBJOjpBcnJheSogZG9tYWlucyA9IHRvSW1wbCh3a0RvbWFpbnMpOwotICAgIEdQdHJBcnJheSog
cmV0dXJuVmFsdWUgPSBnX3B0cl9hcnJheV9zaXplZF9uZXcoZG9tYWlucy0+c2l6ZSgpKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRvbWFpbnMtPnNpemUoKTsgKytpKSB7Ci0gICAgICAg
IEFQSTo6U3RyaW5nKiBkb21haW5TdHJpbmcgPSBzdGF0aWNfY2FzdDxBUEk6OlN0cmluZyo+KGRv
bWFpbnMtPmF0KGkpKTsKLSAgICAgICAgU3RyaW5nIGRvbWFpbiA9IGRvbWFpblN0cmluZy0+c3Ry
aW5nKCk7Ci0gICAgICAgIGlmIChkb21haW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGdfcHRyX2FycmF5X2FkZChyZXR1cm5WYWx1ZSwgZ19zdHJkdXAoZG9tYWlu
LnV0ZjgoKS5kYXRhKCkpKTsKLSAgICB9Ci0gICAgZ19wdHJfYXJyYXlfYWRkKHJldHVyblZhbHVl
LCAwKTsKLSAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgZ19wdHJfYXJyYXlf
ZnJlZShyZXR1cm5WYWx1ZSwgRkFMU0UpLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5
PihnX3N0cmZyZWV2KSk7Ci19Ci0KIC8qKgogICogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9k
b21haW5zX3dpdGhfY29va2llczoKICAqIEBjb29raWVfbWFuYWdlcjogYSAjV2ViS2l0Q29va2ll
TWFuYWdlcgpAQCAtMjYzLDEzICsyNjEsMzIgQEAgc3RhdGljIHZvaWQgd2Via2l0Q29va2llTWFu
YWdlckdldERvbWFpbnNXaXRoQ29va2llc0NhbGxiYWNrKFdLQXJyYXlSZWYgd2tEb21haW4KICAq
CiAgKiBXaGVuIHRoZSBvcGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNh
bGxlZC4gWW91IGNhbiB0aGVuIGNhbGwKICAqIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9t
YWluc193aXRoX2Nvb2tpZXNfZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJh
dGlvbi4KKyAqCisgKiBEZXByZWNhdGVkOiAyLjE2OiBVc2Ugd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2ZldGNoKCkgaW5zdGVhZC4KICAqLwogdm9pZCB3ZWJraXRfY29va2llX21hbmFnZXJf
Z2V0X2RvbWFpbnNfd2l0aF9jb29raWVzKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIEdD
YW5jZWxsYWJsZSogY2FuY2VsbGFibGUsIEdBc3luY1JlYWR5Q2FsbGJhY2sgY2FsbGJhY2ssIGdw
b2ludGVyIHVzZXJEYXRhKQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJ
RV9NQU5BR0VSKG1hbmFnZXIpKTsKIAogICAgIEdUYXNrKiB0YXNrID0gZ190YXNrX25ldyhtYW5h
Z2VyLCBjYW5jZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKTsKLSAgICBtYW5hZ2VyLT5wcml2
LT53ZWJDb29raWVNYW5hZ2VyLT5nZXRIb3N0bmFtZXNXaXRoQ29va2llcyhXZWJDb3JlOjpTZXNz
aW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgdG9HZW5lcmljQ2FsbGJhY2tGdW5jdGlvbih0YXNr
LCB3ZWJraXRDb29raWVNYW5hZ2VyR2V0RG9tYWluc1dpdGhDb29raWVzQ2FsbGJhY2spKTsKKyAg
ICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2gobWFuYWdlci0+cHJpdi0+ZGF0YU1h
bmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUywgY2FuY2VsbGFibGUsIFtdKEdPYmpl
Y3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7Cisg
ICAgICAgIEdSZWZQdHI8R1Rhc2s+IHRhc2sgPSBhZG9wdEdSZWYoR19UQVNLKHVzZXJEYXRhKSk7
CisgICAgICAgIEdFcnJvciogZXJyb3IgPSBudWxscHRyOworICAgICAgICBHVW5pcXVlUHRyPEdM
aXN0PiBkYXRhTGlzdCh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2hfZmluaXNoKFdF
QktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpLCByZXN1bHQsICZlcnJvcikpOworICAg
ICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGdfdGFza19yZXR1cm5fZXJyb3IodGFzay5n
ZXQoKSwgZXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
R1B0ckFycmF5KiBkb21haW5zID0gZ19wdHJfYXJyYXlfc2l6ZWRfbmV3KGdfbGlzdF9sZW5ndGgo
ZGF0YUxpc3QuZ2V0KCkpKTsKKyAgICAgICAgZm9yIChHTGlzdCogaXRlbSA9IGRhdGFMaXN0Lmdl
dCgpOyBpdGVtOyBpdGVtID0gZ19saXN0X25leHQoaXRlbSkpIHsKKyAgICAgICAgICAgIGF1dG8q
IGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0YSo+KGl0ZW0tPmRhdGEpOworICAg
ICAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGRvbWFpbnMsIGdfc3RyZHVwKHdlYmtpdF93ZWJzaXRl
X2RhdGFfZ2V0X25hbWUoZGF0YSkpKTsKKyAgICAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFf
dW5yZWYoZGF0YSk7CisgICAgICAgIH0KKyAgICAgICAgZ19wdHJfYXJyYXlfYWRkKGRvbWFpbnMs
IG51bGxwdHIpOworICAgICAgICBnX3Rhc2tfcmV0dXJuX3BvaW50ZXIodGFzay5nZXQoKSwgZ19w
dHJfYXJyYXlfZnJlZShkb21haW5zLCBGQUxTRSksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGdfc3RyZnJlZXYpKTsKKyAgICB9LCB0YXNrKTsKIH0KIAogLyoqCkBAIC0yODQsMTEg
KzMwMSwxMyBAQCB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9nZXRfZG9tYWluc193aXRoX2Nv
b2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlcgogICoKICAqIFJldHVybnM6ICh0cmFu
c2ZlciBmdWxsKSAoYXJyYXkgemVyby10ZXJtaW5hdGVkPTEpOiBBICVOVUxMIHRlcm1pbmF0ZWQg
YXJyYXkgb2YgZG9tYWluIG5hbWVzCiAgKiAgICBvciAlTlVMTCBpbiBjYXNlIG9mIGVycm9yLgor
ICoKKyAqIERlcHJlY2F0ZWQ6IDIuMTY6IFVzZSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
ZmV0Y2hfZmluaXNoKCkgaW5zdGVhZC4KICAqLwogZ2NoYXIqKiB3ZWJraXRfY29va2llX21hbmFn
ZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVzX2ZpbmlzaChXZWJLaXRDb29raWVNYW5hZ2VyKiBt
YW5hZ2VyLCBHQXN5bmNSZXN1bHQqIHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCiB7Ci0gICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VSKG1hbmFnZXIpLCAwKTsK
LSAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2Vy
KSwgMCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX0NPT0tJRV9NQU5BR0VS
KG1hbmFnZXIpLCBudWxscHRyKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNf
dmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgbnVsbHB0cik7CiAKICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKio+KGdfdGFza19wcm9wYWdhdGVfcG9pbnRlcihHX1RBU0socmVzdWx0KSwg
ZXJyb3IpKTsKIH0KQEAgLTI5OSwxMyArMzE4LDIwIEBAIGdjaGFyKiogd2Via2l0X2Nvb2tpZV9t
YW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2goV2ViS2l0Q29va2llTWFuYWdl
CiAgKiBAZG9tYWluOiBhIGRvbWFpbiBuYW1lCiAgKgogICogUmVtb3ZlIGFsbCBjb29raWVzIG9m
IEBjb29raWVfbWFuYWdlciBmb3IgdGhlIGdpdmVuIEBkb21haW4uCisgKgorICogRGVwcmVjYXRl
ZDogMi4xNjogVXNlIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9yZW1vdmUoKSBpbnN0ZWFk
LgogICovCiB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9t
YWluKFdlYktpdENvb2tpZU1hbmFnZXIqIG1hbmFnZXIsIGNvbnN0IGdjaGFyKiBkb21haW4pCiB7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIobWFuYWdlcikp
OwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoZG9tYWluKTsKIAotICAgIG1hbmFnZXItPnByaXYtPndl
YkNvb2tpZU1hbmFnZXItPmRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZShXZWJDb3JlOjpTZXNzaW9u
SUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSwgU3RyaW5nOjpmcm9tVVRGOChkb21haW4pKTsKKyAgICBX
ZWJzaXRlRGF0YVJlY29yZCByZWNvcmQ7CisgICAgcmVjb3JkLmFkZENvb2tpZUhvc3ROYW1lKFN0
cmluZzo6ZnJvbVVURjgoZG9tYWluKSk7CisgICAgYXV0byogZGF0YSA9IHdlYmtpdFdlYnNpdGVE
YXRhQ3JlYXRlKFdURk1vdmUocmVjb3JkKSk7CisgICAgR0xpc3QgZGF0YUxpc3QgPSB7IGRhdGEs
IG51bGxwdHIsIG51bGxwdHIgfTsKKyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVt
b3ZlKG1hbmFnZXItPnByaXYtPmRhdGFNYW5hZ2VyLCBXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJ
RVMsICZkYXRhTGlzdCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgd2Via2l0X3dl
YnNpdGVfZGF0YV91bnJlZihkYXRhKTsKIH0KIAogLyoqCkBAIC0zMTMsMTAgKzMzOSwxMiBAQCB2
b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29va2llc19mb3JfZG9tYWluKFdlYktp
dENvb2tpZU1hbmFnZXIqIG1hbmFnZQogICogQGNvb2tpZV9tYW5hZ2VyOiBhICNXZWJLaXRDb29r
aWVNYW5hZ2VyCiAgKgogICogRGVsZXRlIGFsbCBjb29raWVzIG9mIEBjb29raWVfbWFuYWdlcgor
ICoKKyAqIERlcHJlY2F0ZWQ6IDIuMTY6IFVzZSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXIoKSBpbnN0ZWFkLgogICovCiB2b2lkIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVf
YWxsX2Nvb2tpZXMoV2ViS2l0Q29va2llTWFuYWdlciogbWFuYWdlcikKIHsKICAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19DT09LSUVfTUFOQUdFUihtYW5hZ2VyKSk7CiAKLSAgICBtYW5h
Z2VyLT5wcml2LT53ZWJDb29raWVNYW5hZ2VyLT5kZWxldGVBbGxDb29raWVzKFdlYkNvcmU6OlNl
c3Npb25JRDo6ZGVmYXVsdFNlc3Npb25JRCgpKTsKKyAgICB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfY2xlYXIobWFuYWdlci0+cHJpdi0+ZGF0YU1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RB
VEFfQ09PS0lFUywgMCwgbnVsbHB0ciwgbnVsbHB0ciwgbnVsbHB0cik7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgK
aW5kZXggZjI1ZjFhMmIwYzguLmVlMTdkMjIwNDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlci5oCkBAIC0xMDcsMjIg
KzEwNywyMiBAQCB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2FjY2VwdF9wb2xpY3lfZmluaXNo
ICAgICAgICAoV2ViS2l0Q29va2llTWFuYWdlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAgICAg
KnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKLVdFQktJVF9B
UEkgdm9pZAorV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9mZXRjaCkgdm9pZAogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29v
a2llcyAgICAgICAgKFdlYktpdENvb2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2Vy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDYW5jZWxsYWJsZSAgICAgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1JlYWR5Q2Fs
bGJhY2sgICAgICAgICAgIGNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyICAgICAgICAgICAgICAgICAgICAgIHVz
ZXJfZGF0YSk7CiAKLVdFQktJVF9BUEkgZ2NoYXIgKioKK1dFQktJVF9ERVBSRUNBVEVEX0ZPUih3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2hfZmluaXNoKSBnY2hhciAqKgogd2Via2l0
X2Nvb2tpZV9tYW5hZ2VyX2dldF9kb21haW5zX3dpdGhfY29va2llc19maW5pc2ggKFdlYktpdENv
b2tpZU1hbmFnZXIgICAgICAgICAgKmNvb2tpZV9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAg
ICAgICAgICAgKnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAK
LVdFQktJVF9BUEkgdm9pZAorV0VCS0lUX0RFUFJFQ0FURURfRk9SKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9yZW1vdmUpIHZvaWQKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfY29v
a2llc19mb3JfZG9tYWluICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29r
aWVfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICpkb21haW4pOwogCi1XRUJL
SVRfQVBJIHZvaWQKK1dFQktJVF9ERVBSRUNBVEVEX0ZPUih3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfY2xlYXIpIHZvaWQKIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tp
ZXMgICAgICAgICAgICAgIChXZWJLaXRDb29raWVNYW5hZ2VyICAgICAgICAgICpjb29raWVfbWFu
YWdlcik7CiAKIEdfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaAppbmRleCA2YmU4
NGFmYWVmZS4uNzVhYzZmMjg3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdENvb2tpZU1hbmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaApAQCAtMTcs
MTIgKzE3LDkgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGVfaAotI2RlZmluZSBXZWJLaXRDb29raWVNYW5h
Z2VyUHJpdmF0ZV9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIldlYktpdENvb2tpZU1hbmFn
ZXIuaCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgiCiAKLVdlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENvb2tpZU1hbmFn
ZXJDcmVhdGUoV2ViS2l0OjpXZWJDb29raWVNYW5hZ2VyUHJveHkqKTsKLQotI2VuZGlmIC8vIFdl
YktpdENvb2tpZU1hbmFnZXJQcml2YXRlX2gKK1dlYktpdENvb2tpZU1hbmFnZXIqIHdlYmtpdENv
b2tpZU1hbmFnZXJDcmVhdGUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDdXN0b21Qcm90b2NvbE1h
bmFnZXJDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcAppbmRleCBjYjJmMzE0MThhOS4uMjVlNzcz
MzQyYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50LmNwcApAQCAt
NTcsNiArNTcsNSBAQCBwcml2YXRlOgogCiB2b2lkIGF0dGFjaEN1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudFRvQ29udGV4dChXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQogewotICAgIGF1
dG8qIHByb2Nlc3NQb29sID0gd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYkNvbnRl
eHQpOwotICAgIHByb2Nlc3NQb29sLT5zZXRDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQoc3Rk
OjptYWtlX3VuaXF1ZTxDdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQ+KHdlYkNvbnRleHQpKTsK
KyAgICB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViQ29udGV4dCkuc2V0Q3VzdG9t
UHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8Q3VzdG9tUHJvdG9jb2xNYW5h
Z2VyQ2xpZW50Pih3ZWJDb250ZXh0KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKaW5kZXggZTgzMzhi
Yzk3ZTIuLmE2MTMzYzkxYzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXREb3dubG9hZENsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RG93bmxvYWRDbGllbnQuY3BwCkBAIC0xMTYsNiArMTE2LDUg
QEAgcHJpdmF0ZToKIAogdm9pZCBhdHRhY2hEb3dubG9hZENsaWVudFRvQ29udGV4dChXZWJLaXRX
ZWJDb250ZXh0KiB3ZWJDb250ZXh0KQogewotICAgIGF1dG8qIHByb2Nlc3NQb29sID0gd2Via2l0
V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYkNvbnRleHQpOwotICAgIHByb2Nlc3NQb29sLT5z
ZXREb3dubG9hZENsaWVudChzdGQ6Om1ha2VfdW5pcXVlPERvd25sb2FkQ2xpZW50Pih3ZWJDb250
ZXh0KSk7CisgICAgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYkNvbnRleHQpLnNl
dERvd25sb2FkQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8RG93bmxvYWRDbGllbnQ+KHdlYkNvbnRl
eHQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAppbmRleCBmMzA0ZDJmOGFhMi4u
MGVjNDRkNDYzZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEluamVjdGVkQnVuZGxlQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRJbmplY3RlZEJ1bmRsZUNsaWVudC5jcHAKQEAgLTE0MCw1ICsx
NDAsNSBAQCB2b2lkIGF0dGFjaEluamVjdGVkQnVuZGxlQ2xpZW50VG9Db250ZXh0KFdlYktpdFdl
YkNvbnRleHQqIHdlYkNvbnRleHQpCiAgICAgICAgIDAsIC8vIGRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUKICAgICAgICAgZ2V0SW5qZWN0ZWRCdW5kbGVJbml0
aWFsaXphdGlvblVzZXJEYXRhCiAgICAgfTsKLSAgICBXS0NvbnRleHRTZXRJbmplY3RlZEJ1bmRs
ZUNsaWVudCh0b0FQSSh3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2wod2ViQ29udGV4dCkp
LCAmd2tJbmplY3RlZEJ1bmRsZUNsaWVudC5iYXNlKTsKKyAgICBXS0NvbnRleHRTZXRJbmplY3Rl
ZEJ1bmRsZUNsaWVudCh0b0FQSSgmd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHdlYkNv
bnRleHQpKSwgJndrSW5qZWN0ZWRCdW5kbGVDbGllbnQuYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRTZWN1cml0eU1hbmFnZXIuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2Vy
LmNwcAppbmRleCBlZTM2MjZmYmU3ZS4uNzI0NWRkNWVlMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFNlY3VyaXR5TWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0U2VjdXJpdHlNYW5hZ2VyLmNw
cApAQCAtNjksNyArNjksNyBAQCBXZWJLaXRTZWN1cml0eU1hbmFnZXIqIHdlYmtpdFNlY3VyaXR5
TWFuYWdlckNyZWF0ZShXZWJLaXRXZWJDb250ZXh0KiB3ZWJDb250ZXh0KQogc3RhdGljIHZvaWQg
cmVnaXN0ZXJTZWN1cml0eVBvbGljeUZvclVSSVNjaGVtZShXZWJLaXRTZWN1cml0eU1hbmFnZXIq
IG1hbmFnZXIsIGNvbnN0IGNoYXIqIHNjaGVtZSwgU2VjdXJpdHlQb2xpY3kgcG9saWN5KQogewog
ICAgIFN0cmluZyB1cmxTY2hlbWUgPSBTdHJpbmc6OmZyb21VVEY4KHNjaGVtZSk7Ci0gICAgV2Vi
UHJvY2Vzc1Bvb2wqIHByb2Nlc3NQb29sID0gd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29s
KG1hbmFnZXItPnByaXYtPndlYkNvbnRleHQpOworICAgIGF1dG8mIHByb2Nlc3NQb29sID0gd2Vi
a2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKG1hbmFnZXItPnByaXYtPndlYkNvbnRleHQpOwog
CiAgICAgLy8gV2Uga2VlcCB0aGUgV2ViQ29yZTo6U2NoZW1lUmVnaXN0cnkgb2YgdGhlIFVJIHBy
b2Nlc3MgaW4gc3luYyB3aXRoIHRoZQogICAgIC8vIHdlYiBwcm9jZXNzIG9uZSwgc28gdGhhdCB3
ZSBjYW4gcmV0dXJuIHRoZSBTZWN1cml0eVBvbGljeSBmb3IKQEAgLTc3LDI3ICs3NywyNyBAQCBz
dGF0aWMgdm9pZCByZWdpc3RlclNlY3VyaXR5UG9saWN5Rm9yVVJJU2NoZW1lKFdlYktpdFNlY3Vy
aXR5TWFuYWdlciogbWFuYWdlciwgYwogICAgIHN3aXRjaCAocG9saWN5KSB7CiAgICAgY2FzZSBT
ZWN1cml0eVBvbGljeUxvY2FsOgogICAgICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVn
aXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5y
ZWdpc3RlclVSTFNjaGVtZUFzTG9jYWwodXJsU2NoZW1lKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wu
cmVnaXN0ZXJVUkxTY2hlbWVBc0xvY2FsKHVybFNjaGVtZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgU2VjdXJpdHlQb2xpY3lOb0FjY2VzczoKICAgICAgICAgV2ViQ29yZTo6U2NoZW1lUmVn
aXN0cnk6OnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwotICAgICAgICBw
cm9jZXNzUG9vbC0+cmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSk7CisgICAg
ICAgIHByb2Nlc3NQb29sLnJlZ2lzdGVyVVJMU2NoZW1lQXNOb0FjY2Vzcyh1cmxTY2hlbWUpOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIFNlY3VyaXR5UG9saWN5RGlzcGxheUlzb2xhdGVkOgog
ICAgICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0Rpc3Bs
YXlJc29sYXRlZCh1cmxTY2hlbWUpOwotICAgICAgICBwcm9jZXNzUG9vbC0+cmVnaXN0ZXJVUkxT
Y2hlbWVBc0Rpc3BsYXlJc29sYXRlZCh1cmxTY2hlbWUpOworICAgICAgICBwcm9jZXNzUG9vbC5y
ZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKHVybFNjaGVtZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU2VjdXJpdHlQb2xpY3lTZWN1cmU6CiAgICAgICAgIFdlYkNvcmU6OlNj
aGVtZVJlZ2lzdHJ5OjpyZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7Ci0gICAg
ICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSk7Cisg
ICAgICAgIHByb2Nlc3NQb29sLnJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTZWN1cml0eVBvbGljeUNPUlNFbmFibGVkOgogICAg
ICAgICBXZWJDb3JlOjpTY2hlbWVSZWdpc3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0NPUlNFbmFi
bGVkKHVybFNjaGVtZSk7Ci0gICAgICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclVSTFNjaGVtZUFz
Q09SU0VuYWJsZWQodXJsU2NoZW1lKTsKKyAgICAgICAgcHJvY2Vzc1Bvb2wucmVnaXN0ZXJVUkxT
Y2hlbWVBc0NPUlNFbmFibGVkKHVybFNjaGVtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
U2VjdXJpdHlQb2xpY3lFbXB0eURvY3VtZW50OgogICAgICAgICBXZWJDb3JlOjpTY2hlbWVSZWdp
c3RyeTo6cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9jdW1lbnQodXJsU2NoZW1lKTsKLSAgICAg
ICAgcHJvY2Vzc1Bvb2wtPnJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KHVybFNjaGVt
ZSk7CisgICAgICAgIHByb2Nlc3NQb29sLnJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50
KHVybFNjaGVtZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dC5jcHAKaW5kZXggY2Zl
YjRkOTAwM2MuLmU4MDI1NWY0YTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMjgsOSArMjgsNyBAQAogI2lu
Y2x1ZGUgIlRleHRDaGVja2VyLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJTdGF0ZS5oIgogI2lu
Y2x1ZGUgIldlYkNlcnRpZmljYXRlSW5mby5oIgotI2luY2x1ZGUgIldlYkNvb2tpZU1hbmFnZXJQ
cm94eS5oIgogI2luY2x1ZGUgIldlYkdlb2xvY2F0aW9uTWFuYWdlclByb3h5LmgiCi0jaW5jbHVk
ZSAiV2ViS2l0Q29va2llTWFuYWdlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRDdXN0b21Q
cm90b2NvbE1hbmFnZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXREb3dubG9hZENsaWVudC5o
IgogI2luY2x1ZGUgIldlYktpdERvd25sb2FkUHJpdmF0ZS5oIgpAQCAtNzksMTEgKzc3LDkgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKICAqIFlvdSBjYW4gZGVmaW5lIHRoZSAjV2ViS2l0Q2Fj
aGVNb2RlbCBhbmQgI1dlYktpdFByb2Nlc3NNb2RlbCB3aXRoCiAgKiB3ZWJraXRfd2ViX2NvbnRl
eHRfc2V0X2NhY2hlX21vZGVsKCkgYW5kCiAgKiB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3Byb2Nl
c3NfbW9kZWwoKSwgZGVwZW5kaW5nIG9uIHRoZSBuZWVkcyBvZgotICogeW91ciBhcHBsaWNhdGlv
bi4gWW91IGNhbiBhY2Nlc3MgdGhlICNXZWJLaXRDb29raWVNYW5hZ2VyIG9yIHRoZQotICogI1dl
YktpdFNlY3VyaXR5TWFuYWdlciB0byBzcGVjaWZ5IHRoZSBiZWhhdmlvdXIgb2YgeW91ciBhcHBs
aWNhdGlvbgotICogcmVnYXJkaW5nIGNvb2tpZXMgYW5kIHNlY3VyaXR5LCB1c2luZwotICogd2Vi
a2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcigpIGFuZAotICogd2Via2l0X3dlYl9j
b250ZXh0X2dldF9zZWN1cml0eV9tYW5hZ2VyKCkgZm9yIHRoYXQuCisgKiB5b3VyIGFwcGxpY2F0
aW9uLiBZb3UgY2FuIGFjY2VzcyB0aGUgI1dlYktpdFNlY3VyaXR5TWFuYWdlciB0byBzcGVjaWZ5
CisgKiB0aGUgYmVoYXZpb3VyIG9mIHlvdXIgYXBwbGljYXRpb24gcmVnYXJkaW5nIHNlY3VyaXR5
IHVzaW5nCisgKiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3NlY3VyaXR5X21hbmFnZXIoKS4KICAq
CiAgKiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoYW5nZSB5b3VyIHByZWZlcnJlZCBsYW5ndWFn
ZSBvciBlbmFibGUKICAqIHNwZWxsIGNoZWNraW5nLCB1c2luZyB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X3ByZWZlcnJlZF9sYW5ndWFnZXMoKSwKQEAgLTE1Nyw3ICsxNTMsNiBAQCBzdHJ1Y3QgX1dl
YktpdFdlYkNvbnRleHRQcml2YXRlIHsKICAgICBSZWZQdHI8V2ViUHJvY2Vzc1Bvb2w+IHByb2Nl
c3NQb29sOwogICAgIGJvb2wgY2xpZW50c0RldGFjaGVkOwogCi0gICAgR1JlZlB0cjxXZWJLaXRD
b29raWVNYW5hZ2VyPiBjb29raWVNYW5hZ2VyOwogICAgIEdSZWZQdHI8V2ViS2l0RmF2aWNvbkRh
dGFiYXNlPiBmYXZpY29uRGF0YWJhc2U7CiAgICAgR1JlZlB0cjxXZWJLaXRTZWN1cml0eU1hbmFn
ZXI+IHNlY3VyaXR5TWFuYWdlcjsKICAgICBVUklTY2hlbWVIYW5kbGVyTWFwIHVyaVNjaGVtZUhh
bmRsZXJzOwpAQCAtMjczLDYgKzI2OCw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHRD
b25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YU1h
bmFnZXIpCiAgICAgICAgIHByaXYtPndlYnNpdGVEYXRhTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUod2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb25G
b3JXZWJQcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbikpKTsKIAorICAgIHdl
YmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRhTWFu
YWdlci5nZXQoKSwgKnByaXYtPnByb2Nlc3NQb29sKTsKKwogICAgIHByaXYtPnRsc0Vycm9yc1Bv
bGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElDWV9GQUlMOwogICAgIHByaXYtPnByb2Nlc3NQ
b29sLT5zZXRJZ25vcmVUTFNFcnJvcnMoZmFsc2UpOwogCkBAIC0zMDMsNiArMzAwLDExIEBAIHN0
YXRpYyB2b2lkIHdlYmtpdFdlYkNvbnRleHREaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICAg
ICAgcHJpdi0+cHJvY2Vzc1Bvb2wtPnNldEN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudChudWxs
cHRyKTsKICAgICB9CiAKKyAgICBpZiAocHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyKSB7CisgICAg
ICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nlc3NQb29sKHByaXYtPndlYnNp
dGVEYXRhTWFuYWdlci5nZXQoKSwgKnByaXYtPnByb2Nlc3NQb29sKTsKKyAgICAgICAgcHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICB9CisKICAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfd2ViX2NvbnRleHRfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwogfQog
CkBAIC02ODksMTkgKzY5MSwxNSBAQCBXZWJLaXREb3dubG9hZCogd2Via2l0X3dlYl9jb250ZXh0
X2Rvd25sb2FkX3VyaShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0LCBjb25zdAogICogd2Via2l0
X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcjoKICAqIEBjb250ZXh0OiBhICNXZWJLaXRX
ZWJDb250ZXh0CiAgKgotICogR2V0IHRoZSAjV2ViS2l0Q29va2llTWFuYWdlciBvZiBAY29udGV4
dC4KKyAqIEdldCB0aGUgI1dlYktpdENvb2tpZU1hbmFnZXIgb2YgdGhlIEBjb250ZXh0J3MgI1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci4KICAqCiAgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6
IHRoZSAjV2ViS2l0Q29va2llTWFuYWdlciBvZiBAY29udGV4dC4KICAqLwogV2ViS2l0Q29va2ll
TWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jb29raWVfbWFuYWdlcihXZWJLaXRXZWJD
b250ZXh0KiBjb250ZXh0KQogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfQ09OVEVYVChjb250ZXh0KSwgMCk7Ci0KLSAgICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSog
cHJpdiA9IGNvbnRleHQtPnByaXY7Ci0gICAgaWYgKCFwcml2LT5jb29raWVNYW5hZ2VyKQotICAg
ICAgICBwcml2LT5jb29raWVNYW5hZ2VyID0gYWRvcHRHUmVmKHdlYmtpdENvb2tpZU1hbmFnZXJD
cmVhdGUocHJpdi0+cHJvY2Vzc1Bvb2wtPnN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5
PigpKSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9DT05URVhUKGNv
bnRleHQpLCBudWxscHRyKTsKIAotICAgIHJldHVybiBwcml2LT5jb29raWVNYW5hZ2VyLmdldCgp
OworICAgIHJldHVybiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Nvb2tpZV9tYW5h
Z2VyKGNvbnRleHQtPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSk7CiB9CiAKIHN0YXRp
YyB2b2lkIGVuc3VyZUZhdmljb25EYXRhYmFzZShXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQpA
QCAtMTQzNSwxMSArMTQzMywxMSBAQCBHVmFyaWFudCogd2Via2l0V2ViQ29udGV4dEluaXRpYWxp
emVXZWJFeHRlbnNpb25zKFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQpCiAgICAgICAgIGNvbnRl
eHQtPnByaXYtPndlYkV4dGVuc2lvbnNJbml0aWFsaXphdGlvblVzZXJEYXRhLmdldCgpKTsKIH0K
IAotV2ViUHJvY2Vzc1Bvb2wqIHdlYmtpdFdlYkNvbnRleHRHZXRQcm9jZXNzUG9vbChXZWJLaXRX
ZWJDb250ZXh0KiBjb250ZXh0KQorV2ViUHJvY2Vzc1Bvb2wmIHdlYmtpdFdlYkNvbnRleHRHZXRQ
cm9jZXNzUG9vbChXZWJLaXRXZWJDb250ZXh0KiBjb250ZXh0KQogewogICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSk7CiAKLSAgICByZXR1cm4gY29udGV4dC0+cHJp
di0+cHJvY2Vzc1Bvb2wuZ2V0KCk7CisgICAgcmV0dXJuICpjb250ZXh0LT5wcml2LT5wcm9jZXNz
UG9vbDsKIH0KIAogdm9pZCB3ZWJraXRXZWJDb250ZXh0U3RhcnRMb2FkaW5nQ3VzdG9tUHJvdG9j
b2woV2ViS2l0V2ViQ29udGV4dCogY29udGV4dCwgdWludDY0X3QgY3VzdG9tUHJvdG9jb2xJRCwg
Y29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiByZXNvdXJjZVJlcXVlc3QsIEN1c3RvbVBy
b3RvY29sTWFuYWdlclByb3h5JiBtYW5hZ2VyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKaW5kZXggYjk0
ZTUxODZjOTMuLmMyYjI5YWM3NGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHRQcml2YXRlLmgKQEAgLTM0LDcgKzM0
LDcgQEAKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgPFdlYkNvcmUvUmVz
b3VyY2VSZXF1ZXN0Lmg+CiAKLVdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wqIHdlYmtpdFdlYkNvbnRl
eHRHZXRQcm9jZXNzUG9vbChXZWJLaXRXZWJDb250ZXh0Kik7CitXZWJLaXQ6OldlYlByb2Nlc3NQ
b29sJiB3ZWJraXRXZWJDb250ZXh0R2V0UHJvY2Vzc1Bvb2woV2ViS2l0V2ViQ29udGV4dCopOwog
V2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRHZXRPckNyZWF0ZURvd25sb2FkKFdlYktp
dDo6RG93bmxvYWRQcm94eSopOwogV2ViS2l0RG93bmxvYWQqIHdlYmtpdFdlYkNvbnRleHRTdGFy
dERvd25sb2FkKFdlYktpdFdlYkNvbnRleHQqLCBjb25zdCBjaGFyKiB1cmksIFdlYktpdDo6V2Vi
UGFnZVByb3h5Kik7CiB2b2lkIHdlYmtpdFdlYkNvbnRleHRSZW1vdmVEb3dubG9hZChXZWJLaXQ6
OkRvd25sb2FkUHJveHkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYmRmNzhkZmVhNWQuLjUyMjM3YzM2NzBkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNw
cApAQCAtNjIsNiArNjIsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2Vi
Vmlld1Nlc3Npb25TdGF0ZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2luZG93UHJvcGVydGllc1ByaXZhdGUu
aCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29y
ZS9DZXJ0aWZpY2F0ZUluZm8uaD4KQEAgLTY1NSw4ICs2NTYsMTAgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBpZiAoIXByaXYtPnNl
dHRpbmdzKQogICAgICAgICBwcml2LT5zZXR0aW5ncyA9IGFkb3B0R1JlZih3ZWJraXRfc2V0dGlu
Z3NfbmV3KCkpOwogCi0gICAgaWYgKHByaXYtPmlzRXBoZW1lcmFsICYmICF3ZWJraXRfd2ViX2Nv
bnRleHRfaXNfZXBoZW1lcmFsKHByaXYtPmNvbnRleHQuZ2V0KCkpKQorICAgIGlmIChwcml2LT5p
c0VwaGVtZXJhbCAmJiAhd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVtZXJhbChwcml2LT5jb250
ZXh0LmdldCgpKSkgewogICAgICAgICBwcml2LT53ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ld19lcGhlbWVyYWwoKSk7CisgICAgICAg
IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKHByaXYtPndlYnNpdGVEYXRh
TWFuYWdlci5nZXQoKSwgd2Via2l0V2ViQ29udGV4dEdldFByb2Nlc3NQb29sKHByaXYtPmNvbnRl
eHQuZ2V0KCkpKTsKKyAgICB9CiAKICAgICB3ZWJraXRXZWJDb250ZXh0Q3JlYXRlUGFnZUZvcldl
YlZpZXcocHJpdi0+Y29udGV4dC5nZXQoKSwgd2ViVmlldywgcHJpdi0+dXNlckNvbnRlbnRNYW5h
Z2VyLmdldCgpLCBwcml2LT5yZWxhdGVkVmlldyk7CiAKQEAgLTc4NSw2ICs3ODgsMTEgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgICAgICB3
ZWJraXRXZWJDb250ZXh0V2ViVmlld0Rlc3Ryb3llZCh3ZWJWaWV3LT5wcml2LT5jb250ZXh0Lmdl
dCgpLCB3ZWJWaWV3KTsKICAgICB9CiAKKyAgICBpZiAod2ViVmlldy0+cHJpdi0+d2Vic2l0ZURh
dGFNYW5hZ2VyKSB7CisgICAgICAgIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclJlbW92ZVByb2Nl
c3NQb29sKHdlYlZpZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSwgd2Via2l0V2Vi
Q29udGV4dEdldFByb2Nlc3NQb29sKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0KCkpKTsKKyAg
ICAgICAgd2ViVmlldy0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gbnVsbHB0cjsKKyAgICB9
CisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZGlz
cG9zZShvYmplY3QpOwogfQogCkBAIC0yMjcyLDYgKzIyODAsMjggQEAgZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2lzX2VwaGVtZXJhbChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogfQogCiAvKioK
KyAqIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXI6CisgKiBAd2ViX3Zp
ZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgYXNzb2NpYXRlZCB0byBAd2ViX3ZpZXcuIElmIEB3ZWJfdmlldyBpcyBub3QgZXBoZW1l
cmFsLAorICogdGhlIHJldHVybmVkICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgd2lsbCBiZSB0
aGUgc2FtZSBhcyB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogb2YgQHdlYl92aWV3
J3MgI1dlYktpdFdlYkNvbnRleHQuCisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiBh
ICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBTaW5jZTogMi4xNgorICovCitXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXIoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIG51bGxwdHIpOworCisgICAgaWYgKHdlYlZp
ZXctPnByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAgcmV0dXJuIHdlYlZpZXctPnBy
aXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKTsKKworICAgIHJldHVybiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXctPnByaXYtPmNvbnRleHQuZ2V0
KCkpOworfQorCisvKioKICAqIHdlYmtpdF93ZWJfdmlld190cnlfY2xvc2U6CiAgKiBAd2ViX3Zp
ZXc6IGEgI1dlYktpdFdlYlZpZXcKICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggNzA1MTY1ODUwM2EuLjRiNTI0ZjE1ZDBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
CkBAIC0yNzcsNiArMjc3LDkgQEAgd2Via2l0X3dlYl92aWV3X25ld193aXRoX3VzZXJfY29udGVu
dF9tYW5hZ2VyICAgICAgICAoV2ViS2l0VXNlckNvbnRlbnRNYW5hZ2VyCiBXRUJLSVRfQVBJIGdi
b29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFsICAgICAgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CiAKK1dFQktJVF9BUEkg
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKK3dlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXIgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWV3KTsKKwogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250ZXh0ICoKIHdlYmtpdF93ZWJfdmlld19n
ZXRfY29udGV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuY3BwCmluZGV4IDRmNDBiNjc0ZjQ3Li41OWRlYTU4
MjIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2Vic2l0ZURhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYnNpdGVEYXRhLmNwcApAQCAtNzMsNyArNzMsOCBAQCBzdGF0aWMgYm9vbCByZWNvcmRD
b250YWluc1N1cHBvcnRlZERhdGFUeXBlcyhjb25zdCBXZWJzaXRlRGF0YVJlY29yZCYgcmVjb3Jk
KQogICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OkxvY2FsU3RvcmFnZSwKICAgICAgICAgV2Vic2l0
ZURhdGFUeXBlOjpXZWJTUUxEYXRhYmFzZXMsCiAgICAgICAgIFdlYnNpdGVEYXRhVHlwZTo6SW5k
ZXhlZERCRGF0YWJhc2VzLAotICAgICAgICBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGEKKyAg
ICAgICAgV2Vic2l0ZURhdGFUeXBlOjpQbHVnSW5EYXRhLAorICAgICAgICBXZWJzaXRlRGF0YVR5
cGU6OkNvb2tpZXMKICAgICB9OwogICAgIHJldHVybiByZWNvcmQudHlwZXMuY29udGFpbnModHlw
ZXNTdXBwb3J0ZWQpOwogfQpAQCAtOTcsNiArOTgsOCBAQCBzdGF0aWMgV2ViS2l0V2Vic2l0ZURh
dGFUeXBlcyB0b1dlYktpdFdlYnNpdGVEYXRhVHlwZXMoT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlw
ZQogICAgICAgICByZXR1cm5WYWx1ZSB8PSBXRUJLSVRfV0VCU0lURV9EQVRBX0lOREVYRUREQl9E
QVRBQkFTRVM7CiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6UGx1Z0lu
RGF0YSkpCiAgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfUExVR0lO
X0RBVEE7CisgICAgaWYgKHR5cGVzLmNvbnRhaW5zKFdlYnNpdGVEYXRhVHlwZTo6Q29va2llcykp
CisgICAgICAgIHJldHVyblZhbHVlIHw9IFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUzsKICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4ocmV0dXJuVmFsdWUp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJzaXRlRGF0YS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2Vic2l0ZURhdGEuaAppbmRleCA1ZThiNmM4N2Q0Zi4uMDY1MDQ3ZmUxN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGEuaApA
QCAtNDMsNiArNDMsNyBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGEgV2ViS2l0
V2Vic2l0ZURhdGE7CiAgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9XRUJTUUxfREFUQUJBU0VTOiBX
ZWJTUUwgZGF0YWJhc2VzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfSU5ERVhFRERCX0RBVEFC
QVNFUzogSW5kZXhlZERCIGRhdGFiYXNlcy4KICAqIEBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJ
Tl9EQVRBOiBQbHVnaW5zIGRhdGEuCisgKiBAV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTOiBD
b29raWVzLgogICogQFdFQktJVF9XRUJTSVRFX0RBVEFfQUxMOiBBbGwgdHlwZXMuCiAgKgogICog
RW51bSB2YWx1ZXMgd2l0aCBmbGFncyByZXByZXNlbnRpbmcgdHlwZXMgb2YgV2Vic2l0ZSBkYXRh
LgpAQCAtNTgsNyArNTksOCBAQCB0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9XRUJTSVRFX0RB
VEFfV0VCU1FMX0RBVEFCQVNFUyAgICAgICAgICA9IDEgPDwgNSwKICAgICBXRUJLSVRfV0VCU0lU
RV9EQVRBX0lOREVYRUREQl9EQVRBQkFTRVMgICAgICAgPSAxIDw8IDYsCiAgICAgV0VCS0lUX1dF
QlNJVEVfREFUQV9QTFVHSU5fREFUQSAgICAgICAgICAgICAgID0gMSA8PCA3LAotICAgIFdFQktJ
VF9XRUJTSVRFX0RBVEFfQUxMICAgICAgICAgICAgICAgICAgICAgICA9ICgxIDw8IDgpIC0gMQor
ICAgIFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyAgICAgICAgICAgICAgICAgICA9IDEgPDwg
OCwKKyAgICBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCAgICAgICAgICAgICAgICAgICAgICAgPSAo
MSA8PCA5KSAtIDEKIH0gV2ViS2l0V2Vic2l0ZURhdGFUeXBlczsKIAogV0VCS0lUX0FQSSBHVHlw
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKaW5kZXggMjI2ZjJmN2ViZWUuLmY1MjljNmY2OWJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRl
ICJXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaCIKIAogI2luY2x1ZGUgIkFQSVdlYnNpdGVEYXRh
U3RvcmUuaCIKKyNpbmNsdWRlICJXZWJLaXRDb29raWVNYW5hZ2VyUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJzaXRlRGF0YVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YUZldGNoT3B0aW9uLmgi
CkBAIC02OSw2ICs3MCw4IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAgKiBTaW5jZTogMi4x
MAogICovCiAKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKIGVudW0gewogICAgIFBST1BfMCwK
IApAQCAtODMsNiArODYsMTEgQEAgZW51bSB7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlclByaXZhdGUgeworICAgIH5fV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0
ZSgpCisgICAgeworICAgICAgICBBU1NFUlQocHJvY2Vzc1Bvb2xzLmlzRW1wdHkoKSk7CisgICAg
fQorCiAgICAgUmVmUHRyPEFQSTo6V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsK
ICAgICBHVW5pcXVlUHRyPGNoYXI+IGJhc2VEYXRhRGlyZWN0b3J5OwogICAgIEdVbmlxdWVQdHI8
Y2hhcj4gYmFzZUNhY2hlRGlyZWN0b3J5OwpAQCAtOTEsNiArOTksOSBAQCBzdHJ1Y3QgX1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgewogICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXBwbGlj
YXRpb25DYWNoZURpcmVjdG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IGluZGV4ZWREQkRpcmVj
dG9yeTsKICAgICBHVW5pcXVlUHRyPGNoYXI+IHdlYlNRTERpcmVjdG9yeTsKKworICAgIEdSZWZQ
dHI8V2ViS2l0Q29va2llTWFuYWdlcj4gY29va2llTWFuYWdlcjsKKyAgICBWZWN0b3I8V2ViUHJv
Y2Vzc1Bvb2wqPiBwcm9jZXNzUG9vbHM7CiB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9P
QkpFQ1QpCkBAIC0zNjQsNiArMzc1LDIzIEBAIEFQSTo6V2Vic2l0ZURhdGFTdG9yZSYgd2Via2l0
V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVEYXRhTWFuCiAgICAg
cmV0dXJuICpwcml2LT53ZWJzaXRlRGF0YVN0b3JlOwogfQogCit2b2lkIHdlYmtpdFdlYnNpdGVE
YXRhTWFuYWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdl
ciwgV2ViUHJvY2Vzc1Bvb2wmIHByb2Nlc3NQb29sKQoreworICAgIEFTU0VSVCghbWFuYWdlci0+
cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNzUG9vbCkpOworICAgIG1hbmFnZXIt
PnByaXYtPnByb2Nlc3NQb29scy5hcHBlbmQoJnByb2Nlc3NQb29sKTsKK30KKwordm9pZCB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJSZW1vdmVQcm9jZXNzUG9vbChXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIqIG1hbmFnZXIsIFdlYlByb2Nlc3NQb29sJiBwcm9jZXNzUG9vbCkKK3sKKyAgICBBU1NF
UlQobWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzLmNvbnRhaW5zKCZwcm9jZXNzUG9vbCkpOwor
ICAgIG1hbmFnZXItPnByaXYtPnByb2Nlc3NQb29scy5yZW1vdmVGaXJzdCgmcHJvY2Vzc1Bvb2wp
OworfQorCitjb25zdCBWZWN0b3I8V2ViUHJvY2Vzc1Bvb2wqPiYgd2Via2l0V2Vic2l0ZURhdGFN
YW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikK
K3sKKyAgICByZXR1cm4gbWFuYWdlci0+cHJpdi0+cHJvY2Vzc1Bvb2xzOworfQorCiAvKioKICAq
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXc6CiAgKiBAZmlyc3Rfb3B0aW9uX25hbWU6
IG5hbWUgb2YgdGhlIGZpcnN0IG9wdGlvbiB0byBzZXQKQEAgLTU3Niw2ICs2MDQsMjYgQEAgY29u
c3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9y
eShXZWJLaXRXZWJzaXRlRGF0YU0KICAgICByZXR1cm4gcHJpdi0+d2ViU1FMRGlyZWN0b3J5Lmdl
dCgpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2ll
X21hbmFnZXI6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgor
ICogR2V0IHRoZSAjV2ViS2l0Q29va2llTWFuYWdlciBvZiBAbWFuYWdlci4KKyAqCisgKiBSZXR1
cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdENvb2tpZU1hbmFnZXIKKyAqCisgKiBTaW5j
ZTogMi4xNgorICovCitXZWJLaXRDb29raWVNYW5hZ2VyKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X2Nvb2tpZV9tYW5hZ2VyKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdl
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01B
TkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgaWYgKCFtYW5hZ2VyLT5wcml2LT5jb29r
aWVNYW5hZ2VyKQorICAgICAgICBtYW5hZ2VyLT5wcml2LT5jb29raWVNYW5hZ2VyID0gYWRvcHRH
UmVmKHdlYmtpdENvb2tpZU1hbmFnZXJDcmVhdGUobWFuYWdlcikpOworCisgICAgcmV0dXJuIG1h
bmFnZXItPnByaXYtPmNvb2tpZU1hbmFnZXIuZ2V0KCk7Cit9CisKIHN0YXRpYyBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB0b1dlYnNpdGVEYXRhVHlwZXMoV2ViS2l0V2Vic2l0ZURhdGFUeXBl
cyB0eXBlcykKIHsKICAgICBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiByZXR1cm5WYWx1ZTsK
QEAgLTU5NSw2ICs2NDMsOCBAQCBzdGF0aWMgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gdG9X
ZWJzaXRlRGF0YVR5cGVzKFdlYktpdFdlYnNpdGVEYXRhVHlwZXMgdHlwZQogICAgICAgICByZXR1
cm5WYWx1ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OkluZGV4ZWREQkRhdGFiYXNlczsKICAgICBpZiAo
dHlwZXMgJiBXRUJLSVRfV0VCU0lURV9EQVRBX1BMVUdJTl9EQVRBKQogICAgICAgICByZXR1cm5W
YWx1ZSB8PSBXZWJzaXRlRGF0YVR5cGU6OlBsdWdJbkRhdGE7CisgICAgaWYgKHR5cGVzICYgV0VC
S0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKQorICAgICAgICByZXR1cm5WYWx1ZSB8PSBXZWJzaXRl
RGF0YVR5cGU6OkNvb2tpZXM7CiAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlci5oCmluZGV4IGEyZTc0NGNlYTIxLi5jYzYyYWQzZDQyNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNkZWZpbmUgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyX2gKIAogI2luY2x1ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktp
dENvb2tpZU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYnNpdGVEYXRhLmg+CiAKQEAgLTg5LDYgKzkwLDkgQEAg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5ICAgICAg
ICAgICAgICAgICAgIChXZWJLaXRXZWIKIFdFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwogCitXRUJLSVRfQVBJ
IFdlYktpdENvb2tpZU1hbmFnZXIgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9j
b29raWVfbWFuYWdlciAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKm1hbmFnZXIpOworCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9mZXRjaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJzaXRl
RGF0YVR5cGVzICAgIHR5cGVzLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCmlu
ZGV4IGEwMGIwNjA3NWNjLi40NjM3OWFhZjMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdl
clByaXZhdGUuaApAQCAtMTcsMTQgKzE3LDE2IEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwogCi0jaWZuZGVmIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGVfaAot
I2RlZmluZSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiQVBJV2Vic2l0ZURhdGFTdG9yZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRh
U3RvcmUuaCIKIAogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJDcmVhdGUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpDb25maWd1cmF0aW9uJiYpOwog
QVBJOjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXREYXRhU3Rv
cmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7Cit2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFu
YWdlckFkZFByb2Nlc3NQb29sKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciosIFdlYktpdDo6V2Vi
UHJvY2Vzc1Bvb2wmKTsKK3ZvaWQgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyUmVtb3ZlUHJvY2Vz
c1Bvb2woV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiwgV2ViS2l0OjpXZWJQcm9jZXNzUG9vbCYp
OworY29uc3QgVmVjdG9yPFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2wqPiYgd2Via2l0V2Vic2l0ZURh
dGFNYW5hZ2VyR2V0UHJvY2Vzc1Bvb2xzKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciopOwogCi0j
ZW5kaWYgLy8gV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rp
b25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay00LjAtc2VjdGlvbnMudHh0CmluZGV4IDIyYjU5NmQxYWM3Li45OTU0OTcwNzU1NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKQEAgLTE2Myw2ICsxNjMsNyBAQCB3ZWJraXRf
d2ViX3ZpZXdfbmV3X3dpdGhfdXNlcl9jb250ZW50X21hbmFnZXIKIHdlYmtpdF93ZWJfdmlld19p
c19lcGhlbWVyYWwKIHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dAogd2Via2l0X3dlYl92aWV3
X2dldF91c2VyX2NvbnRlbnRfbWFuYWdlcgord2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcgogd2Via2l0X3dlYl92aWV3X3RyeV9jbG9zZQogd2Via2l0X3dlYl92aWV3X2xv
YWRfdXJpCiB3ZWJraXRfd2ViX3ZpZXdfbG9hZF9odG1sCkBAIC0xMjUyLDYgKzEyNTMsNyBAQCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5CiB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGly
ZWN0b3J5CiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3Rv
cnkKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeQord2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9jb29raWVfbWFuYWdlcgogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2ZldGNoCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZmV0Y2hf
ZmluaXNoCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcmVtb3ZlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vic2l0ZURhdGEvV2Vic2l0ZURhdGFSZWNvcmQuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVjb3Jk
LmNwcAppbmRleCAzMGYyOGEwNWQ3OC4uYjA3NjBmYjgyZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJzaXRlRGF0YS9XZWJzaXRlRGF0YVJlY29yZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYnNpdGVEYXRhL1dlYnNpdGVEYXRhUmVjb3JkLmNw
cApAQCAtNDYsNiArNDYsOSBAQCBTdHJpbmcgV2Vic2l0ZURhdGFSZWNvcmQ6OmRpc3BsYXlOYW1l
Rm9yQ29va2llSG9zdE5hbWUoY29uc3QgU3RyaW5nJiBob3N0TmFtZSkKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICBpZiAoaG9zdE5hbWUgPT0gU3RyaW5nKGtDRkhUVFBDb29raWVMb2NhbEZpbGVE
b21haW4pKQogICAgICAgICByZXR1cm4gZGlzcGxheU5hbWVGb3JMb2NhbEZpbGVzKCk7CisjZWxp
ZiBQTEFURk9STShHVEspCisgICAgaWYgKGhvc3ROYW1lID09ICJsb2NhbGhvc3QiKQorICAgICAg
ICByZXR1cm4gaG9zdE5hbWU7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQVUJMSUNfU1VGRklYX0xJ
U1QpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXgg
MTM2MzU3ZGNhYTcuLmE4ODM2ODg0MThmIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTctMDItMTMgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIFVwZGF0
ZSBjb29raWUgbWFuYWdlciBBUEkgdG8gcHJvcGVybHkgd29yayB3aXRoIGVwaGVtZXJhbCBzZXNz
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4
MjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBk
YXRlIHVuaXQgdGVzdHMgYW5kIGFkZCBuZXcgY2FzZXMgZm9yIHRoZSBuZXcgQVBJLgorCisgICAg
ICAgICogTWluaUJyb3dzZXIvZ3RrL21haW4uYzoKKyAgICAgICAgKGdvdFdlYnNpdGVEYXRhQ2Fs
bGJhY2spOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29v
a2llTWFuYWdlci5jcHA6CisgICAgICAgICh0ZXN0Q29va2llTWFuYWdlckVwaGVtZXJhbCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250
ZXh0LmNwcDoKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0RXBoZW1lcmFsKToKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYlZpZXcuY3BwOgorICAg
ICAgICAodGVzdFdlYlZpZXdFcGhlbWVyYWwpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Mkd0ay9UZXN0V2Vic2l0ZURhdGEuY3BwOgorICAgICAgICAoc2VydmVyQ2FsbGJh
Y2spOgorICAgICAgICAodGVzdFdlYnNpdGVEYXRhRXBoZW1lcmFsKToKKyAgICAgICAgKHRlc3RX
ZWJzaXRlRGF0YUNvb2tpZXMpOgorICAgICAgICAoYmVmb3JlQWxsKToKKwogMjAxNy0wMi0xMyAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFVS
THMgd2l0aCBhbiBpbnZhbGlkIElQdjQgYWRkcmVzcyBzaG91bGQgYmUgaW52YWxpZApkaWZmIC0t
Z2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0
ay9tYWluLmMKaW5kZXggODQ0NmI0NjU0NTIuLmU1ZTU2MThjZDE4IDEwMDY0NAotLS0gYS9Ub29s
cy9NaW5pQnJvd3Nlci9ndGsvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWlu
LmMKQEAgLTM5Niw2ICszOTYsNyBAQCBzdGF0aWMgdm9pZCBnb3RXZWJzaXRlRGF0YUNhbGxiYWNr
KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwgR0FzeW5jUmVzdQogICAgICAgICAi
PC9zY3JpcHQ+PC9oZWFkPjxib2R5PlxuIik7CiAKICAgICBndWludDY0IHBhZ2VJRCA9IHdlYmtp
dF93ZWJfdmlld19nZXRfcGFnZV9pZCh3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2dldF93ZWJf
dmlldyhkYXRhUmVxdWVzdC0+cmVxdWVzdCkpOworICAgIGFib3V0RGF0YUZpbGxUYWJsZShyZXN1
bHQsIGRhdGFSZXF1ZXN0LCBkYXRhTGlzdCwgIkNvb2tpZXMiLCBXRUJLSVRfV0VCU0lURV9EQVRB
X0NPT0tJRVMsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJlc3VsdCwg
ZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiTWVtb3J5IENhY2hlIiwgV0VCS0lUX1dFQlNJVEVfREFU
QV9NRU1PUllfQ0FDSEUsIE5VTEwsIHBhZ2VJRCk7CiAgICAgYWJvdXREYXRhRmlsbFRhYmxlKHJl
c3VsdCwgZGF0YVJlcXVlc3QsIGRhdGFMaXN0LCAiRGlzayBDYWNoZSIsIFdFQktJVF9XRUJTSVRF
X0RBVEFfRElTS19DQUNIRSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2Nh
Y2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgcGFnZUlEKTsKICAgICBhYm91dERhdGFGaWxsVGFibGUo
cmVzdWx0LCBkYXRhUmVxdWVzdCwgZGF0YUxpc3QsICJTZXNzaW9uIFN0b3JhZ2UiLCBXRUJLSVRf
V0VCU0lURV9EQVRBX1NFU1NJT05fU1RPUkFHRSwgTlVMTCwgcGFnZUlEKTsKZGlmZiAtLWdpdCBh
L1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0Q29va2llTWFuYWdlci5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1hbmFn
ZXIuY3BwCmluZGV4IDQ4OWQ3M2FmY2I0Li40Y2Q0YjVjOGNiYiAxMDA2NDQKLS0tIGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RDb29raWVNYW5hZ2VyLmNwcAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdENvb2tpZU1hbmFnZXIu
Y3BwCkBAIC01Miw2ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Nvb2tpZXNDaGFuZ2Vk
KGZhbHNlKQogICAgICAgICAsIG1fZmluaXNoTG9vcFdoZW5Db29raWVzQ2hhbmdlKGZhbHNlKQog
ICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9j
b29raWVfbWFuYWdlcih3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
KHdlYmtpdF93ZWJfdmlld19nZXRfY29udGV4dChtX3dlYlZpZXcpKSkgPT0gbV9jb29raWVNYW5h
Z2VyKTsKICAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2Nvb2tpZU1hbmFnZXIsICJjaGFuZ2Vk
IiwgR19DQUxMQkFDSyhjb29raWVzQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCkBA
IC0xMTMsNyArMTE0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGdldERvbWFpbnNSZWFk
eUNhbGxiYWNrKEdPYmplY3QqIG9iamVjdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVy
IHVzZXJEYXRhKQogICAgIHsKICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOwor
ICAgICAgICBHX0dOVUNfQkVHSU5fSUdOT1JFX0RFUFJFQ0FUSU9OUzsKICAgICAgICAgY2hhcioq
IGRvbWFpbnMgPSB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0aF9jb29raWVz
X2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVzdWx0LCAmZXJyb3Iub3V0
UHRyKCkpOworICAgICAgICBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CiAgICAgICAg
IGdfYXNzZXJ0KCFlcnJvci5nZXQoKSk7CiAKICAgICAgICAgQ29va2llTWFuYWdlclRlc3QqIHRl
c3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKQEAgLTEyNSw3
ICsxMjgsOSBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBnX3N0cmZyZWV2KG1fZG9tYWlucyk7
CiAgICAgICAgIG1fZG9tYWlucyA9IDA7CisgICAgICAgIEdfR05VQ19CRUdJTl9JR05PUkVfREVQ
UkVDQVRJT05TOwogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0
aF9jb29raWVzKG1fY29va2llTWFuYWdlciwgMCwgZ2V0RG9tYWluc1JlYWR5Q2FsbGJhY2ssIHRo
aXMpOworICAgICAgICBHX0dOVUNfRU5EX0lHTk9SRV9ERVBSRUNBVElPTlM7CiAgICAgICAgIGdf
bWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKIAogICAgICAgICByZXR1cm4gbV9kb21haW5zOwpA
QCAtMTQ0LDEyICsxNDksMTYgQEAgcHVibGljOgogCiAgICAgdm9pZCBkZWxldGVDb29raWVzRm9y
RG9tYWluKGNvbnN0IGNoYXIqIGRvbWFpbikKICAgICB7CisgICAgICAgIEdfR05VQ19CRUdJTl9J
R05PUkVfREVQUkVDQVRJT05TOwogICAgICAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZGVsZXRl
X2Nvb2tpZXNfZm9yX2RvbWFpbihtX2Nvb2tpZU1hbmFnZXIsIGRvbWFpbik7CisgICAgICAgIEdf
R05VQ19FTkRfSUdOT1JFX0RFUFJFQ0FUSU9OUzsKICAgICB9CiAKICAgICB2b2lkIGRlbGV0ZUFs
bENvb2tpZXMoKQogICAgIHsKKyAgICAgICAgR19HTlVDX0JFR0lOX0lHTk9SRV9ERVBSRUNBVElP
TlM7CiAgICAgICAgIHdlYmtpdF9jb29raWVfbWFuYWdlcl9kZWxldGVfYWxsX2Nvb2tpZXMobV9j
b29raWVNYW5hZ2VyKTsKKyAgICAgICAgR19HTlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOwog
ICAgIH0KIAogICAgIHZvaWQgd2FpdFVudGlsQ29va2llc0NoYW5nZWQoKQpAQCAtMzIwLDYgKzMy
OSwyNiBAQCBzdGF0aWMgdm9pZCB0ZXN0Q29va2llTWFuYWdlckVwaGVtZXJhbChDb29raWVNYW5h
Z2VyVGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBkb21haW5zID0gdGVzdC0+Z2V0RG9t
YWlucygpOwogICAgIGdfYXNzZXJ0KGRvbWFpbnMpOwogICAgIGdfYXNzZXJ0X2NtcGludChnX3N0
cnZfbGVuZ3RoKGRvbWFpbnMpLCA9PSwgMCk7CisKKyAgICBhdXRvKiB2aWV3RGF0YU1hbmFnZXIg
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcuZ2V0KCkp
OworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUih2aWV3RGF0YU1h
bmFnZXIpKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVz
KEdfT0JKRUNUKHZpZXdEYXRhTWFuYWdlcikpOworICAgIGdfYXNzZXJ0KHZpZXdEYXRhTWFuYWdl
ciAhPSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYmtpdF93
ZWJfdmlld19nZXRfY29udGV4dCh0ZXN0LT5tX3dlYlZpZXcpKSk7CisgICAgYXV0byogY29va2ll
TWFuYWdlciA9IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfY29va2llX21hbmFnZXIo
dmlld0RhdGFNYW5hZ2VyKTsKKyAgICBnX2Fzc2VydChXRUJLSVRfSVNfQ09PS0lFX01BTkFHRVIo
Y29va2llTWFuYWdlcikpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1QoY29va2llTWFuYWdlcikpOworICAgIGdfYXNzZXJ0KGNvb2tpZU1h
bmFnZXIgIT0gdGVzdC0+bV9jb29raWVNYW5hZ2VyKTsKKyAgICBHX0dOVUNfQkVHSU5fSUdOT1JF
X0RFUFJFQ0FUSU9OUzsKKyAgICB3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFpbnNfd2l0
aF9jb29raWVzKGNvb2tpZU1hbmFnZXIsIG51bGxwdHIsIFtdKEdPYmplY3QqIG9iamVjdCwgR0Fz
eW5jUmVzdWx0KiByZXN1bHQsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8qIHRl
c3QgPSBzdGF0aWNfY2FzdDxDb29raWVNYW5hZ2VyVGVzdCo+KHVzZXJEYXRhKTsKKyAgICAgICAg
R1VuaXF1ZVB0cjxjaGFyKj4gZG9tYWlucyh3ZWJraXRfY29va2llX21hbmFnZXJfZ2V0X2RvbWFp
bnNfd2l0aF9jb29raWVzX2ZpbmlzaChXRUJLSVRfQ09PS0lFX01BTkFHRVIob2JqZWN0KSwgcmVz
dWx0LCBudWxscHRyKSk7CisgICAgICAgIGdfYXNzZXJ0KGRvbWFpbnMpOworICAgICAgICBnX2Fz
c2VydF9jbXBpbnQoZ19zdHJ2X2xlbmd0aChkb21haW5zLmdldCgpKSwgPT0sIDEpOworICAgICAg
ICBnX2Fzc2VydF9jbXBzdHIoZG9tYWlucy5nZXQoKVswXSwgPT0sIGtGaXJzdFBhcnR5RG9tYWlu
KTsKKyAgICAgICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7CisgICAgfSwgdGVzdCk7CisgICAgR19H
TlVDX0VORF9JR05PUkVfREVQUkVDQVRJT05TOworICAgIGdfbWFpbl9sb29wX3J1bih0ZXN0LT5t
X21haW5Mb29wKTsKIH0KIAogc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciog
c2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJs
ZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNw
cAppbmRleCBhOGIxODFjZDRjMC4uZTdiMDNmZTBkZTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0
LmNwcApAQCAtNTUsMTggKzU1LDIyIEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RXBoZW1l
cmFsKFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAKICAgICBHUmVmUHRyPFdlYktpdFdlYlZp
ZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92aWV3X25ldygpKTsKICAg
ICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2lzX2VwaGVtZXJhbCh3ZWJWaWV3LmdldCgpKSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3
ZWJWaWV3LmdldCgpKSA9PSB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyKHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpKSk7CiAKICAgICB3ZWJWaWV3ID0g
V0VCS0lUX1dFQl9WSUVXKHdlYmtpdF93ZWJfdmlld19uZXdfd2l0aF9jb250ZXh0KHRlc3QtPm1f
d2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfaXNfZXBo
ZW1lcmFsKHdlYlZpZXcuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcuZ2V0KCkpID09IG1hbmFnZXIpOwogCiAgICAg
R1JlZlB0cjxXZWJLaXRXZWJDb250ZXh0PiBjb250ZXh0ID0gYWRvcHRHUmVmKHdlYmtpdF93ZWJf
Y29udGV4dF9uZXdfZXBoZW1lcmFsKCkpOwogICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfY29udGV4
dF9pc19lcGhlbWVyYWwoY29udGV4dC5nZXQoKSkpOwogICAgIG1hbmFnZXIgPSB3ZWJraXRfd2Vi
X2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNvbnRleHQuZ2V0KCkpOwogICAgIGdf
YXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSk7CiAgICAgZ19h
c3NlcnQod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2lzX2VwaGVtZXJhbChtYW5hZ2VyKSk7
CisgICAgZ19hc3NlcnQod2Via2l0X3dlYl92aWV3X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3
ZWJWaWV3LmdldCgpKSAhPSBtYW5hZ2VyKTsKIAogICAgIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2Via2l0X3dlYl92aWV3X25ld193aXRoX2NvbnRleHQoY29udGV4dC5nZXQoKSkpOwogICAg
IGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldy5nZXQoKSkpOwor
ICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vi
Vmlldy5nZXQoKSkgPT0gbWFuYWdlcik7CiAKICAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlcj4gZXBoZW1lcmFsTWFuYWdlciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfbmV3X2VwaGVtZXJhbCgpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsKGVwaGVtZXJhbE1hbmFnZXIuZ2V0KCkpKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2Vi
Vmlldy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktp
dFdlYlZpZXcuY3BwCmluZGV4IDgzNDZhYTBmMjU4Li40ZTNkMWQ3ZTczZCAxMDA2NDQKLS0tIGEv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJWaWV3LmNw
cAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdl
YlZpZXcuY3BwCkBAIC0xMDgsNiArMTA4LDcgQEAgc3RhdGljIHZvaWQgdGVzdFdlYlZpZXdFcGhl
bWVyYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQoIXdl
YmtpdF93ZWJfY29udGV4dF9pc19lcGhlbWVyYWwod2Via2l0X3dlYl92aWV3X2dldF9jb250ZXh0
KHRlc3QtPm1fd2ViVmlldykpKTsKICAgICBhdXRvKiBtYW5hZ2VyID0gd2Via2l0X3dlYl9jb250
ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQuZ2V0KCkpOwog
ICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfaXNfZXBoZW1lcmFsKG1h
bmFnZXIpKTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyKHRlc3QtPm1fd2ViVmlldykgPT0gbWFuYWdlcik7CiAgICAgd2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2NsZWFyKG1hbmFnZXIsIFdFQktJVF9XRUJTSVRFX0RBVEFfRElTS19DQUNI
RSwgMCwgbnVsbHB0ciwgW10oR09iamVjdCogbWFuYWdlciwgR0FzeW5jUmVzdWx0KiByZXN1bHQs
IGdwb2ludGVyIHVzZXJEYXRhKSB7CiAgICAgICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9jbGVhcl9maW5pc2goV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCByZXN1
bHQsIG51bGxwdHIpOwogICAgICAgICBzdGF0aWNfY2FzdDxXZWJWaWV3VGVzdCo+KHVzZXJEYXRh
KS0+cXVpdE1haW5Mb29wKCk7CkBAIC0xMjEsNiArMTIyLDcgQEAgc3RhdGljIHZvaWQgdGVzdFdl
YlZpZXdFcGhlbWVyYWwoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiAgICAgICAg
IG51bGxwdHIpKTsKICAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfaXNfZXBoZW1lcmFsKHdl
YlZpZXcuZ2V0KCkpKTsKICAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9jb250ZXh0X2lzX2VwaGVt
ZXJhbCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2NvbnRleHQod2ViVmlldy5nZXQoKSkpKTsKKyAgICBn
X2Fzc2VydCh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYlZpZXcu
Z2V0KCkpICE9IG1hbmFnZXIpOwogCiAgICAgZ19zaWduYWxfY29ubmVjdCh3ZWJWaWV3LmdldCgp
LCAibG9hZC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhlcGhlbWVyYWxWaWV3bG9hZENoYW5nZWQpLCB0
ZXN0KTsKICAgICB3ZWJraXRfd2ViX3ZpZXdfbG9hZF91cmkod2ViVmlldy5nZXQoKSwgZ1NlcnZl
ci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVzdFdlYnNpdGVEYXRhLmNwcCBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vic2l0ZURhdGEuY3BwCmluZGV4IGM4Njll
ZWFkMzJkLi40OTU5ZTgzOGU3ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJzaXRlRGF0YS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAg
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhcioKIAogICAgIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2Vt
cHR5IikpIHsKICAgICAgICAgY29uc3QgY2hhciogZW1wdHlIVE1MID0gIjxodG1sPjxib2R5Pjwv
Ym9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfcmVwbGFjZShtZXNz
YWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiU2V0LUNvb2tpZSIsICJmb289YmFyOyBNYXgtQWdlPTYw
Iik7CiAgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkpOwog
ICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOwpAQCAtMjM3LDYgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIHRlc3RXZWJzaXRlRGF0YUVwaGVt
ZXJhbChXZWJWaWV3VGVzdCogdGVzdCwgZ2NvbnN0cG9pbnRlcikKICAgICBnX2Fzc2VydCh3ZWJr
aXRfd2ViX2NvbnRleHRfaXNfZXBoZW1lcmFsKHdlYkNvbnRleHQuZ2V0KCkpKTsKICAgICBHUmVm
UHRyPFdlYktpdFdlYlZpZXc+IHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2Via2l0X3dlYl92
aWV3X25ld193aXRoX2NvbnRleHQod2ViQ29udGV4dC5nZXQoKSkpOwogICAgIGdfYXNzZXJ0KHdl
YmtpdF93ZWJfdmlld19pc19lcGhlbWVyYWwod2ViVmlldy5nZXQoKSkpOworICAgIGdfYXNzZXJ0
KHdlYmtpdF93ZWJfdmlld19nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2ViVmlldy5nZXQoKSkg
PT0gbWFuYWdlci5nZXQoKSk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KHdlYlZpZXcuZ2V0KCks
ICJsb2FkLWNoYW5nZWQiLCBHX0NBTExCQUNLKGVwaGVtZXJhbFZpZXdsb2FkQ2hhbmdlZCksIHRl
c3QpOwogICAgIHdlYmtpdF93ZWJfdmlld19sb2FkX3VyaSh3ZWJWaWV3LmdldCgpLCBrU2VydmVy
LT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOwpAQCAtNDg1LDYgKzQ4NywzNiBAQCBz
dGF0aWMgdm9pZCB0ZXN0V2Vic2l0ZURhdGFBcHBjYWNoZShXZWJzaXRlRGF0YVRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCiAgICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKIH0KIAorc3RhdGljIHZv
aWQgdGVzdFdlYnNpdGVEYXRhQ29va2llcyhXZWJzaXRlRGF0YVRlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCit7CisgICAgR0xpc3QqIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goV0VCS0lUX1dFQlNJ
VEVfREFUQV9DT09LSUVTKTsKKyAgICBnX2Fzc2VydCghZGF0YUxpc3QpOworCisgICAgdGVzdC0+
bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvZW1wdHkiKS5kYXRhKCkpOworICAgIHRl
c3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgZGF0YUxpc3QgPSB0ZXN0LT5mZXRj
aChXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMpOworICAgIGdfYXNzZXJ0KGRhdGFMaXN0KTsK
KyAgICBnX2Fzc2VydF9jbXB1aW50KGdfbGlzdF9sZW5ndGgoZGF0YUxpc3QpLCA9PSwgMSk7Cisg
ICAgV2ViS2l0V2Vic2l0ZURhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxXZWJLaXRXZWJzaXRlRGF0
YSo+KGRhdGFMaXN0LT5kYXRhKTsKKyAgICBnX2Fzc2VydChkYXRhKTsKKyAgICBnX2Fzc2VydF9j
bXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9nZXRfbmFtZShkYXRhKSwgPT0sICIxMjcuMC4wLjEi
KTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFfZ2V0X3R5cGVzKGRh
dGEpLCA9PSwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKTsKKyAgICAvLyBDb29raWVzIHNp
emUgaXMgdW5rbm93bi4KKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJzaXRlX2RhdGFf
Z2V0X3NpemUoZGF0YSwgV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVTKSwgPT0sIDApOworCisg
ICAgR0xpc3QgcmVtb3ZlTGlzdCA9IHsgZGF0YSwgbnVsbHB0ciwgbnVsbHB0ciB9OworICAgIHRl
c3QtPnJlbW92ZShXRUJLSVRfV0VCU0lURV9EQVRBX0NPT0tJRVMsICZyZW1vdmVMaXN0KTsKKyAg
ICBkYXRhTGlzdCA9IHRlc3QtPmZldGNoKFdFQktJVF9XRUJTSVRFX0RBVEFfQ09PS0lFUyk7Cisg
ICAgZ19hc3NlcnQoIWRhdGFMaXN0KTsKKworICAgIC8vIENsZWFyIGFsbC4KKyAgICBzdGF0aWMg
Y29uc3QgV2ViS2l0V2Vic2l0ZURhdGFUeXBlcyBjYWNoZUFuZENvb2tpZVR5cGVzID0gc3RhdGlj
X2Nhc3Q8V2ViS2l0V2Vic2l0ZURhdGFUeXBlcz4oV0VCS0lUX1dFQlNJVEVfREFUQV9DT09LSUVT
IHwgV0VCS0lUX1dFQlNJVEVfREFUQV9NRU1PUllfQ0FDSEUgfCBXRUJLSVRfV0VCU0lURV9EQVRB
X0RJU0tfQ0FDSEUpOworICAgIHRlc3QtPmNsZWFyKGNhY2hlQW5kQ29va2llVHlwZXMsIDApOwor
ICAgIGRhdGFMaXN0ID0gdGVzdC0+ZmV0Y2goY2FjaGVBbmRDb29raWVUeXBlcyk7CisgICAgZ19h
c3NlcnQoIWRhdGFMaXN0KTsKK30KKwogdm9pZCBiZWZvcmVBbGwoKQogewogICAgIGtTZXJ2ZXIg
PSBuZXcgV2ViS2l0VGVzdFNlcnZlcigpOwpAQCAtNDk2LDYgKzUyOCw3IEBAIHZvaWQgYmVmb3Jl
QWxsKCkKICAgICBXZWJzaXRlRGF0YVRlc3Q6OmFkZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAic3Rv
cmFnZSIsIHRlc3RXZWJzaXRlRGF0YVN0b3JhZ2UpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRk
KCJXZWJLaXRXZWJzaXRlRGF0YSIsICJkYXRhYmFzZXMiLCB0ZXN0V2Vic2l0ZURhdGFEYXRhYmFz
ZXMpOwogICAgIFdlYnNpdGVEYXRhVGVzdDo6YWRkKCJXZWJLaXRXZWJzaXRlRGF0YSIsICJhcHBj
YWNoZSIsIHRlc3RXZWJzaXRlRGF0YUFwcGNhY2hlKTsKKyAgICBXZWJzaXRlRGF0YVRlc3Q6OmFk
ZCgiV2ViS2l0V2Vic2l0ZURhdGEiLCAiY29va2llcyIsIHRlc3RXZWJzaXRlRGF0YUNvb2tpZXMp
OwogfQogCiB2b2lkIGFmdGVyQWxsKCkK
</data>
<flag name="review"
          id="323291"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>