<?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>14811</bug_id>
          
          <creation_ts>2007-07-30 01:40:03 -0700</creation_ts>
          <short_desc>[gtk] [request] add a webkit_gtk_page_go_to_history_item function</short_desc>
          <delta_ts>2008-01-27 11:51:41 -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>WebKit API</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Diego Escalante Urrelo">diegoe</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>alp</cc>
    
    <cc>christian</cc>
    
    <cc>cosimoc</cc>
    
    <cc>diegoe</cc>
    
    <cc>gwright</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3460</commentid>
    <comment_count>0</comment_count>
    <who name="Diego Escalante Urrelo">diegoe</who>
    <bug_when>2007-07-30 01:40:03 -0700</bug_when>
    <thetext>The attached patch works fine in Epiphany, we pass a number like -1 or 1, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3461</commentid>
    <comment_count>1</comment_count>
      <attachid>15738</attachid>
    <who name="Diego Escalante Urrelo">diegoe</who>
    <bug_when>2007-07-30 01:40:54 -0700</bug_when>
    <thetext>Created attachment 15738
proposed function

This works for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3458</commentid>
    <comment_count>2</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-30 01:57:44 -0700</bug_when>
    <thetext>As shortly mentioned on irc. How should the user of the API know which &apos;i&apos; is allowed? And what a positive and negative means?

There are at least two things to check:
   -A WebCore doesn&apos;t crash when giving i&apos;s larger than the history.
   -Add another set of methods to query the number of items one can go backward and forward. Get the title for the position i or alternatively return a list (GList) of HistoryItems and add a method to go to a HistoryItem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3456</commentid>
    <comment_count>3</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-30 02:13:59 -0700</bug_when>
    <thetext>Thanks to Oliver for reminding me. We should always take a look at WebView when adding methods. WebView is Mac&apos;s API for WebCore and it is used by a lot of applications like Safari, Mail, but also instant messaging, dashboard, iWeb (for editing) and a lot of other places.

http://developer.apple.com/documentation/Cocoa/Reference/WebKit/Classes/WebView_Class/Reference/Reference.html

has the following methods for history tracking:
– setMaintainsBackForwardList:  
– backForwardList  
– canGoBack  
– goBack  
– goBack:  
– canGoForward  
– goForward  
– goForward:  
– goToBackForwardItem:  

And I think all of them make sense and we should copy them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3451</commentid>
    <comment_count>4</comment_count>
    <who name="Diego Escalante Urrelo">diegoe</who>
    <bug_when>2007-07-30 03:09:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; As shortly mentioned on irc. How should the user of the API know which &apos;i&apos; is
&gt; allowed? And what a positive and negative means?
&gt; 
&gt; There are at least two things to check:
&gt;    -A WebCore doesn&apos;t crash when giving i&apos;s larger than the history.
Just tried a lot of times with random numbers (as provided by g_random_int()), seems like WebCore is fail-proof on this. Also I renamed the function, so for this point if you are satisfied I&apos;ll attach a patch for go_to_back_forward_item.

&gt;    -Add another set of methods to query the number of items one can go backward
&gt; and forward. Get the title for the position i or alternatively return a list
&gt; (GList) of HistoryItems and add a method to go to a HistoryItem.
Agree with that. Any idea on how to do it (the right way)?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2017</commentid>
    <comment_count>5</comment_count>
      <attachid>15738</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-18 16:54:53 -0700</bug_when>
    <thetext>Comment on attachment 15738
proposed function

Marking r- for now so the API can be reconsidered.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57960</commentid>
    <comment_count>6</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2007-10-06 14:44:53 -0700</bug_when>
    <thetext>FWIW, the proposed method is used in Epiphany to go back/forward several positions in the history from the Back/Forward dropdown menus in the toolbar.

There is a matching API in mozilla to do this, not that it means that it&apos;s good design :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>63187</commentid>
    <comment_count>7</comment_count>
      <attachid>17688</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2007-12-03 15:59:54 -0800</bug_when>
    <thetext>Created attachment 17688
RFC: History API 

Hi! I would like to request for feedback regarding a proposed API for histories. The attached patch adds the following WebView API to GTK+ WebView:

* setMaintainsBackForwardList()
* backForwardList()
* goToBackForwardItem(WebHistoryItem)

backForwardList() returns a WebKitBackForwardList which just encapsulate WebCore::BackForwardList.

WebHistoryItem also just encapsulate a WebCore::HistoryItem but doesn&apos;t provide an API for all of HistoryItem&apos;s methods like alternateTitle, etc..

I would like to hear your thoughts about this as well as points for improvement if any.

The patch is not for review as it&apos;s still lacking an implementation, though I&apos;m already working on that atm.

cheers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65408</commentid>
    <comment_count>8</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-12-27 14:40:59 -0800</bug_when>
    <thetext>*** Bug 14913 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66367</commentid>
    <comment_count>9</comment_count>
      <attachid>18298</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-06 03:01:58 -0800</bug_when>
    <thetext>Created attachment 18298
back/forward list and history item patch

This patch wraps WebCore&apos;s BackForwardList and HistoryItem. Also, use the back/forward list when traversing previous and next items in the WebKitWebView.

Feedback appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>66496</commentid>
    <comment_count>10</comment_count>
      <attachid>18298</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-07 15:28:45 -0800</bug_when>
    <thetext>Comment on attachment 18298
back/forward list and history item patch

This is looking good.

A few issues:

+    return g_strdup(title.utf8().data());

We can&apos;t return a newly allocated string as a const gchar*. Ideally we should cache the string being returned (this is what we do elsewhere in the public API). Depending on the situation there are different strategies but we have to follow the GTK+ conventions here or programmers will cause leaks by not freeing returned strings.

bdash notes that there&apos;s no need to check before deleting:

if (historyItemPriv-&gt;historyItem)
        delete historyItemPriv-&gt;historyItem

Now that we&apos;ve decided to use NULL in API code, you shouldn&apos;t return 0 for a const gchar* return, but NULL.

I didn&apos;t loook too carefully yet but kit() and core() are usually light operations that don&apos;t make new allocations or add references, so not following that expectation may lead to leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67351</commentid>
    <comment_count>11</comment_count>
      <attachid>18468</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-16 03:31:32 -0800</bug_when>
    <thetext>Created attachment 18468
updated gtk port back/forward list and history item patch

Hi alp

I have cleaned up and updated the patch as per your suggestions. Thanks. 

Please let me know if you any more suggestions or feedback about the patch. Cheers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67355</commentid>
    <comment_count>12</comment_count>
      <attachid>18470</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-16 05:43:36 -0800</bug_when>
    <thetext>Created attachment 18470
API fix and documentation

New symbols added, old symbols deprecated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67356</commentid>
    <comment_count>13</comment_count>
      <attachid>18470</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-16 05:45:45 -0800</bug_when>
    <thetext>Comment on attachment 18470
API fix and documentation

Attached this to the wrong bug, oops!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67415</commentid>
    <comment_count>14</comment_count>
      <attachid>18468</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-16 14:51:05 -0800</bug_when>
    <thetext>Comment on attachment 18468
updated gtk port back/forward list and history item patch

&gt;+static void webkit_web_back_forward_list_dispose(GObject* object)
&gt;+{
&gt;+    WebKitWebBackForwardList* webbflist = WEBKIT_WEB_BACK_FORWARD_LIST(object);
&gt;+
&gt;+    delete webbflist-&gt;priv-&gt;backForwardList;
&gt;+}

Personally I find &apos;webbflist&apos; unreadable.

Besides you shouldn&apos;t use the private pointer directly.

&gt;+static void webkit_web_back_forward_list_init(WebKitWebBackForwardList* object)
&gt;+{
&gt;+    object-&gt;priv = WEBKIT_WEB_BACK_FORWARD_LIST_GET_PRIVATE(object);
&gt;+}

This line is superfluous. It doesn&apos;t do anything.

&gt;+WebKitWebBackForwardList* webkit_web_back_forward_list_new(WebKitWebView* webView)

This feels wrong, semantically. You don&apos;t create an independant instance but you want to retrieve a list that is tied to the web view. What about webkit_web_view_get_back_forward_list instead?

&gt;+ * webkit_web_back_forward_list_get_back_item:
&gt;+ * webkit_web_back_forward_list_get_forward_item:

I find &apos;back_item&apos; and &apos;forward_item&apos; a bit awkward, I would prefer the terms &apos;previous_item&apos; and &apos;next_item&apos; instead.

&gt;+ * webkit_web_back_forward_list_get_item_at_index:

Consistent naming is desirable, in relation to Glib and Gtk that is. I suggest _get_nth_item.

&gt;+ * webkit_web_back_forward_list_get_back_list_count:

I already commented that back_item feels awkward to me. Further more &apos;count&apos; feels wrong. What about _get_n_previous_items, provided we want the renaming? Else it could be _get_n_back_items.

&gt;+ * webkit_web_back_forward_list_get_capacity:
&gt;+ * webkit_web_back_forward_list_set_capacity:

Consitency again. There is nothing in Glib or Gtk using that terminology. Au contraire _get_limit and _set_limit are used with GtkRecentManager.

&gt;+WebCore::BackForwardList* WebKit::core(WebKitWebBackForwardList* webBackForwardList)
&gt;+{
&gt;+    g_return_val_if_fail(WEBKIT_IS_WEB_BACK_FORWARD_LIST(webBackForwardList), NULL);
&gt;+
&gt;+    return webBackForwardList-&gt;priv ? webBackForwardList-&gt;priv-&gt;backForwardList : 0;

Again, you shouldn&apos;t use the private pointer directly.

&gt;+static void webkit_history_item_add(WebKitWebHistoryItem* witem, WebCore::HistoryItem* hitem) 
&gt;+{
&gt;+    g_return_if_fail(WEBKIT_IS_WEB_HISTORY_ITEM(witem));
&gt;+    
&gt;+    GHashTable* table = webkit_history_items();
&gt;+
&gt;+    hitem-&gt;ref();
&gt;+    g_hash_table_insert(table, hitem, g_object_ref(witem));

I find hitem and witem slightly confusing, Names such as historyItem and coreHistoryItem/ coreItem would be far more readable.

&gt;+static void webkit_web_history_item_dispose(GObject* object)
&gt;+{
&gt;+    WebKitWebHistoryItem* item = WEBKIT_WEB_HISTORY_ITEM(object);
&gt;+
&gt;+    webkit_history_item_remove(item-&gt;priv-&gt;historyItem);
&gt;+    
&gt;+    delete item-&gt;priv-&gt;historyItem;
&gt;+
&gt;+    /* destroy table if empty */
&gt;+    GHashTable* table = webkit_history_items();
&gt;+    if (!g_hash_table_size(table))
&gt;+        g_hash_table_destroy(table);
&gt;+    
&gt;+    G_OBJECT_CLASS(webkit_web_history_item_parent_class)-&gt;dispose(object);

Again, please don&apos;t use the private pointer directly.

&gt;+static void webkit_web_history_item_finalize(GObject* object)
&gt;+{
&gt;+    WebKitWebHistoryItem* historyItem = WEBKIT_WEB_HISTORY_ITEM(object);
&gt;+
&gt;+    if (historyItem-&gt;priv-&gt;title)
&gt;+        g_free(historyItem-&gt;priv-&gt;title);
&gt;+
&gt;+    if (historyItem-&gt;priv-&gt;alternateTitle)
&gt;+        g_free(historyItem-&gt;priv-&gt;alternateTitle);
&gt;+
&gt;+    if (historyItem-&gt;priv-&gt;uri)
&gt;+        g_free(historyItem-&gt;priv-&gt;uri);
&gt;+
&gt;+    if (historyItem-&gt;priv-&gt;originalUri)
&gt;+        g_free(historyItem-&gt;priv-&gt;originalUri);
&gt;+
&gt;+    G_OBJECT_CLASS(webkit_web_history_item_parent_class)-&gt;finalize(object);

No need to check whether character arrays are empty, g_free does this for you.

See above, private.

&gt;+static void webkit_web_history_item_init(WebKitWebHistoryItem* object)
&gt;+{
&gt;+    object-&gt;priv = WEBKIT_WEB_HISTORY_ITEM_GET_PRIVATE(object);
&gt;+}

See above, superfluous.

&gt;+
&gt;+WebKitWebHistoryItem* _web_history_item_new_with_core_item(WebCore::HistoryItem* item)
&gt;+{
&gt;+    WebKitWebHistoryItem* object;
&gt;+
&gt;+    object = kit(item);
&gt;+
&gt;+    if (!object) {
&gt;+        object = WEBKIT_WEB_HISTORY_ITEM(g_object_new(WEBKIT_TYPE_WEB_HISTORY_ITEM, NULL));
&gt;+        object-&gt;priv-&gt;historyItem = item;
&gt;+        webkit_history_item_add(object, object-&gt;priv-&gt;historyItem);
&gt;+    }
&gt;+
&gt;+    return object;
&gt;+}

object seems like a strange choice for a variable name here. And you can merge the initialization.

See above, private.

&gt;+ * webkit_web_history_item_new:
&gt;+ *
&gt;+ * Creates a new #WebKitWebHistoryItem
&gt;+ *
&gt;+ * Return value: the new #WebKitWebHistoryItem
&gt;+ */
&gt;+WebKitWebHistoryItem* webkit_web_history_item_new(void)
&gt;+{
&gt;+    WebKitWebHistoryItem* object = WEBKIT_WEB_HISTORY_ITEM(g_object_new(WEBKIT_TYPE_WEB_HISTORY_ITEM, NULL));
&gt;+
&gt;+    object-&gt;priv-&gt;historyItem = new WebCore::HistoryItem();
&gt;+
&gt;+    webkit_history_item_add(object, object-&gt;priv-&gt;historyItem);
&gt;+
&gt;+    return object;
&gt;+}

See above, object?

See above, private.

&gt;+WebKitWebHistoryItem* webkit_web_history_item_new_with_data(const gchar* uri, const gchar* title)
&gt;+{
&gt;+    WebCore::KURL historyUri(uri);
&gt;+    WebCore::String historyTitle(title);
&gt;+
&gt;+    WebKitWebHistoryItem* object = webkit_web_history_item_new();
&gt;+
&gt;+    object-&gt;priv-&gt;historyItem = new WebCore::HistoryItem(historyUri, historyTitle);
&gt;+
&gt;+    webkit_history_item_add(object, object-&gt;priv-&gt;historyItem);
&gt;+        
&gt;+    return object;

See above, object?

See above, private.

&gt;+const gchar* webkit_web_history_item_get_title(WebKitWebHistoryItem* webHistoryItem)
&gt;+{
&gt;+    g_return_val_if_fail(WEBKIT_IS_WEB_HISTORY_ITEM(webHistoryItem), NULL);
&gt;+
&gt;+    WebCore::HistoryItem* item = core(WEBKIT_WEB_HISTORY_ITEM(webHistoryItem));
&gt;+
&gt;+    if (!item)
&gt;+        return NULL;
&gt;+
&gt;+    WebCore::String title = item-&gt;title();
&gt;+
&gt;+    if (webHistoryItem-&gt;priv-&gt;title)
&gt;+        g_free(webHistoryItem-&gt;priv-&gt;title);
&gt;+
&gt;+    webHistoryItem-&gt;priv-&gt;title = g_strdup(title.utf8().data());
&gt;+      
&gt;+    return webHistoryItem-&gt;priv-&gt;title;
&gt;+}

No need to check whether title is empty.

See above, private.

&gt;+ * webkit_web_history_item_get_alternate_title:
&gt;+ * @webHistoryItem: a #WebKitWebHistoryItem
&gt;+ *
&gt;+ * Returns the alternate title for @this
&gt;+ *

&gt;+ * webkit_web_history_item_set_alternate_title:
&gt;+ * @webHistoryItem: a #WebKitWebHistoryItem
&gt;+ * @title: the alternate title for @this history item
&gt;+ *
&gt;+ * Sets the alternate title for @this
&gt;+ */

What is this? To a new user of the api this has no (obvious) meaning, so please explain how and what for to use the alternate title.

&gt;+ * webkit_web_history_item_get_original_uri:
&gt;+ * @webHistoryItem: a #WebKitWebHistoryItem
&gt;+ *
&gt;+ * Returns the original URI of @this

Again, please explain what this is, one sentence is enough.


&gt;+struct _WebKitWebHistoryItemClass {
&gt;+    GObjectClass parent;
&gt;+
&gt;+    const gchar* (*get_title) (WebKitWebHistoryItem* history_item);
&gt;+    const gchar* (*get_alternate_title) (WebKitWebHistoryItem* history_item);
&gt;+    const gchar* (*get_uri) (WebKitWebHistoryItem* history_item);
&gt;+    const gchar* (*get_original_uri) (WebKitWebHistoryItem* history_item);
&gt;+    void (*set_alternate_title) (WebKitWebHistoryItem* history_item, const gchar* title);
&gt;+    gdouble (*get_last_visited_time) (WebKitWebHistoryItem* history_item);
&gt;+};

What is this? Looks like Signals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67417</commentid>
    <comment_count>15</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-01-16 15:14:45 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 18468 [edit])
&gt; &gt;+static void webkit_web_back_forward_list_dispose(GObject* object)
&gt; &gt;+{
&gt; &gt;+    WebKitWebBackForwardList* webbflist = WEBKIT_WEB_BACK_FORWARD_LIST(object);
&gt; &gt;+
&gt; &gt;+    delete webbflist-&gt;priv-&gt;backForwardList;
&gt; &gt;+}
&gt; 
&gt; Personally I find &apos;webbflist&apos; unreadable.
&gt; 
&gt; Besides you shouldn&apos;t use the private pointer directly.
&gt; 
&gt; &gt;+static void webkit_web_back_forward_list_init(WebKitWebBackForwardList* object)
&gt; &gt;+{
&gt; &gt;+    object-&gt;priv = WEBKIT_WEB_BACK_FORWARD_LIST_GET_PRIVATE(object);
&gt; &gt;+}
&gt; 
&gt; This line is superfluous. It doesn&apos;t do anything.
&gt; 

That line sets the priv pointer in the struct to the object private data, so it does something. And accessing directly the priv pointer from within the object implementation is an extremely widely used technique/optimization in the GTK+ world.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67645</commentid>
    <comment_count>16</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-18 17:20:21 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; &gt;+ * webkit_web_back_forward_list_get_back_item:
&gt; &gt;+ * webkit_web_back_forward_list_get_forward_item:
&gt; 
&gt; I find &apos;back_item&apos; and &apos;forward_item&apos; a bit awkward, I would prefer the terms
&gt; &apos;previous_item&apos; and &apos;next_item&apos; instead.

back_item and forward_item makes sense for a BackForwardList.

&gt; &gt;+ * webkit_web_back_forward_list_get_item_at_index:
&gt; 
&gt; Consistent naming is desirable, in relation to Glib and Gtk that is. I suggest
&gt; _get_nth_item.

Yup.

&gt; &gt;+ * webkit_web_back_forward_list_get_back_list_count:
&gt; 
&gt; I already commented that back_item feels awkward to me. Further more &apos;count&apos;
&gt; feels wrong. What about _get_n_previous_items, provided we want the renaming?
&gt; Else it could be _get_n_back_items.

I renamed this to webkit_web_back_forward_list_get_back_list_length. Ditto with with the forward list. _get_n_back_items suggests that you want to retrieve N items from the back list. Ditto with _get_n_forward_items.

&gt; &gt;+ * webkit_web_back_forward_list_get_capacity:
&gt; &gt;+ * webkit_web_back_forward_list_set_capacity:
&gt; 
&gt; Consitency again. There is nothing in Glib or Gtk using that terminology. Au
&gt; contraire _get_limit and _set_limit are used with GtkRecentManager.

Yup.

&lt;snip&gt;

&gt; &gt;+        g_free(historyItem-&gt;priv-&gt;title);
&gt; &gt;+
&gt; &gt;+    if (historyItem-&gt;priv-&gt;alternateTitle)
&gt; &gt;+        g_free(historyItem-&gt;priv-&gt;alternateTitle);
&gt; &gt;+
&gt; &gt;+    if (historyItem-&gt;priv-&gt;uri)
&gt; &gt;+        g_free(historyItem-&gt;priv-&gt;uri);
&gt; &gt;+
&gt; &gt;+    if (historyItem-&gt;priv-&gt;originalUri)
&gt; &gt;+        g_free(historyItem-&gt;priv-&gt;originalUri);
&gt; &gt;+
&gt; &gt;+    G_OBJECT_CLASS(webkit_web_history_item_parent_class)-&gt;finalize(object);
&gt; 
&gt; No need to check whether character arrays are empty, g_free does this for you.

Thanks, didn&apos;t know that.

&gt; &gt;+WebKitWebHistoryItem* _web_history_item_new_with_core_item(WebCore::HistoryItem* item)
&gt; &gt;+{
&gt; &gt;+    WebKitWebHistoryItem* object;
&gt; &gt;+
&gt; &gt;+    object = kit(item);
&gt; &gt;+
&gt; &gt;+    if (!object) {
&gt; &gt;+        object = WEBKIT_WEB_HISTORY_ITEM(g_object_new(WEBKIT_TYPE_WEB_HISTORY_ITEM, NULL));
&gt; &gt;+        object-&gt;priv-&gt;historyItem = item;
&gt; &gt;+        webkit_history_item_add(object, object-&gt;priv-&gt;historyItem);
&gt; &gt;+    }
&gt; &gt;+
&gt; &gt;+    return object;
&gt; &gt;+}
&gt; 
&gt; object seems like a strange choice for a variable name here. And you can merge
&gt; the initialization.

What do you mean by merge the initialization?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67649</commentid>
    <comment_count>17</comment_count>
      <attachid>18537</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-18 19:45:08 -0800</bug_when>
    <thetext>Created attachment 18537
updated back forward patch

Updated patch to cleanup g_free usage, use _nth_item instead of _item_at_index, use _limit instead of _capacity, use _back_length instead of _back_list_count - ditto with _forward_list_count, and documentation fixes.

cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67848</commentid>
    <comment_count>18</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-21 09:06:20 -0800</bug_when>
    <thetext>I didn&apos;t review this fully yet.

+static void webkit_web_back_forward_list_finalize(GObject* object)
+{
+    G_OBJECT_CLASS(webkit_web_back_forward_list_parent_class)-&gt;finalize(object);
+}

Is this redundant?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67851</commentid>
    <comment_count>19</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-21 09:55:10 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=18537) [edit]
&gt; updated back forward patch

&gt; webkit_web_back_forward_list_new_with_view

This should be _new_with_web_view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67854</commentid>
    <comment_count>20</comment_count>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-21 10:28:22 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; I didn&apos;t review this fully yet.
&gt; 
&gt; +static void webkit_web_back_forward_list_finalize(GObject* object)
&gt; +{
&gt; +   
&gt; G_OBJECT_CLASS(webkit_web_back_forward_list_parent_class)-&gt;finalize(object);
&gt; +}
&gt; 
&gt; Is this redundant?

hi alp! why do you think it&apos;s redundant?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67855</commentid>
    <comment_count>21</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-01-21 10:30:45 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #18)
&gt; &gt; I didn&apos;t review this fully yet.
&gt; &gt; 
&gt; &gt; +static void webkit_web_back_forward_list_finalize(GObject* object)
&gt; &gt; +{
&gt; &gt; +   
&gt; &gt; G_OBJECT_CLASS(webkit_web_back_forward_list_parent_class)-&gt;finalize(object);
&gt; &gt; +}
&gt; &gt; 
&gt; &gt; Is this redundant?
&gt; 
&gt; hi alp! why do you think it&apos;s redundant?
&gt; 

It only chains to the parent class impl, so if you are not planning to do anything else it is useless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67856</commentid>
    <comment_count>22</comment_count>
      <attachid>18577</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-21 10:38:40 -0800</bug_when>
    <thetext>Created attachment 18577
updated patch 

@Christian, thanks. Renamed it to _new_with_web_view

@alp, @xan: Thanks. Removed that line.

cheers,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67857</commentid>
    <comment_count>23</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-01-21 10:49:30 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created an attachment (id=18577) [edit]
&gt; updated patch 
&gt; 
&gt; @Christian, thanks. Renamed it to _new_with_web_view
&gt; 
&gt; @alp, @xan: Thanks. Removed that line.

Hehe, now it&apos;s wrong!

If you are not going to do anything in finalize just don&apos;t set your handler in class_init and you will automatically use your parent&apos;s. If you *do* set your handler though, you have to chain.

So remove the function and the assignment in class_init.

&gt; 
&gt; cheers,
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67860</commentid>
    <comment_count>24</comment_count>
      <attachid>18578</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-21 11:25:08 -0800</bug_when>
    <thetext>Created attachment 18578
updated patch to remove finalize

@xan: lol, thanks a lot. updated the patch to remove finalize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67877</commentid>
    <comment_count>25</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-21 13:53:56 -0800</bug_when>
    <thetext>+    if (!webViewData-&gt;corePage || !webViewData-&gt;corePage-&gt;backForwardList()-&gt;enabled()) {
+        return NULL;
+    }

Shouldn&apos;t have braces.

+const gchar* webkit_web_history_item_get_original_uri (WebKitWebHistoryItem* webHistoryItem)

Shouldn&apos;t have a space before the parenthesis. I saw this in a few places.

+ * Returns the time @webHistoryItem was last visited

This doc seems unclear to me. The time /since/ it was last visited, or was something else meant?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68037</commentid>
    <comment_count>26</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-01-23 09:32:49 -0800</bug_when>
    <thetext>I think _WebKitWebHistoryItemPrivate should be define in webkitprivate.h like it has been done with WebView, WebFrame and NetworkRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68038</commentid>
    <comment_count>27</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-23 09:40:12 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; I think _WebKitWebHistoryItemPrivate should be define in webkitprivate.h like
&gt; it has been done with WebView, WebFrame and NetworkRequest.

I don&apos;t think so. A separate header for privates in one of the quirks we should rather get rid of instead of adding to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68040</commentid>
    <comment_count>28</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-23 09:54:32 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; I think _WebKitWebHistoryItemPrivate should be define in webkitprivate.h like
&gt; &gt; it has been done with WebView, WebFrame and NetworkRequest.
&gt; 
&gt; I don&apos;t think so. A separate header for privates in one of the quirks we should
&gt; rather get rid of instead of adding to.
&gt; 

Agreed. Privates should be private and scoped to one file wherever possible. (webkitprivate.h should have been called webkitinternal.h really, but doesn&apos;t matter really.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68070</commentid>
    <comment_count>29</comment_count>
    <who name="Pierre-Luc Beaudoin">pierre-luc.beaudoin</who>
    <bug_when>2008-01-23 14:31:34 -0800</bug_when>
    <thetext>In webkit_web_history_item_get_uri and webkit_web_history_item_get_title you are making copies of the strings to save into WebHistoryItemPrivate.  Is there a reason?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68104</commentid>
    <comment_count>30</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-24 01:23:54 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; In webkit_web_history_item_get_uri and webkit_web_history_item_get_title you
&gt; are making copies of the strings to save into WebHistoryItemPrivate.  Is there
&gt; a reason?

The reason is that by convention developers expect a constant string. And since WebKit doesn&apos;t use plain character arrays internally it needs to act accordingly. You can&apos;t rely on the .utf8() buffer&apos;s lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68216</commentid>
    <comment_count>31</comment_count>
      <attachid>18578</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-25 08:11:56 -0800</bug_when>
    <thetext>Comment on attachment 18578
updated patch to remove finalize

Clearing r?

Please fix the minor issues I listed and sync this with SVN TOT. I think it&apos;s good for landing then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68217</commentid>
    <comment_count>32</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-25 08:20:26 -0800</bug_when>
    <thetext>Jan, is there any chance of getting this cleaned up soon? I&apos;d like to get it in before #17006 (a big move of source files) happens so it doesn&apos;t fall further out of sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68250</commentid>
    <comment_count>33</comment_count>
      <attachid>18693</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-25 22:00:01 -0800</bug_when>
    <thetext>Created attachment 18693
cleanup coding style and doc

Hi alp! I&apos;ve cleaned up the coding style and fix the lastVisitedTime() doc. Let me know if there are still issues.

Regards,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68266</commentid>
    <comment_count>34</comment_count>
      <attachid>18693</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-25 23:41:07 -0800</bug_when>
    <thetext>Comment on attachment 18693
cleanup coding style and doc

Found a bug, removing for review flag..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68270</commentid>
    <comment_count>35</comment_count>
      <attachid>18701</attachid>
    <who name="Jan Alonzo">jmalonzo</who>
    <bug_when>2008-01-26 00:16:45 -0800</bug_when>
    <thetext>Created attachment 18701
updated patch

This is the correct patch. The previous patch gives a segfault on web_view_finalize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68369</commentid>
    <comment_count>36</comment_count>
      <attachid>18701</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-27 11:44:55 -0800</bug_when>
    <thetext>Comment on attachment 18701
updated patch

Will fix up incorrect whitespace in the .pro file before landing.

Some of the null checks after core() may be excessive, but it&apos;s ok to stay safe for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68370</commentid>
    <comment_count>37</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-27 11:51:41 -0800</bug_when>
    <thetext>Landed in r29821.

We should keep an eye on this API and see how apps make use of it, make sure there&apos;s no redundancy etc. as usual.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15738</attachid>
            <date>2007-07-30 01:40:54 -0700</date>
            <delta_ts>2007-08-18 16:54:53 -0700</delta_ts>
            <desc>proposed function</desc>
            <filename>page_go_to_history_item.diff</filename>
            <type>text/plain</type>
            <size>1223</size>
            <attacher name="Diego Escalante Urrelo">diegoe</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCShyZXZpc2lvbiAyNDc3MCkKKysrIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNiArMzE0
LDE0IEBAIFdlYktpdEd0a1NldHRpbmdzKiB3ZWJraXRfZ3RrX3BhZ2VfZ2V0X3MKICAgICByZXR1
cm4gMDsKIH0KIAordm9pZCB3ZWJraXRfZ3RrX3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtKFdlYktp
dEd0a1BhZ2UqIHBhZ2UsCisJCQkJCWludCBpKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRl
KiBwYWdlRGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJL
aXRHdGtGcmFtZVByaXZhdGUqIGZyYW1lRGF0YSA9IFdFQktJVF9HVEtfRlJBTUVfR0VUX1BSSVZB
VEUocGFnZURhdGEtPm1haW5fZnJhbWUpOworICAgIGZyYW1lRGF0YS0+ZnJhbWUtPmxvYWRlcigp
LT5nb0JhY2tPckZvcndhcmQoaSk7Cit9CisKIHZvaWQgd2Via2l0X2d0a19wYWdlX2dvX2JhY2t3
YXJkKFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7CiAgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBh
Z2VfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKSW5kZXg6IFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgJKHJldmlzaW9uIDI0NzcwKQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0
Z3RrcGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDkgQEAgV0VCS0lUX0dUS19B
UEkgZ2Jvb2xlYW4KIHdlYmtpdF9ndGtfcGFnZV9jYW5fZ29fZm9yd2FyZCAoV2ViS2l0R3RrUGFn
ZSogcGFnZSk7CiAKIFdFQktJVF9HVEtfQVBJIHZvaWQKK3dlYmtpdF9ndGtfcGFnZV9nb190b19o
aXN0b3J5X2l0ZW0gKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIGludCBpKTsKKworV0VCS0lUX0dUS19B
UEkgdm9pZAogd2Via2l0X2d0a19wYWdlX2dvX2JhY2t3YXJkIChXZWJLaXRHdGtQYWdlKiBwYWdl
KTsKIAogV0VCS0lUX0dUS19BUEkgdm9pZAo=
</data>
<flag name="review"
          id="6563"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17688</attachid>
            <date>2007-12-03 15:59:54 -0800</date>
            <delta_ts>2008-01-06 03:01:58 -0800</delta_ts>
            <desc>RFC: History API </desc>
            <filename>webkitgtk-history-api-rfc.patch</filename>
            <type>text/plain</type>
            <size>7858</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRiYWNrZm9yd2FyZGxpc3QuaCBi
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRiYWNrZm9yd2FyZGxpc3QuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGMwYzJhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdGJhY2tmb3J3YXJkbGlzdC5oCkBAIC0wLDAgKzEsODAgQEAKKwor
I2lmbmRlZiBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfSAorI2RlZmluZSBXRUJLSVRfQkFDS19G
T1JXQVJEX0xJU1RfSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgIndl
YmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0JB
Q0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9CQUNLX0ZP
UldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFz
cyksICBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0
Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfQkFDS19GT1JX
QVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfQkFDS19G
T1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfQkFD
S19GT1JXQVJEX0xJU1QsIFdlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKworCitzdHJ1Y3Qg
X1dlYktpdEJhY2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1
Y3QgX1dlYktpdEJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF90
eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRCYWNrRm9yd2FyZExpc3QqCit3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfbmV3ICh2b2lkKTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RfZ29fZm9yd2FyZCAoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNr
X2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2JhY2tfZm9yd2FyZF9s
aXN0X2dvX2JhY2sgKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja19mb3J3YXJkX2xpc3QpOwor
CitXRUJLSVRfQVBJX3ZvaWQKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtIChX
ZWJLaXRCYWNrRm9yd2FyZExpc3QqIGJhY2tfZm9yd2FyZF9saXN0LCBXZWJLaXRIaXN0b3J5SXRl
bSogaGlzdG9yeV9pdGVtKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdEJhY2tGb3J3YXJkTGlz
dCogYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgbGltaXQpOworCitXRUJLSVRfQVBJIEdMaXN0Kgor
d2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCAoV2ViS2l0
QmFja0ZvcndhcmRMaXN0KiBiYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBsaW1pdCk7CisKK1dFQktJ
VF9BUEkgV2ViS2l0SGlzdG9yeUl0ZW0qCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfaXRlbSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0SGlzdG9yeUl0ZW0qCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrX2ZvcndhcmRfbGlzdCk7
CisKK1dFQktJVF9BUEkgV2ViS2l0SGlzdG9yeUl0ZW0qCit3ZWJraXRfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2ZvcndhcmRfaXRlbSAoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBiYWNrX2ZvcndhcmRf
bGlzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0SGlzdG9yeUl0ZW0qCit3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2l0ZW1fYXRfaW5kZXggKFdlYktpdEJhY2tGb3J3YXJkTGlzdCogYmFja19m
b3J3YXJkX2xpc3QsIGdpbnQgaW5kZXgpOworCitXRUJLSVRfQVBJIGdpbnQKK3dlYmtpdF9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X2NvdW50IChXZWJLaXRCYWNrRm9yd2FyZExpc3Qq
IGJhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF9jb3VudCAoV2ViS2l0QmFja0ZvcndhcmRMaXN0KiBi
YWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF9jYXBhY2l0eSAoV2ViS2l0QmFja0ZvcndhZExpc3QqIGJhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2Nh
cGFjaXR5IChXZWJLaXRCYWNrRm9yd2FkTGlzdCogYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgY2Fw
YWNpdHkpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9zZXRf
cGFnZV9jYWNoZV9zaXplIChXZWJLaXRCYWNrRm9yd2FkTGlzdCogYmFja19mb3J3YXJkX2xpc3Qs
IGd1aW50IGNhY2hlU2l6ZSk7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtpdF9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfcGFnZV9jYWNoZV9zaXplIChXZWJLaXRCYWNrRm9yd2FkTGlzdCogYmFja19m
b3J3YXJkX2xpc3QpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
ZGVmaW5lcy5oCmluZGV4IDY0MDU2OTAuLjVmMTkxNDYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
V2ViVmlldy93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRl
ZmluZXMuaApAQCAtNTYsNiArNTYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdD
bGFzcyBXZWJLaXRXZWJWaWV3Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29ya1Jl
cXVlc3QgV2ViS2l0TmV0d29ya1JlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0TmV0d29y
a1JlcXVlc3RDbGFzcyBXZWJLaXROZXR3b3JrUmVxdWVzdENsYXNzOwogCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0QmFja0ZvcndhcmRMaXN0IFdlYktpdEJhY2tGb3J3YXJkTGlzdDsKK3R5cGVkZWYg
c3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RDbGFzcyBXZWJLaXRCYWNrRm9yd2FyZExpc3RD
bGFzczsKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpc3RvcnlJdGVtIFdlYktpdEhpc3RvcnlJ
dGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpc3RvcnlJdGVtQ2xhc3MgV2ViS2l0SGlzdG9y
eUl0ZW1DbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0aGlzdG9yeWl0ZW0uaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRoaXN0b3J5aXRlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MTlh
ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0aGlzdG9yeWl0
ZW0uaApAQCAtMCwwICsxLDUyIEBACisKKyNpZm5kZWYgV0VCS0lUX0hJU1RPUllfSVRFTV9ICisj
ZGVmaW5lIFdFQktJVF9ISVNUT1JZX0lURU1fSAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
KworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX0hJU1RPUllfSVRFTSAgICAgICAgICAgICh3ZWJraXRfaGlzdG9yeV9pdGVt
X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9ISVNUT1JZX0lURU0ob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfSElTVE9SWV9J
VEVNLCBXZWJLaXRIaXN0b3J5SXRlbSkpCisjZGVmaW5lIFdFQktJVF9ISVNUT1JZX0lURU1fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfSElTVE9SWV9JVEVNLCBXZWJLaXRIaXN0b3J5SXRlbXRDbGFzcykpCisjZGVmaW5lIFdFQktJ
VF9JU19ISVNUT1JZX0lURU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfSElTVE9SWV9JVEVNKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0hJ
U1RPUllfSVRFTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyks
ICBXRUJLSVRfVFlQRV9ISVNUT1JZX0lURU0pKQorI2RlZmluZSBXRUJLSVRfSElTVE9SWV9JVEVN
X0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJ
VF9UWVBFX0hJU1RPUllfSVRFTSwgV2ViS2l0SGlzdG9yeUl0ZW1DbGFzcykpCisKKworc3RydWN0
IF9XZWJLaXRIaXN0b3J5SXRlbSB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdEhpc3RvcnlJdGVtQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7Cit9Owor
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9oaXN0b3J5X2l0ZW1fZ2V0X3R5cGUgKHZvaWQp
OworCitXRUJLSVRfQVBJIFdlYktpdEhpc3RvcnlJdGVtKgord2Via2l0X2hpc3RvcnlfaXRlbV9u
ZXcgKHZvaWQpOworCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2hpc3RvcnlfaXRlbV9nZXRf
dGl0bGUgKFdlYktpdEhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIEdU
aW1lVmFsCit3ZWJraXRfaGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWQgKFdlYktpdEhpc3Rv
cnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGdjaGFyKgord2Via2l0X2hpc3Rv
cnlfaXRlbV9nZXRfdXJpIChXZWJLaXRIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVtKTsKKworV0VC
S0lUX0FQSSBnY2hhcioKK3dlYmtpdF9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2Vi
S2l0SGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgR2RrUGl4YnVmKgor
d2Via2l0X2hpc3RvcnlfaXRlbV9nZXRfaWNvbihXZWJLaXRIaXN0b3J5SXRlbSogaGlzdG9yeV9p
dGVtKTsKKyAgICAKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHBy
aXZhdGUuaAppbmRleCA3MjkzOTMwLi45ZTA5ZTM5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2
YXRlLmgKQEAgLTM5LDYgKzM5LDggQEAKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5j
bHVkZSAid2Via2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5o
IgorI2luY2x1ZGUgIndlYmtpdGhpc3RvcnlpdGVtLmgiCisjaW5jbHVkZSAid2Via2l0YmFja2Zv
cndhcmRsaXN0LmgiCiAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIK
QEAgLTcwLDYgKzcyLDggQEAgZXh0ZXJuICJDIiB7CiAKICAgICAgICAgSGFzaFNldDxHdGtXaWRn
ZXQqPiBjaGlsZHJlbjsKICAgICAgICAgYm9vbCBlZGl0YWJsZTsKKworICAgICAgICBXZWJLaXRC
YWNrRm9yd2FyZExpc3QgYmFja0ZvcndhcmRMaXN0OwogICAgIH07CiAKICAgICAjZGVmaW5lIFdF
QktJVF9XRUJfRlJBTUVfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfRlJBTUUsIFdlYktpdFdlYkZyYW1lUHJpdmF0
ZSkpCkBAIC05MCw2ICs5NCwxOCBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsK
ICAgICB9OwogCisgICAgI2RlZmluZSBXRUJLSVRfSElTVE9SWV9JVEVNX0dFVF9QUklWQVRFKG9i
aikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfSElT
VE9SWV9JVEVNLCBXZWJLaXRIaXN0b3J5SXRlbVByaXZhdGUpKQorICAgIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRIaXN0b3J5SXRlbVByaXZhdGUgV2ViS2l0SGlzdG9yeUl0ZW1Qcml2YXRlOworICAg
IHN0cnVjdCBfV2ViS2l0SGlzdG9yeUl0ZW1Qcml2YXRlIHsKKyAgICAgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGl0ZW07CisgICAgfQorCisgICAgI2RlZmluZSBXRUJLSVRfQkFDS19GT1JXQVJE
X0xJU1RfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0QmFja0ZvcndhcmRMaXN0
UHJpdmF0ZSkpCisgICAgdHlwZWRlZiBfc3RydWN0IF9XZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2
YXRlICBXZWJLaXRCYWNrRm9yd2FyZExpc3RQcml2YXRlOworICAgIHN0cnVjdCBfV2ViS2l0QmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCog
ZGF0YTsKKyAgICB9CisgICAgICAgIAogICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJraXRfd2ViX2Zy
YW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJWaWV3KiwgV2ViQ29yZTo6SFRNTEZyYW1l
T3duZXJFbGVtZW50Kik7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXR3ZWJ2aWV3LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCmluZGV4IDk3
MDg0MTkuLjA5MGJhMjUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2
aWV3LmgKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaApAQCAtOTEsNiAr
OTEsMTUgQEAgd2Via2l0X3dlYl92aWV3X2dldF90eXBlICh2b2lkKTsKIFdFQktJVF9BUEkgR3Rr
V2lkZ2V0Kgogd2Via2l0X3dlYl92aWV3X25ldyAodm9pZCk7CiAKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBnYm9vbGVhbiBmbGFnKTsgCisKK1dFQktJVF9BUEkgV2ViS2l0QmFj
a0ZvcndhcmRMaXN0Kgord2Via2l0X3dlYl92aWV3X2JhY2tfZm9yd2FyZF9saXN0IChXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmll
d19nb190b19iYWNrX2ZvcndhcmRfaXRlbSAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcsIFdlYktp
dEhpc3RvcnlJdGVtKiBpdGVtKTsKKwogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92
aWV3X2Nhbl9nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18298</attachid>
            <date>2008-01-06 03:01:58 -0800</date>
            <delta_ts>2008-01-16 03:31:32 -0800</delta_ts>
            <desc>back/forward list and history item patch</desc>
            <filename>webkitgtk-backforward.patch</filename>
            <type>text/plain</type>
            <size>48531</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0NzFiOTFkLi5mMTlmMzQ5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMDgtMDEtMDYgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlv
bgorCisgICAgICAgIEFkZGVkIHdlYiBiYWNrIGZvcndhcmQgbGlzdCBhbmQgd2ViIGhpc3Rvcnkg
aXRlbSBoZWFkZXIgYW5kIHNvdXJjZQorICAgICAgICBmaWxlcworCisgICAgICAgICogR05VbWFr
ZWZpbGUuYW06CisKIDIwMDgtMDEtMDUgIEFscCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgogCiAg
ICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IE1hcmsgUm93ZS4KZGlmZiAtLWdpdCBhL0dOVW1ha2Vm
aWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggYWE2NDE5ZS4uNTA2YTI0ZiAxMDA2NDQKLS0t
IGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTIxNyw3ICsyMTcsOSBA
QCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVz
LmggXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAlXZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaCBcCi0JV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHdlYnZpZXcuaCAKKwlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIFwKKwlX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAorCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oCiAKIHdlYmtpdGd0a19idWlsdF9zb3Vy
Y2VzICs9IFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LW1hcnNoYWwuaCBcCkBAIC0yNDAs
NiArMjQyLDggQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRzZXR0aW5ncy5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5j
cHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCisJV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAgXAorCVdlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAogCVdlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250
ZXh0TWVudUNsaWVudEd0ay5jcHAgXAogCVdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0Ns
aWVudEd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBmMGVjOWEzLi45YzViMzg0IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA4LTAxLTA2
ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B1bnBsdWdnYWJsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV0FSTklORzogTk8gVEVT
VCBDQVNFUyBBRERFRCBPUiBDSEFOR0VECisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTEKKyAgICAgICAgW2d0a10gW3JlcXVlc3RdIGFkZCBhIHdl
YmtpdF9ndGtfcGFnZV9nb190b19oaXN0b3J5X2l0ZW0gZnVuY3Rpb24KKworICAgICAgICBBZGRl
ZCB3ZWIgYmFjayBmb3J3YXJkIGxpc3QgYW5kIHdlYiBoaXN0b3J5IGl0ZW0gaGVhZGVyIGFuZCBz
b3VyY2UgZmlsZXMKKworCisgICAgICAgICogV2ViQ29yZS5wcm86CisKIDIwMDgtMDEtMDYgIEFs
cCBUb2tlciAgPGFscEBhdG9rZXIuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCA2YzExZWViLi5iZjc4NzE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk3MSw2ICs5NzEsOCBAQCBndGstcG9ydCB7CiAgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKICAgICAg
ICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaCBcCiAgICAgICAgIC4uL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5oIFwKKyAgICAgICAgLi4vV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKKyAgICAgICAgLi4vV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogICAgICAgICAuLi9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oIFwKQEAgLTEwNDcsNiArMTA0OSw4IEBAIGd0ay1wb3J0IHsK
ICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBc
CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcCBcCiAgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5jcHAgXAorICAgICAgICAu
Li9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBcCisgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAogICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwIFwKICAgICAgICAg
Li4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwIFwKICAgICAgICAgLi4vV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggMzllMzE1
YS4uODM1MzZjNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMCBAQAorMjAwOC0wMS0wNiAgSmFuIE1pY2hhZWwg
QWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODExCisgICAgICAgIFtndGtdIFtyZXF1ZXN0XSBhZGQgYSB3ZWJraXRfZ3Rr
X3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtIGZ1bmN0aW9uCisKKyAgICAgICAgSW1wbGVtZW50IGJh
Y2svZm9yd2FyZCBsaXN0IGFuZCBoaXN0b3J5IGl0ZW0KKworICAgICAgICAqIFdlYlZpZXcvaGVh
ZGVycy5wcmk6CisgICAgICAgICogV2ViVmlldy93ZWJraXQuaDoKKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwOgor
ICAgICAgICAoV2ViS2l0Ojpjb3JlKToKKyAgICAgICAgKFdlYktpdDo6a2l0KToKKyAgICAgICAg
KHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdHNfZGVzdHJveSk6CisgICAgICAgICh3ZWJraXRfaGlz
dG9yeV9pdGVtc19kZXN0cm95KToKKyAgICAgICAgKHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9y
ZW1vdmUpOgorICAgICAgICAod2Via2l0X2JhY2tfZm9yd2FyZF9saXN0c19lbXB0eSk6CisgICAg
ICAgICogV2ViVmlldy93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy93ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdl
YmJhY2tmb3J3YXJkbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdlYmhp
c3RvcnlpdGVtLmNwcDogQWRkZWQuCisgICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5
aXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwOgorICAg
ICAgICAqIFdlYlZpZXcvd2Via2l0d2Vidmlldy5oOgorCiAyMDA4LTAxLTAzICBYYW4gTG9wZXog
IDx4YW5AZ25vbWUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFscCBUb2tlci4KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy9oZWFkZXJzLnByaSBiL1dlYktpdC9ndGsvV2ViVmll
dy9oZWFkZXJzLnByaQppbmRleCA0YjJlYjIxLi5jZDVjYmU2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvaGVhZGVycy5wcmkKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMu
cHJpCkBAIC0yLDQgKzIsNiBAQCBXRUJLSVRfQVBJX0hFQURFUlMgPSAkJFBXRC93ZWJraXQuaCBc
CiAgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXRkZWZpbmVzLmggXAogICAgICAgICAg
ICAgICAgICAgICAgJCRQV0Qvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAgICAgICAgICAgICAg
ICAgICAgICAkJFBXRC93ZWJraXR3ZWJmcmFtZS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQk
UFdEL3dlYmtpdHdlYnZpZXcuaAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vi
dmlldy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYmhpc3RvcnlpdGVt
LmgKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQuaCBiL1dlYktpdC9ndGsv
V2ViVmlldy93ZWJraXQuaAppbmRleCBiNmEzYzBlLi4zMGE3ZDVjIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5o
CkBAIC0yNCw1ICsyNCw3IEBACiAjaW5jbHVkZSA8d2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdHdlYnZpZXcuaD4KKyNp
bmNsdWRlIDx3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXR3ZWJo
aXN0b3J5aXRlbS5oPgogCiAjZW5kaWYgLyogX19XRUJLSVRfSF9fICovCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdGRlZmluZXMuaAppbmRleCAyZDVlNjc4Li43MjcwNWFiIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRkZWZpbmVzLmgKQEAgLTQ3LDYgKzQ3LDEyIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJW
aWV3Q2xhc3MgV2ViS2l0V2ViVmlld0NsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5ldHdv
cmtSZXF1ZXN0IFdlYktpdE5ldHdvcmtSZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdE5l
dHdvcmtSZXF1ZXN0Q2xhc3MgV2ViS2l0TmV0d29ya1JlcXVlc3RDbGFzczsKIAordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Q7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3MgV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0Q2xhc3M7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5
SXRlbSBXZWJLaXRXZWJIaXN0b3J5SXRlbTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0
b3J5SXRlbUNsYXNzIFdlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3Bw
IGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmluZGV4IGM3NGRiYTUuLjI4
ZDBiODIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcAor
KysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQWxvbnpvCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTIzLDYgKzI0LDcgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNs
dWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50R3RrLmgiCisj
aW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCkBAIC0zMyw5ICszNSw1
MCBAQAogI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2VuZGlmCiAKKyNpbmNsdWRlIDxn
bGliLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCitleHRlcm4gIkMiIHsKKyAgICAK
K3N0YXRpYyB2b2lkIGhpc3RvcnlfaXRlbV91bnJlZihncG9pbnRlciBrZXksIGdwb2ludGVyIHZh
bHVlLCBncG9pbnRlcikgCit7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0gPSAoV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qKSBrZXk7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkl0
ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKSB2YWx1ZTsKKyAgCisgICAgaXRlbS0+ZGVyZWYo
KTsKKyAgICBnX29iamVjdF91bnJlZih3ZWJJdGVtKTsKKyAgICAKK30KKworc3RhdGljIHZvaWQg
YmFja19mb3J3YXJkX2xpc3RfdW5yZWYoZ3BvaW50ZXIga2V5LCBncG9pbnRlciB2YWx1ZSwgZ3Bv
aW50ZXIpCit7CisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Qg
PSAoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0Kikga2V5OworICAgIFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0ID0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCop
IHZhbHVlOworCisgICAgYmFja0ZvcndhcmRMaXN0LT5kZXJlZigpOworICAgIGdfb2JqZWN0X3Vu
cmVmKHdlYkJhY2tGb3J3YXJkTGlzdCk7Cit9CisKK3N0YXRpYyBHSGFzaFRhYmxlKiB3ZWJraXRf
aGlzdG9yeV9pdGVtcygpCit7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIGhpc3RvcnlJdGVtcyA9
IGdfaGFzaF90YWJsZV9uZXcoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOworICAgIAor
ICAgIHJldHVybiBoaXN0b3J5SXRlbXM7Cit9CisKK3N0YXRpYyBHSGFzaFRhYmxlKiB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RzKCkgCit7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIGJhY2tGb3J3
YXJkTGlzdHMgPSBnX2hhc2hfdGFibGVfbmV3KGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFs
KTsKKyAgICAKKyAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0czsKK30KKworCit9IC8vIGVuZCBl
eHRlcm4gIkMiCisKIG5hbWVzcGFjZSBXZWJLaXQgeworCiB2b2lkIGFwcGx5KFdlYktpdFNldHRp
bmdzKiwgV2ViQ29yZTo6U2V0dGluZ3MqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC05
MCw4ICsxMzMsMTE1IEBAIFdlYktpdFdlYlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKiBjb3JlUGFn
ZSkKICAgICByZXR1cm4gY2xpZW50ID8gY2xpZW50LT53ZWJWaWV3KCkgOiAwOwogfQogCitXZWJD
b3JlOjpIaXN0b3J5SXRlbSogY29yZShXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0
ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lU
RU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJp
dmF0ZSogd2ViSGlzdG9yeUl0ZW1Qcml2ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fR0VUX1BS
SVZBVEUod2ViSGlzdG9yeUl0ZW0pOworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5
SXRlbSA9IHdlYkhpc3RvcnlJdGVtUHJpdi0+aGlzdG9yeUl0ZW07CisKKyAgICByZXR1cm4gaGlz
dG9yeUl0ZW0gPyBoaXN0b3J5SXRlbSA6IDA7Cit9CisKK1dlYktpdFdlYkhpc3RvcnlJdGVtKiBr
aXQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtKQoreworICAgIGlmICghaGlzdG9y
eUl0ZW0pCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIFdlYktpdFdlYkhpc3RvcnlJdGVt
KiB3ZWJIaXN0b3J5SXRlbTsKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5
X2l0ZW1zKCk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbSA9IChXZWJLaXRXZWJIaXN0b3J5SXRlbSop
IGdfaGFzaF90YWJsZV9sb29rdXAodGFibGUsIGhpc3RvcnlJdGVtKTsKKyAgICAKKyAgICBpZiAo
d2ViSGlzdG9yeUl0ZW0pCisgICAgICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKKworICAgIHdl
Ykhpc3RvcnlJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3KCkpOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSogd2ViSGlzdG9y
eUl0ZW1Qcml2ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fR0VUX1BSSVZBVEUod2ViSGlzdG9y
eUl0ZW0pOworCisgICAgd2ViSGlzdG9yeUl0ZW1Qcml2LT5oaXN0b3J5SXRlbSA9IGhpc3RvcnlJ
dGVtOworCisgICAgaGlzdG9yeUl0ZW0tPnJlZigpOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQo
dGFibGUsIGhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbSk7CisKKyAgICByZXR1cm4gd2ViSGlz
dG9yeUl0ZW07Cit9CisKKworV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBjb3JlKFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRM
aXN0KSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlKiB3ZWJC
YWNrRm9yd2FyZERhdGEgPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9QUklWQVRF
KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgcmV0dXJuIHdlYkJhY2tGb3J3YXJkRGF0YSA/IHdl
YkJhY2tGb3J3YXJkRGF0YS0+YmFja0ZvcndhcmRMaXN0IDogMDsKK30KKworV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiBraXQoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExp
c3QpCit7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisgICAgR0hh
c2hUYWJsZSogdGFibGUgPSB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RzKCk7CisKKyAgICB3ZWJC
YWNrRm9yd2FyZExpc3QgPSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KikgZ19oYXNoX3RhYmxl
X2xvb2t1cCh0YWJsZSwgYmFja0ZvcndhcmRMaXN0KTsKKyAgICAKKyAgICBpZiAod2ViQmFja0Zv
cndhcmRMaXN0KQorICAgICAgICByZXR1cm4gd2ViQmFja0ZvcndhcmRMaXN0OworCisgICAgd2Vi
QmFja0ZvcndhcmRMaXN0ID0gV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X25ldygpKTsKKworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGUqIHdlYkJhY2tGb3J3YXJkUHJpdmF0ZTsKKyAgICB3ZWJCYWNrRm9yd2FyZFByaXZh
dGUgPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9QUklWQVRFICh3ZWJCYWNrRm9y
d2FyZExpc3QpOworICAgIGJhY2tGb3J3YXJkTGlzdC0+cmVmKCk7CisgICAgd2ViQmFja0Zvcndh
cmRQcml2YXRlLT5iYWNrRm9yd2FyZExpc3QgPSBiYWNrRm9yd2FyZExpc3Q7CisgICAgCisgICAg
YmFja0ZvcndhcmRMaXN0LT5yZWYoKTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHRhYmxlLCBi
YWNrRm9yd2FyZExpc3QsIHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICByZXR1cm4gd2ViQmFj
a0ZvcndhcmRMaXN0OwogfQogCit9IC8qKiBlbmQgbmFtZXNwYWNlIFdlYkNvcmUgKi8KKwordm9p
ZCB3ZWJraXRfYmFja19mb3J3YXJkX2xpc3RzX2Rlc3Ryb3koKQoreworICAgIEdIYXNoVGFibGUq
IHRhYmxlID0gd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0cygpOworCisgICAgZ19oYXNoX3RhYmxl
X2ZvcmVhY2godGFibGUsIGJhY2tfZm9yd2FyZF9saXN0X3VucmVmLCBOVUxMKTsKKyAgICBnX2hh
c2hfdGFibGVfZGVzdHJveSh0YWJsZSk7Cit9CisKKwordm9pZCB3ZWJraXRfaGlzdG9yeV9pdGVt
c19kZXN0cm95KCkKK3sKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5X2l0
ZW1zKCk7CisgICAgCisgICAgZ19oYXNoX3RhYmxlX2ZvcmVhY2godGFibGUsIGhpc3RvcnlfaXRl
bV91bnJlZiwgTlVMTCk7CisgICAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kodGFibGUpOworfQorCit2
b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9yZW1vdmUoV2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QpCit7CisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRf
YmFja19mb3J3YXJkX2xpc3RzKCk7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJC
YWNrRm9yd2FyZExpc3QgPSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KikgZ19oYXNoX3RhYmxl
X2xvb2t1cCh0YWJsZSwgYmFja0ZvcndhcmRMaXN0KTsKKworICAgIGlmICh3ZWJCYWNrRm9yd2Fy
ZExpc3QpIHsKKyAgICAgICAgZ19oYXNoX3RhYmxlX3JlbW92ZSh0YWJsZSwgYmFja0ZvcndhcmRM
aXN0KTsKKyAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5kZXJlZigpOworICAgICAgICBnX29iamVj
dF91bnJlZih3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIH0KK30KKworZ2Jvb2xlYW4gd2Via2l0
X2JhY2tfZm9yd2FyZF9saXN0c19lbXB0eSgpCit7CisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RzKCk7CisKKyAgICByZXR1cm4gKGdfaGFzaF90YWJsZV9z
aXplKHRhYmxlKSA/IEZBTFNFIDogVFJVRSk7Cit9CisKKworCiB2b2lkIHdlYmtpdF9pbml0KCkK
IHsKICAgICBzdGF0aWMgYm9vbCBpc0luaXRpYWxpemVkID0gZmFsc2U7CmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHByaXZhdGUuaAppbmRleCAxNDMyOGJjLi42MmZlYmNjIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRwcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlmaHQgKEMpIDIwMDggSmFuIE1pY2hh
ZWwgQy4gQWxvbnpvCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDEyICszMiwxOCBAQAogI2lu
Y2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgogI2lu
Y2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCisjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9y
eWl0ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCIKIAorI2luY2x1
ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgogCisjaW5jbHVkZSA8Z2xpYi5oPgorCiBuYW1l
c3BhY2UgV2ViS2l0IHsKICAgICB2b2lkIGFwcGx5KFdlYktpdFNldHRpbmdzKixXZWJDb3JlOjpT
ZXR0aW5ncyopOwogICAgIFdlYktpdFNldHRpbmdzKiBjcmVhdGUoV2ViQ29yZTo6U2V0dGluZ3Mq
KTsKQEAgLTQ0LDExICs1MSwyMyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgIFdlYkNvcmU6
OkZyYW1lKiBjb3JlKFdlYktpdFdlYkZyYW1lKik7CiAgICAgV2ViS2l0V2ViRnJhbWUqIGtpdChX
ZWJDb3JlOjpGcmFtZSopOworCiAgICAgV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRXZWJWaWV3
Kik7CiAgICAgV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsKKworICAgIFdlYkNv
cmU6Okhpc3RvcnlJdGVtKiBjb3JlKFdlYktpdFdlYkhpc3RvcnlJdGVtKik7CisgICAgV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIGtpdChXZWJDb3JlOjpIaXN0b3J5SXRlbSopOworCisgICAgV2ViQ29y
ZTo6QmFja0ZvcndhcmRMaXN0KiBjb3JlKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCopOworICAg
IFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCoga2l0KFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCop
OwogfQogCiBleHRlcm4gIkMiIHsKKyAgICB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdF9y
ZW1vdmUoV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QpOworICAgIGdi
b29sZWFuIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdHNfZW1wdHkoKTsKKyAgICB2b2lkIHdlYmtp
dF9oaXN0b3J5X2l0ZW1zX2Rlc3Ryb3koKTsKKyAgICB2b2lkIHdlYmtpdF9iYWNrX2ZvcndhcmRf
bGlzdHNfZGVzdHJveSgpOworICAgIAogICAgIHZvaWQgd2Via2l0X2luaXQoKTsKIAogICAgICNk
ZWZpbmUgV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1ZJRVcsIFdlYktpdFdlYlZpZXdQ
cml2YXRlKSkKQEAgLTkwLDYgKzEwOSwyMCBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIq
IHVyaTsKICAgICB9OwogCisgICAgI2RlZmluZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9HRVRf
UFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJ
VF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSkpCisg
ICAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSBXZWJLaXRXZWJI
aXN0b3J5SXRlbVByaXZhdGU7CisgICAgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZh
dGUgeworICAgICAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW07CisgICAgfTsK
KworCisgICAgI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9QUklWQVRF
KG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlKSkK
KyAgICB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSBXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOworICAgIHN0cnVjdCBfV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0UHJpdmF0ZSB7CisgICAgICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0OzsKKyAgICB9OworCisKICAgICBXZWJLaXRXZWJGcmFtZSogd2Via2l0X3dl
Yl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoV2ViS2l0V2ViVmlldyosIFdlYkNvcmU6OkhUTUxG
cmFtZU93bmVyRWxlbWVudCopOwogCiAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byB3ZWJraXR3
ZWJmcmFtZS5oIG9uY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdWxseQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAgYi9XZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40M2NjMzM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAKQEAgLTAsMCArMSwzODEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4gQWxvbnpvCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgor
I2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKworI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZXh0
ZXJuICJDIiB7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LCB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBHX1RZUEVfT0JKRUNUKTsKKyAgICAKK3N0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZmluYWxpemUoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gV0VC
S0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVChvYmplY3QpOworICAgIFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdFByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9Q
UklWQVRFKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgCisgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0
LT5kZXJlZigpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsYXNzX2luaXQoV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0Q2xhc3MqIHdlYkJhY2tGb3J3YXJkQ2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKHdlYkJhY2tGb3J3YXJkQ2xhc3MsIHNpemVvZihXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlKSk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJCYWNrRm9yd2FyZENsYXNz
KS0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2ZpbmFsaXplOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2luaXQoV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZSogd2ViQmFja0ZvcndhcmRQcml2ID0gV0VCS0lUX1dFQl9CQUNL
X0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURSh3ZWJCYWNrRm9yd2FyZExpc3QpOworCisgICAgd2Vi
QmFja0ZvcndhcmRQcml2LT5iYWNrRm9yd2FyZExpc3QgPSAwOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfbmV3OgorICoKKyAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ug
b2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X25ldyh2b2lkKQoreworICAgIHJldHVybiBXRUJLSVRfV0VC
X0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JX
QVJEX0xJU1QsIE5VTEwpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dvX2ZvcndhcmQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QKKyAqCisgKiBTdGVwcyBmb3J3YXJkIGluIHRoZSBiYWNrIGZvcndhcmQgbGlz
dAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fZm9yd2FyZCAoV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJk
TGlzdCkpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Qg
PSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdCkKKyAg
ICAgICAgYmFja0ZvcndhcmRMaXN0LT5nb0ZvcndhcmQoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2JhY2s6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBh
ICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBTdGVwcyBiYWNrd2FyZCBpbiB0aGUg
YmFjayBmb3J3YXJkIGxpc3QKKyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dvX2JhY2sgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmIChiYWNrRm9y
d2FyZExpc3QpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29CYWNrKCk7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtOgorICogQHdlYkJh
Y2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAd2ViSGlzdG9y
eUl0ZW06IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gdG8gY2hlY2sKKyAqCisgKiBDaGVja3Mg
aWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICoKKyAqIFJl
dHVybjogJVRSVUUgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndhcmQgbGlz
dCwgJUZBTFNFIGlmIGl0IGRvZXNuJ3QKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9jb250YWluc19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJh
Y2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qo
d2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKyAgICAKKyAg
ICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBjb3JlKHdlYkhpc3RvcnlJdGVt
KTsKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBX
ZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0Zv
cndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3QtPmNvbnRhaW5zSXRlbShoaXN0b3J5SXRl
bSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVt
OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Cisg
KiBAd2ViSGlzdG9yeUl0ZW06IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gdG8gZ28gdG8KKyAq
CisgKiBHbyB0byB0aGUgc3BlY2lmaWVkIEB3ZWJIaXN0b3J5SXRlbSBpbiB0aGUgYmFjayBmb3J3
YXJkIGxpc3QKKyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0
ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChX
RUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0
ZW0pKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IGNvcmUod2Vi
SGlzdG9yeUl0ZW0pOworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworCisgICAgaWYgKGJhY2tGb3J3YXJkTGlz
dCAmJiBoaXN0b3J5SXRlbSkKKyAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShoaXN0
b3J5SXRlbSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Zm9yd2FyZF9saXN0X3dpdGhfbGltaXQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byBy
ZXRyaWV2ZQorICoKKyAqIFJldHVybnMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgc3VjY2VlZCB0aGUg
Y3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTogYSAj
R0xpc3Qgb2YgaXRlbXMgc3VjY2VlZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBs
aW1pdAorICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zvcndh
cmRMaXN0LCBnaW50IGxpbWl0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAg
ICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFj
a0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciBpdGVtcyhsaW1pdCk7CisgICAg
R0xpc3QqIGZvcndhcmRJdGVtcyA9IHsgMCB9OworICAgIAorICAgIGJhY2tGb3J3YXJkTGlzdC0+
Zm9yd2FyZExpc3RXaXRoTGltaXQobGltaXQsIGl0ZW1zKTsKKyAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICBXZWJLaXRXZWJIaXN0
b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSBraXQoaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBm
b3J3YXJkSXRlbXMgPSBnX2xpc3RfcHJlcGVuZChmb3J3YXJkSXRlbXMsIGdfb2JqZWN0X3JlZih3
ZWJIaXN0b3J5SXRlbSkpOworICAgIH0KKworICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShmb3J3
YXJkSXRlbXMpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGlzdF93aXRoX2xpbWl0OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0
cmlldmUKKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBpdGVtcyB0aGF0IHByZWNlZGUgdGhlIGN1
cnJlbnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI0dM
aXN0IG9mIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1p
dAorICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0
X3dpdGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0
LCBnaW50IGxpbWl0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
QkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJD
b3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0Zvcndh
cmRMaXN0KTsKKworICAgIGlmICghYmFja0ZvcndhcmRMaXN0KQorICAgICAgICByZXR1cm4gMDsK
KworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yIGl0ZW1zKGxpbWl0KTsKKyAgICBHTGlz
dCogYmFja0l0ZW1zID0geyAwIH07CisKKyAgICBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0V2l0
aExpbWl0KGxpbWl0LCBpdGVtcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3Rv
cnlJdGVtID0ga2l0KGl0ZW1zLmF0KGkpLmdldCgpKTsKKyAgICAgICAgYmFja0l0ZW1zID0gZ19s
aXN0X3ByZXBlbmQoYmFja0l0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlzdG9yeUl0ZW0pKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gZ19saXN0X3JldmVyc2UoYmFja0l0ZW1zKTsKK30KKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtOgorICogQHdlYkJhY2tG
b3J3YXJkTGlzdDogYSAjV2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRl
bSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRo
ZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0KKyAqLwor
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElT
VCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJk
TGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlm
ICghYmFja0ZvcndhcmRMaXN0KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBXZWJDb3Jl
OjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCk7
CisKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBy
ZXR1cm4ga2l0KGhpc3RvcnlJdGVtKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0u
CisgKgorICogUmV0dXJucyBhIE5VTEwgdmFsdWUgaWYgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IGlz
IGVtcHR5CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICov
CitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0Zv
cndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7Cisg
ICAgaWYgKCFiYWNrRm9yd2FyZExpc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRl
bSgpOworCisgICAgaWYgKCFoaXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgcmV0dXJuIGtpdChoaXN0b3J5SXRlbSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDog
YSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0
IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJucyBhIE5VTEwgdmFsdWUg
aWYgdGhlcmUgbm90aGluZyB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBS
ZXR1cm4gdmFsdWU6IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKi8gICAgCitXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVt
IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJh
Y2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBi
YWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNr
Rm9yd2FyZExpc3QpCisgICAgICAgIHJldHVybiAwOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0
ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpOworCisgICAg
aWYgKCFoaXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGtp
dChoaXN0b3J5SXRlbSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfaXRlbV9hdF9pbmRleDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisg
KiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJl
bnQgaXRlbS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0g
bG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0
ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfZ2V0X2l0ZW1fYXRfaW5kZXggKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zv
cndhcmRMaXN0LCBnaW50IGluZGV4KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisK
KyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2Vi
QmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9y
d2FyZExpc3QtPml0ZW1BdEluZGV4KGluZGV4KTsKKworICAgIGlmICghaGlzdG9yeUl0ZW0pCisg
ICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGtpdChoaXN0b3J5SXRlbSk7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X2NvdW50Ogor
ICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgor
ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgcHJlY2VkIHRoZSBjdXJyZW50IGl0
ZW0uCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51
bWJlciBvZiBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF9jb3VudCAoV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3Qp
LCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0
ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0
Q291bnQoKTsKK30KKyAgICAKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfZm9yd2FyZF9saXN0X2NvdW50OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRo
YXQgc3VjY2VlZCB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2lu
dCBjb3JyZXNwb25kaW5nIHRvIHRoZSBudWJlciBvZiBpdGVtcyBzdWNjZWVkaW5nIHRoZSBjdXJy
ZW50IGl0ZW0KKyAqLworZ2ludCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3
YXJkX2xpc3RfY291bnQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRM
aXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JX
QVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsK
KyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY2FwYWNpdHk6CisgKiBAd2ViQmFja0Zvcndh
cmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBt
YXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KKyAqCisgKiBSZXR1cm4gdmFs
dWU6IGEgI2dpbnQgaW5kaWNhdGluZyB0aGUgY2FwYWNpdHkgb2YgdGhlIGJhY2sgZm9yd2FyZCBs
aXN0CisgKi8KK2dpbnQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY2FwYWNpdHkg
KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFj
a0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tG
b3J3YXJkTGlzdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYmFja0ZvcndhcmRM
aXN0LT5jYXBhY2l0eSgpOworfQorICAgIAorLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X3NldF9jYXBhY2l0eToKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdAorICogQGNhcGFjaXR5OiB0aGUgY2FwYWNpdHkgdG8gc2V0IHRoZSBi
YWNrIGZvcndhcmQgbGlzdCB0bworICoKKyAqIFNldHMgdGhlIG1heGltdW0gbGltaXQgb2YgdGhl
IGJhY2sgZm9yd2FyZCBsaXN0LiBJZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqIGV4Y2VlZHMg
aXRzIGNhcGFjaXR5LCBpdGVtcyB3aWxsIGJlIHJlbW92ZWQgZXZlcnl0aW1lIGEgbmV3IGl0ZW0g
aGFzIGJlZW4KKyAqIGFkZGVkLgorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3Rfc2V0X2NhcGFjaXR5IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCwgZ2ludCBjYXBhY2l0eSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3Jl
OjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRM
aXN0KTsKKyAgICBpZiAoYmFja0ZvcndhcmRMaXN0KQorICAgICAgICBiYWNrRm9yd2FyZExpc3Qt
PnNldENhcGFjaXR5KGNhcGFjaXR5KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBiL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lYTRiMGNiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4gQWxvbnpvIDxqbWFsb256b0B1bnBsdWdnYWJsZS5j
b20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgV0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0gKKyNkZWZpbmUgV0VCS0lUX0JB
Q0tfRk9SV0FSRF9MSVNUX0gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorCitHX0JFR0lOX0RFQ0xTCisK
KyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUICAgICAgICAgICAgKHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Rf
Q0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lU
X1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFz
cykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9D
TEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwg
IFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0Q2xhc3MpKQorCisKK3N0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0IHsKKyAgICBH
T2JqZWN0IHBhcmVudDsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xh
c3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQ
SSBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X25ldyAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nb19mb3J3YXJkIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2Zvcndh
cmRfbGlzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nb19iYWNrIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlz
dCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Y29udGFpbnNfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJk
X2xpc3QsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbSAoV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGxpbWl0KTsKKworV0VCS0lU
X0FQSSBHTGlzdCoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93
aXRoX2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlz
dCwgZ2ludCBsaW1pdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJI
aXN0b3J5SXRlbSoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRl
bSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitX
RUJLSVRfQVBJIFdlYktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfZm9yd2FyZF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNr
X2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9pdGVtX2F0X2luZGV4IChXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBpbmRleCk7CisKK1dFQktJ
VF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X2Nv
dW50IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisK
K1dFQktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2Fy
ZF9saXN0X2NvdW50IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRf
bGlzdCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY2FwYWNpdHkgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3Nl
dF9jYXBhY2l0eSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xp
c3QsIGdpbnQgY2FwYWNpdHkpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgYi9XZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjFlZWZiZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uY3BwCkBAIC0wLDAgKzEsMjEwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCisjaW5jbHVkZSAid2Via2l0
cHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworZXh0ZXJuICJDIiB7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0s
IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtLCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAg
IFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSogaGlzdG9yeUl0ZW1Qcml2ID0gV0VCS0lUX1dF
Ql9ISVNUT1JZX0lURU1fR0VUX1BSSVZBVEUob2JqZWN0KTsKKworICAgIGlmIChoaXN0b3J5SXRl
bVByaXYtPmhpc3RvcnlJdGVtKQorICAgICAgICBkZWxldGUgaGlzdG9yeUl0ZW1Qcml2LT5oaXN0
b3J5SXRlbTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3Bh
cmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQoV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyogaGlz
dG9yeUl0ZW1DbGFzcykKK3sKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoaGlzdG9yeUl0
ZW1DbGFzcywgc2l6ZW9mKFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSkpOyAgICAKKworICAg
IEdfT0JKRUNUX0NMQVNTKGhpc3RvcnlJdGVtQ2xhc3MpLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2ZpbmFsaXplOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9pbml0KFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBX
ZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUqIHdlYkhpc3RvcnlJdGVtUHJpdiA9IFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNX0dFVF9QUklWQVRFKGhpc3RvcnlJdGVtKTsKKworICAgIHdlYkhpc3Rv
cnlJdGVtUHJpdi0+aGlzdG9yeUl0ZW0gPSAwOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRl
bQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5ldyAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAq
LworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldyh2b2lk
KQoreworICAgIHJldHVybiAgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIE5VTEwpKTsgICAgICAgIAorfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGE6CisgKiBAdXJpOiB0aGUgdXJp
IG9mIHRoZSBwYWdlCisgKiBAdGl0bGU6IHRoZSB0aXRsZSBvZiB0aGUgcGFnZQorICoKKyAqIENy
ZWF0ZXMgYSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHdpdGggdGhlIGdpdmVuIFVSSSBhbmQg
dGl0bGUKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVt
CisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdf
d2l0aF9kYXRhKGNvbnN0IGdjaGFyKiB1cmksIGNvbnN0IGdjaGFyKiB0aXRsZSkKK3sKKyAgICBX
ZWJDb3JlOjpLVVJMIGhpc3RvcnlVcmkodXJpKTsKKyAgICBXZWJDb3JlOjpTdHJpbmcgaGlzdG9y
eVRpdGxlKHRpdGxlKTsKKyAgICAKKyAgICByZXR1cm4ga2l0KG5ldyBXZWJDb3JlOjpIaXN0b3J5
SXRlbShoaXN0b3J5VXJpLCBoaXN0b3J5VGl0bGUpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGU6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdl
Ykhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgcGFnZSB0aXRsZSBmb3IgQHRoaXMKKyAq
LworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKwor
ICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllf
SVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFdlYkNvcmU6OlN0cmluZyB0aXRsZSA9IGl0ZW0tPnRpdGxlKCk7CisgICAgcmV0
dXJuIGdfc3RyZHVwKHRpdGxlLnV0ZjgoKS5kYXRhKCkpOworfQorCisvKioKKyAqIHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGU6CisgKiBAd2ViSGlzdG9yeUl0ZW06
IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgYWx0ZXJuYXRlIHRp
dGxlIGZvciBAdGhpcworICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2NoYXIgcmVwcmVzZW50YXRp
b24gb2YgdGhlIGFsdGVybmF0ZSB0aXRsZQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
Ykhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
SElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0
b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0
ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3Jl
OjpTdHJpbmcgYWx0ZXJuYXRlVGl0bGUgPSBpdGVtLT5hbHRlcm5hdGVUaXRsZSgpOworICAgIHJl
dHVybiBnX3N0cmR1cChhbHRlcm5hdGVUaXRsZS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxlOgorICogQHdlYkhp
c3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICogQHRpdGxlOiB0aGUgYWx0ZXJu
YXRlIHRpdGxlIGZvciBAdGhpcyBoaXN0b3J5IGl0ZW0KKyAqCisgKiBTZXRzIHRoZSBhbHRlcm5h
dGUgdGl0bGUgZm9yIEB0aGlzCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0
X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtLCBj
b25zdCBnY2hhciogdGl0bGUpIAoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkp
OworCisgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nIGFsdGVybmF0ZVRpdGxlID0gdGl0bGU7Cisg
ICAgaXRlbS0+c2V0QWx0ZXJuYXRlVGl0bGUoYWx0ZXJuYXRlVGl0bGUpOworfQorICAgIAorLyoq
CisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpOgorICogQHdlYkhpc3RvcnlJdGVt
OiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIFVSSSBvZiBAdGhp
cworICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2NoYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVS
SQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7
CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNU
T1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJpID0gaXRlbS0+dXJsU3RyaW5nKCk7Cisg
ICAgcmV0dXJuIGdfc3RyZHVwKHVyaS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpOgorICogQHdlYkhpc3RvcnlJdGVt
OiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIG9yaWdpbmFsIFVS
SSBvZiBAdGhpcworICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2NoYXIgcmVwcmVzZW50YXRpb24g
b2YgdGhlIG9yaWdpbmFsIFVSSQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJ
dGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9J
VEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKwor
ICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcg
b3JpZ2luYWxVcmkgPSBpdGVtLT5vcmlnaW5hbFVSTFN0cmluZygpOworICAgIHJldHVybiBnX3N0
cmR1cChvcmlnaW5hbFVyaS51dGY4KCkuZGF0YSgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfbGFzdF92aXNpc3RlZF90aW1lIDoKKyAqIEB3ZWJIaXN0b3J5SXRl
bTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSB0aW1lIEB0aGlz
IHdhcyB2aXNpdGVkCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnZG91YmxlCisgKi8KK2dkb3Vi
bGUgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pIAoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisK
KyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZ
X0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gaXRlbS0+bGFzdFZpc2l0ZWRUaW1lKCk7Cit9CisgICAgCisgICAg
ICAgIAorICAgIAorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhp
c3RvcnlpdGVtLmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzg2M2UxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmgKQEAgLTAsMCAr
MSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9ICisjZGVmaW5lIFdFQktJVF9XRUJfSElT
VE9SWV9JVEVNX0gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5o
PgorI2luY2x1ZGUgPGdkay9nZGsuaD4KKworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKwor
R19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0gICAg
ICAgICAgICAod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQl9ISVNUT1JZX0lURU0ob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0pKQorI2RlZmluZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9DTEFTUyhrbGFzcykg
ICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfSElT
VE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dFQl9ISVNUT1JZX0lURU0ob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQ
RSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9J
U19XRUJfSElTVE9SWV9JVEVNX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0pKQorI2RlZmluZSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTV9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xB
U1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0b3J5
SXRlbUNsYXNzKSkKKworCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtIHsKKyAgICBHT2Jq
ZWN0IHBhcmVudDsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyB7Cisg
ICAgR09iamVjdENsYXNzIHBhcmVudDsKKworICAgIGNvbnN0IGdjaGFyKiAoKmdldF90aXRsZSkg
KFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworICAgIGNvbnN0IGdjaGFyKiAo
KmdldF9hbHRlcm5hdGVfdGl0bGUpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVt
KTsKKyAgICBjb25zdCBnY2hhciogKCpnZXRfdXJpKSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhp
c3RvcnlfaXRlbSk7CisgICAgY29uc3QgZ2NoYXIqICgqZ2V0X29yaWdpbmFsX3VyaSkgKFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworICAgIHZvaWQgKCpzZXRfYWx0ZXJuYXRl
X3RpdGxlKSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSwgY29uc3QgZ2NoYXIq
IHRpdGxlKTsKKyAgICBnZG91YmxlICgqZ2V0X2xhc3RfdmlzaXRlZF90aW1lKSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcgKHZvaWQpOworCitX
RUJLSVRfQVBJIFdlYktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfZGF0YSAoY29uc3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKwor
V0VCS0lUX0FQSSBjb25zdCBnY2hhcioKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRs
ZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRs
ZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJ
IHZvaWQKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUgKFdlYktp
dFdlYkhpc3RvcnlJdGVtKiB3ZWJfaGlzdG9yeV9pdGVtLCBjb25zdCBnY2hhciogdGl0bGUpOwor
CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3Vy
aSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAo
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGdk
b3VibGUKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZSAoV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitHX0VORF9ERUNMUworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBi
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2ZTZlNTgwLi45NjIy
ZWYxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKKysr
IGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0zLDYgKzMsNyBAQAog
ICogIENvcHlyaWdodCAoQykgMjAwNyBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkB0d290b2Fz
dHMuZGU+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFhhbiBMb3BleiA8eGFuQGdub21lLm9yZz4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDggSmFuIEFsb256byA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjQsOCArMjUsMTAgQEAKICNpbmNsdWRlICJ3ZWJraXR3
ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Via2l0LW1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXRw
cml2YXRlLmgiCisjaW5jbHVkZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRl
ICJDb250ZXh0TWVudS5oIgpAQCAtMzcsNiArNDAsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEd0ay5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKQEAgLTUzOCw2ICs1NDIsMTQgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKICAgICB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9s
b2FkaW5nKFdFQktJVF9XRUJfVklFVyhvYmplY3QpKTsKIAogICAgIFdlYktpdFdlYlZpZXdQcml2
YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VC
X1ZJRVcob2JqZWN0KSk7CisKKyAgICAvLyBjbGVhbnVwIGJhY2sgZm9yd2FyZCBsaXN0CisgICAg
aWYgKHdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKSkK
KyAgICAgICAgd2Via2l0X2JhY2tfZm9yd2FyZF9saXN0X3JlbW92ZSh3ZWJWaWV3RGF0YS0+Y29y
ZVBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKTsKKworICAgIGlmICh3ZWJraXRfYmFja19mb3J3YXJk
X2xpc3RzX2VtcHR5KCkpCisgICAgICAgIHdlYmtpdF9iYWNrX2ZvcndhcmRfbGlzdHNfZGVzdHJv
eSgpOworICAgIAogICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2U7CiAgICAgZGVsZXRl
IHdlYlZpZXdEYXRhLT5zZXR0aW5nczsKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3RGF0YS0+
bWFpbkZyYW1lKTsKQEAgLTk5NSw2ICsxMDA3LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgd2ViVmlld0RhdGEtPmxhc3RQ
b3B1cFhQb3NpdGlvbiA9IHdlYlZpZXdEYXRhLT5sYXN0UG9wdXBZUG9zaXRpb24gPSAtMTsKICAg
ICB3ZWJWaWV3RGF0YS0+ZWRpdGFibGUgPSBmYWxzZTsKIAorICAgIC8qIEluaXRpYWxpemUgdGhl
IHZpZXcncyBiYWNrL2ZvcndhcmQgbGlzdCAqLworICAgIHdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPnNldEVuYWJsZWQoVFJVRSk7CisgICAga2l0KHdlYlZpZXdEYXRh
LT5jb3JlUGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpOworICAgIAogI2lmIEdUS19DSEVDS19WRVJT
SU9OKDIsMTAsMCkKICAgICBHZGtBdG9tIHRleHRIdG1sID0gZ2RrX2F0b21faW50ZXJuX3N0YXRp
Y19zdHJpbmcoInRleHQvaHRtbCIpOwogI2Vsc2UKQEAgLTEwMzUsMzYgKzEwNTEsMTMzIEBAIFdl
YktpdFNldHRpbmdzKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3
X3NldF9tYWludGFpbnNfYmFja19mb3J3YXJkX2xpc3Q6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0
V2ViVmlldworICogQGZsYWc6IHRvIHRlbGwgdGhlIHZpZXcgdG8gbWFpbnRhaW4gYSBiYWNrIG9y
IGZvcndhcmQgbGlzdAorICoKKyAqIFNldCB0aGUgdmlldyB0byBtYWludGFpbiBhIGJhY2sgb3Ig
Zm9yd2FyZCBsaXN0IG9mIGhpc3RvcnkgaXRlbXMuCisgKi8KKwordm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfc2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBnYm9vbGVhbiBmbGFnKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9W
SUVXKHdlYlZpZXcpKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0Zvcndh
cmRMaXN0ID0gY29yZSh3ZWJWaWV3KS0+YmFja0ZvcndhcmRMaXN0KCk7CisKKyAgICAvLyByZW1v
dmUgcmVmZXJlbmNlIHRvIGJhY2sgZm9yd2FyZCBpZiBpdCdzIGdvaW5nIHRvIGJlIGRpc2FibGVk
CisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpICYmICFmbGFnKQorICAgICAgICB3
ZWJraXRfYmFja19mb3J3YXJkX2xpc3RfcmVtb3ZlKGJhY2tGb3J3YXJkTGlzdCk7CisgICAgICAg
IAorICAgIGNvcmUod2ViVmlldyktPmJhY2tGb3J3YXJkTGlzdCgpLT5zZXRFbmFibGVkKGZsYWcp
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19iYWNrX2ZvcndhcmRfbGlzdDoKKyAqIEB3
ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJucyBhICNXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QKKyAqIAorICogUmV0dXJuIHZhbHVlOiB0aGUgI1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdAorICovCitXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYmtpdF93ZWJfdmlld19i
YWNrX2ZvcndhcmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBQ
YWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKyAgICAKKyAgICBpZiAoIXBhZ2UgfHwgIXBhZ2Ut
PmJhY2tGb3J3YXJkTGlzdCgpLT5lbmFibGVkKCkpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgcmV0dXJuIGtpdChwYWdlLT5iYWNrRm9yd2FyZExpc3QoKSk7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtOgorICogQHdlYlZpZXc6
IGEgI1dlYktpdFdlYlZpZXcKKyAqIEBpdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbSoKKyAq
CisgKiBHbyB0byB0aGUgc3BlY2lmaWVkICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJl
dHVybiB2YWx1ZTogJVRSVUUgaWYgbG9hZGluZyBvZiBpdGVtIGlzIHN1Y2Nlc3NmdWwsICVGQUxT
RSBpZiBub3QKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2Fy
ZF9pdGVtKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVt
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3
KSwgRkFMU0UpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9S
WV9JVEVNKGl0ZW0pLCBGQUxTRSk7CisKKyAgICBjb3JlKHdlYlZpZXcpLT5nb1RvSXRlbShjb3Jl
KGl0ZW0pLCBGcmFtZUxvYWRUeXBlSW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICByZXR1cm4gVFJV
RTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQ6CisgKiBAd2ViVmll
dzogdGhlICNXZWJLaXRXZWJWaWV3CisgKgorICogR28gdG8gdGhlIHByZXZpb3VzIHBhZ2UsIGlm
IHRoZXJlJ3MgYW55LgorICovCiB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPmdvQmFj
a09yRm9yd2FyZCgtMSk7CisgICAgY29yZSh3ZWJWaWV3KS0+Z29CYWNrKCk7CiB9CiAKKy8qKgor
ICogd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQ6CisgKiBAd2ViVmlldzogdGhlICNXZWJLaXRX
ZWJWaWV3CisgKgorICogR28gdG8gdGhlIG5leHQgcGFnZSwgaWYgdGhlcmUncyBhbnkuCisgKi8K
IHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
IHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAK
LSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3
ZWJWaWV3KSk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndhcmQoMSk7CisgICAg
Y29yZSh3ZWJWaWV3KS0+Z29Gb3J3YXJkKCk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19iYWNrd2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBDaGVja3Mgd2hldGhlciB0aGUgdmlldyBjYW4gZ28gYmFjayB0byB0aGUgcHJldmlvdXMgcGFn
ZQorICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUgaWYgdGhlIHBhZ2UgY2FuIGdvIGJhY2ssIG90
aGVyd2lzZSByZXR1cm5zICVGQUxTRQorICovCiBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2t3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7
Ci0gICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKTsKKyAg
ICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmJhY2tJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIHJldHVybiBUUlVFOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9y
d2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBDaGVja3Mgd2hl
dGhlciB0aGUgdmlldyBjYW4gZ28gdG8gdGhlIG5leHQgcGFnZQorICoKKyAqIFJldHVybiB5dmFs
dWU6ICVUUlVFIGlmIHRoZSBwYWdlIGNhbiBnbyBiYWNrLCBvdGhlcndpc2UgcmV0dXJucyAlRkFM
U0UKKyAqLwogZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5s
b2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdl
YlZpZXcpOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBp
ZiAoIXBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5mb3J3YXJkSXRlbSgpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
b3BlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogdXJpKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggN2QxMjA3Ny4uNDI4Y2IzOSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5oCkBAIC05MCw2ICs5MCwxNSBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5
cGUgKHZvaWQpOwogV0VCS0lUX0FQSSBHdGtXaWRnZXQqCiB3ZWJraXRfd2ViX3ZpZXdfbmV3ICh2
b2lkKTsKIAorV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19i
YWNrX2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdib29sZWFuIGZsYWcp
OyAKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqCit3ZWJraXRfd2ViX3Zp
ZXdfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKworV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtIChX
ZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0pOworCiBX
RUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkIChXZWJL
aXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAK
</data>
<flag name="review"
          id="7977"
          type_id="1"
          status="-"
          setter="alp"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18468</attachid>
            <date>2008-01-16 03:31:32 -0800</date>
            <delta_ts>2008-01-18 19:45:08 -0800</delta_ts>
            <desc>updated gtk port back/forward list and history item patch</desc>
            <filename>webkitgtk-backforwardlist.patch</filename>
            <type>text/plain</type>
            <size>50801</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkNTU5MDc0Li43YzQxMzU1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMDgtMDEtMTYgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbQorCWZ1bmN0
aW9uCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgd2Via2l0d2ViYmFja2Zvcndh
cmRsaXN0IGFuZAorCXdlYmtpdHdlYmhpc3RvcnlpdGVtCisKIDIwMDgtMDEtMTUgIEFscCBUb2tl
ciAgPGFscEBhdG9rZXIuY29tPgogCiAgICAgICAgIFJ1YmJlci1zdGFtcGVkIGJ5IEFuZGVycy4K
ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMjcyMjZi
OC4uNjhkMzU1YiAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTIzMyw3ICsyMzMsOSBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXQuaCBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmluZXMuaCBc
CiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAorCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYmZyYW1lLmggXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0
b3J5aXRlbS5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIAogCiB3ZWJr
aXRndGtfYnVpbHRfc291cmNlcyArPSBcCkBAIC0yNTUsNyArMjU3LDkgQEAgd2Via2l0Z3RrX3Nv
dXJjZXMgKz0gXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAg
XAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcCBcCiAJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YmJhY2tmb3J3YXJkbGlzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFt
ZS5jcHAgXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAog
CVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIFwKIAlXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDM1Njc3OGQuLmQ4OTVhNTUgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMDgtMDEtMTYgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dh
YmxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBXQVJOSU5HOiBOTyBURVNUIENBU0VTIEFEREVEIE9SIENIQU5HRUQKKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlv
bgorCisgICAgICAgIEFkZGVkIEdUSysgd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0IGFuZCB3ZWJr
aXR3ZWJoaXN0b3J5aXRlbQorCisgICAgICAgICogV2ViQ29yZS5wcm86CisKIDIwMDgtMDEtMTYg
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyICA8aG9sZ2VyLmZyZXl0aGVyQHRyb2xsdGVjaC5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTGFycy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDdmOGI2OWQuLjkzOTUxN2EgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtOTc5LDcgKzk3OSw5IEBAIGd0ay1wb3J0IHsKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0cHJpdmF0ZS5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHNldHRpbmdzLmggXAorCS4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2Fy
ZGxpc3QuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5o
IFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaCBcCiAgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmggXAogICAgICAgICAuLi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIFwKICAgICAgICAgLi4v
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5oIFwKQEAgLTEw
NTYsNiArMTA1OCw4IEBAIGd0ay1wb3J0IHsKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXRwcml2YXRlLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRzZXR0aW5ncy5jcHAgXAorCS4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9y
d2FyZGxpc3QuY3BwIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0
ZW0uY3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNw
cCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAg
ICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CmluZGV4IDVhYzRhZDQuLjNlZGNiNDIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjAgQEAKKzIwMDgtMDEtMTYg
IEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBbcmVxdWVzdF0gYWRk
IGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlvbgorCisgICAgICAg
IGltcGxlbWVudCBiYWNrL2ZvcndhcmQgbGlzdCBhbmQgaGlzdG9yeSBpdGVtCisKKyAgICAgICAg
KiBXZWJWaWV3L2hlYWRlcnMucHJpOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0Lmg6CisgICAg
ICAgICogV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcDoKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtp
dHByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5j
cHA6IEFkZGVkLgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6Ondl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZGlzcG9zZSk6CisgICAgICAgIChfV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9maW5h
bGl6ZSk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jbGFzc19pbml0KToKKyAgICAgICAgKF9XZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2luaXQp
OgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfbmV3KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQpOgorICAg
ICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ29fYmFjayk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0
UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKToKKyAg
ICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlz
dF93aXRoX2xpbWl0KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRl
Ojp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCk6
CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJy
ZW50X2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6Ondl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgIChf
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfaXRlbV9hdF9pbmRleCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X2Nv
dW50KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3RfY291bnQpOgorICAgICAgICAo
X1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2NhcGFjaXR5KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQ
cml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9jYXBhY2l0eSk6CisgICAg
ICAgICogV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaDogQWRkZWQuCisgICAgICAg
ICogV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHA6IEFkZGVkLgorICAgICAgICAoX1dl
YktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X2hpc3RvcnlfaXRlbXMpOgorICAgICAg
ICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X2hpc3RvcnlfaXRlbV9hZGQp
OgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X2hpc3Rvcnlf
aXRlbV9yZW1vdmUpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZGlzcG9zZSk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9y
eUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9maW5hbGl6ZSk6CisgICAgICAg
IChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9j
bGFzc19pbml0KToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2luaXQpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVt
UHJpdmF0ZTo6X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKToKKyAgICAgICAg
KF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25l
dyk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRl
bVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZSk6CisgICAgICAgIChf
V2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRf
YWx0ZXJuYXRlX3RpdGxlKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6
OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUpOgorICAgICAgICAo
X1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X3VyaSk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0
b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRf
dGltZSk6CisgICAgICAgIChXZWJLaXQ6OmNvcmUpOgorICAgICAgICAoV2ViS2l0OjpraXQpOgor
ICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaDogQWRkZWQuCisgICAgICAg
ICogV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdl
YnZpZXcuaDoKKwogMjAwOC0wMS0xMCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Vmlldy9oZWFkZXJzLnByaSBiL1dlYktpdC9ndGsvV2ViVmlldy9oZWFkZXJzLnByaQppbmRleCA0
YjJlYjIxLi5jZDVjYmU2IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5w
cmkKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCkBAIC0yLDQgKzIsNiBAQCBX
RUJLSVRfQVBJX0hFQURFUlMgPSAkJFBXRC93ZWJraXQuaCBcCiAgICAgICAgICAgICAgICAgICAg
ICAkJFBXRC93ZWJraXRkZWZpbmVzLmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Vi
a2l0bmV0d29ya3JlcXVlc3QuaCBcCiAgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3
ZWJmcmFtZS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYnZpZXcuaAor
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vidmlldy5oIFwKKyAgICAgICAgICAg
ICAgICAgICAgICQkUFdEL3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKKyAgICAgICAgICAg
ICAgICAgICAgICQkUFdEL3dlYmtpdHdlYmhpc3RvcnlpdGVtLmgKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvV2ViVmlldy93ZWJraXQuaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQuaAppbmRl
eCBiNmEzYzBlLi4zMGE3ZDVjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
LmgKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oCkBAIC0yNCw1ICsyNCw3IEBACiAj
aW5jbHVkZSA8d2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXR3ZWJmcmFt
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdHdlYnZpZXcuaD4KKyNpbmNsdWRlIDx3ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oPgogCiAjZW5k
aWYgLyogX19XRUJLSVRfSF9fICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0cHJpdmF0ZS5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKaW5k
ZXggYzc0ZGJhNS4uY2FmMmNjNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHByaXZhdGUuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcApA
QCAtMzYsNiArMzYsNyBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgeworCiB2b2lkIGFwcGx5KFdlYktpdFNldHRpbmdzKiwgV2ViQ29yZTo6U2V0dGluZ3Mq
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC05MCw3ICs5MSw3IEBAIFdlYktpdFdlYlZp
ZXcqIGtpdChXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZSkKICAgICByZXR1cm4gY2xpZW50ID8gY2xp
ZW50LT53ZWJWaWV3KCkgOiAwOwogfQogCi19Cit9IC8qKiBlbmQgbmFtZXNwYWNlIFdlYkNvcmUg
Ki8KIAogdm9pZCB3ZWJraXRfaW5pdCgpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaApp
bmRleCA2MTFhZTA4Li5lMzg1YTU1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlmaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4gQWxvbnpvCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMxLDEyICszMiwxNyBAQAogI2luY2x1ZGUgIndlYmtpdHdl
YnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJmcmFtZS5oIgogI2luY2x1ZGUgIndlYmtpdG5l
dHdvcmtyZXF1ZXN0LmgiCisjaW5jbHVkZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAK
KyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKIAorI2luY2x1ZGUgPGdsaWIuaD4K
KwogbmFtZXNwYWNlIFdlYktpdCB7CiAgICAgdm9pZCBhcHBseShXZWJLaXRTZXR0aW5ncyosV2Vi
Q29yZTo6U2V0dGluZ3MqKTsKICAgICBXZWJLaXRTZXR0aW5ncyogY3JlYXRlKFdlYkNvcmU6OlNl
dHRpbmdzKik7CkBAIC00NCw4ICs1MCwxNCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgIFdl
YkNvcmU6OkZyYW1lKiBjb3JlKFdlYktpdFdlYkZyYW1lKik7CiAgICAgV2ViS2l0V2ViRnJhbWUq
IGtpdChXZWJDb3JlOjpGcmFtZSopOworCiAgICAgV2ViQ29yZTo6UGFnZSogY29yZShXZWJLaXRX
ZWJWaWV3Kik7CiAgICAgV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqKTsKKworICAg
IFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlKFdlYktpdFdlYkhpc3RvcnlJdGVtKik7CisgICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGtpdChXZWJDb3JlOjpIaXN0b3J5SXRlbSopOworCisgICAg
V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBjb3JlKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCop
OwogfQogCiBleHRlcm4gIkMiIHsKQEAgLTY0LDYgKzc2LDggQEAgZXh0ZXJuICJDIiB7CiAgICAg
ICAgIFdlYkNvcmU6OlN0cmluZyBhcHBsaWNhdGlvbk5hbWVGb3JVc2VyQWdlbnQ7CiAgICAgICAg
IFdlYkNvcmU6OlN0cmluZyogdXNlckFnZW50OwogCisgICAgICAgIFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0OworICAgICAgICAKICAgICAgICAgZ2ludCBsYXN0UG9w
dXBYUG9zaXRpb247CiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWVBvc2l0aW9uOwogCkBAIC05Myw4
ICsxMDcsMTMgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdjaGFyKiB1cmk7CiAgICAgfTsKIAor
ICAgIC8qIFdlYktpdFdlYkZyYW1lIHByaXZhdGUgZnVuY3Rpb24gKi8KICAgICBXZWJLaXRXZWJG
cmFtZSogd2Via2l0X3dlYl9mcmFtZV9pbml0X3dpdGhfd2ViX3ZpZXcoV2ViS2l0V2ViVmlldyos
IFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCopOwogCisgICAgLyogV2ViS2l0V2ViSGlz
dG9yeUl0ZW0gcHJpdmF0ZSBmdW5jdGlvbiAqLworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
KTsKKyAgICAKKwogICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gd2Via2l0d2ViZnJhbWUuaCBv
bmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZnVsbHkKICAgICAvLyBpbXBsZW1lbnRlZCBhbmQgdGhl
aXIgQVBJIGhhcyBiZWVuIGRpc2N1c3NlZC4KIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYmE4YmFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAKQEAgLTAsMCArMSwzOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4gQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgorI2luY2x1ZGUgIndlYmtpdHBy
aXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgorI2luY2x1ZGUgIndl
YmtpdHdlYnZpZXcuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgIkJhY2tGb3J3
YXJkTGlzdC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK2V4dGVybiAiQyIgeworCitzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGUgeworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0
OworfTsKKworI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9QUklWQVRF
KG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlKSkK
KworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QsIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3QsIEdfVFlQRV9PQkpFQ1QpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViYmZsaXN0ID0gV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRf
TElTVChvYmplY3QpOworCisgICAgZGVsZXRlIHdlYmJmbGlzdC0+cHJpdi0+YmFja0ZvcndhcmRM
aXN0OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2ZpbmFs
aXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3RDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdF9jbGFzcy0+
ZmluYWxpemUgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2ZpbmFsaXplOworICAgIGdv
YmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Rpc3Bv
c2U7CisgICAgCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2luaXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBvYmpl
Y3QpCit7CisgICAgb2JqZWN0LT5wcml2ID0gV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9H
RVRfUFJJVkFURShvYmplY3QpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfbmV3OgorICogQHdlYlZpZXc6IHRoZSBiYWNrIGZvcndhcmQgbGlzdCdzICNXZWJLaXRX
ZWJWaWV3CisgKiAKKyAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGJhY2sgZm9yd2FyZCBs
aXN0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAq
LworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X25ldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmll
dyk7CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiBvYmplY3Q7CisKKyAgICBvYmplY3Qg
PSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9X
RUJfQkFDS19GT1JXQVJEX0xJU1QsIE5VTEwpKTsKKyAgICBvYmplY3QtPnByaXYtPmJhY2tGb3J3
YXJkTGlzdCA9IHdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+YmFja0ZvcndhcmRMaXN0KCk7CisgICAg
b2JqZWN0LT5wcml2LT5iYWNrRm9yd2FyZExpc3QtPnNldEVuYWJsZWQoVFJVRSk7CisKKyAgICBy
ZXR1cm4gb2JqZWN0OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z29fZm9yd2FyZDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdAorICoKKyAqIFN0ZXBzIGZvcndhcmQgaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0Cisg
Ki8KK3ZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19mb3J3YXJkIChXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0
KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNv
cmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0ZvcndhcmRMaXN0LT5lbmFibGVk
KCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29Gb3J3YXJkKCk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19iYWNrOgorICogQHdlYkJhY2tGb3J3YXJk
TGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogU3RlcHMgYmFja3dhcmQg
aW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nb19iYWNrIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJE
X0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAo
YmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29C
YWNrKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWlu
c19pdGVtOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0CisgKiBAd2ViSGlzdG9yeUl0ZW06IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gdG8gY2hl
Y2sKKyAqCisgKiBDaGVja3MgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndh
cmQgbGlzdAorICoKKyAqIFJldHVybjogJVRSVUUgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRo
ZSBiYWNrIGZvcndhcmQgbGlzdCwgJUZBTFNFIGlmIGl0IGRvZXNuJ3QKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtIChXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
Ykhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
QkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0p
LCBOVUxMKTsKKyAgICAKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBj
b3JlKHdlYkhpc3RvcnlJdGVtKTsKKyAgICBpZiAoIWhpc3RvcnlJdGVtKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAgIHJldHVybiAoYmFja0ZvcndhcmRM
aXN0LT5lbmFibGVkKCkgPworICAgICAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5jb250YWluc0l0
ZW0oaGlzdG9yeUl0ZW0pIDogRkFMU0UpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfZ29fdG9faXRlbToKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdAorICogQHdlYkhpc3RvcnlJdGVtOiB0aGUgI1dlYktpdFdlYkhp
c3RvcnlJdGVtIHRvIGdvIHRvCisgKgorICogR28gdG8gdGhlIHNwZWNpZmllZCBAd2ViSGlzdG9y
eUl0ZW0gaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nb190b19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJh
Y2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJC
YWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElT
VE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aGlzdG9yeUl0ZW0gPSBjb3JlKHdlYkhpc3RvcnlJdGVtKTsKKyAgICBXZWJDb3JlOjpCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKwor
ICAgIGlmIChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSAmJiBoaXN0b3J5SXRlbSkKKyAgICAg
ICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShoaXN0b3J5SXRlbSk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQ6
CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAq
IEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVybnMg
YSBsaXN0IG9mIGl0ZW1zIHRoYXQgc3VjY2VlZCB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5
IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjR0xpc3Qgb2YgaXRlbXMgc3VjY2VlZGlu
ZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICovCitHTGlzdCogd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGxpbWl0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qo
d2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAo
IWJhY2tGb3J3YXJkTGlzdCAmJiAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAg
IHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3IgaXRlbXMobGlt
aXQpOworICAgIEdMaXN0KiBmb3J3YXJkSXRlbXMgPSB7IDAgfTsKKyAgICAKKyAgICBiYWNrRm9y
d2FyZExpc3QtPmZvcndhcmRMaXN0V2l0aExpbWl0KGxpbWl0LCBpdGVtcyk7CisgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gX3dlYl9oaXN0b3J5X2l0ZW1fbmV3
X3dpdGhfY29yZV9pdGVtKGl0ZW1zW2ldLmdldCgpKTsKKyAgICAgICAgZm9yd2FyZEl0ZW1zID0g
Z19saXN0X3ByZXBlbmQoZm9yd2FyZEl0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlzdG9yeUl0ZW0p
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19saXN0X3JldmVyc2UoZm9yd2FyZEl0ZW1zKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0
aF9saW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZlCisgKgorICog
UmV0dXJucyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBwcmVjZWRlIHRoZSBjdXJyZW50IGl0ZW0sIGxp
bWl0ZWQgYnkgQGxpbWl0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHTGlzdCBvZiBpdGVtcyBw
cmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqLworR0xpc3Qq
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRoX2xpbWl0IChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBsaW1pdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0Zvcndh
cmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAg
aWYgKCFiYWNrRm9yd2FyZExpc3QgJiYgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yIGl0ZW1z
KGxpbWl0KTsKKyAgICBHTGlzdCogYmFja0l0ZW1zID0geyAwIH07CisKKyAgICBiYWNrRm9yd2Fy
ZExpc3QtPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBpdGVtcyk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gX3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfY29y
ZV9pdGVtKGl0ZW1zW2ldLmdldCgpKTsKKyAgICAgICAgYmFja0l0ZW1zID0gZ19saXN0X3ByZXBl
bmQoYmFja0l0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlzdG9yeUl0ZW0pKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZ19saXN0X3JldmVyc2UoYmFja0l0ZW1zKTsKK30KKy8qKgorICogd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtOgorICogQHdlYkJhY2tGb3J3YXJkTGlz
dDogYSAjV2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHBy
ZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0
V2ViSGlzdG9yeUl0ZW0gcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNr
Rm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0Zv
cndhcmRMaXN0ICYmICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFj
a0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOworCisgICAgcmV0dXJuIChoaXN0b3J5SXRlbSA/IGtp
dChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGl0ZW0u
CisgKgorICogUmV0dXJucyBhIE5VTEwgdmFsdWUgaWYgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IGlz
IGVtcHR5CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICov
CitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y3VycmVudF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0Zv
cndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7Cisg
ICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgJiYgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQor
ICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5
SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKTsKKworICAgIHJldHVybiAoaGlz
dG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtOgorICogQHdlYkJhY2tGb3J3
YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUg
aXRlbSB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJucyBhIE5V
TEwgdmFsdWUgaWYgdGhlcmUgbm90aGluZyB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0K
KyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKi8gICAgCitX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0Zvcndh
cmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAg
aWYgKCFiYWNrRm9yd2FyZExpc3QgJiYgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAg
ICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRl
bSA9IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKTsKKworICAgIHJldHVybiAoaGlzdG9y
eUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfaXRlbV9hdF9pbmRleDoKKyAqIEB3ZWJCYWNrRm9yd2Fy
ZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4OiB0aGUgaW5kZXgg
b2YgdGhlIGl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2ZW4gaW5kZXggcmVs
YXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0gbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4IHJlbGF0aXZl
IHRvIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93
ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2l0ZW1fYXRfaW5kZXggKFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGluZGV4KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0Zvcndh
cmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3
YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJk
TGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGluZGV4KTsKKworICAg
IHJldHVybiAoaGlzdG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X2NvdW50Ogor
ICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgor
ICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgcHJlY2VkIHRoZSBjdXJyZW50IGl0
ZW0uCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51
bWJlciBvZiBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF9jb3VudCAoV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3Qp
LCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0
ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8
ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBy
ZXR1cm4gYmFja0ZvcndhcmRMaXN0LT5iYWNrTGlzdENvdW50KCk7Cit9CisgICAgCisvKioKKyAq
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF9jb3VudDoKKyAq
IEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAq
IFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHN1Y2NlZWQgdGhlIGN1cnJlbnQgaXRl
bS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI2dpbnQgY29ycmVzcG9uZGluZyB0byB0aGUgbnVi
ZXIgb2YgaXRlbXMgc3VjY2VlZGluZyB0aGUgY3VycmVudCBpdGVtCisgKi8KK2dpbnQgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X2NvdW50IChXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlz
dCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExp
c3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3Qg
fHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAK
KyAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY2FwYWNpdHk6CisgKiBAd2Vi
QmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1
cm5zIHRoZSBtYXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KKyAqCisgKiBS
ZXR1cm4gdmFsdWU6IGEgI2dpbnQgaW5kaWNhdGluZyB0aGUgY2FwYWNpdHkgb2YgdGhlIGJhY2sg
Zm9yd2FyZCBsaXN0CisgKi8KK2dpbnQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
Y2FwYWNpdHkgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJ
U1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBp
ZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNpdHkoKTsK
K30KKyAgICAKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfY2FwYWNp
dHk6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QK
KyAqIEBjYXBhY2l0eTogdGhlIGNhcGFjaXR5IHRvIHNldCB0aGUgYmFjayBmb3J3YXJkIGxpc3Qg
dG8KKyAqCisgKiBTZXRzIHRoZSBtYXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlz
dC4gSWYgdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKiBleGNlZWRzIGl0cyBjYXBhY2l0eSwgaXRl
bXMgd2lsbCBiZSByZW1vdmVkIGV2ZXJ5dGltZSBhIG5ldyBpdGVtIGhhcyBiZWVuCisgKiBhZGRl
ZC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9jYXBhY2l0eSAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgY2FwYWNp
dHkpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0
KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGJh
Y2tGb3J3YXJkTGlzdCkKKyAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5zZXRDYXBhY2l0eShjYXBh
Y2l0eSk7Cit9CisgICAgCit9IC8qIGVuZCBleHRlcm4gIkMiICovCisKK1dlYkNvcmU6OkJhY2tG
b3J3YXJkTGlzdCogV2ViS2l0Ojpjb3JlKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFj
a0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
QkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICByZXR1
cm4gd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2ID8gd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5i
YWNrRm9yd2FyZExpc3QgOiAwOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMmJk
NmMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2Zv
cndhcmRsaXN0LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
SmFuIE1pY2hhZWwgQy4gQWxvbnpvIDxqbWFsb256b0B1bnBsdWdnYWJsZS5jb20+CisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V0VCS0lUX0JBQ0tfRk9SV0FSRF9MSVNUX0gKKyNkZWZpbmUgV0VCS0lUX0JBQ0tfRk9SV0FSRF9M
SVNUX0gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisj
aW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVt
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JX
QVJEX0xJU1QgICAgICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNL
X0ZPUldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9CQUNLX0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9CQUNLX0ZP
UldBUkRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5l
IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
LCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcykpCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJp
dmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QgV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dENsYXNzIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzOworCisKK3N0cnVjdCBfV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2
YXRlID4qLworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xh
c3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9uZXcgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dvX2ZvcndhcmQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dvX2JhY2sgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRf
bGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtIChXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCAoV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgbGltaXQpOworCitXRUJLSVRf
QVBJIEdMaXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dp
dGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
LCBnaW50IGxpbWl0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSAoV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhp
c3RvcnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVt
IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tf
Zm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2l0ZW1fYXRfaW5kZXggKFdlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGluZGV4KTsKKworV0VCS0lU
X0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3RfY291
bnQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKwor
V0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJk
X2xpc3RfY291bnQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jYXBhY2l0eSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xp
c3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0
X2NhcGFjaXR5IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlz
dCwgZ2ludCBjYXBhY2l0eSk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uY3BwIGIvV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zY2Q2ZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcApAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgorI2luY2x1ZGUgIndlYmtp
dHByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1ZGUgIkNTdHJpbmcuaCIK
KyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2V4dGVybiAiQyIgeworCitzdHJ1Y3QgX1dlYktp
dFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSB7CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3Rv
cnlJdGVtOworICAgIAorICAgIGdjaGFyKiB0aXRsZTsKKyAgICBnY2hhciogYWx0ZXJuYXRlVGl0
bGU7CisgICAgZ2NoYXIqIHVyaTsKKyAgICBnY2hhciogb3JpZ2luYWxVcmk7Cit9OworCisjZGVm
aW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9J
TlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwg
V2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlKSkKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJI
aXN0b3J5SXRlbSwgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW0sIEdfVFlQRV9PQkpFQ1QpOworCisK
K3N0YXRpYyBHSGFzaFRhYmxlKiB3ZWJraXRfaGlzdG9yeV9pdGVtcygpCit7CisgICAgc3RhdGlj
IEdIYXNoVGFibGUqIGhpc3RvcnlJdGVtcyA9IGdfaGFzaF90YWJsZV9uZXcoZ19kaXJlY3RfaGFz
aCwgZ19kaXJlY3RfZXF1YWwpOyAgIAorICAgIHJldHVybiBoaXN0b3J5SXRlbXM7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRkKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3
aXRlbSwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpdGVtKSAKK3sKKyAgICBnX3JldHVybl9pZl9m
YWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdpdGVtKSk7CisgICAgCisgICAgR0hhc2hU
YWJsZSogdGFibGUgPSB3ZWJraXRfaGlzdG9yeV9pdGVtcygpOworCisgICAgaGl0ZW0tPnJlZigp
OworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQodGFibGUsIGhpdGVtLCBnX29iamVjdF9yZWYod2l0
ZW0pKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hpc3RvcnlfaXRlbV9yZW1vdmUoV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIGhpdGVtKQoreworICAgIEdIYXNoVGFibGUqIHRhYmxlID0gd2Via2l0
X2hpc3RvcnlfaXRlbXMoKTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2l0ZW0gPSAoV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qKSBnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlLCBoaXRlbSk7CisK
KyAgICBpZiAoIXdpdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICBnX2hhc2hfdGFibGVfcmVt
b3ZlKHRhYmxlLCBoaXRlbSk7CisgICAgaGl0ZW0tPmRlcmVmKCk7CisgICAgZ19vYmplY3RfdW5y
ZWYod2l0ZW0pOworfQorICAgIAorc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
ZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmplY3QpOworCisgICAgd2Via2l0X2hpc3Rv
cnlfaXRlbV9yZW1vdmUoaXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0pOworICAgIAorICAgIGRlbGV0
ZSBpdGVtLT5wcml2LT5oaXN0b3J5SXRlbTsKKworICAgIC8qIGRlc3Ryb3kgdGFibGUgaWYgZW1w
dHkgKi8KKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5X2l0ZW1zKCk7Cisg
ICAgaWYgKCFnX2hhc2hfdGFibGVfc2l6ZSh0YWJsZSkpCisgICAgICAgIGdfaGFzaF90YWJsZV9k
ZXN0cm95KHRhYmxlKTsKKyAgICAKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisgICAgCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBXRUJLSVRfV0VCX0hJ
U1RPUllfSVRFTShvYmplY3QpOworCisgICAgaWYgKGhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSkK
KyAgICAgICAgZ19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSk7CisKKyAgICBpZiAoaGlz
dG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlKQorICAgICAgICBnX2ZyZWUoaGlzdG9yeUl0
ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlKTsKKworICAgIGlmIChoaXN0b3J5SXRlbS0+cHJpdi0+
dXJpKQorICAgICAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisKKyAgICBpZiAo
aGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFsVXJpKQorICAgICAgICBnX2ZyZWUoaGlzdG9yeUl0
ZW0tPnByaXYtPm9yaWdpbmFsVXJpKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQoV2ViS2l0V2ViSGlzdG9y
eUl0ZW1DbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0g
R19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2Rpc3Bvc2U7CisgICAgZ29iamVjdF9jbGFzcy0+ZmluYWxp
emUgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9maW5hbGl6ZTsKKworICAgIGdfdHlwZV9jbGFz
c19hZGRfcHJpdmF0ZShnb2JqZWN0X2NsYXNzLCBzaXplb2YoV2ViS2l0V2ViSGlzdG9yeUl0ZW1Q
cml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2luaXQo
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIG9iamVjdCkKK3sKKyAgICBvYmplY3QtPnByaXYgPSBXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTV9HRVRfUFJJVkFURShvYmplY3QpOworfQorCitXZWJLaXRXZWJI
aXN0b3J5SXRlbSogX3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKFdlYkNvcmU6
Okhpc3RvcnlJdGVtKiBpdGVtKQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBvYmplY3Q7
CisKKyAgICBvYmplY3QgPSBraXQoaXRlbSk7CisKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICBvYmplY3QgPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShnX29iamVjdF9uZXcoV0VCS0lUX1RZ
UEVfV0VCX0hJU1RPUllfSVRFTSwgTlVMTCkpOworICAgICAgICBvYmplY3QtPnByaXYtPmhpc3Rv
cnlJdGVtID0gaXRlbTsKKyAgICAgICAgd2Via2l0X2hpc3RvcnlfaXRlbV9hZGQob2JqZWN0LCBv
YmplY3QtPnByaXYtPmhpc3RvcnlJdGVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2JqZWN0Owor
fQorCisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3OgorICoKKyAqIENyZWF0
ZXMgYSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUg
bmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KHZvaWQpCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIG9iamVjdCA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfSElTVE9SWV9JVEVNLCBOVUxMKSk7CisKKyAgICBvYmplY3QtPnByaXYtPmhpc3Rv
cnlJdGVtID0gbmV3IFdlYkNvcmU6Okhpc3RvcnlJdGVtKCk7CisKKyAgICB3ZWJraXRfaGlzdG9y
eV9pdGVtX2FkZChvYmplY3QsIG9iamVjdC0+cHJpdi0+aGlzdG9yeUl0ZW0pOworCisgICAgcmV0
dXJuIG9iamVjdDsKK30KKworCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193
aXRoX2RhdGE6CisgKiBAdXJpOiB0aGUgdXJpIG9mIHRoZSBwYWdlCisgKiBAdGl0bGU6IHRoZSB0
aXRsZSBvZiB0aGUgcGFnZQorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJ
dGVtIHdpdGggdGhlIGdpdmVuIFVSSSBhbmQgdGl0bGUKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRo
ZSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhKGNvbnN0IGdjaGFyKiB1cmksIGNv
bnN0IGdjaGFyKiB0aXRsZSkKK3sKKyAgICBXZWJDb3JlOjpLVVJMIGhpc3RvcnlVcmkodXJpKTsK
KyAgICBXZWJDb3JlOjpTdHJpbmcgaGlzdG9yeVRpdGxlKHRpdGxlKTsKKworICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiBvYmplY3QgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcoKTsKKwor
ICAgIG9iamVjdC0+cHJpdi0+aGlzdG9yeUl0ZW0gPSBuZXcgV2ViQ29yZTo6SGlzdG9yeUl0ZW0o
aGlzdG9yeVVyaSwgaGlzdG9yeVRpdGxlKTsKKworICAgIHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRk
KG9iamVjdCwgb2JqZWN0LT5wcml2LT5oaXN0b3J5SXRlbSk7CisgICAgICAgIAorICAgIHJldHVy
biBvYmplY3Q7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxl
OgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJl
dHVybnMgdGhlIHBhZ2UgdGl0bGUgZm9yIEB0aGlzCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3Rv
cnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9S
WV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRl
bSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsK
KworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpT
dHJpbmcgdGl0bGUgPSBpdGVtLT50aXRsZSgpOworCisgICAgaWYgKHdlYkhpc3RvcnlJdGVtLT5w
cml2LT50aXRsZSkKKyAgICAgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSk7
CisKKyAgICB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZS51dGY4
KCkuZGF0YSgpKTsKKyAgICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dGl0
bGU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90
aXRsZToKKyAqIEB3ZWJIaXN0b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisg
KiBSZXR1cm5zIHRoZSBhbHRlcm5hdGUgdGl0bGUgZm9yIEB0aGlzCisgKgorICogUmV0dXJuIHZh
bHVlOiBhICNnY2hhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWx0ZXJuYXRlIHRpdGxlCisgKi8K
K2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxl
IChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBO
VUxMKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VC
X0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgaWYgKCFpdGVtKQorICAgICAg
ICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6OlN0cmluZyBhbHRlcm5hdGVUaXRsZSA9IGl0
ZW0tPmFsdGVybmF0ZVRpdGxlKCk7CisKKyAgICBpZiAod2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFs
dGVybmF0ZVRpdGxlKQorICAgICAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVy
bmF0ZVRpdGxlKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5hbHRlcm5hdGVUaXRsZSA9
IGdfc3RyZHVwKGFsdGVybmF0ZVRpdGxlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIHdl
Ykhpc3RvcnlJdGVtLT5wcml2LT5hbHRlcm5hdGVUaXRsZTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxlOgorICogQHdlYkhpc3RvcnlJdGVt
OiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICogQHRpdGxlOiB0aGUgYWx0ZXJuYXRlIHRpdGxl
IGZvciBAdGhpcyBoaXN0b3J5IGl0ZW0KKyAqCisgKiBTZXRzIHRoZSBhbHRlcm5hdGUgdGl0bGUg
Zm9yIEB0aGlzCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0
ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtLCBjb25zdCBnY2hh
ciogdGl0bGUpIAoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZ
X0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVt
ID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nIGFsdGVybmF0ZVRpdGxlID0gdGl0bGU7CisgICAgaXRlbS0+
c2V0QWx0ZXJuYXRlVGl0bGUoYWx0ZXJuYXRlVGl0bGUpOworfQorICAgIAorLyoqCisgKiB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJL
aXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIFVSSSBvZiBAdGhpcworICoKKyAq
IFJldHVybiB2YWx1ZTogYSAjZ2NoYXIgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVSSQorICovCitj
b25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBX
ZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0o
d2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJuIE5VTEw7
CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJpID0gaXRlbS0+dXJsU3RyaW5nKCk7CisKKyAgICBp
ZiAod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaSkKKyAgICAgICAgZ19mcmVlKHdlYkhpc3RvcnlJ
dGVtLT5wcml2LT51cmkpOworCisgICAgd2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaSA9IGdfc3Ry
ZHVwKHVyaS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJp
di0+dXJpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9vcmlnaW5h
bF91cmk6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgor
ICogUmV0dXJucyB0aGUgb3JpZ2luYWwgVVJJIG9mIEB0aGlzCisgKgorICogUmV0dXJuIHZhbHVl
OiBhICNnY2hhciByZXByZXNlbnRhdGlvbiBvZiB0aGUgb3JpZ2luYWwgVVJJCisgKi8KK2NvbnN0
IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKwor
ICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllf
SVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm4g
TlVMTDsKKworICAgIFdlYkNvcmU6OlN0cmluZyBvcmlnaW5hbFVyaSA9IGl0ZW0tPm9yaWdpbmFs
VVJMU3RyaW5nKCk7CisKKyAgICBpZiAod2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFsVXJp
KQorICAgICAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFsVXJpKTsKKwor
ICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSA9IGdfc3RyZHVwKG9yaWdpbmFs
VXJpLnV0ZjgoKS5kYXRhKCkpOworICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJp
di0+b3JpZ2luYWxVcmk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X2xhc3RfdmlzaXN0ZWRfdGltZSA6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdlYkhp
c3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgdGltZSBAdGhpcyB3YXMgdmlzaXRlZAorICoK
KyAqIFJldHVybiB2YWx1ZTogYSAjZ2RvdWJsZQorICovCitnZG91YmxlIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
Ykhpc3RvcnlJdGVtKSAKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VC
X0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSksIE5VTEwpOworCisgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJ
dGVtKSk7CisKKyAgICBpZiAoIWl0ZW0pCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGl0ZW0tPmxhc3RWaXNpdGVkVGltZSgpOworfQorCit9IC8qIGVuZCBleHRlcm4gIkMiICovCisK
K1dlYkNvcmU6Okhpc3RvcnlJdGVtKiBXZWJLaXQ6OmNvcmUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpI
aXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0
ZW07CisKKyAgICByZXR1cm4gaGlzdG9yeUl0ZW0gPyBoaXN0b3J5SXRlbSA6IDA7Cit9CisKK1dl
YktpdFdlYkhpc3RvcnlJdGVtKiBXZWJLaXQ6OmtpdChXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlz
dG9yeUl0ZW0pCit7CisgICAgaWYgKCFoaXN0b3J5SXRlbSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtOworICAgIEdIYXNo
VGFibGUqIHRhYmxlID0gd2Via2l0X2hpc3RvcnlfaXRlbXMoKTsKKworICAgIHdlYkhpc3RvcnlJ
dGVtID0gKFdlYktpdFdlYkhpc3RvcnlJdGVtKikgZ19oYXNoX3RhYmxlX2xvb2t1cCh0YWJsZSwg
aGlzdG9yeUl0ZW0pOworICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKK30KKwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggYi9XZWJLaXQvZ3Rr
L1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5hY2Q5ZjY5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0hJU1RP
UllfSVRFTV9ICisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0gKKworI2luY2x1ZGUg
PGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPGdkay9nZGsuaD4K
KworI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5l
IFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0gICAgICAgICAgICAod2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0ob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0pKQorI2RlZmluZSBXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0
b3J5SXRlbUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0ob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VC
X0hJU1RPUllfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNX0NMQVNT
KGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dF
Ql9ISVNUT1JZX0lURU0pKQorI2RlZmluZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9X
RUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNzKSkKKworCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlIFdlYktpdFdlYkhpc3RvcnlJdGVt
UHJpdmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbSBXZWJLaXRXZWJI
aXN0b3J5SXRlbTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNzIFdl
YktpdFdlYkhpc3RvcnlJdGVtQ2xhc3M7CisgCisKK3N0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0
ZW0geworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2Vi
S2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJI
aXN0b3J5SXRlbUNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworCisgICAgY29uc3Qg
Z2NoYXIqICgqZ2V0X3RpdGxlKSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7
CisgICAgY29uc3QgZ2NoYXIqICgqZ2V0X2FsdGVybmF0ZV90aXRsZSkgKFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworICAgIGNvbnN0IGdjaGFyKiAoKmdldF91cmkpIChXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVtKTsKKyAgICBjb25zdCBnY2hhciogKCpnZXRf
b3JpZ2luYWxfdXJpKSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7CisgICAg
dm9pZCAoKnNldF9hbHRlcm5hdGVfdGl0bGUpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9y
eV9pdGVtLCBjb25zdCBnY2hhciogdGl0bGUpOworICAgIGdkb3VibGUgKCpnZXRfbGFzdF92aXNp
dGVkX3RpbWUpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVtKTsKK307CisKK1dF
QktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90eXBlICh2b2lkKTsK
KworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX25ldyAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhIChjb25zdCBnY2hhciogdXJpLCBjb25z
dCBnY2hhciogdGl0bGUpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3RpdGxlIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3Rvcnlf
aXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3Rvcnlf
aXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2Fs
dGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0sIGNv
bnN0IGdjaGFyKiB0aXRsZSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdXJpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3Rvcnlf
aXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRl
bSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xh
c3RfdmlzaXRlZF90aW1lIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5j
cHAKaW5kZXggOGZhYzcwZi4uOGNiODcwNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtMyw2ICszLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5
d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgogICogIENvcHlyaWdodCAoQykgMjAwNyBYYW4g
TG9wZXogPHhhbkBnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEphbiBBbG9uem8gPGptYWxv
bnpvQHVucGx1Z2dhYmxlLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDggKzI1LDEx
IEBACiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgogI2luY2x1ZGUgIndlYmtpdC1tYXJzaGFs
LmgiCiAjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRl
ICJDb250ZXh0TWVudS5oIgpAQCAtMzcsNiArNDEsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEd0ay5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKQEAgLTU1OCwxMyArNTYzLDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgd2Via2l0X3dlYl92aWV3X3N0b3Bf
bG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CiAKICAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dF
Ql9WSUVXKG9iamVjdCkpOworCiAgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT5jb3JlUGFnZTsKICAg
ICBkZWxldGUgd2ViVmlld0RhdGEtPnNldHRpbmdzOworICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+
dXNlckFnZW50OworCisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmJhY2tGb3J3YXJk
TGlzdCk7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CiAgICAg
Z19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmltQ29udGV4dCk7CisKICAgICBndGtfdGFyZ2V0
X2xpc3RfdW5yZWYod2ViVmlld0RhdGEtPmNvcHlfdGFyZ2V0X2xpc3QpOwogICAgIGd0a190YXJn
ZXRfbGlzdF91bnJlZih3ZWJWaWV3RGF0YS0+cGFzdGVfdGFyZ2V0X2xpc3QpOwotICAgIGRlbGV0
ZSB3ZWJWaWV3RGF0YS0+dXNlckFnZW50OwogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dl
Yl92aWV3X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CkBAIC0xMDIzLDYgKzEw
MzIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIHdlYlZpZXdEYXRhLT5sYXN0UG9wdXBYUG9zaXRpb24gPSB3ZWJWaWV3RGF0
YS0+bGFzdFBvcHVwWVBvc2l0aW9uID0gLTE7CiAgICAgd2ViVmlld0RhdGEtPmVkaXRhYmxlID0g
ZmFsc2U7CiAKKyAgICAvKiBJbml0aWFsaXplIHRoZSB2aWV3J3MgYmFjay9mb3J3YXJkIGxpc3Qg
Ki8KKyAgICB3ZWJWaWV3RGF0YS0+YmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9uZXcod2ViVmlldyk7CisKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLDEwLDAp
CiAgICAgR2RrQXRvbSB0ZXh0SHRtbCA9IGdka19hdG9tX2ludGVybl9zdGF0aWNfc3RyaW5nKCJ0
ZXh0L2h0bWwiKTsKICNlbHNlCkBAIC0xMDYzLDM2ICsxMDc1LDEyNiBAQCBXZWJLaXRTZXR0aW5n
cyogd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ICAgIHJldHVybiBOVUxMOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0OgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAq
IEBmbGFnOiB0byB0ZWxsIHRoZSB2aWV3IHRvIG1haW50YWluIGEgYmFjayBvciBmb3J3YXJkIGxp
c3QKKyAqCisgKiBTZXQgdGhlIHZpZXcgdG8gbWFpbnRhaW4gYSBiYWNrIG9yIGZvcndhcmQgbGlz
dCBvZiBoaXN0b3J5IGl0ZW1zLgorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuIGZs
YWcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OworCisgICAgY29yZSh3ZWJWaWV3KS0+YmFja0ZvcndhcmRMaXN0KCktPnNldEVuYWJsZWQoZmxh
Zyk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2JhY2tfZm9yd2FyZF9saXN0OgorICog
QHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBSZXR1cm5zIGEgI1dlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdAorICogCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0CisgKi8KK1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Via2l0X3dlYl92aWV3
X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAg
IFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRf
UFJJVkFURShXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgaWYgKCF3ZWJWaWV3RGF0
YS0+Y29yZVBhZ2UgfHwgIXdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmVuYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4g
d2ViVmlld0RhdGEtPmJhY2tGb3J3YXJkTGlzdDsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Zp
ZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW06CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmll
dworICogQGl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtKgorICoKKyAqIEdvIHRvIHRoZSBz
cGVjaWZpZWQgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJV
RSBpZiBsb2FkaW5nIG9mIGl0ZW0gaXMgc3VjY2Vzc2Z1bCwgJUZBTFNFIGlmIG5vdAorICovCitn
Ym9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0oV2ViS2l0V2Vi
Vmlldyogd2ViVmlldywgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0oaXRlbSksIEZB
TFNFKTsKKworICAgIGNvcmUod2ViVmlldyktPmdvVG9JdGVtKGNvcmUoaXRlbSksIEZyYW1lTG9h
ZFR5cGVJbmRleGVkQmFja0ZvcndhcmQpOworICAgIHJldHVybiBUUlVFOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBHbyB0byB0aGUgcHJldmlvdXMgcGFnZSwgaWYgdGhlcmUncyBhbnkuCisg
Ki8KIHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OwogCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJh
bWUod2ViVmlldykpOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKC0xKTsK
KyAgICBjb3JlKHdlYlZpZXcpLT5nb0JhY2soKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3Zp
ZXdfZ29fZm9yd2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBH
byB0byB0aGUgbmV4dCBwYWdlLCBpZiB0aGVyZSdzIGFueS4KKyAqLwogdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJu
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKIAotICAgIEZyYW1lKiBmcmFt
ZSA9IGNvcmUod2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICBm
cmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgxKTsKKyAgICBjb3JlKHdlYlZpZXcpLT5n
b0ZvcndhcmQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJk
OgorICogQHdlYlZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIENoZWNrcyB3aGV0aGVy
IHRoZSB2aWV3IGNhbiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlCisgKgorICogUmV0dXJu
IHZhbHVlOiAlVFJVRSBpZiB0aGUgcGFnZSBjYW4gZ28gYmFjaywgb3RoZXJ3aXNlIHJldHVybnMg
JUZBTFNFCisgKi8KIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICByZXR1cm4gZnJh
bWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgIFBhZ2UqIHBhZ2UgPSBj
b3JlKHdlYlZpZXcpOworCisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7
CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkOgorICogQHdlYlZp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSB2aWV3IGNh
biBnbyB0byB0aGUgbmV4dCBwYWdlCisgKgorICogUmV0dXJuIHl2YWx1ZTogJVRSVUUgaWYgdGhl
IHBhZ2UgY2FuIGdvIGJhY2ssIG90aGVyd2lzZSByZXR1cm5zICVGQUxTRQorICovCiBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
IHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyks
IEZBTFNFKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoMSk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUod2ViVmlldyk7CisKKyAgICBp
ZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmICghcGFnZS0+YmFja0Zv
cndhcmRMaXN0KCktPmZvcndhcmRJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAg
IHJldHVybiBUUlVFOwogfQogCiB2b2lkIHdlYmtpdF93ZWJfdmlld19vcGVuKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
aAppbmRleCA3ZDEyMDc3Li4wM2JhNmQxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgK
QEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAog
I2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9yd2Fy
ZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogCiBHX0JFR0lOX0RF
Q0xTCiAKQEAgLTkwLDYgKzkyLDE1IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAodm9pZCk7
CiBXRUJLSVRfQVBJIEd0a1dpZGdldCoKIHdlYmtpdF93ZWJfdmlld19uZXcgKHZvaWQpOwogCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2Fy
ZF9saXN0IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgZ2Jvb2xlYW4gZmxhZyk7IAorCitXRUJL
SVRfQVBJIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCoKK3dlYmtpdF93ZWJfdmlld19iYWNrX2Zv
cndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0gKFdlYktpdFdlYlZp
ZXcgKndlYl92aWV3LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSk7CisKIFdFQktJVF9BUEkg
Z2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18470</attachid>
            <date>2008-01-16 05:43:36 -0800</date>
            <delta_ts>2008-01-16 05:45:45 -0800</delta_ts>
            <desc>API fix and documentation</desc>
            <filename>backward.patch</filename>
            <type>text/plain</type>
            <size>7690</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyOTUzMCkKKysrIFdlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMDEtMTYgIEFscCBUb2tlciAgPGFscEBhdG9r
ZXIuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjE4CisgICAgICAgIFtH
VEtdIEFQSTogU2hvdWxkIHRoaXMgZW50cnkgcG9pbnQgYmUgY2FsbGVkIGdvX2JhY2sgcmF0aGVy
IHRoYW4gZ29fYmFja3dhcmQ/CisKKyAgICAgICAgT2Jzb2xldGUgJ2JhY2t3YXJkJyB0ZXJtaW5v
bG9neSBpbiBBUEkgaW4gZmF2b3VyIG9mICdiYWNrJy4gSW50cm9kdWNlCisgICAgICAgIHN0ZXAt
YmFzZWQgYmFjay9mb3J3YXJkIGZ1bmN0aW9ucy4KKworICAgICAgICBEb2N1bWVudCBtb3JlIGZ1
bmN0aW9ucy4KKworICAgICAgICAqIFdlYlZpZXcvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAq
IFdlYlZpZXcvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJ2
aWV3Lmg6CisKIDIwMDgtMDEtMTAgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTYW0uCkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0ZGVmaW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZp
bmVzLmgJKHJldmlzaW9uIDI5NTMwKQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKICAgICAjZWxzZQogICAgICAg
ICAjZGVmaW5lIFdFQktJVF9BUEkgX19kZWNsc3BlYyhkbGxpbXBvcnQpCiAgICAgI2VuZGlmCisg
ICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJVF9BUEkKICNlbHNlCiAgICAgI2Rl
ZmluZSBXRUJLSVRfQVBJIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpCisg
ICAgI2RlZmluZSBXRUJLSVRfT0JTT0xFVEVfQVBJIFdFQktJVF9BUEkgX19hdHRyaWJ1dGVfXygo
ZGVwcmVjYXRlZCkpCiAjZW5kaWYKIAogI2lmbmRlZiBXRUJLSVRfQVBJCkluZGV4OiBXZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCShyZXZpc2lvbiAyOTUzMCkKKysrIFdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2MywxNCArMTA2
Myw1MCBAQCBXZWJLaXRTZXR0aW5ncyogd2Via2l0X3dlYl92aWV3X2dldF9zZXR0CiAgICAgcmV0
dXJuIE5VTEw7CiB9CiAKKy8vIE9ic29sZXRlCiB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNr
d2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogeworICAgIGdfd2FybmluZygid2Via2l0X3dl
Yl92aWV3X2dvX2JhY2t3YXJkKCkgaXMgb2Jzb2xldGUiKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdf
Z29fYmFjayh3ZWJWaWV3KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjazoK
KyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIExvYWRzIHRoZSBwcmV2aW91
cyBoaXN0b3J5IGl0ZW0uCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soV2ViS2l0
V2ViVmlldyogd2ViVmlldykKK3sKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJf
VklFVyh3ZWJWaWV3KSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmll
d19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7CiAgICAgZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tP
ckZvcndhcmQoLTEpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nb19iYWNrX29yX2Zv
cndhcmQ6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqIEBzdGVwczogdGhlIG51
bWJlciBvZiBzdGVwcworICoKKyAqIExvYWRzIHRoZSBoaXN0b3J5IGl0ZW0gdGhhdCBpcyB0aGUg
bnVtYmVyIG9mIEBzdGVwcyBhd2F5IGZyb20gdGhlIGN1cnJlbnQKKyAqIGl0ZW0uIE5lZ2F0aXZl
IHZhbHVlcyByZXByZXNlbnQgc3RlcHMgYmFja3dhcmQgd2hpbGUgcG9zaXRpdmUgdmFsdWVzCisg
KiByZXByZXNlbnQgc3RlcHMgZm9yd2FyZC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29f
YmFja19vcl9mb3J3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgc3RlcHMpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAg
RnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmll
dykpOworICAgIGZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjazoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0
V2ViVmlldworICoKKyAqIExvYWRzIHRoZSBuZXh0IGhpc3RvcnkgaXRlbS4KKyAqLwogdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAg
IGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKQEAgLTEwNzks
MTQgKzExMTUsNTYgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZQog
ICAgIGZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKDEpOwogfQogCisvLyBPYnNvbGV0
ZQogZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogeworICAgIGdfd2FybmluZygid2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNr
d2FyZCgpIGlzIG9ic29sZXRlIik7CisgICAgcmV0dXJuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29f
YmFjayh3ZWJWaWV3KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2s6
CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHdoZXRo
ZXIgI3dlYl92aWV3IGhhcyBhIGJhY2sgaGlzdG9yeSBpdGVtLgorICoKKyAqIFJldHVybiB2YWx1
ZTogJVRSVUUgaWYgYWJsZSB0byBtb3ZlIGJhY2ssICVGQUxTRSBvdGhlcndpc2UKKyAqLworZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
Cit7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcp
LCBGQUxTRSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRf
bWFpbl9mcmFtZSh3ZWJWaWV3KSk7CiAgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2FuR29C
YWNrT3JGb3J3YXJkKC0xKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Jh
Y2tfb3JfZm9yd2FyZDoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICogQHN0ZXBz
OiB0aGUgbnVtYmVyIG9mIHN0ZXBzCisgKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyICN3ZWJfdmll
dyBoYXMgYSBoaXN0b3J5IGl0ZW0gb2YgQHN0ZXBzLiBOZWdhdGl2ZSB2YWx1ZXMKKyAqIHJlcHJl
c2VudCBzdGVwcyBiYWNrd2FyZCB3aGlsZSBwb3NpdGl2ZSB2YWx1ZXMgcmVwcmVzZW50IHN0ZXBz
IGZvcndhcmQuCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBhYmxlIHRvIG1vdmUgYmFj
ayBvciBmb3J3YXJkIHRoZSBnaXZlbiBudW1iZXIgb2YKKyAqIHN0ZXBzLCAlRkFMU0Ugb3RoZXJ3
aXNlCisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja19vcl9mb3J3YXJk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgc3RlcHMpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisKKyAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7
CisgICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQ6CisgKiBAd2ViX3Zp
ZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgI3dlYl92aWV3
IGhhcyBhIGZvcndhcmQgaGlzdG9yeSBpdGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUg
aWYgYWJsZSB0byBtb3ZlIGZvcndhcmQsICVGQUxTRSBvdGhlcndpc2UKKyAqLwogZ2Jvb2xlYW4g
d2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7
CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBG
QUxTRSk7CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgJKHJldmlzaW9uIDI5NTMw
KQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAkod29ya2luZyBjb3B5KQpA
QCAtOTAsMTYgKzkwLDI4IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAodm9pZCk7CiBXRUJL
SVRfQVBJIEd0a1dpZGdldCoKIHdlYmtpdF93ZWJfdmlld19uZXcgKHZvaWQpOwogCi1XRUJLSVRf
QVBJIGdib29sZWFuCitXRUJLSVRfT0JTT0xFVEVfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKIFdFQktJVF9B
UEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayAoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfY2FuX2dv
X2JhY2tfb3JfZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgc3RlcHMpOwor
CitXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQgKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAotV0VCS0lUX0FQSSB2b2lkCitXRUJLSVRfT0JTT0xF
VEVfQVBJIHZvaWQKIHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcpOwogCiBXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92
aWV3X2dvX2JhY2tfb3JfZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgc3Rl
cHMpOworCitXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkIChXZWJL
aXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKIFdFQktJVF9BUEkgdm9pZApJbmRleDogV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNp
b24gMjk1MzApCisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAwOC0wMS0xNiAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYyMTgKKyAgICAgICAgW0dUS10gQVBJOiBTaG91
bGQgdGhpcyBlbnRyeSBwb2ludCBiZSBjYWxsZWQgZ29fYmFjayByYXRoZXIgdGhhbiBnb19iYWNr
d2FyZD8KKworICAgICAgICBUcmFjayBiYWNrL2ZvcndhcmQgQVBJIGNoYW5nZXMgaW4gdGhlIHRv
b2xzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3Bw
OgorICAgICAgICAoQmFja0ZvcndhcmRJdGVtOjppbnZva2UpOgorICAgICAgICAqIEd0a0xhdW5j
aGVyL21haW4uYzoKKyAgICAgICAgKGdvX2JhY2tfY2IpOgorCiAyMDA4LTAxLTExICBHZW9mZnJl
eSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdl
aW5pZy4KSW5kZXg6IFdlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9Xb3JrUXVldWVJdGVt
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvV29y
a1F1ZXVlSXRlbUd0ay5jcHAJKHJldmlzaW9uIDI5NTMwKQorKysgV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL1dvcmtRdWV1ZUl0ZW1HdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSwx
MyArNzEsNSBAQCB2b2lkIFNjcmlwdEl0ZW06Omludm9rZSgpIGNvbnN0CiB2b2lkIEJhY2tGb3J3
YXJkSXRlbTo6aW52b2tlKCkgY29uc3QKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
d2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKLSAgICBpZiAobV9ob3dG
YXIgPT0gMSkKLSAgICAgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQod2ViVmlldyk7Ci0g
ICAgZWxzZSBpZiAobV9ob3dGYXIgPT0gLTEpCi0gICAgICAgIHdlYmtpdF93ZWJfdmlld19nb19i
YWNrd2FyZCh3ZWJWaWV3KTsKLSAgICBlbHNlIHsKLSAgICAgICAgZ193YXJuaW5nKCJDYW4ndCBn
byBiYWNrd2FyZC9mb3J3YXJkXG4iKTsKLSAgICAgICAgLy9ub3RJbXBsZW1lbnRlZCgpOwotICAg
ICAgICAvLyBUT0RPOiBBUEkgZG9lc24ndCB5ZXQgc3VwcG9ydCBhcmJpdHJhcnkgYmFjay9mb3J3
YXJkCi0gICAgfQorICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrX29yX2ZvcndhcmQod2ViVmll
dywgbV9ob3dGYXIpOwogfQpJbmRleDogV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkocmV2aXNpb24gMjk1
MzApCisrKyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKHdvcmtpbmcgY29weSkKQEAg
LTk3LDcgKzk3LDcgQEAgZGVzdHJveV9jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIAog
c3RhdGljIHZvaWQKIGdvX2JhY2tfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRh
KQogewotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZCAod2ViX3ZpZXcpOworICAgIHdl
YmtpdF93ZWJfdmlld19nb19iYWNrICh3ZWJfdmlldyk7CiB9CiAKIHN0YXRpYyB2b2lkCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18537</attachid>
            <date>2008-01-18 19:45:08 -0800</date>
            <delta_ts>2008-01-21 10:38:40 -0800</delta_ts>
            <desc>updated back forward patch</desc>
            <filename>webkitgtk-backforwardlist.patch</filename>
            <type>text/plain</type>
            <size>51744</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkNTU5MDc0Li5kYWYzZGIz
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMDgtMDEtMTggIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlv
bgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdCBhbmQgd2Via2l0d2ViaGlzdG9yeWl0ZW0KKwogMjAwOC0wMS0xNSAgQWxwIFRva2VyICA8
YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgQW5kZXJzLgpkaWZm
IC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCAyNzIyNmI4Li42
OGQzNTViIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpA
QCAtMjMzLDcgKzIzMyw5IEBAIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0ZGVmaW5lcy5oIFwKIAlX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCisJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2ViZnJhbWUuaCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rvcnlp
dGVtLmggXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmggCiAKIHdlYmtpdGd0
a19idWlsdF9zb3VyY2VzICs9IFwKQEAgLTI1NSw3ICsyNTcsOSBAQCB3ZWJraXRndGtfc291cmNl
cyArPSBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmNwcCBcCiAJ
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwIFwKIAlXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0c2V0dGluZ3MuY3BwIFwKKwlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFj
a2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNw
cCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcCBcCiAJV2Vi
S2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwIFwKIAlXZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgXAogCVdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDAzYTIxMy4uYzIyYTFhNCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAwOC0wMS0xOCAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdB
Uk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIGh0dHA6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODExCisgICAgICAgIFtndGtdIFtyZXF1
ZXN0XSBhZGQgYSB3ZWJraXRfZ3RrX3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtIGZ1bmN0aW9uCisK
KyAgICAgICAgQWRkZWQgd2Via2l0L2d0ayB3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QgYW5kIHdl
YmtpdHdlYmhpc3RvcnlpdGVtCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAwOC0wMS0x
OCAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTY4MjM0MD4gUkVHUkVTU0lPTiAocjI4MTg4KTogQ29udGV4dCBtZW51IGFwcGVhcnMgYXQg
d3JvbmcgcGxhY2Ugd2hlbiBjbGlja2luZyBpbiBpZnJhbWUgd2hvc2UgcGFyZW50IGlzIHNjcm9s
bGVkICgxNjgyNykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dl
YkNvcmUucHJvCmluZGV4IDVjM2I4ZGQuLjViODQzODggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTkwLDcgKzk5MCw5IEBAIGd0
ay1wb3J0IHsKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1
ZXN0LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oIFwK
ICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHNldHRpbmdzLmggXAorCS4uL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAgICAgICAgIC4u
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5oIFwKKwkuLi9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJ2aWV3LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9Db250ZXh0TWVudUNsaWVudEd0ay5oIFwKQEAgLTEwNjcsNyArMTA2OSw5IEBAIGd0ay1w
b3J0IHsKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0
LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcCBc
CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRzZXR0aW5ncy5jcHAgXAorCS4u
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIFwKICAgICAg
ICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCisJLi4vV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcCBcCiAgICAgICAgIC4uL1dlYktp
dC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggY2FhYWRk
Ni4uYjA5NjcyNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MCBAQAorMjAwOC0wMS0xOCAgSmFuIE1pY2hhZWwg
QWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE0ODExCisgICAgICAgIFtndGtdIFtyZXF1ZXN0XSBhZGQgYSB3ZWJraXRfZ3Rr
X3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtIGZ1bmN0aW9uCisKKyAgICAgICAgaW1wbGVtZW50IGJh
Y2svZm9yd2FyZCBsaXN0IGFuZCBoaXN0b3J5IGl0ZW0KKworICAgICAgICAqIFdlYlZpZXcvaGVh
ZGVycy5wcmk6CisgICAgICAgICogV2ViVmlldy93ZWJraXQuaDoKKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdHByaXZhdGUuY3BwOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0cHJpdmF0ZS5oOgor
ICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcDogQWRkZWQuCisg
ICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9kaXNwb3NlKToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2ZpbmFsaXplKToKKyAgICAg
ICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2NsYXNzX2luaXQpOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaW5pdCk6CisgICAgICAgIChf
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9uZXdfd2l0aF92aWV3KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQ
cml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQpOgorICAgICAg
ICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ29fYmFjayk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJp
dmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKToKKyAgICAg
ICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dvX3RvX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93
aXRoX2xpbWl0KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1pdCk6Cisg
ICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50
X2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAgIChfV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfbnRoX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZh
dGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKToKKyAgICAg
ICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbGltaXQp
OgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0KToKKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdl
YmJhY2tmb3J3YXJkbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtpdHdlYmhp
c3RvcnlpdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2
YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtcyk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0
ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZCk6CisgICAgICAgIChfV2ViS2l0V2Vi
SGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX3JlbW92ZSk6CisgICAgICAg
IChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9k
aXNwb3NlKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRl
bVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQpOgorICAgICAgICAo
X1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1faW5p
dCk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkhpc3Rv
cnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KToKKyAgICAgICAgKF9X
ZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193
aXRoX2RhdGEpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5
SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVfdGl0bGUp
OgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZSk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9y
eUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKToKKyAgICAgICAg
KF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dl
dF9vcmlnaW5hbF91cmkpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lKToKKyAgICAgICAg
KFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgICogV2ViVmll
dy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtp
dHdlYnZpZXcuY3BwOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2Vidmlldy5oOgorCiAyMDA4
LTAxLTE2ICBBbHAgVG9rZXIgIDxhbHBAYXRva2VyLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBNYXJrIFJvd2UuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkKaW5kZXggNGIyZWIyMS4uY2Q1Y2JlNiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCisrKyBiL1dlYktpdC9n
dGsvV2ViVmlldy9oZWFkZXJzLnByaQpAQCAtMiw0ICsyLDYgQEAgV0VCS0lUX0FQSV9IRUFERVJT
ID0gJCRQV0Qvd2Via2l0LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0ZGVm
aW5lcy5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdG5ldHdvcmtyZXF1ZXN0
LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2ViZnJhbWUuaCBcCi0gICAg
ICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJ2aWV3LmgKKyAgICAgICAgICAgICAgICAg
ICAgICQkUFdEL3dlYmtpdHdlYnZpZXcuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93
ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93
ZWJraXR3ZWJoaXN0b3J5aXRlbS5oCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Vi
a2l0LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgKaW5kZXggYjZhM2MwZS4uMzBhN2Q1
YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oCisrKyBiL1dlYktpdC9n
dGsvV2ViVmlldy93ZWJraXQuaApAQCAtMjQsNSArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdG5l
dHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3
ZWJraXR3ZWJ2aWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KIAogI2VuZGlmIC8qIF9fV0VCS0lUX0hf
XyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwIGIv
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmluZGV4IGM3NGRiYTUuLmNhZjJj
YzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKKwogdm9pZCBh
cHBseShXZWJLaXRTZXR0aW5ncyosIFdlYkNvcmU6OlNldHRpbmdzKikKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpAQCAtOTAsNyArOTEsNyBAQCBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6
UGFnZSogY29yZVBhZ2UpCiAgICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+d2ViVmlldygpIDog
MDsKIH0KIAotfQorfSAvKiogZW5kIG5hbWVzcGFjZSBXZWJDb3JlICovCiAKIHZvaWQgd2Via2l0
X2luaXQoKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUu
aCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKaW5kZXggNjExYWUwOC4uZTk0
NmFiMyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaAorKysg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29w
eXJpZmh0IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0zMSwxMiArMzIsMTcgQEAKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVk
ZSAid2Via2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgor
I2luY2x1ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgogCisjaW5jbHVkZSAiQmFja0Zv
cndhcmRMaXN0LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCiAKKyNpbmNsdWRlIDxnbGliLmg+CisKIG5hbWVzcGFjZSBXZWJL
aXQgewogICAgIHZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLFdlYkNvcmU6OlNldHRpbmdzKik7
CiAgICAgV2ViS2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopOwpAQCAtNDQs
OCArNTAsMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogY29y
ZShXZWJLaXRXZWJGcmFtZSopOwogICAgIFdlYktpdFdlYkZyYW1lKiBraXQoV2ViQ29yZTo6RnJh
bWUqKTsKKwogICAgIFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOwogICAgIFdl
YktpdFdlYlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5
SXRlbSogY29yZShXZWJLaXRXZWJIaXN0b3J5SXRlbSopOworICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBraXQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3
YXJkTGlzdCogY29yZShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqKTsKIH0KIAogZXh0ZXJuICJD
IiB7CkBAIC02NCw2ICs3Niw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpTdHJp
bmcgYXBwbGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcq
IHVzZXJBZ2VudDsKIAorICAgICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3
YXJkTGlzdDsKKyAgICAgICAgCiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwogICAg
ICAgICBnaW50IGxhc3RQb3B1cFlQb3NpdGlvbjsKIApAQCAtOTMsOCArMTA3LDEzIEBAIGV4dGVy
biAiQyIgewogICAgICAgICBnY2hhciogdXJpOwogICAgIH07CiAKKyAgICAvKiBXZWJLaXRXZWJG
cmFtZSBwcml2YXRlIGZ1bmN0aW9uICovCiAgICAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJf
ZnJhbWVfaW5pdF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJh
bWVPd25lckVsZW1lbnQqKTsKIAorICAgIC8qIFdlYktpdFdlYkhpc3RvcnlJdGVtIHByaXZhdGUg
ZnVuY3Rpb24gKi8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CisgICAgCisK
ICAgICAvLyBUT0RPOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVzZSBm
dW5jdGlvbnMgYXJlIGZ1bGx5CiAgICAgLy8gaW1wbGVtZW50ZWQgYW5kIHRoZWlyIEFQSSBoYXMg
YmVlbiBkaXNjdXNzZWQuCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg5Mjg3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9y
d2FyZGxpc3QuY3BwCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEphbiBNaWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisj
aW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3
LmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIK
KyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitl
eHRlcm4gIkMiIHsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlIHsK
KyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdDsKK307CisKKyNk
ZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURShvYmopICAgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZP
UldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpCisKK0dfREVGSU5F
X1RZUEUoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0LCBHX1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCA9IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJ
U1Qob2JqZWN0KTsKKworICAgIGRlbGV0ZSB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tG
b3J3YXJkTGlzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NsYXNzX2luaXQo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3Rf
Y2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9maW5hbGl6ZTsK
KyAgICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9kaXNwb3NlOworICAgIAorICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6
ZW9mKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdiA9
IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfR0VUX1BSSVZBVEUod2ViQmFja0ZvcndhcmRM
aXN0KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRo
X3ZpZXc6CisgKiBAd2ViVmlldzogdGhlIGJhY2sgZm9yd2FyZCBsaXN0J3MgI1dlYktpdFdlYlZp
ZXcKKyAqIAorICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3Qg
d2l0aCBhIGNvbnRyb2xsaW5nICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJuIHZhbHVlOiBh
ICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3ZpZXcoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldyksIE5VTEwpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdE
YXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0OworCisgICAgd2ViQmFja0Zvcndh
cmRMaXN0ID0gV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVChnX29iamVjdF9uZXcoV0VCS0lU
X1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBOVUxMKSk7CisgICAgd2ViQmFja0ZvcndhcmRM
aXN0LT5wcml2LT5iYWNrRm9yd2FyZExpc3QgPSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpOworICAgIHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+YmFja0ZvcndhcmRM
aXN0LT5zZXRFbmFibGVkKFRSVUUpOworCisgICAgcmV0dXJuIHdlYkJhY2tGb3J3YXJkTGlzdDsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQ6Cisg
KiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisg
KiBTdGVwcyBmb3J3YXJkIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICovCit2b2lkIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fZm9yd2FyZCAoV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworCisgICAgV2Vi
Q29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3
YXJkTGlzdCk7CisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICBi
YWNrRm9yd2FyZExpc3QtPmdvRm9yd2FyZCgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fYmFjazoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFN0ZXBzIGJhY2t3YXJkIGluIHRoZSBiYWNrIGZv
cndhcmQgbGlzdAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fYmFj
ayAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tG
b3J3YXJkTGlzdCkpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2Fy
ZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGJhY2tGb3J3YXJkTGlz
dC0+ZW5hYmxlZCgpKQorICAgICAgICBiYWNrRm9yd2FyZExpc3QtPmdvQmFjaygpOworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbToKKyAqIEB3
ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICogQHdlYkhp
c3RvcnlJdGVtOiB0aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHRvIGNoZWNrCisgKgorICogQ2hl
Y2tzIGlmIEB3ZWJIaXN0b3J5SXRlbSBpcyBpbiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqCisg
KiBSZXR1cm46ICVUUlVFIGlmIEB3ZWJIaXN0b3J5SXRlbSBpcyBpbiB0aGUgYmFjayBmb3J3YXJk
IGxpc3QsICVGQUxTRSBpZiBpdCBkb2Vzbid0CisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3
ZWJCYWNrRm9yd2FyZExpc3QsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisgICAg
CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gY29yZSh3ZWJIaXN0b3J5
SXRlbSk7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChoaXN0b3J5SXRlbSAhPSBOVUxMLCBG
QUxTRSk7CisgICAgCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExp
c3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisKKyAgICByZXR1cm4gKGJhY2tGb3J3YXJk
TGlzdC0+ZW5hYmxlZCgpID8KKyAgICAgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Y29udGFpbnNJ
dGVtKGhpc3RvcnlJdGVtKSA6IEZBTFNFKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dvX3RvX2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEB3ZWJIaXN0b3J5SXRlbTogdGhlICNXZWJLaXRXZWJI
aXN0b3J5SXRlbSB0byBnbyB0bworICoKKyAqIEdvIHRvIHRoZSBzcGVjaWZpZWQgQHdlYkhpc3Rv
cnlJdGVtIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJC
YWNrRm9yd2FyZExpc3QsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2Vi
QmFja0ZvcndhcmRMaXN0KSk7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJ
U1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
IGhpc3RvcnlJdGVtID0gY29yZSh3ZWJIaXN0b3J5SXRlbSk7CisgICAgV2ViQ29yZTo6QmFja0Zv
cndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisK
KyAgICBpZiAoYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkgJiYgaGlzdG9yeUl0ZW0pCisgICAg
ICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29Ub0l0ZW0oaGlzdG9yeUl0ZW0pOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0
OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Cisg
KiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAqCisgKiBSZXR1cm5z
IGEgbGlzdCBvZiBpdGVtcyB0aGF0IHN1Y2NlZWQgdGhlIGN1cnJlbnQgaXRlbSwgbGltaXRlZCBi
eSBAbGltaXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI0dMaXN0IG9mIGl0ZW1zIHN1Y2NlZWRp
bmcgdGhlIGN1cnJlbnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqLworR0xpc3QqIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0IChXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBsaW1pdCkKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
KHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYg
KCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAgICAg
ICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yIGl0ZW1zKGxp
bWl0KTsKKyAgICBHTGlzdCogZm9yd2FyZEl0ZW1zID0geyAwIH07CisgICAgCisgICAgYmFja0Zv
cndhcmRMaXN0LT5mb3J3YXJkTGlzdFdpdGhMaW1pdChsaW1pdCwgaXRlbXMpOworICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFdl
YktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX25ld193aXRoX2NvcmVfaXRlbShpdGVtc1tpXS5nZXQoKSk7CisgICAgICAgIGZvcndhcmRJ
dGVtcyA9IGdfbGlzdF9wcmVwZW5kKGZvcndhcmRJdGVtcywgZ19vYmplY3RfcmVmKHdlYkhpc3Rv
cnlJdGVtKSk7CisgICAgfQorCisgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKGZvcndhcmRJdGVt
cyk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19s
aXN0X3dpdGhfbGltaXQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQor
ICoKKyAqIFJldHVybnMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgcHJlY2VkZSB0aGUgY3VycmVudCBp
dGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjR0xpc3Qgb2Yg
aXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKi8K
K0dMaXN0KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9s
aW1pdCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQg
bGltaXQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZP
UldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJh
Y2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3Qp
OworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3Rv
ciBpdGVtcyhsaW1pdCk7CisgICAgR0xpc3QqIGJhY2tJdGVtcyA9IHsgMCB9OworCisgICAgYmFj
a0ZvcndhcmRMaXN0LT5iYWNrTGlzdFdpdGhMaW1pdChsaW1pdCwgaXRlbXMpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X25ld193aXRoX2NvcmVfaXRlbShpdGVtc1tpXS5nZXQoKSk7CisgICAgICAgIGJhY2tJdGVtcyA9
IGdfbGlzdF9wcmVwZW5kKGJhY2tJdGVtcywgZ19vYmplY3RfcmVmKHdlYkhpc3RvcnlJdGVtKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKGJhY2tJdGVtcyk7Cit9CisvKioK
KyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbToKKyAqIEB3ZWJC
YWNrRm9yd2FyZExpc3Q6IGEgI1dlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhl
IGl0ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtCisg
Ki8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJE
X0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAg
ICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0
b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+YmFja0l0ZW0oKTsKKworICAgIHJldHVybiAoaGlz
dG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtOgorICogQHdlYkJhY2tGb3J3
YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUg
Y3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybnMgYSBOVUxMIHZhbHVlIGlmIHRoZSBiYWNrIGZv
cndhcmQgbGlzdCBpcyBlbXB0eQorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjV2ViS2l0V2ViSGlz
dG9yeUl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJC
YWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdl
YkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9y
d2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3Qt
PmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5
SXRlbSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVtKCk7CisKKyAg
ICByZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbToKKyAq
IEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAq
IFJldHVybnMgdGhlIGl0ZW0gdGhhdCBzdWNjZWVkcyB0aGUgY3VycmVudCBpdGVtLgorICoKKyAq
IFJldHVybnMgYSBOVUxMIHZhbHVlIGlmIHRoZXJlIG5vdGhpbmcgdGhhdCBzdWNjZWVkcyB0aGUg
Y3VycmVudCBpdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRl
bQorICovICAgIAorV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNr
Rm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9C
QUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNv
cmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2Fy
ZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVu
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRl
bSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmZvcndhcmRJdGVtKCk7CisKKyAgICBy
ZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtOgorICogQHdlYkJh
Y2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAaW5kZXg6IHRo
ZSBpbmRleCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZlbiBp
bmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTog
dGhlICNXZWJLaXRXZWJIaXN0b3J5SXRlbSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXgg
cmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0gKFdlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGluZGV4KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0Zv
cndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tG
b3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3
YXJkTGlzdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRl
bSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPml0ZW1BdEluZGV4KGluZGV4KTsKKwor
ICAgIHJldHVybiAoaGlzdG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGg6Cisg
KiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisg
KiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBwcmVjZWQgdGhlIGN1cnJlbnQgaXRl
bS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI2dpbnQgY29ycmVzcG9uZGluZyB0byB0aGUgbnVt
YmVyIG9mIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtCisgKi8KK2dpbnQgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGggKFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVM
TCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNv
cmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFj
a0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJu
IGJhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpOworfQorICAgIAorLyoqCisgKiB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aDoKKyAqIEB3ZWJCYWNr
Rm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMg
dGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHN1Y2NlZWQgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisg
KiBSZXR1cm4gdmFsdWU6IGEgI2dpbnQgY29ycmVzcG9uZGluZyB0byB0aGUgbnViZXIgb2YgaXRl
bXMgc3VjY2VlZGluZyB0aGUgY3VycmVudCBpdGVtCisgKi8KK2dpbnQgd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGggKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisK
KyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2Vi
QmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0Zvcndh
cmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBi
YWNrRm9yd2FyZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRf
d2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jYXBhY2l0eToKKyAqIEB3ZWJCYWNrRm9yd2FyZExp
c3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIG1heGlt
dW0gbGltaXQgb2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0LgorICoKKyAqIFJldHVybiB2YWx1ZTog
YSAjZ2ludCBpbmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgI1dlYkhpc3RvcnlJdGVtIHRoZSBiYWNr
IGZvcndhcmQgbGlzdCBjYW4gaG9sZAorICovCitnaW50IHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7
CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNrRm9yd2FyZExpc3QtPmNhcGFj
aXR5KCk7Cit9CisgICAgCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0
X2xpbWl0OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0CisgKiBAbGltaXQ6IHRoZSBsaW1pdCB0byBzZXQgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IHRv
CisgKgorICogU2V0cyB0aGUgbWF4aW11bSBsaW1pdCBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3Qu
IElmIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICogZXhjZWVkcyBpdHMgY2FwYWNpdHksIGl0ZW1z
IHdpbGwgYmUgcmVtb3ZlZCBldmVyeXRpbWUgYSBuZXcgaXRlbSBoYXMgYmVlbgorICogYWRkZWQu
CisgKi8KK3ZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQgKFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGxpbWl0KQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJC
YWNrRm9yd2FyZExpc3QpKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmIChiYWNrRm9yd2Fy
ZExpc3QpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+c2V0Q2FwYWNpdHkobGltaXQpOworfQor
ICAgIAorfSAvKiBlbmQgZXh0ZXJuICJDIiAqLworCitXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3Qq
IFdlYktpdDo6Y29yZShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlz
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgcmV0dXJuIHdlYkJhY2tG
b3J3YXJkTGlzdC0+cHJpdiA/IHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+YmFja0ZvcndhcmRM
aXN0IDogMDsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM4YzI0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5o
CkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVs
IEMuIEFsb256byA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9XRUJf
QkFDS19GT1JXQVJEX0xJU1RfSAorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
X0gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisjaW5j
bHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgi
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJE
X0xJU1QgICAgICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlwZSgp
KQorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZP
UldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KSkKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19D
QVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldB
UkRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
X0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdF
QktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcykpCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0
ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENs
YXNzIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzOworCisKK3N0cnVjdCBfV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgKnByaXY7Cit9OworCitz
dHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3Mg
cGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9uZXdfd2l0aF92aWV3IChXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nb19mb3J3YXJkIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNr
X2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nb19iYWNrIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2Zvcndh
cmRfbGlzdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfY29udGFpbnNfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19m
b3J3YXJkX2xpc3QsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJL
SVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbSAoV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGxpbWl0KTsKKwor
V0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGlzdF93aXRoX2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2Zvcndh
cmRfbGlzdCwgZ2ludCBsaW1pdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0gKFdlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJL
aXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJl
bnRfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3Qp
OworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
Yl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSAoV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgaW5kZXgpOworCitXRUJL
SVRfQVBJIGdpbnQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3Ro
IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dF
QktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9s
ZW5ndGggKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsK
KworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9saW1p
dCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0IChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBsaW1p
dCk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIFdFQktJVF9XRUJfQkFDS19GT1JXQVJE
X0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rv
cnlpdGVtLmNwcCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzNzc5MQotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAKQEAgLTAs
MCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4gQWxv
bnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0
ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitleHRlcm4g
IkMiIHsKKworc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUgeworICAgIFdlYkNv
cmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbTsKKyAgICAKKyAgICBnY2hhciogdGl0bGU7Cisg
ICAgZ2NoYXIqIGFsdGVybmF0ZVRpdGxlOworICAgIGdjaGFyKiB1cmk7CisgICAgZ2NoYXIqIG9y
aWdpbmFsVXJpOworfTsKKworI2RlZmluZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9HRVRfUFJJ
VkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9U
WVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSkpCisKK0df
REVGSU5FX1RZUEUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0sIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
LCBHX1RZUEVfT0JKRUNUKTsKKworCitzdGF0aWMgR0hhc2hUYWJsZSogd2Via2l0X2hpc3Rvcnlf
aXRlbXMoKQoreworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBoaXN0b3J5SXRlbXMgPSBnX2hhc2hf
dGFibGVfbmV3KGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsKTsgICAKKyAgICByZXR1cm4g
aGlzdG9yeUl0ZW1zOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZChX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0sIFdlYkNvcmU6Okhpc3RvcnlJdGVt
KiBoaXN0b3J5SXRlbSkgCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJ
U1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworICAgIAorICAgIEdIYXNoVGFibGUqIHRhYmxl
ID0gd2Via2l0X2hpc3RvcnlfaXRlbXMoKTsKKworICAgIGhpc3RvcnlJdGVtLT5yZWYoKTsKKyAg
ICBnX2hhc2hfdGFibGVfaW5zZXJ0KHRhYmxlLCBoaXN0b3J5SXRlbSwgZ19vYmplY3RfcmVmKHdl
Ykhpc3RvcnlJdGVtKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXN0b3J5X2l0ZW1fcmVt
b3ZlKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBHSGFzaFRhYmxl
KiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5X2l0ZW1zKCk7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYkhpc3RvcnlJdGVtID0gKFdlYktpdFdlYkhpc3RvcnlJdGVtKikgZ19oYXNoX3RhYmxl
X2xvb2t1cCh0YWJsZSwgaGlzdG9yeUl0ZW0pOworCisgICAgZ19yZXR1cm5faWZfZmFpbCh3ZWJI
aXN0b3J5SXRlbSAhPSBOVUxMKTsKKyAgICAKKyAgICBnX2hhc2hfdGFibGVfcmVtb3ZlKHRhYmxl
LCBoaXN0b3J5SXRlbSk7CisgICAgaGlzdG9yeUl0ZW0tPmRlcmVmKCk7CisgICAgZ19vYmplY3Rf
dW5yZWYod2ViSGlzdG9yeUl0ZW0pOworfQorICAgIAorc3RhdGljIHZvaWQgd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIGl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmplY3QpOworCisgICAg
d2Via2l0X2hpc3RvcnlfaXRlbV9yZW1vdmUoaXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0pOworICAg
IAorICAgIGRlbGV0ZSBpdGVtLT5wcml2LT5oaXN0b3J5SXRlbTsKKworICAgIC8qIGRlc3Ryb3kg
dGFibGUgaWYgZW1wdHkgKi8KKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5
X2l0ZW1zKCk7CisgICAgaWYgKCFnX2hhc2hfdGFibGVfc2l6ZSh0YWJsZSkpCisgICAgICAgIGdf
aGFzaF90YWJsZV9kZXN0cm95KHRhYmxlKTsKKyAgICAKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9Cisg
ICAgCisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBX
RUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmplY3QpOworCisgICAgZ19mcmVlKGhpc3RvcnlJdGVt
LT5wcml2LT50aXRsZSk7CisgICAgZ19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT5hbHRlcm5hdGVU
aXRsZSk7CisgICAgZ19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT51cmkpOworICAgIGdfZnJlZSho
aXN0b3J5SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmkpOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fY2xhc3NfaW5pdChXZWJLaXRX
ZWJIaXN0b3J5SXRlbUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3Rf
Y2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNw
b3NlID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZGlzcG9zZTsKKyAgICBnb2JqZWN0X2NsYXNz
LT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplOworCisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RfY2xhc3MsIHNpemVvZihXZWJLaXRXZWJIaXN0
b3J5SXRlbVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1faW5pdChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgd2Vi
SGlzdG9yeUl0ZW0tPnByaXYgPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9HRVRfUFJJVkFURSh3
ZWJIaXN0b3J5SXRlbSk7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBuZXcg
V2ViSGlzdG9yeUl0ZW0gaW5zdGFuY2Ugd2hlbiBuZWVkZWQgKi8KK1dlYktpdFdlYkhpc3RvcnlJ
dGVtKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0oV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3Rv
cnlJdGVtID0ga2l0KGl0ZW0pOworCisgICAgaWYgKCF3ZWJIaXN0b3J5SXRlbSkgeworICAgICAg
ICB3ZWJIaXN0b3J5SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBOVUxMKSk7CisgICAgICAgIHdlYkhpc3RvcnlJ
dGVtLT5wcml2LT5oaXN0b3J5SXRlbSA9IGl0ZW07CisgICAgICAgIHdlYmtpdF9oaXN0b3J5X2l0
ZW1fYWRkKHdlYkhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0p
OworICAgIH0KKworICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKK30KKworCisvKioKKyAqIHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRX
ZWJIaXN0b3J5SXRlbSBpbnN0YW5jZQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5ldyAjV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX25ldyh2b2lkKQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJI
aXN0b3J5SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGdfb2JqZWN0X25ldyhXRUJLSVRf
VFlQRV9XRUJfSElTVE9SWV9JVEVNLCBOVUxMKSk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbS0+cHJp
di0+aGlzdG9yeUl0ZW0gPSBuZXcgV2ViQ29yZTo6SGlzdG9yeUl0ZW0oKTsKKworICAgIHdlYmtp
dF9oaXN0b3J5X2l0ZW1fYWRkKHdlYkhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+
aGlzdG9yeUl0ZW0pOworCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtOworfQorCisKKy8qKgor
ICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YToKKyAqIEB1cmk6IHRoZSB1
cmkgb2YgdGhlIHBhZ2UKKyAqIEB0aXRsZTogdGhlIHRpdGxlIG9mIHRoZSBwYWdlCisgKgorICog
Q3JlYXRlcyBhIG5ldyAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gd2l0aCB0aGUgZ2l2ZW4gVVJJIGFu
ZCB0aXRsZQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5ldyAjV2ViS2l0V2ViSGlzdG9yeUl0
ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25l
d193aXRoX2RhdGEoY29uc3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKQoreworICAg
IFdlYkNvcmU6OktVUkwgaGlzdG9yeVVyaSh1cmkpOworICAgIFdlYkNvcmU6OlN0cmluZyBoaXN0
b3J5VGl0bGUodGl0bGUpOworCisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJ
dGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KCk7CisKKyAgICB3ZWJIaXN0b3J5SXRl
bS0+cHJpdi0+aGlzdG9yeUl0ZW0gPSBuZXcgV2ViQ29yZTo6SGlzdG9yeUl0ZW0oaGlzdG9yeVVy
aSwgaGlzdG9yeVRpdGxlKTsKKworICAgIHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRkKHdlYkhpc3Rv
cnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0pOworICAgICAgICAKKyAg
ICByZXR1cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X3RpdGxlOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5
SXRlbQorICoKKyAqIFJldHVybnMgdGhlIHBhZ2UgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisg
Ki8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUoV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisK
KyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZ
X0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdGl0bGUgPSBpdGVtLT50aXRsZSgpOworCisg
ICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSk7CisKKyAgICB3ZWJIaXN0b3J5
SXRlbS0+cHJpdi0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
IAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dGl0bGU7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZToKKyAqIEB3ZWJIaXN0
b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBhbHRl
cm5hdGUgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUg
YWx0ZXJuYXRlIHRpdGxlIG9mIEB3ZWJIaXN0b3J5SXRlbQorICovCitjb25zdCBnY2hhciogd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJD
b3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2Vi
SGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwg
TlVMTCk7CisgICAgCisgICAgV2ViQ29yZTo6U3RyaW5nIGFsdGVybmF0ZVRpdGxlID0gaXRlbS0+
YWx0ZXJuYXRlVGl0bGUoKTsKKworICAgIGdfZnJlZSh3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+YWx0
ZXJuYXRlVGl0bGUpOworCisgICAgd2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxl
ID0gZ19zdHJkdXAoYWx0ZXJuYXRlVGl0bGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4g
d2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGU6CisgKiBAd2ViSGlzdG9yeUl0
ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKiBAdGl0bGU6IHRoZSBhbHRlcm5hdGUgdGl0
bGUgZm9yIEB0aGlzIGhpc3RvcnkgaXRlbQorICoKKyAqIFNldHMgYW4gYWx0ZXJuYXRlIHRpdGxl
IGZvciBAd2ViSGlzdG9yeUl0ZW0KKyAqLwordm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9z
ZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0s
IGNvbnN0IGdjaGFyKiB0aXRsZSkgCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVt
KSk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcgYWx0ZXJuYXRlVGl0bGUgPSB0aXRsZTsK
KyAgICBpdGVtLT5zZXRBbHRlcm5hdGVUaXRsZShhbHRlcm5hdGVUaXRsZSk7Cit9CisgICAgCisv
KioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmk6CisgKiBAd2ViSGlzdG9yeUl0
ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgVVJJIG9mIEB0
aGlzCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgVVJJIG9mIEB3ZWJIaXN0b3J5SXRlbQorICov
Citjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAg
ICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lU
RU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0g
TlVMTCwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJpID0gaXRlbS0+dXJsU3RyaW5n
KCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisKKyAgICB3ZWJI
aXN0b3J5SXRlbS0+cHJpdi0+dXJpID0gZ19zdHJkdXAodXJpLnV0ZjgoKS5kYXRhKCkpOworCisg
ICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT51cmk7Cit9CisKKy8qKgorICogd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEB3ZWJIaXN0b3J5SXRlbTog
YSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBVUkkg
b2YgQHdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgb3JpZ2luYWwgVVJJ
IG9mIEB3ZWJIaXN0b3J5SVRlbQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJ
dGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9J
VEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKwor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAgICBXZWJD
b3JlOjpTdHJpbmcgb3JpZ2luYWxVcmkgPSBpdGVtLT5vcmlnaW5hbFVSTFN0cmluZygpOworCisg
ICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSk7CisKKyAgICB3ZWJI
aXN0b3J5SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmkgPSBnX3N0cmR1cChvcmlnaW5hbFVyaS51dGY4
KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdp
bmFsVXJpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zp
c2lzdGVkX3RpbWUgOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRl
bQorICoKKyAqIFJldHVybnMgdGhlIHRpbWUgQHdlYkhpc3RvcnlJdGVtIHdhcyBsYXN0IHZpc2l0
ZWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0aGlzIEB3
ZWJIaXN0b3J5SXRlbSB3YXMgbGFzdCB2aXNpdGVkCisgKi8KK2dkb3VibGUgd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lIChXZWJLaXRXZWJIaXN0b3J5SXRlbSog
d2ViSGlzdG9yeUl0ZW0pIAoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpI
aXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9y
eUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwgMCk7CisK
KyAgICByZXR1cm4gaXRlbS0+bGFzdFZpc2l0ZWRUaW1lKCk7Cit9CisKK30gLyogZW5kIGV4dGVy
biAiQyIgKi8KKworV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFdlYktpdDo6Y29yZShXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAg
IFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IHdlYkhpc3RvcnlJdGVtLT5wcml2
LT5oaXN0b3J5SXRlbTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbSA/IGhpc3RvcnlJdGVtIDog
MDsKK30KKworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIFdlYktpdDo6a2l0KFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChoaXN0b3J5
SXRlbSAhPSBOVUxMLCBOVUxMKTsKKyAgICAKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW07CisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfaGlzdG9yeV9pdGVt
cygpOworCisgICAgd2ViSGlzdG9yeUl0ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKSBnX2hh
c2hfdGFibGVfbG9va3VwKHRhYmxlLCBoaXN0b3J5SXRlbSk7CisgICAgcmV0dXJuIHdlYkhpc3Rv
cnlJdGVtOworfQorCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlz
dG9yeWl0ZW0uaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTAyNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaApAQCAtMCwwICsx
LDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bwor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWZuZGVmIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNU
T1JZX0lURU1fSAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+
CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSAgICAg
ICAgICAgICh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0
b3J5SXRlbSkpCisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0NMQVNTKGtsYXNzKSAg
ICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNU
T1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNf
V0VCX0hJU1RPUllfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dFQl9ISVNUT1JZX0lURU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJ
dGVtQ2xhc3MpKQorCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZh
dGUgV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
Ykhpc3RvcnlJdGVtIFdlYktpdFdlYkhpc3RvcnlJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktp
dFdlYkhpc3RvcnlJdGVtQ2xhc3MgV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzczsKKyAKKworc3Ry
dWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAv
KjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUqIHByaXY7Cit9
OworCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MgeworICAgIEdPYmplY3RDbGFz
cyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSAoY29u
c3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKworV0VCS0lUX0FQSSBjb25zdCBn
Y2hhcioKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUgKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3
ZWJfaGlzdG9yeV9pdGVtLCBjb25zdCBnY2hhciogdGl0bGUpOworCitXRUJLSVRfQVBJIGNvbnN0
IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IHdlYl9oaXN0b3J5X2l0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1dF
Ql9ISVNUT1JZX0lURU1fSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4
IGY4Y2M3NjYuLjI1ZDBhOGUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKQEAg
LTMsNiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hy
aXN0aWFuQHR3b3RvYXN0cy5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4
YW5AZ25vbWUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOCBKYW4gQWxvbnpvIDxqbWFsb256b0B1bnBs
dWdnYWJsZS5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNCw4ICsyNSwxMSBAQAogI2lu
Y2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXQtbWFyc2hhbC5oIgogI2lu
Y2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJD
U3RyaW5nLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4
dE1lbnUuaCIKQEAgLTM3LDYgKzQxLDcgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3Qu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCkBAIC01NTgsMTMgKzU2MywxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZmlu
YWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xvYWRpbmco
V0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdl
YlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfVklFVyhv
YmplY3QpKTsKKwogICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2U7CiAgICAgZGVsZXRl
IHdlYlZpZXdEYXRhLT5zZXR0aW5nczsKKyAgICBkZWxldGUgd2ViVmlld0RhdGEtPnVzZXJBZ2Vu
dDsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXdEYXRhLT5iYWNrRm9yd2FyZExpc3QpOwog
ICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOwogICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXdEYXRhLT5pbUNvbnRleHQpOworCiAgICAgZ3RrX3RhcmdldF9saXN0X3Vu
cmVmKHdlYlZpZXdEYXRhLT5jb3B5X3RhcmdldF9saXN0KTsKICAgICBndGtfdGFyZ2V0X2xpc3Rf
dW5yZWYod2ViVmlld0RhdGEtPnBhc3RlX3RhcmdldF9saXN0KTsKLSAgICBkZWxldGUgd2ViVmll
d0RhdGEtPnVzZXJBZ2VudDsKIAogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtMTAyMyw2ICsxMDMyLDkgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
ICAgICB3ZWJWaWV3RGF0YS0+bGFzdFBvcHVwWFBvc2l0aW9uID0gd2ViVmlld0RhdGEtPmxhc3RQ
b3B1cFlQb3NpdGlvbiA9IC0xOwogICAgIHdlYlZpZXdEYXRhLT5lZGl0YWJsZSA9IGZhbHNlOwog
CisgICAgLyogSW5pdGlhbGl6ZSB0aGUgdmlldydzIGJhY2svZm9yd2FyZCBsaXN0ICovCisgICAg
d2ViVmlld0RhdGEtPmJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xp
c3RfbmV3X3dpdGhfdmlldyh3ZWJWaWV3KTsKKwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMTAs
MCkKICAgICBHZGtBdG9tIHRleHRIdG1sID0gZ2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmco
InRleHQvaHRtbCIpOwogI2Vsc2UKQEAgLTEwNjMsNiArMTA3NSw2NSBAQCBXZWJLaXRTZXR0aW5n
cyogd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ICAgIHJldHVybiBOVUxMOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0OgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAq
IEBmbGFnOiB0byB0ZWxsIHRoZSB2aWV3IHRvIG1haW50YWluIGEgYmFjayBvciBmb3J3YXJkIGxp
c3QKKyAqCisgKiBTZXQgdGhlIHZpZXcgdG8gbWFpbnRhaW4gYSBiYWNrIG9yIGZvcndhcmQgbGlz
dCBvZiBoaXN0b3J5IGl0ZW1zLgorICovCit2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuIGZs
YWcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykp
OworCisgICAgY29yZSh3ZWJWaWV3KS0+YmFja0ZvcndhcmRMaXN0KCktPnNldEVuYWJsZWQoZmxh
Zyk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdDoK
KyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJucyBhICNXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QKKyAqIAorICogUmV0dXJuIHZhbHVlOiB0aGUgI1dlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdAorICovCitXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwp
OworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBpZiAoIXdl
YlZpZXdEYXRhLT5jb3JlUGFnZSB8fCAhd2ViVmlld0RhdGEtPmNvcmVQYWdlLT5iYWNrRm9yd2Fy
ZExpc3QoKS0+ZW5hYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAg
IHJldHVybiB3ZWJWaWV3RGF0YS0+YmFja0ZvcndhcmRMaXN0OworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbToKKyAqIEB3ZWJWaWV3OiBhICNXZWJL
aXRXZWJWaWV3CisgKiBAaXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCisgKgorICogR28g
dG8gdGhlIHNwZWNpZmllZCAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm4gdmFs
dWU6ICVUUlVFIGlmIGxvYWRpbmcgb2YgaXRlbSBpcyBzdWNjZXNzZnVsLCAlRkFMU0UgaWYgbm90
CisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbShX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNF
KTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTShp
dGVtKSwgRkFMU0UpOworCisgICAgY29yZSh3ZWJWaWV3KS0+Z29Ub0l0ZW0oY29yZShpdGVtKSwg
RnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkOgorICogQHdlYlZpZXc6IHRoZSAj
V2ViS2l0V2ViVmlldworICoKKyAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdlLCBpZiB0aGVyZSdz
IGFueS4KKyAqLwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKIHsKICAgICBnX3dhcm5pbmcoIndlYmtpdF93ZWJfdmlld19nb19iYWNrd2Fy
ZCgpIGlzIG9ic29sZXRlOyB1c2Ugd2Via2l0X3dlYl92aWV3X2dvX2JhY2soKSIpOwpAQCAtMTA3
OSw4ICsxMTUwLDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdl
YlZpZXcpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92aWV3X2dldF9t
YWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2Fy
ZCgtMSk7CisgICAgY29yZSh3ZWJWaWV3KS0+Z29CYWNrKCk7CiB9CiAKIC8qKgpAQCAtMTExMCwx
MCArMTE4MCwxNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldykpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0
X21haW5fZnJhbWUod2ViVmlldykpOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3
YXJkKDEpOworICAgIGNvcmUod2ViVmlldyktPmdvRm9yd2FyZCgpOwogfQogCisvKioKKyAqIHdl
YmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQ6CisgKiBAd2ViVmlldzogdGhlICNXZWJLaXRX
ZWJWaWV3CisgKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZpZXcgY2FuIGdvIGJhY2sgdG8gdGhl
IHByZXZpb3VzIHBhZ2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIHRoZSBwYWdlIGNh
biBnbyBiYWNrLCBvdGhlcndpc2UgcmV0dXJucyAlRkFMU0UKKyAqLwogZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAg
IGdfd2FybmluZygid2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZCgpIGlzIG9ic29sZXRl
OyB1c2Ugd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKCkiKTsKQEAgLTExMzIsOCArMTIwOSwx
MiBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2soV2ViS2l0V2ViVmlldyog
d2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVco
d2ViVmlldyksIEZBTFNFKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92
aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigp
LT5jYW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdlYlZpZXcp
OworCisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YmFja0l0ZW0o
KSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIC8qKgpA
QCAtMTE2Nyw4ICsxMjQ4LDE1IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fZm9y
d2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOwogCi0gICAgRnJhbWUqIGZyYW1l
ID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOwotICAgIHJl
dHVybiBmcmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsKKyAgICBQYWdlKiBw
YWdlID0gY29yZSh3ZWJWaWV3KTsKKworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIEZB
TFNFOworCisgICAgaWYgKCFwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Zm9yd2FyZEl0ZW0oKSkK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7CiB9CiAKIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X29wZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHVy
aSkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmggYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCmluZGV4IDdjNGFhZjcuLmE3MDExNmIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaApAQCAtMjQsNiArMjQsOCBAQAogI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogCiAjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgor
I2luY2x1ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgorI2luY2x1ZGUgIndlYmtpdHdl
Ymhpc3RvcnlpdGVtLmgiCiAKIEdfQkVHSU5fREVDTFMKIApAQCAtOTAsOCArOTIsMTQgQEAgd2Vi
a2l0X3dlYl92aWV3X2dldF90eXBlICh2b2lkKTsKIFdFQktJVF9BUEkgR3RrV2lkZ2V0Kgogd2Vi
a2l0X3dlYl92aWV3X25ldyAodm9pZCk7CiAKLVdFQktJVF9PQlNPTEVURV9BUEkgZ2Jvb2xlYW4K
LXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
KTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNfYmFja19m
b3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBnYm9vbGVhbiBmbGFnKTsgCisK
K1dFQktJVF9BUEkgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Kgord2Via2l0X3dlYl92aWV3X2dl
dF9iYWNrX2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRf
QVBJIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0gKFdl
YktpdFdlYlZpZXcgKndlYl92aWV3LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaXRlbSk7CiAKIFdF
QktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayAoV2ViS2l0V2Vi
Vmlldyogd2ViX3ZpZXcpOwpAQCAtMTAyLDkgKzExMCw2IEBAIHdlYmtpdF93ZWJfdmlld19jYW5f
Z29fYmFja19vcl9mb3J3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgZ2ludCBzdGVwcyk7
CiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQgKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAotV0VCS0lUX09CU09MRVRFX0FQSSB2b2lkCi13ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKLQogV0VC
S0lUX0FQSSB2b2lkCiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAoV2ViS2l0V2ViVmlldyogd2Vi
X3ZpZXcpOwogCkBAIC0xODYsNiArMTkxLDEyIEBAIHdlYmtpdF93ZWJfdmlld19nZXRfY29weV90
YXJnZXRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiBXRUJLSVRfQVBJIEd0a1Rhcmdl
dExpc3QqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Bhc3RlX3RhcmdldF9saXN0IChXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KTsKIAorV0VCS0lUX09CU09MRVRFX0FQSSBnYm9vbGVhbgord2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJL
SVRfT0JTT0xFVEVfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZCAoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18577</attachid>
            <date>2008-01-21 10:38:40 -0800</date>
            <delta_ts>2008-01-21 11:25:08 -0800</delta_ts>
            <desc>updated patch </desc>
            <filename>webkitgtk-backforward.patch</filename>
            <type>text/plain</type>
            <size>46569</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMjcyMjZi
OC4uNjhkMzU1YiAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTIzMyw3ICsyMzMsOSBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXQuaCBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmluZXMuaCBc
CiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAorCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYmZyYW1lLmggXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0
b3J5aXRlbS5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIAogCiB3ZWJr
aXRndGtfYnVpbHRfc291cmNlcyArPSBcCkBAIC0yNTUsNyArMjU3LDkgQEAgd2Via2l0Z3RrX3Nv
dXJjZXMgKz0gXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAg
XAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcCBcCiAJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YmJhY2tmb3J3YXJkbGlzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFt
ZS5jcHAgXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAog
CVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIFwKIAlXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA1YzNiOGRkLi41Yjg0Mzg4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTk5MCw3ICs5OTAsOSBAQCBndGstcG9ydCB7CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHByaXZhdGUuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRz
ZXR0aW5ncy5oIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRs
aXN0LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaCBc
CisJLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogICAgICAg
ICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIFwKICAgICAgICAgLi4vV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBcCiAgICAgICAgIC4uL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuaCBcCkBAIC0xMDY3
LDcgKzEwNjksOSBAQCBndGstcG9ydCB7CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0cHJpdmF0ZS5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
c2V0dGluZ3MuY3BwIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2Zvcndh
cmRsaXN0LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFt
ZS5jcHAgXAorCS4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAg
XAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAgXAogICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgXAog
ICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3Rr
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkKaW5kZXggNGIyZWIyMS4uY2Q1Y2JlNiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCisrKyBiL1dlYktpdC9ndGsvV2Vi
Vmlldy9oZWFkZXJzLnByaQpAQCAtMiw0ICsyLDYgQEAgV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQ
V0Qvd2Via2l0LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0ZGVmaW5lcy5o
IFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAog
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2ViZnJhbWUuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJ2aWV3LmgKKyAgICAgICAgICAgICAgICAgICAgICQk
UFdEL3dlYmtpdHdlYnZpZXcuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3
ZWJoaXN0b3J5aXRlbS5oCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Lmgg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgKaW5kZXggYjZhM2MwZS4uMzBhN2Q1YyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXQuaApAQCAtMjQsNSArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdG5ldHdvcmty
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXR3
ZWJ2aWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KIAogI2VuZGlmIC8qIF9fV0VCS0lUX0hfXyAqLwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwIGIvV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmluZGV4IGM3NGRiYTUuLmNhZjJjYzYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcAorKysgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKKwogdm9pZCBhcHBseShX
ZWJLaXRTZXR0aW5ncyosIFdlYkNvcmU6OlNldHRpbmdzKikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpAQCAtOTAsNyArOTEsNyBAQCBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSog
Y29yZVBhZ2UpCiAgICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+d2ViVmlldygpIDogMDsKIH0K
IAotfQorfSAvKiogZW5kIG5hbWVzcGFjZSBXZWJDb3JlICovCiAKIHZvaWQgd2Via2l0X2luaXQo
KQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaCBiL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKaW5kZXggNjExYWUwOC4uZTk0NmFiMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZmh0
IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
MSwxMiArMzIsMTcgQEAKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Vi
a2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgorI2luY2x1
ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRM
aXN0LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCiAKKyNpbmNsdWRlIDxnbGliLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgIHZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLFdlYkNvcmU6OlNldHRpbmdzKik7CiAgICAg
V2ViS2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopOwpAQCAtNDQsOCArNTAs
MTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZShXZWJL
aXRXZWJGcmFtZSopOwogICAgIFdlYktpdFdlYkZyYW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsK
KwogICAgIFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOwogICAgIFdlYktpdFdl
YlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
Y29yZShXZWJLaXRXZWJIaXN0b3J5SXRlbSopOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBr
aXQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dCogY29yZShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBA
IC02NCw2ICs3Niw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBw
bGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJB
Z2VudDsKIAorICAgICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dDsKKyAgICAgICAgCiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwogICAgICAgICBn
aW50IGxhc3RQb3B1cFlQb3NpdGlvbjsKIApAQCAtOTMsOCArMTA3LDEzIEBAIGV4dGVybiAiQyIg
ewogICAgICAgICBnY2hhciogdXJpOwogICAgIH07CiAKKyAgICAvKiBXZWJLaXRXZWJGcmFtZSBw
cml2YXRlIGZ1bmN0aW9uICovCiAgICAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVf
aW5pdF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25l
ckVsZW1lbnQqKTsKIAorICAgIC8qIFdlYktpdFdlYkhpc3RvcnlJdGVtIHByaXZhdGUgZnVuY3Rp
b24gKi8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfY29yZV9pdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CisgICAgCisKICAgICAv
LyBUT0RPOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVzZSBmdW5jdGlv
bnMgYXJlIGZ1bGx5CiAgICAgLy8gaW1wbGVtZW50ZWQgYW5kIHRoZWlyIEFQSSBoYXMgYmVlbiBk
aXNjdXNzZWQuCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE1NTQxZAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuY3BwCkBAIC0wLDAgKzEsMzk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBN
aWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisjaW5jbHVk
ZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCisK
KyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNs
dWRlICJIaXN0b3J5SXRlbS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitleHRlcm4g
IkMiIHsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlIHsKKyAgICBX
ZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdDsKK307CisKKyNkZWZpbmUg
V0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRf
TElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBH
X1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QqIHdlYkJhY2tGb3J3YXJkTGlzdCA9IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Qob2Jq
ZWN0KTsKKworICAgIGRlbGV0ZSB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tGb3J3YXJk
TGlzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9maW5h
bGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgLy8gbm90aGluZyBlbHNlIHRvIGRvCit9CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xhc3NfaW5pdChXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdF9jbGFz
cy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2ZpbmFsaXplOworICAg
IGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Rp
c3Bvc2U7CisgICAgCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2Yo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2luaXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3
ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2ID0gV0VC
S0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURSh3ZWJCYWNrRm9yd2FyZExpc3Qp
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfbmV3X3dpdGhfd2Vi
X3ZpZXc6CisgKiBAd2ViVmlldzogdGhlIGJhY2sgZm9yd2FyZCBsaXN0J3MgI1dlYktpdFdlYlZp
ZXcKKyAqIAorICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3Qg
d2l0aCBhIGNvbnRyb2xsaW5nICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJuIHZhbHVlOiBh
ICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3dlYl92aWV3KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJW
aWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICBXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKKworICAgIHdlYkJhY2tG
b3J3YXJkTGlzdCA9IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1QoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkpOworICAgIHdlYkJhY2tGb3J3
YXJkTGlzdC0+cHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gd2ViVmlld0RhdGEtPmNvcmVQYWdlLT5i
YWNrRm9yd2FyZExpc3QoKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tGb3J3
YXJkTGlzdC0+c2V0RW5hYmxlZChUUlVFKTsKKworICAgIHJldHVybiB3ZWJCYWNrRm9yd2FyZExp
c3Q7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19mb3J3YXJk
OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Cisg
KgorICogU3RlcHMgZm9yd2FyZCBpbiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqLwordm9pZCB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQgKFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKworICAg
IFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNr
Rm9yd2FyZExpc3QpOworICAgIGlmIChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAg
ICAgYmFja0ZvcndhcmRMaXN0LT5nb0ZvcndhcmQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dvX2JhY2s6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBTdGVwcyBiYWNrd2FyZCBpbiB0aGUgYmFj
ayBmb3J3YXJkIGxpc3QKKyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dv
X2JhY2sgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJC
YWNrRm9yd2FyZExpc3QpKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0Zv
cndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmIChiYWNrRm9yd2Fy
ZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5nb0JhY2soKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW06Cisg
KiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEB3
ZWJIaXN0b3J5SXRlbTogdGhlICNXZWJLaXRXZWJIaXN0b3J5SXRlbSB0byBjaGVjaworICoKKyAq
IENoZWNrcyBpZiBAd2ViSGlzdG9yeUl0ZW0gaXMgaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0Cisg
KgorICogUmV0dXJuOiAlVFJVRSBpZiBAd2ViSGlzdG9yeUl0ZW0gaXMgaW4gdGhlIGJhY2sgZm9y
d2FyZCBsaXN0LCAlRkFMU0UgaWYgaXQgZG9lc24ndAorICovCitnYm9vbGVhbiB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dCogd2ViQmFja0ZvcndhcmRMaXN0LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0
ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldB
UkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSksIE5VTEwpOwor
ICAgIAorICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IGNvcmUod2ViSGlz
dG9yeUl0ZW0pOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaGlzdG9yeUl0ZW0gIT0gTlVM
TCwgRkFMU0UpOworICAgIAorICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0Zvcndh
cmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworCisgICAgcmV0dXJuIChiYWNrRm9y
d2FyZExpc3QtPmVuYWJsZWQoKSA/CisgICAgICAgICAgICBiYWNrRm9yd2FyZExpc3QtPmNvbnRh
aW5zSXRlbShoaXN0b3J5SXRlbSkgOiBGQUxTRSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAj
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAd2ViSGlzdG9yeUl0ZW06IHRoZSAjV2ViS2l0
V2ViSGlzdG9yeUl0ZW0gdG8gZ28gdG8KKyAqCisgKiBHbyB0byB0aGUgc3BlY2lmaWVkIEB3ZWJI
aXN0b3J5SXRlbSBpbiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqLwordm9pZCB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViQmFja0ZvcndhcmRMaXN0LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0p
Cit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
KHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKiBoaXN0b3J5SXRlbSA9IGNvcmUod2ViSGlzdG9yeUl0ZW0pOworICAgIFdlYkNvcmU6OkJh
Y2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3Qp
OworCisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpICYmIGhpc3RvcnlJdGVtKQor
ICAgICAgICBiYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKGhpc3RvcnlJdGVtKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9s
aW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZlCisgKgorICogUmV0
dXJucyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBzdWNjZWVkIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0
ZWQgYnkgQGxpbWl0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHTGlzdCBvZiBpdGVtcyBzdWNj
ZWVkaW5nIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKi8KK0dMaXN0KiB3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgbGltaXQp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRf
TElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3
YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAg
IGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciBpdGVt
cyhsaW1pdCk7CisgICAgR0xpc3QqIGZvcndhcmRJdGVtcyA9IHsgMCB9OworICAgIAorICAgIGJh
Y2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RXaXRoTGltaXQobGltaXQsIGl0ZW1zKTsKKyAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAg
ICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0oaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBmb3J3
YXJkSXRlbXMgPSBnX2xpc3RfcHJlcGVuZChmb3J3YXJkSXRlbXMsIGdfb2JqZWN0X3JlZih3ZWJI
aXN0b3J5SXRlbSkpOworICAgIH0KKworICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShmb3J3YXJk
SXRlbXMpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Jh
Y2tfbGlzdF93aXRoX2xpbWl0OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmll
dmUKKyAqCisgKiBSZXR1cm5zIGEgbGlzdCBvZiBpdGVtcyB0aGF0IHByZWNlZGUgdGhlIGN1cnJl
bnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI0dMaXN0
IG9mIGl0ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAor
ICovCitHTGlzdCogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dp
dGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBn
aW50IGxpbWl0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFD
S19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3Jl
OjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRM
aXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFi
bGVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW1W
ZWN0b3IgaXRlbXMobGltaXQpOworICAgIEdMaXN0KiBiYWNrSXRlbXMgPSB7IDAgfTsKKworICAg
IGJhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RXaXRoTGltaXQobGltaXQsIGl0ZW1zKTsKKworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICBX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSB3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0oaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBiYWNrSXRl
bXMgPSBnX2xpc3RfcHJlcGVuZChiYWNrSXRlbXMsIGdfb2JqZWN0X3JlZih3ZWJIaXN0b3J5SXRl
bSkpOworICAgIH0KKworICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShiYWNrSXRlbXMpOworfQor
LyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW06CisgKiBA
d2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5z
IHRoZSBpdGVtIHRoYXQgcHJlY2VkZXMgdGhlIGN1cnJlbnQgaXRlbQorICoKKyAqIFJldHVybiB2
YWx1ZTogdGhlICNXZWJLaXRXZWJIaXN0b3J5SXRlbSBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRl
bQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7
CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgp
KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCk7CisKKyAgICByZXR1cm4g
KGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOworfQorCisvKioKKyAqIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbToKKyAqIEB3ZWJCYWNr
Rm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMg
dGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zIGEgTlVMTCB2YWx1ZSBpZiB0aGUgYmFj
ayBmb3J3YXJkIGxpc3QgaXMgZW1wdHkKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI1dlYktpdFdl
Ykhpc3RvcnlJdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAg
ICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFj
a0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRM
aXN0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpOwor
CisgICAgcmV0dXJuIChoaXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW06
CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAq
CisgKiBSZXR1cm5zIHRoZSBpdGVtIHRoYXQgc3VjY2VlZHMgdGhlIGN1cnJlbnQgaXRlbS4KKyAq
CisgKiBSZXR1cm5zIGEgTlVMTCB2YWx1ZSBpZiB0aGVyZSBub3RoaW5nIHRoYXQgc3VjY2VlZHMg
dGhlIGN1cnJlbnQgaXRlbQorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjV2ViS2l0V2ViSGlzdG9y
eUl0ZW0KKyAqLyAgICAKK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Vi
QmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBX
ZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0Zv
cndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0
LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkSXRlbSgpOworCisg
ICAgcmV0dXJuIChoaXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbToKKyAqIEB3
ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICogQGluZGV4
OiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBpdGVtIGF0IGEgZ2l2
ZW4gaW5kZXggcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm4gdmFs
dWU6IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gbG9jYXRlZCBhdCB0aGUgc3BlY2lmaWVkIGlu
ZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtIChXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBpbmRleCkKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJh
Y2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBi
YWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNr
Rm9yd2FyZExpc3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpbmRleCk7
CisKKyAgICByZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOwor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3Ro
OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Cisg
KgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgcHJlY2VkIHRoZSBjdXJyZW50
IGl0ZW0uCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhl
IG51bWJlciBvZiBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50IHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoIChXZWJLaXRXZWJCYWNr
Rm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCks
IE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Qg
PSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwg
IWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKK30KKyAgICAKKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGg6CisgKiBAd2Vi
QmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1
cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBzdWNjZWVkIHRoZSBjdXJyZW50IGl0ZW0uCisg
KgorICogUmV0dXJuIHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51YmVyIG9m
IGl0ZW1zIHN1Y2NlZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50IHdlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoIChXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwp
OworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3Jl
KHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tG
b3J3YXJkTGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1
cm4gYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdENvdW50KCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY2FwYWNpdHk6CisgKiBAd2ViQmFja0Zvcndh
cmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBt
YXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4KKyAqCisgKiBSZXR1cm4gdmFs
dWU6IGEgI2dpbnQgaW5kaWNhdGluZyB0aGUgbnVtYmVyIG9mICNXZWJIaXN0b3J5SXRlbSB0aGUg
YmFjayBmb3J3YXJkIGxpc3QgY2FuIGhvbGQKKyAqLworZ2ludCB3ZWJraXRfd2ViX2JhY2tfZm9y
d2FyZF9saXN0X2dldF9saW1pdCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9y
d2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNL
X0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6
OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExp
c3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0LT5j
YXBhY2l0eSgpOworfQorICAgIAorLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X3NldF9saW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbGltaXQgdG8gc2V0IHRoZSBiYWNrIGZvcndhcmQgbGlz
dCB0bworICoKKyAqIFNldHMgdGhlIG1heGltdW0gbGltaXQgb2YgdGhlIGJhY2sgZm9yd2FyZCBs
aXN0LiBJZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqIGV4Y2VlZHMgaXRzIGNhcGFjaXR5LCBp
dGVtcyB3aWxsIGJlIHJlbW92ZWQgZXZlcnl0aW1lIGEgbmV3IGl0ZW0gaGFzIGJlZW4KKyAqIGFk
ZGVkLgorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0IChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBsaW1pdCkK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qo
d2ViQmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJh
Y2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0Zv
cndhcmRMaXN0KQorICAgICAgICBiYWNrRm9yd2FyZExpc3QtPnNldENhcGFjaXR5KGxpbWl0KTsK
K30KKyAgICAKK30gLyogZW5kIGV4dGVybiAiQyIgKi8KKworV2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0KiBXZWJLaXQ6OmNvcmUoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2Fy
ZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZP
UldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIHJldHVybiB3ZWJC
YWNrRm9yd2FyZExpc3QtPnByaXYgPyB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tGb3J3
YXJkTGlzdCA6IDA7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2Zvcndh
cmRsaXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZTljZgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWlj
aGFlbCBDLiBBbG9uem8gPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRf
TElTVF9ICisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKwor
I2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRl
bS5oIgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUICAgICAgICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5
cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVChvYmopICAgICAgICAg
ICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfQkFD
S19GT1JXQVJEX0xJU1QsIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJ
VF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xB
U1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfQkFDS19G
T1JXQVJEX0xJU1Qob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1dFQl9CQUNLX0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmlu
ZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElT
VCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3MpKQorCisKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFBy
aXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0IFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3RDbGFzcyBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzczsKKworCitzdHJ1Y3QgX1dlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJp
dmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlICpwcml2OworfTsK
Kworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcyB7CisgICAgR09iamVjdENs
YXNzIHBhcmVudDsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X3R5cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfbmV3X3dpdGhfd2ViX3ZpZXcg
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dvX2JhY2sgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
Yl9iYWNrX2ZvcndhcmRfbGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7
CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19p
dGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3
ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgbGlt
aXQpOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfYmFja19saXN0X3dpdGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0LCBnaW50IGxpbWl0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0
b3J5SXRlbSoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSAoV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRf
QVBJIFdlYktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfY3VycmVudF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2Zvcndh
cmRfbGlzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0
b3J5SXRlbSoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtIChXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBpbmRleCk7
CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFj
a19sZW5ndGggKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9m
b3J3YXJkX2xlbmd0aCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJk
X2xpc3QpOworCitXRUJLSVRfQVBJIGdpbnQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlz
dCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRf
bGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBn
aW50IGxpbWl0KTsKKworR19FTkRfREVDTFMKKworCisjZW5kaWYgLyogV0VCS0lUX1dFQl9CQUNL
X0ZPUldBUkRfTElTVF9IICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
d2ViaGlzdG9yeWl0ZW0uY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rvcnlp
dGVtLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTM3NzkxCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNw
cApAQCAtMCwwICsxLDMzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFl
bCBDLiBBbG9uem8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJo
aXN0b3J5aXRlbS5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgPGds
aWIuaD4KKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K2V4dGVybiAiQyIgeworCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSB7Cisg
ICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtOworICAgIAorICAgIGdjaGFyKiB0
aXRsZTsKKyAgICBnY2hhciogYWx0ZXJuYXRlVGl0bGU7CisgICAgZ2NoYXIqIHVyaTsKKyAgICBn
Y2hhciogb3JpZ2luYWxVcmk7Cit9OworCisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVN
X0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwg
V0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRl
KSkKKworR19ERUZJTkVfVFlQRShXZWJLaXRXZWJIaXN0b3J5SXRlbSwgd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW0sIEdfVFlQRV9PQkpFQ1QpOworCisKK3N0YXRpYyBHSGFzaFRhYmxlKiB3ZWJraXRf
aGlzdG9yeV9pdGVtcygpCit7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIGhpc3RvcnlJdGVtcyA9
IGdfaGFzaF90YWJsZV9uZXcoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOyAgIAorICAg
IHJldHVybiBoaXN0b3J5SXRlbXM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXN0b3J5X2l0
ZW1fYWRkKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSwgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGhpc3RvcnlJdGVtKSAKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9J
U19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisgICAgCisgICAgR0hhc2hUYWJs
ZSogdGFibGUgPSB3ZWJraXRfaGlzdG9yeV9pdGVtcygpOworCisgICAgaGlzdG9yeUl0ZW0tPnJl
ZigpOworICAgIGdfaGFzaF90YWJsZV9pbnNlcnQodGFibGUsIGhpc3RvcnlJdGVtLCBnX29iamVj
dF9yZWYod2ViSGlzdG9yeUl0ZW0pKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hpc3Rvcnlf
aXRlbV9yZW1vdmUoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtKQoreworICAgIEdI
YXNoVGFibGUqIHRhYmxlID0gd2Via2l0X2hpc3RvcnlfaXRlbXMoKTsKKyAgICBXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKSBnX2hh
c2hfdGFibGVfbG9va3VwKHRhYmxlLCBoaXN0b3J5SXRlbSk7CisKKyAgICBnX3JldHVybl9pZl9m
YWlsKHdlYkhpc3RvcnlJdGVtICE9IE5VTEwpOworICAgIAorICAgIGdfaGFzaF90YWJsZV9yZW1v
dmUodGFibGUsIGhpc3RvcnlJdGVtKTsKKyAgICBoaXN0b3J5SXRlbS0+ZGVyZWYoKTsKKyAgICBn
X29iamVjdF91bnJlZih3ZWJIaXN0b3J5SXRlbSk7Cit9CisgICAgCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKG9iamVjdCk7
CisKKyAgICB3ZWJraXRfaGlzdG9yeV9pdGVtX3JlbW92ZShpdGVtLT5wcml2LT5oaXN0b3J5SXRl
bSk7CisgICAgCisgICAgZGVsZXRlIGl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtOworCisgICAgLyog
ZGVzdHJveSB0YWJsZSBpZiBlbXB0eSAqLworICAgIEdIYXNoVGFibGUqIHRhYmxlID0gd2Via2l0
X2hpc3RvcnlfaXRlbXMoKTsKKyAgICBpZiAoIWdfaGFzaF90YWJsZV9zaXplKHRhYmxlKSkKKyAg
ICAgICAgZ19oYXNoX3RhYmxlX2Rlc3Ryb3kodGFibGUpOworICAgIAorICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0
KTsKK30KKyAgICAKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5
SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKG9iamVjdCk7CisKKyAgICBnX2ZyZWUoaGlz
dG9yeUl0ZW0tPnByaXYtPnRpdGxlKTsKKyAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPmFs
dGVybmF0ZVRpdGxlKTsKKyAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisgICAg
Z19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSk7CisKKyAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmpl
Y3QpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9jbGFzc19pbml0
KFdlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RfY2xh
c3MtPmRpc3Bvc2UgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9kaXNwb3NlOworICAgIGdvYmpl
Y3RfY2xhc3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxpemU7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoZ29iamVjdF9jbGFzcywgc2l6ZW9mKFdlYktp
dFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hp
c3RvcnlfaXRlbV9pbml0KFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sK
KyAgICB3ZWJIaXN0b3J5SXRlbS0+cHJpdiA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0dFVF9Q
UklWQVRFKHdlYkhpc3RvcnlJdGVtKTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0
ZSBhIG5ldyBXZWJIaXN0b3J5SXRlbSBpbnN0YW5jZSB3aGVuIG5lZWRlZCAqLworV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2NvcmVfaXRlbShX
ZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSog
d2ViSGlzdG9yeUl0ZW0gPSBraXQoaXRlbSk7CisKKyAgICBpZiAoIXdlYkhpc3RvcnlJdGVtKSB7
CisgICAgICAgIHdlYkhpc3RvcnlJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIE5VTEwpKTsKKyAgICAgICAgd2Vi
SGlzdG9yeUl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAgd2Via2l0X2hp
c3RvcnlfaXRlbV9hZGQod2ViSGlzdG9yeUl0ZW0sIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0
b3J5SXRlbSk7CisgICAgfQorCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtOworfQorCisKKy8q
KgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3OgorICoKKyAqIENyZWF0ZXMgYSBuZXcg
I1dlYktpdFdlYkhpc3RvcnlJdGVtIGluc3RhbmNlCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUg
bmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KHZvaWQpCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYkhpc3RvcnlJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIE5VTEwpKTsKKworICAgIHdlYkhpc3RvcnlJ
dGVtLT5wcml2LT5oaXN0b3J5SXRlbSA9IG5ldyBXZWJDb3JlOjpIaXN0b3J5SXRlbSgpOworCisg
ICAgd2Via2l0X2hpc3RvcnlfaXRlbV9hZGQod2ViSGlzdG9yeUl0ZW0sIHdlYkhpc3RvcnlJdGVt
LT5wcml2LT5oaXN0b3J5SXRlbSk7CisKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisK
KworLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhOgorICogQHVy
aTogdGhlIHVyaSBvZiB0aGUgcGFnZQorICogQHRpdGxlOiB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UK
KyAqCisgKiBDcmVhdGVzIGEgbmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRlbSB3aXRoIHRoZSBnaXZl
biBVUkkgYW5kIHRpdGxlCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgbmV3ICNXZWJLaXRXZWJI
aXN0b3J5SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfZGF0YShjb25zdCBnY2hhciogdXJpLCBjb25zdCBnY2hhciogdGl0bGUp
Cit7CisgICAgV2ViQ29yZTo6S1VSTCBoaXN0b3J5VXJpKHVyaSk7CisgICAgV2ViQ29yZTo6U3Ry
aW5nIGhpc3RvcnlUaXRsZSh0aXRsZSk7CisKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcoKTsKKworICAgIHdlYkhp
c3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5SXRlbSA9IG5ldyBXZWJDb3JlOjpIaXN0b3J5SXRlbSho
aXN0b3J5VXJpLCBoaXN0b3J5VGl0bGUpOworCisgICAgd2Via2l0X2hpc3RvcnlfaXRlbV9hZGQo
d2ViSGlzdG9yeUl0ZW0sIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5SXRlbSk7CisgICAg
ICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfdGl0bGU6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdl
Ykhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgcGFnZSB0aXRsZSBvZiBAd2ViSGlzdG9y
eUl0ZW0KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRs
ZShXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBO
VUxMKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VC
X0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgaWYgKCFpdGVtKQorICAgICAg
ICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6OlN0cmluZyB0aXRsZSA9IGl0ZW0tPnRpdGxl
KCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnRpdGxlKTsKKworICAgIHdl
Ykhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSA9IGdfc3RyZHVwKHRpdGxlLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxlOgorICog
QHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMg
dGhlIGFsdGVybmF0ZSB0aXRsZSBvZiBAd2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm4gdmFs
dWU6IHRoZSBhbHRlcm5hdGUgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisgKi8KK2NvbnN0IGdj
aGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKwor
ICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllf
SVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAh
PSBOVUxMLCBOVUxMKTsKKyAgICAKKyAgICBXZWJDb3JlOjpTdHJpbmcgYWx0ZXJuYXRlVGl0bGUg
PSBpdGVtLT5hbHRlcm5hdGVUaXRsZSgpOworCisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5w
cml2LT5hbHRlcm5hdGVUaXRsZSk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+YWx0ZXJu
YXRlVGl0bGUgPSBnX3N0cmR1cChhbHRlcm5hdGVUaXRsZS51dGY4KCkuZGF0YSgpKTsKKworICAg
IHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+YWx0ZXJuYXRlVGl0bGU7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZToKKyAqIEB3ZWJI
aXN0b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqIEB0aXRsZTogdGhlIGFsdGVy
bmF0ZSB0aXRsZSBmb3IgQHRoaXMgaGlzdG9yeSBpdGVtCisgKgorICogU2V0cyBhbiBhbHRlcm5h
dGUgdGl0bGUgZm9yIEB3ZWJIaXN0b3J5SXRlbQorICovCit2b2lkIHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUgKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0
b3J5SXRlbSwgY29uc3QgZ2NoYXIqIHRpdGxlKSAKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdF
QktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBXZWJDb3Jl
OjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlz
dG9yeUl0ZW0pKTsKKworICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyBhbHRlcm5hdGVUaXRsZSA9
IHRpdGxlOworICAgIGl0ZW0tPnNldEFsdGVybmF0ZVRpdGxlKGFsdGVybmF0ZVRpdGxlKTsKK30K
KyAgICAKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaToKKyAqIEB3ZWJI
aXN0b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBV
Ukkgb2YgQHRoaXMKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBVUkkgb2YgQHdlYkhpc3RvcnlJ
dGVtCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpIChX
ZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxM
KTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJ
U1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
aXRlbSAhPSBOVUxMLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OlN0cmluZyB1cmkgPSBpdGVtLT51
cmxTdHJpbmcoKTsKKworICAgIGdfZnJlZSh3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dXJpKTsKKwor
ICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT51cmkgPSBnX3N0cmR1cCh1cmkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpOgorICogQHdlYkhpc3Rv
cnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIG9yaWdp
bmFsIFVSSSBvZiBAd2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBvcmln
aW5hbCBVUkkgb2YgQHdlYkhpc3RvcnlJVGVtCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9I
SVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRl
bSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBOVUxMLCBOVUxMKTsKKwor
ICAgIFdlYkNvcmU6OlN0cmluZyBvcmlnaW5hbFVyaSA9IGl0ZW0tPm9yaWdpbmFsVVJMU3RyaW5n
KCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFsVXJpKTsKKwor
ICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSA9IGdfc3RyZHVwKG9yaWdpbmFs
VXJpLnV0ZjgoKS5kYXRhKCkpOworICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJp
di0+b3JpZ2luYWxVcmk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0
X2xhc3RfdmlzaXN0ZWRfdGltZSA6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdlYkhp
c3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgdGltZSBAd2ViSGlzdG9yeUl0ZW0gd2FzIGxh
c3QgdmlzaXRlZAorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHRpbWUgaW4gbWlsbGlzZWNvbmRz
IHRoaXMgQHdlYkhpc3RvcnlJdGVtIHdhcyBsYXN0IHZpc2l0ZWQKKyAqLworZ2RvdWJsZSB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfbGFzdF92aXNpdGVkX3RpbWUgKFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkgCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3
ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBOVUxM
LCAwKTsKKworICAgIHJldHVybiBpdGVtLT5sYXN0VmlzaXRlZFRpbWUoKTsKK30KKworfSAvKiBl
bmQgZXh0ZXJuICJDIiAqLworCitXZWJDb3JlOjpIaXN0b3J5SXRlbSogV2ViS2l0Ojpjb3JlKFdl
YktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSksIE5VTEwp
OworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gd2ViSGlzdG9yeUl0
ZW0tPnByaXYtPmhpc3RvcnlJdGVtOworCisgICAgcmV0dXJuIGhpc3RvcnlJdGVtID8gaGlzdG9y
eUl0ZW0gOiAwOworfQorCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogV2ViS2l0OjpraXQoV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KGhpc3RvcnlJdGVtICE9IE5VTEwsIE5VTEwpOworICAgIAorICAgIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiB3ZWJIaXN0b3J5SXRlbTsKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0
b3J5X2l0ZW1zKCk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbSA9IChXZWJLaXRXZWJIaXN0b3J5SXRl
bSopIGdfaGFzaF90YWJsZV9sb29rdXAodGFibGUsIGhpc3RvcnlJdGVtKTsKKyAgICByZXR1cm4g
d2ViSGlzdG9yeUl0ZW07Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXR3ZWJoaXN0b3J5aXRlbS5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rvcnlp
dGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhMDI0ZQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwgQy4g
QWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fSAorI2RlZmluZSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTV9ICisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKKyNpbmNsdWRlICJ3ZWJraXRkZWZpbmVz
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9J
VEVNICAgICAgICAgICAgKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90eXBlKCkpCisjZGVm
aW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktp
dFdlYkhpc3RvcnlJdGVtKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fQ0xBU1Mo
a2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVf
V0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19XRUJfSElTVE9SWV9JVEVNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0pKQorI2RlZmluZSBX
RUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFT
U19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNKSkKKyNkZWZpbmUg
V0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2Vi
SGlzdG9yeUl0ZW1DbGFzcykpCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJ
dGVtUHJpdmF0ZSBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViSGlzdG9yeUl0ZW0gV2ViS2l0V2ViSGlzdG9yeUl0ZW07Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyBXZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNzOwor
IAorCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtIHsKKyAgICBHT2JqZWN0IHBhcmVudDsK
KworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSog
cHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyB7CisgICAgR09i
amVjdENsYXNzIHBhcmVudDsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5
SXRlbSoKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldyAodm9pZCk7CisKK1dFQktJVF9BUEkg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9k
YXRhIChjb25zdCBnY2hhciogdXJpLCBjb25zdCBnY2hhciogdGl0bGUpOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0sIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisKK1dFQktJVF9B
UEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2No
YXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQord2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lIChXZWJLaXRXZWJIaXN0
b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBX
RUJLSVRfV0VCX0hJU1RPUllfSVRFTV9IICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5j
cHAKaW5kZXggMDJjYzIyYi4uYmYyMWY3NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtMyw2ICszLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5
d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgogICogIENvcHlyaWdodCAoQykgMjAwNyBYYW4g
TG9wZXogPHhhbkBnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8
YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEphbiBBbG9uem8gPGptYWxv
bnpvQHVucGx1Z2dhYmxlLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDggKzI1LDEx
IEBACiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgogI2luY2x1ZGUgIndlYmtpdC1tYXJzaGFs
LmgiCiAjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRl
ICJDb250ZXh0TWVudS5oIgpAQCAtMzcsNiArNDEsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEd0ay5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKQEAgLTU3NCwxMyArNTc5LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgd2Via2l0X3dlYl92aWV3X3N0b3Bf
bG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CiAKICAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dF
Ql9WSUVXKG9iamVjdCkpOworCiAgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT5jb3JlUGFnZTsKICAg
ICBkZWxldGUgd2ViVmlld0RhdGEtPnNldHRpbmdzOworICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+
dXNlckFnZW50OworCisgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmJhY2tGb3J3YXJk
TGlzdCk7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPm1haW5GcmFtZSk7CiAgICAg
Z19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmltQ29udGV4dCk7CisKICAgICBndGtfdGFyZ2V0
X2xpc3RfdW5yZWYod2ViVmlld0RhdGEtPmNvcHlfdGFyZ2V0X2xpc3QpOwogICAgIGd0a190YXJn
ZXRfbGlzdF91bnJlZih3ZWJWaWV3RGF0YS0+cGFzdGVfdGFyZ2V0X2xpc3QpOwotICAgIGRlbGV0
ZSB3ZWJWaWV3RGF0YS0+dXNlckFnZW50OwogCiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dl
Yl92aWV3X3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CkBAIC0xMDQwLDYgKzEw
NDksOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3KQogICAgIHdlYlZpZXdEYXRhLT5sYXN0UG9wdXBYUG9zaXRpb24gPSB3ZWJWaWV3RGF0
YS0+bGFzdFBvcHVwWVBvc2l0aW9uID0gLTE7CiAgICAgd2ViVmlld0RhdGEtPmVkaXRhYmxlID0g
ZmFsc2U7CiAKKyAgICAvKiBJbml0aWFsaXplIHRoZSB2aWV3J3MgYmFjay9mb3J3YXJkIGxpc3Qg
Ki8KKyAgICB3ZWJWaWV3RGF0YS0+YmFja0ZvcndhcmRMaXN0ID0gd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9uZXdfd2l0aF93ZWJfdmlldyh3ZWJWaWV3KTsKKwogI2lmIEdUS19DSEVDS19W
RVJTSU9OKDIsMTAsMCkKICAgICBHZGtBdG9tIHRleHRIdG1sID0gZ2RrX2F0b21faW50ZXJuX3N0
YXRpY19zdHJpbmcoInRleHQvaHRtbCIpOwogI2Vsc2UKQEAgLTEwODAsNiArMTA5Miw2NSBAQCBX
ZWJLaXRTZXR0aW5ncyogd2Via2l0X3dlYl92aWV3X2dldF9zZXR0aW5ncyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIHJldHVybiBOVUxMOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmll
d19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0OgorICogQHdlYlZpZXc6IGEgI1dlYktp
dFdlYlZpZXcKKyAqIEBmbGFnOiB0byB0ZWxsIHRoZSB2aWV3IHRvIG1haW50YWluIGEgYmFjayBv
ciBmb3J3YXJkIGxpc3QKKyAqCisgKiBTZXQgdGhlIHZpZXcgdG8gbWFpbnRhaW4gYSBiYWNrIG9y
IGZvcndhcmQgbGlzdCBvZiBoaXN0b3J5IGl0ZW1zLgorICovCit2b2lkIHdlYmtpdF93ZWJfdmll
d19zZXRfbWFpbnRhaW5zX2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdib29sZWFuIGZsYWcpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldykpOworCisgICAgY29yZSh3ZWJWaWV3KS0+YmFja0ZvcndhcmRMaXN0KCktPnNl
dEVuYWJsZWQoZmxhZyk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF9iYWNrX2Zv
cndhcmRfbGlzdDoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJu
cyBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIAorICogUmV0dXJuIHZhbHVlOiB0aGUg
I1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICovCitXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Qq
IHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIE5VTEwpOworCisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0g
V0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKFdFQktJVF9XRUJfVklFVyh3ZWJWaWV3KSk7CisK
KyAgICBpZiAoIXdlYlZpZXdEYXRhLT5jb3JlUGFnZSB8fCAhd2ViVmlld0RhdGEtPmNvcmVQYWdl
LT5iYWNrRm9yd2FyZExpc3QoKS0+ZW5hYmxlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOwor
ICAgIH0KKworICAgIHJldHVybiB3ZWJWaWV3RGF0YS0+YmFja0ZvcndhcmRMaXN0OworfQorCisv
KioKKyAqIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2ZvcndhcmRfaXRlbToKKyAqIEB3ZWJW
aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAaXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
CisgKgorICogR28gdG8gdGhlIHNwZWNpZmllZCAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisg
KiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlmIGxvYWRpbmcgb2YgaXRlbSBpcyBzdWNjZXNzZnVsLCAl
RkFMU0UgaWYgbm90CisgKi8KK2dib29sZWFuIHdlYmtpdF93ZWJfdmlld19nb190b19iYWNrX2Zv
cndhcmRfaXRlbShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSog
aXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIEZBTFNFKTsKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJ
U1RPUllfSVRFTShpdGVtKSwgRkFMU0UpOworCisgICAgY29yZSh3ZWJWaWV3KS0+Z29Ub0l0ZW0o
Y29yZShpdGVtKSwgRnJhbWVMb2FkVHlwZUluZGV4ZWRCYWNrRm9yd2FyZCk7CisgICAgcmV0dXJu
IFRSVUU7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkOgorICogQHdl
YlZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIEdvIHRvIHRoZSBwcmV2aW91cyBwYWdl
LCBpZiB0aGVyZSdzIGFueS4KKyAqLwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3dhcm5pbmcoIndlYmtpdF93ZWJfdmll
d19nb19iYWNrd2FyZCgpIGlzIG9ic29sZXRlOyB1c2Ugd2Via2l0X3dlYl92aWV3X2dvX2JhY2so
KSIpOwpAQCAtMTA5Niw4ICsxMTY3LDcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPmdv
QmFja09yRm9yd2FyZCgtMSk7CisgICAgY29yZSh3ZWJWaWV3KS0+Z29CYWNrKCk7CiB9CiAKIC8q
KgpAQCAtMTEyNywxMCArMTE5NywxNyBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldykpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+
Z29CYWNrT3JGb3J3YXJkKDEpOworICAgIGNvcmUod2ViVmlldyktPmdvRm9yd2FyZCgpOwogfQog
CisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQ6CisgKiBAd2ViVmlldzog
dGhlICNXZWJLaXRXZWJWaWV3CisgKgorICogQ2hlY2tzIHdoZXRoZXIgdGhlIHZpZXcgY2FuIGdv
IGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6ICVUUlVFIGlm
IHRoZSBwYWdlIGNhbiBnbyBiYWNrLCBvdGhlcndpc2UgcmV0dXJucyAlRkFMU0UKKyAqLwogZ2Jv
b2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3KQogewogICAgIGdfd2FybmluZygid2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZCgp
IGlzIG9ic29sZXRlOyB1c2Ugd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKCkiKTsKQEAgLTEx
NDksOCArMTIyNiwxMiBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
d2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICByZXR1cm4gZnJh
bWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoLTEpOworICAgIFBhZ2UqIHBhZ2UgPSBj
b3JlKHdlYlZpZXcpOworCisgICAgaWYgKCFwYWdlIHx8ICFwYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7
CiB9CiAKIC8qKgpAQCAtMTE4NCw4ICsxMjY1LDE1IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19jYW5fZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOwogCi0gICAg
RnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmll
dykpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09yRm9yd2FyZCgxKTsK
KyAgICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKworICAgIGlmICghcGFnZSkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFwYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+Zm9y
d2FyZEl0ZW0oKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgcmV0dXJuIFRSVUU7CiB9
CiAKIHZvaWQgd2Via2l0X3dlYl92aWV3X29wZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29u
c3QgZ2NoYXIqIHVyaSkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2
aWV3LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCmluZGV4IDdjNGFhZjcu
LmE3MDExNmIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgK
KysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaApAQCAtMjQsNiArMjQsOCBA
QAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTQmFzZS5oPgogCiAjaW5jbHVkZSAid2Via2l0
ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgorI2luY2x1
ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAKIEdfQkVHSU5fREVDTFMKIApAQCAtOTAsOCAr
OTIsMTQgQEAgd2Via2l0X3dlYl92aWV3X2dldF90eXBlICh2b2lkKTsKIFdFQktJVF9BUEkgR3Rr
V2lkZ2V0Kgogd2Via2l0X3dlYl92aWV3X25ldyAodm9pZCk7CiAKLVdFQktJVF9PQlNPTEVURV9B
UEkgZ2Jvb2xlYW4KLXdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3KTsKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl92aWV3X3NldF9tYWlu
dGFpbnNfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBnYm9vbGVh
biBmbGFnKTsgCisKK1dFQktJVF9BUEkgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Kgord2Via2l0
X3dlYl92aWV3X2dldF9iYWNrX2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcp
OworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3
YXJkX2l0ZW0gKFdlYktpdFdlYlZpZXcgKndlYl92aWV3LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSog
aXRlbSk7CiAKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFj
ayAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwpAQCAtMTAyLDkgKzExMCw2IEBAIHdlYmtpdF93
ZWJfdmlld19jYW5fZ29fYmFja19vcl9mb3J3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
Z2ludCBzdGVwcyk7CiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dv
X2ZvcndhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAotV0VCS0lUX09CU09MRVRFX0FQ
SSB2b2lkCi13ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3KTsKLQogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjayAoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcpOwogCkBAIC0xODYsNiArMTkxLDEyIEBAIHdlYmtpdF93ZWJfdmll
d19nZXRfY29weV90YXJnZXRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiBXRUJLSVRf
QVBJIEd0a1RhcmdldExpc3QqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Bhc3RlX3RhcmdldF9saXN0
IChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKIAorV0VCS0lUX09CU09MRVRFX0FQSSBnYm9vbGVh
bgord2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcpOworCitXRUJLSVRfT0JTT0xFVEVfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19nb19iYWNr
d2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18578</attachid>
            <date>2008-01-21 11:25:08 -0800</date>
            <delta_ts>2008-01-25 22:00:01 -0800</delta_ts>
            <desc>updated patch to remove finalize</desc>
            <filename>webkitgtk-backforward.patch</filename>
            <type>text/plain</type>
            <size>46396</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMjcyMjZi
OC4uNjhkMzU1YiAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUu
YW0KQEAgLTIzMyw3ICsyMzMsOSBAQCB3ZWJraXRndGtfaF9hcGkgKz0gXAogCVdlYktpdC9ndGsv
V2ViVmlldy93ZWJraXQuaCBcCiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdGRlZmluZXMuaCBc
CiAJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAorCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYmZyYW1lLmggXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0
b3J5aXRlbS5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIAogCiB3ZWJr
aXRndGtfYnVpbHRfc291cmNlcyArPSBcCkBAIC0yNTUsNyArMjU3LDkgQEAgd2Via2l0Z3RrX3Nv
dXJjZXMgKz0gXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAg
XAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcCBcCiAJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHNldHRpbmdzLmNwcCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YmJhY2tmb3J3YXJkbGlzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFt
ZS5jcHAgXAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAog
CVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIFwKIAlXZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0NvbnRleHRNZW51Q2xpZW50R3RrLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA1YzNiOGRkLi41Yjg0Mzg4IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTk5MCw3ICs5OTAsOSBAQCBndGstcG9ydCB7CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHByaXZhdGUuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRz
ZXR0aW5ncy5oIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRs
aXN0LmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuaCBc
CisJLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmggXAogICAgICAg
ICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIFwKICAgICAgICAgLi4vV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBcCiAgICAgICAgIC4uL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRHdGsuaCBcCkBAIC0xMDY3
LDcgKzEwNjksOSBAQCBndGstcG9ydCB7CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93
ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0cHJpdmF0ZS5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
c2V0dGluZ3MuY3BwIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2Zvcndh
cmRsaXN0LmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFt
ZS5jcHAgXAorCS4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAg
XAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAgXAogICAg
ICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgXAog
ICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50R3Rr
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkKaW5kZXggNGIyZWIyMS4uY2Q1Y2JlNiAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCisrKyBiL1dlYktpdC9ndGsvV2Vi
Vmlldy9oZWFkZXJzLnByaQpAQCAtMiw0ICsyLDYgQEAgV0VCS0lUX0FQSV9IRUFERVJTID0gJCRQ
V0Qvd2Via2l0LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0ZGVmaW5lcy5o
IFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAog
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2ViZnJhbWUuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJ2aWV3LmgKKyAgICAgICAgICAgICAgICAgICAgICQk
UFdEL3dlYmtpdHdlYnZpZXcuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3
ZWJoaXN0b3J5aXRlbS5oCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0Lmgg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgKaW5kZXggYjZhM2MwZS4uMzBhN2Q1YyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXQuaApAQCAtMjQsNSArMjQsNyBAQAogI2luY2x1ZGUgPHdlYmtpdG5ldHdvcmty
ZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXR3
ZWJ2aWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViYmFja2ZvcndhcmRsaXN0Lmg+CisjaW5jbHVk
ZSA8d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KIAogI2VuZGlmIC8qIF9fV0VCS0lUX0hfXyAqLwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwIGIvV2ViS2l0
L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmluZGV4IGM3NGRiYTUuLmNhZjJjYzYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmNwcAorKysgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKKwogdm9pZCBhcHBseShX
ZWJLaXRTZXR0aW5ncyosIFdlYkNvcmU6OlNldHRpbmdzKikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpAQCAtOTAsNyArOTEsNyBAQCBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSog
Y29yZVBhZ2UpCiAgICAgcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+d2ViVmlldygpIDogMDsKIH0K
IAotfQorfSAvKiogZW5kIG5hbWVzcGFjZSBXZWJDb3JlICovCiAKIHZvaWQgd2Via2l0X2luaXQo
KQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaCBiL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKaW5kZXggNjExYWUwOC4uZTk0NmFiMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZmh0
IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
MSwxMiArMzIsMTcgQEAKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVkZSAid2Vi
a2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIgorI2luY2x1
ZGUgIndlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIgogCisjaW5jbHVkZSAiQmFja0ZvcndhcmRM
aXN0LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyQ2xpZW50LmgiCiAKKyNpbmNsdWRlIDxnbGliLmg+CisKIG5hbWVzcGFjZSBXZWJLaXQgewog
ICAgIHZvaWQgYXBwbHkoV2ViS2l0U2V0dGluZ3MqLFdlYkNvcmU6OlNldHRpbmdzKik7CiAgICAg
V2ViS2l0U2V0dGluZ3MqIGNyZWF0ZShXZWJDb3JlOjpTZXR0aW5ncyopOwpAQCAtNDQsOCArNTAs
MTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZShXZWJL
aXRXZWJGcmFtZSopOwogICAgIFdlYktpdFdlYkZyYW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsK
KwogICAgIFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0V2ViVmlldyopOwogICAgIFdlYktpdFdl
YlZpZXcqIGtpdChXZWJDb3JlOjpQYWdlKik7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
Y29yZShXZWJLaXRXZWJIaXN0b3J5SXRlbSopOworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBr
aXQoV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dCogY29yZShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBA
IC02NCw2ICs3Niw4IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBw
bGljYXRpb25OYW1lRm9yVXNlckFnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJB
Z2VudDsKIAorICAgICAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dDsKKyAgICAgICAgCiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwogICAgICAgICBn
aW50IGxhc3RQb3B1cFlQb3NpdGlvbjsKIApAQCAtOTMsOCArMTA3LDEzIEBAIGV4dGVybiAiQyIg
ewogICAgICAgICBnY2hhciogdXJpOwogICAgIH07CiAKKyAgICAvKiBXZWJLaXRXZWJGcmFtZSBw
cml2YXRlIGZ1bmN0aW9uICovCiAgICAgV2ViS2l0V2ViRnJhbWUqIHdlYmtpdF93ZWJfZnJhbWVf
aW5pdF93aXRoX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25l
ckVsZW1lbnQqKTsKIAorICAgIC8qIFdlYktpdFdlYkhpc3RvcnlJdGVtIHByaXZhdGUgZnVuY3Rp
b24gKi8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
bmV3X3dpdGhfY29yZV9pdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CisgICAgCisKICAgICAv
LyBUT0RPOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVzZSBmdW5jdGlv
bnMgYXJlIGZ1bGx5CiAgICAgLy8gaW1wbGVtZW50ZWQgYW5kIHRoZWlyIEFQSSBoYXMgYmVlbiBk
aXNjdXNzZWQuCiAKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllYWMxOAotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuY3BwCkBAIC0wLDAgKzEsMzkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBN
aWNoYWVsIEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3
ZWJiYWNrZm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisjaW5jbHVk
ZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCisK
KyNpbmNsdWRlIDxnbGliLmg+CisKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKKyNpbmNs
dWRlICJIaXN0b3J5SXRlbS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitleHRlcm4g
IkMiIHsKKworc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlIHsKKyAgICBX
ZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdDsKK307CisKKyNkZWZpbmUg
V0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRf
TElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpCisKK0dfREVGSU5FX1RZUEUo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0LCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBH
X1RZUEVfT0JKRUNUKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QqIHdlYkJhY2tGb3J3YXJkTGlzdCA9IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Qob2Jq
ZWN0KTsKKworICAgIGRlbGV0ZSB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tGb3J3YXJk
TGlzdDsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jbGFz
c19pbml0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzKiBrbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBn
b2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9kaXNw
b3NlOworICAgIAorICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Vi
QmFja0ZvcndhcmRMaXN0KQoreworICAgIHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdiA9IFdFQktJ
VF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfR0VUX1BSSVZBVEUod2ViQmFja0ZvcndhcmRMaXN0KTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3dlYl92
aWV3OgorICogQHdlYlZpZXc6IHRoZSBiYWNrIGZvcndhcmQgbGlzdCdzICNXZWJLaXRXZWJWaWV3
CisgKiAKKyAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0IHdp
dGggYSBjb250cm9sbGluZyAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybiB2YWx1ZTogYSAj
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKi8KK1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9uZXdfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
VklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmll
d0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3Q7CisKKyAgICB3ZWJCYWNrRm9y
d2FyZExpc3QgPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIE5VTEwpKTsKKyAgICB3ZWJCYWNrRm9yd2Fy
ZExpc3QtPnByaXYtPmJhY2tGb3J3YXJkTGlzdCA9IHdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+YmFj
a0ZvcndhcmRMaXN0KCk7CisgICAgd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5iYWNrRm9yd2Fy
ZExpc3QtPnNldEVuYWJsZWQoVFJVRSk7CisKKyAgICByZXR1cm4gd2ViQmFja0ZvcndhcmRMaXN0
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fZm9yd2FyZDoK
KyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoK
KyAqIFN0ZXBzIGZvcndhcmQgaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19mb3J3YXJkIChXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBX
ZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0Zv
cndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAg
IGJhY2tGb3J3YXJkTGlzdC0+Z29Gb3J3YXJkKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nb19iYWNrOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogU3RlcHMgYmFja3dhcmQgaW4gdGhlIGJhY2sg
Zm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19i
YWNrIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAg
ICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFj
a0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3
YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0ZvcndhcmRM
aXN0LT5lbmFibGVkKCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29CYWNrKCk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtOgorICog
QHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAd2Vi
SGlzdG9yeUl0ZW06IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gdG8gY2hlY2sKKyAqCisgKiBD
aGVja3MgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICoK
KyAqIFJldHVybjogJVRSVUUgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndh
cmQgbGlzdCwgJUZBTFNFIGlmIGl0IGRvZXNuJ3QKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Qq
IHdlYkJhY2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVt
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJE
X0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKyAg
ICAKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBjb3JlKHdlYkhpc3Rv
cnlJdGVtKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGhpc3RvcnlJdGVtICE9IE5VTEws
IEZBTFNFKTsKKyAgICAKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJk
TGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKworICAgIHJldHVybiAoYmFja0Zvcndh
cmRMaXN0LT5lbmFibGVkKCkgPworICAgICAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5jb250YWlu
c0l0ZW0oaGlzdG9yeUl0ZW0pIDogRkFMU0UpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbToKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICogQHdlYkhpc3RvcnlJdGVtOiB0aGUgI1dlYktpdFdl
Ykhpc3RvcnlJdGVtIHRvIGdvIHRvCisgKgorICogR28gdG8gdGhlIHNwZWNpZmllZCBAd2ViSGlz
dG9yeUl0ZW0gaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
YkJhY2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJf
SElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRl
bSogaGlzdG9yeUl0ZW0gPSBjb3JlKHdlYkhpc3RvcnlJdGVtKTsKKyAgICBXZWJDb3JlOjpCYWNr
Rm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsK
KworICAgIGlmIChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSAmJiBoaXN0b3J5SXRlbSkKKyAg
ICAgICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShoaXN0b3J5SXRlbSk7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGlt
aXQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QK
KyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVy
bnMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgc3VjY2VlZCB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVk
IGJ5IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjR0xpc3Qgb2YgaXRlbXMgc3VjY2Vl
ZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICovCitHTGlzdCogd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGxpbWl0KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJ
U1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2Fy
ZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBp
ZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAg
ICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3IgaXRlbXMo
bGltaXQpOworICAgIEdMaXN0KiBmb3J3YXJkSXRlbXMgPSB7IDAgfTsKKyAgICAKKyAgICBiYWNr
Rm9yd2FyZExpc3QtPmZvcndhcmRMaXN0V2l0aExpbWl0KGxpbWl0LCBpdGVtcyk7CisgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKGl0ZW1zW2ldLmdldCgpKTsKKyAgICAgICAgZm9yd2Fy
ZEl0ZW1zID0gZ19saXN0X3ByZXBlbmQoZm9yd2FyZEl0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlz
dG9yeUl0ZW0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19saXN0X3JldmVyc2UoZm9yd2FyZEl0
ZW1zKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xpc3Rfd2l0aF9saW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZl
CisgKgorICogUmV0dXJucyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBwcmVjZWRlIHRoZSBjdXJyZW50
IGl0ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHTGlzdCBv
ZiBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbSwgbGltaXRlZCBieSBAbGltaXQKKyAq
LworR0xpc3QqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlzdF93aXRo
X2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2lu
dCBsaW1pdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6
QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlz
dCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVj
dG9yIGl0ZW1zKGxpbWl0KTsKKyAgICBHTGlzdCogYmFja0l0ZW1zID0geyAwIH07CisKKyAgICBi
YWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBpdGVtcyk7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1fbmV3X3dpdGhfY29yZV9pdGVtKGl0ZW1zW2ldLmdldCgpKTsKKyAgICAgICAgYmFja0l0ZW1z
ID0gZ19saXN0X3ByZXBlbmQoYmFja0l0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlzdG9yeUl0ZW0p
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19saXN0X3JldmVyc2UoYmFja0l0ZW1zKTsKK30KKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtOgorICogQHdl
YkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0
aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBSZXR1cm4gdmFs
dWU6IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0K
KyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
Z2V0X2JhY2tfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExp
c3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldB
UkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tG
b3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOwor
ICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhp
c3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOworCisgICAgcmV0dXJuICho
aXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAd2ViQmFja0Zv
cndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRo
ZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJucyBhIE5VTEwgdmFsdWUgaWYgdGhlIGJhY2sg
Zm9yd2FyZCBsaXN0IGlzIGVtcHR5CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJI
aXN0b3J5SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
YkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAg
V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tG
b3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlz
dC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBoaXN0b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+Y3VycmVudEl0ZW0oKTsKKwor
ICAgIHJldHVybiAoaGlzdG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisK
Ky8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtOgor
ICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgor
ICogUmV0dXJucyB0aGUgaXRlbSB0aGF0IHN1Y2NlZWRzIHRoZSBjdXJyZW50IGl0ZW0uCisgKgor
ICogUmV0dXJucyBhIE5VTEwgdmFsdWUgaWYgdGhlcmUgbm90aGluZyB0aGF0IHN1Y2NlZWRzIHRo
ZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI1dlYktpdFdlYkhpc3RvcnlJ
dGVtCisgKi8gICAgCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJh
Y2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VC
X0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2Vi
Q29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3
YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+
ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKiBoaXN0b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKTsKKworICAg
IHJldHVybiAoaGlzdG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW06CisgKiBAd2Vi
QmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBpbmRleDog
dGhlIGluZGV4IG9mIHRoZSBpdGVtCisgKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBhIGdpdmVu
IGluZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIGxvY2F0ZWQgYXQgdGhlIHNwZWNpZmllZCBpbmRl
eCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVt
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSAoV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgaW5kZXgpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNr
Rm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0Zv
cndhcmRMaXN0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKiBoaXN0b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+aXRlbUF0SW5kZXgoaW5kZXgpOwor
CisgICAgcmV0dXJuIChoaXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aDoK
KyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoK
KyAqIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHByZWNlZCB0aGUgY3VycmVudCBp
dGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2ludCBjb3JyZXNwb25kaW5nIHRvIHRoZSBu
dW1iZXIgb2YgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworZ2ludCB3ZWJr
aXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aCAoV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBO
VUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0g
Y29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFi
YWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1
cm4gYmFja0ZvcndhcmRMaXN0LT5iYWNrTGlzdENvdW50KCk7Cit9CisgICAgCisvKioKKyAqIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoOgorICogQHdlYkJh
Y2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgc3VjY2VlZCB0aGUgY3VycmVudCBpdGVtLgorICoK
KyAqIFJldHVybiB2YWx1ZTogYSAjZ2ludCBjb3JyZXNwb25kaW5nIHRvIHRoZSBudWJlciBvZiBp
dGVtcyBzdWNjZWVkaW5nIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworZ2ludCB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCAoV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsK
KworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3
ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9y
d2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJu
IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2NhcGFjaXR5OgorICogQHdlYkJhY2tGb3J3YXJk
TGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUgbWF4
aW11bSBsaW1pdCBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QuCisgKgorICogUmV0dXJuIHZhbHVl
OiBhICNnaW50IGluZGljYXRpbmcgdGhlIG51bWJlciBvZiAjV2ViSGlzdG9yeUl0ZW0gdGhlIGJh
Y2sgZm9yd2FyZCBsaXN0IGNhbiBob2xkCisgKi8KK2dpbnQgd2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zvcndh
cmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19G
T1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpC
YWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0
KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVk
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tGb3J3YXJkTGlzdC0+Y2Fw
YWNpdHkoKTsKK30KKyAgICAKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9z
ZXRfbGltaXQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QKKyAqIEBsaW1pdDogdGhlIGxpbWl0IHRvIHNldCB0aGUgYmFjayBmb3J3YXJkIGxpc3Qg
dG8KKyAqCisgKiBTZXRzIHRoZSBtYXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlz
dC4gSWYgdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKiBleGNlZWRzIGl0cyBjYXBhY2l0eSwgaXRl
bXMgd2lsbCBiZSByZW1vdmVkIGV2ZXJ5dGltZSBhIG5ldyBpdGVtIGhhcyBiZWVuCisgKiBhZGRl
ZC4KKyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9saW1pdCAoV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgbGltaXQpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdl
YkJhY2tGb3J3YXJkTGlzdCkpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNr
Rm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGJhY2tGb3J3
YXJkTGlzdCkKKyAgICAgICAgYmFja0ZvcndhcmRMaXN0LT5zZXRDYXBhY2l0eShsaW1pdCk7Cit9
CisgICAgCit9IC8qIGVuZCBleHRlcm4gIkMiICovCisKK1dlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dCogV2ViS2l0Ojpjb3JlKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRM
aXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JX
QVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICByZXR1cm4gd2ViQmFj
a0ZvcndhcmRMaXN0LT5wcml2ID8gd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5iYWNrRm9yd2Fy
ZExpc3QgOiAwOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZmU5Y2YKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0
LmgKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hh
ZWwgQy4gQWxvbnpvIDxqbWFsb256b0B1bnBsdWdnYWJsZS5jb20+CisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV0VCS0lUX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVF9ICisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJ
U1RfSAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKKyNp
bmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0u
aCIKKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldB
UkRfTElTVCAgICAgICAgICAgICh3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF90eXBl
KCkpCisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Qob2JqKSAgICAgICAgICAg
IChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNULCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNT
X0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
IFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5lIFdFQktJVF9JU19X
RUJfQkFDS19GT1JXQVJEX0xJU1RfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNkZWZpbmUg
V0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1Qs
IFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKworCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCBXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3Q7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0
Q2xhc3MgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3M7CisKKworc3RydWN0IF9XZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QgeworICAgIEdPYmplY3QgcGFyZW50OworCisgICAgLyo8IHByaXZh
dGUgPiovCisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSAqcHJpdjsKK307CisK
K3N0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0Q2xhc3MgeworICAgIEdPYmplY3RDbGFz
cyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3dlYl92aWV3IChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nb19mb3J3YXJkIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdl
Yl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9nb19iYWNrIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNr
X2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfY29udGFpbnNfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJf
YmFja19mb3J3YXJkX2xpc3QsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOwor
CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fdG9faXRl
bSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIEdMaXN0Kgord2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQgKFdl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGxpbWl0
KTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2JhY2tfbGlzdF93aXRoX2xpbWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNr
X2ZvcndhcmRfbGlzdCwgZ2ludCBsaW1pdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2l0ZW0gKFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQ
SSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2N1cnJlbnRfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJk
X2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbSAoV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgaW5kZXgpOwor
CitXRUJLSVRfQVBJIGdpbnQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tf
bGVuZ3RoIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7
CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9y
d2FyZF9sZW5ndGggKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9s
aXN0KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9saW1pdCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3Qp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xp
bWl0IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2lu
dCBsaW1pdCk7CisKK0dfRU5EX0RFQ0xTCisKKworI2VuZGlmIC8qIFdFQktJVF9XRUJfQkFDS19G
T1JXQVJEX0xJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
Ymhpc3RvcnlpdGVtLmNwcCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkzNzc5MQotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAK
QEAgLTAsMCArMSwzMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwg
Qy4gQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0d2ViaGlz
dG9yeWl0ZW0uaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbGli
Lmg+CisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitl
eHRlcm4gIkMiIHsKKworc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUgeworICAg
IFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbTsKKyAgICAKKyAgICBnY2hhciogdGl0
bGU7CisgICAgZ2NoYXIqIGFsdGVybmF0ZVRpdGxlOworICAgIGdjaGFyKiB1cmk7CisgICAgZ2No
YXIqIG9yaWdpbmFsVXJpOworfTsKKworI2RlZmluZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9H
RVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdF
QktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSkp
CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0sIHdlYmtpdF93ZWJfaGlzdG9y
eV9pdGVtLCBHX1RZUEVfT0JKRUNUKTsKKworCitzdGF0aWMgR0hhc2hUYWJsZSogd2Via2l0X2hp
c3RvcnlfaXRlbXMoKQoreworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBoaXN0b3J5SXRlbXMgPSBn
X2hhc2hfdGFibGVfbmV3KGdfZGlyZWN0X2hhc2gsIGdfZGlyZWN0X2VxdWFsKTsgICAKKyAgICBy
ZXR1cm4gaGlzdG9yeUl0ZW1zOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaGlzdG9yeV9pdGVt
X2FkZChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0sIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBoaXN0b3J5SXRlbSkgCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNf
V0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworICAgIAorICAgIEdIYXNoVGFibGUq
IHRhYmxlID0gd2Via2l0X2hpc3RvcnlfaXRlbXMoKTsKKworICAgIGhpc3RvcnlJdGVtLT5yZWYo
KTsKKyAgICBnX2hhc2hfdGFibGVfaW5zZXJ0KHRhYmxlLCBoaXN0b3J5SXRlbSwgZ19vYmplY3Rf
cmVmKHdlYkhpc3RvcnlJdGVtKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXN0b3J5X2l0
ZW1fcmVtb3ZlKFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBHSGFz
aFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5X2l0ZW1zKCk7CisgICAgV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gKFdlYktpdFdlYkhpc3RvcnlJdGVtKikgZ19oYXNo
X3RhYmxlX2xvb2t1cCh0YWJsZSwgaGlzdG9yeUl0ZW0pOworCisgICAgZ19yZXR1cm5faWZfZmFp
bCh3ZWJIaXN0b3J5SXRlbSAhPSBOVUxMKTsKKyAgICAKKyAgICBnX2hhc2hfdGFibGVfcmVtb3Zl
KHRhYmxlLCBoaXN0b3J5SXRlbSk7CisgICAgaGlzdG9yeUl0ZW0tPmRlcmVmKCk7CisgICAgZ19v
YmplY3RfdW5yZWYod2ViSGlzdG9yeUl0ZW0pOworfQorICAgIAorc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIGl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmplY3QpOwor
CisgICAgd2Via2l0X2hpc3RvcnlfaXRlbV9yZW1vdmUoaXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0p
OworICAgIAorICAgIGRlbGV0ZSBpdGVtLT5wcml2LT5oaXN0b3J5SXRlbTsKKworICAgIC8qIGRl
c3Ryb3kgdGFibGUgaWYgZW1wdHkgKi8KKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9o
aXN0b3J5X2l0ZW1zKCk7CisgICAgaWYgKCFnX2hhc2hfdGFibGVfc2l6ZSh0YWJsZSkpCisgICAg
ICAgIGdfaGFzaF90YWJsZV9kZXN0cm95KHRhYmxlKTsKKyAgICAKKyAgICBHX09CSkVDVF9DTEFT
Uyh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7
Cit9CisgICAgCisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeUl0
ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmplY3QpOworCisgICAgZ19mcmVlKGhpc3Rv
cnlJdGVtLT5wcml2LT50aXRsZSk7CisgICAgZ19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT5hbHRl
cm5hdGVUaXRsZSk7CisgICAgZ19mcmVlKGhpc3RvcnlJdGVtLT5wcml2LT51cmkpOworICAgIGdf
ZnJlZShoaXN0b3J5SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmkpOworCisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fY2xhc3NfaW5pdChX
ZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdv
YmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnb2JqZWN0X2NsYXNz
LT5kaXNwb3NlID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZGlzcG9zZTsKKyAgICBnb2JqZWN0
X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplOworCisg
ICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGdvYmplY3RfY2xhc3MsIHNpemVvZihXZWJLaXRX
ZWJIaXN0b3J5SXRlbVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0
b3J5X2l0ZW1faW5pdChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7Cisg
ICAgd2ViSGlzdG9yeUl0ZW0tPnByaXYgPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9HRVRfUFJJ
VkFURSh3ZWJIaXN0b3J5SXRlbSk7Cit9CisKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUg
YSBuZXcgV2ViSGlzdG9yeUl0ZW0gaW5zdGFuY2Ugd2hlbiBuZWVkZWQgKi8KK1dlYktpdFdlYkhp
c3RvcnlJdGVtKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0oV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
Ykhpc3RvcnlJdGVtID0ga2l0KGl0ZW0pOworCisgICAgaWYgKCF3ZWJIaXN0b3J5SXRlbSkgewor
ICAgICAgICB3ZWJIaXN0b3J5SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBOVUxMKSk7CisgICAgICAgIHdlYkhp
c3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5SXRlbSA9IGl0ZW07CisgICAgICAgIHdlYmtpdF9oaXN0
b3J5X2l0ZW1fYWRkKHdlYkhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9y
eUl0ZW0pOworICAgIH0KKworICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKK30KKworCisvKioK
KyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3ICNX
ZWJLaXRXZWJIaXN0b3J5SXRlbSBpbnN0YW5jZQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5l
dyAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX25ldyh2b2lkKQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVt
KiB3ZWJIaXN0b3J5SXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBOVUxMKSk7CisKKyAgICB3ZWJIaXN0b3J5SXRl
bS0+cHJpdi0+aGlzdG9yeUl0ZW0gPSBuZXcgV2ViQ29yZTo6SGlzdG9yeUl0ZW0oKTsKKworICAg
IHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRkKHdlYkhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+
cHJpdi0+aGlzdG9yeUl0ZW0pOworCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtOworfQorCisK
Ky8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YToKKyAqIEB1cmk6
IHRoZSB1cmkgb2YgdGhlIHBhZ2UKKyAqIEB0aXRsZTogdGhlIHRpdGxlIG9mIHRoZSBwYWdlCisg
KgorICogQ3JlYXRlcyBhIG5ldyAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gd2l0aCB0aGUgZ2l2ZW4g
VVJJIGFuZCB0aXRsZQorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG5ldyAjV2ViS2l0V2ViSGlz
dG9yeUl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX25ld193aXRoX2RhdGEoY29uc3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKQor
eworICAgIFdlYkNvcmU6OktVUkwgaGlzdG9yeVVyaSh1cmkpOworICAgIFdlYkNvcmU6OlN0cmlu
ZyBoaXN0b3J5VGl0bGUodGl0bGUpOworCisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhp
c3RvcnlJdGVtID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KCk7CisKKyAgICB3ZWJIaXN0
b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0gPSBuZXcgV2ViQ29yZTo6SGlzdG9yeUl0ZW0oaGlz
dG9yeVVyaSwgaGlzdG9yeVRpdGxlKTsKKworICAgIHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRkKHdl
Ykhpc3RvcnlJdGVtLCB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0pOworICAgICAg
ICAKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X3RpdGxlOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJI
aXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIHBhZ2UgdGl0bGUgb2YgQHdlYkhpc3RvcnlJ
dGVtCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdGl0bGUo
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVM
TCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9I
SVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGlmICghaXRlbSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdGl0bGUgPSBpdGVtLT50aXRsZSgp
OworCisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSk7CisKKyAgICB3ZWJI
aXN0b3J5SXRlbS0+cHJpdi0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dGl0bGU7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZToKKyAqIEB3
ZWJIaXN0b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRo
ZSBhbHRlcm5hdGUgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgYWx0ZXJuYXRlIHRpdGxlIG9mIEB3ZWJIaXN0b3J5SXRlbQorICovCitjb25zdCBnY2hh
ciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAg
ICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lU
RU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0g
TlVMTCwgTlVMTCk7CisgICAgCisgICAgV2ViQ29yZTo6U3RyaW5nIGFsdGVybmF0ZVRpdGxlID0g
aXRlbS0+YWx0ZXJuYXRlVGl0bGUoKTsKKworICAgIGdfZnJlZSh3ZWJIaXN0b3J5SXRlbS0+cHJp
di0+YWx0ZXJuYXRlVGl0bGUpOworCisgICAgd2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0
ZVRpdGxlID0gZ19zdHJkdXAoYWx0ZXJuYXRlVGl0bGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBy
ZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGU6CisgKiBAd2ViSGlz
dG9yeUl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKiBAdGl0bGU6IHRoZSBhbHRlcm5h
dGUgdGl0bGUgZm9yIEB0aGlzIGhpc3RvcnkgaXRlbQorICoKKyAqIFNldHMgYW4gYWx0ZXJuYXRl
IHRpdGxlIGZvciBAd2ViSGlzdG9yeUl0ZW0KKyAqLwordm9pZCB3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9y
eUl0ZW0sIGNvbnN0IGdjaGFyKiB0aXRsZSkgCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3Rv
cnlJdGVtKSk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcgYWx0ZXJuYXRlVGl0bGUgPSB0
aXRsZTsKKyAgICBpdGVtLT5zZXRBbHRlcm5hdGVUaXRsZShhbHRlcm5hdGVUaXRsZSk7Cit9Cisg
ICAgCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmk6CisgKiBAd2ViSGlz
dG9yeUl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgVVJJ
IG9mIEB0aGlzCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgVVJJIG9mIEB3ZWJIaXN0b3J5SXRl
bQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2Vi
S2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7
CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNU
T1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0
ZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJpID0gaXRlbS0+dXJs
U3RyaW5nKCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisKKyAg
ICB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dXJpID0gZ19zdHJkdXAodXJpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT51cmk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEB3ZWJIaXN0b3J5
SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBvcmlnaW5h
bCBVUkkgb2YgQHdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgb3JpZ2lu
YWwgVVJJIG9mIEB3ZWJIaXN0b3J5SVRlbQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhp
c3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElT
VE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5
SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0p
KTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAg
ICBXZWJDb3JlOjpTdHJpbmcgb3JpZ2luYWxVcmkgPSBpdGVtLT5vcmlnaW5hbFVSTFN0cmluZygp
OworCisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSk7CisKKyAg
ICB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmkgPSBnX3N0cmR1cChvcmlnaW5hbFVy
aS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYt
Pm9yaWdpbmFsVXJpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9s
YXN0X3Zpc2lzdGVkX3RpbWUgOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0
b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIHRpbWUgQHdlYkhpc3RvcnlJdGVtIHdhcyBsYXN0
IHZpc2l0ZWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB0
aGlzIEB3ZWJIaXN0b3J5SXRlbSB3YXMgbGFzdCB2aXNpdGVkCisgKi8KK2dkb3VibGUgd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lIChXZWJLaXRXZWJIaXN0b3J5
SXRlbSogd2ViSGlzdG9yeUl0ZW0pIAoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJD
b3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2Vi
SGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwg
MCk7CisKKyAgICByZXR1cm4gaXRlbS0+bGFzdFZpc2l0ZWRUaW1lKCk7Cit9CisKK30gLyogZW5k
IGV4dGVybiAiQyIgKi8KKworV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFdlYktpdDo6Y29yZShXZWJL
aXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsK
KworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IHdlYkhpc3RvcnlJdGVt
LT5wcml2LT5oaXN0b3J5SXRlbTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbSA/IGhpc3RvcnlJ
dGVtIDogMDsKK30KKworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIFdlYktpdDo6a2l0KFdlYkNvcmU6
Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCho
aXN0b3J5SXRlbSAhPSBOVUxMLCBOVUxMKTsKKyAgICAKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogd2ViSGlzdG9yeUl0ZW07CisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfaGlzdG9y
eV9pdGVtcygpOworCisgICAgd2ViSGlzdG9yeUl0ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
KSBnX2hhc2hfdGFibGVfbG9va3VwKHRhYmxlLCBoaXN0b3J5SXRlbSk7CisgICAgcmV0dXJuIHdl
Ykhpc3RvcnlJdGVtOworfQorCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
d2ViaGlzdG9yeWl0ZW0uaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTAyNGUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaApAQCAt
MCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFs
b256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
LworCisjaWZuZGVmIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0gKKyNkZWZpbmUgV0VCS0lUX1dF
Ql9ISVNUT1JZX0lURU1fSAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisjaW5jbHVkZSA8Z2RrL2dkay5oPgorCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5o
IgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRF
TSAgICAgICAgICAgICh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSkpCisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0NMQVNTKGts
YXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dF
Ql9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MpKQorI2RlZmluZSBXRUJL
SVRfSVNfV0VCX0hJU1RPUllfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSkpCisjZGVmaW5lIFdF
QktJVF9XRUJfSElTVE9SWV9JVEVNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhp
c3RvcnlJdGVtQ2xhc3MpKQorCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRl
bVByaXZhdGUgV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYkhpc3RvcnlJdGVtIFdlYktpdFdlYkhpc3RvcnlJdGVtOwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MgV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzczsKKyAK
Kworc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisK
KyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUqIHBy
aXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MgeworICAgIEdPYmpl
Y3RDbGFzcyBwYXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbV9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcgKHZvaWQpOworCitXRUJLSVRfQVBJIFdl
YktpdFdlYkhpc3RvcnlJdGVtKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0
YSAoY29uc3QgZ2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKworV0VCS0lUX0FQSSBj
b25zdCBnY2hhcioKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
Kgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUgKFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiB3ZWJfaGlzdG9yeV9pdGVtLCBjb25zdCBnY2hhciogdGl0bGUpOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
Kgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZSAoV2ViS2l0V2ViSGlzdG9y
eUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VC
S0lUX1dFQl9ISVNUT1JZX0lURU1fSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3Bw
CmluZGV4IDAyY2MyMmIuLmJmMjFmNzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5j
cHAKQEAgLTMsNiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdh
biA8Y2hyaXN0aWFuQHR3b3RvYXN0cy5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExv
cGV6IDx4YW5AZ25vbWUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFs
cEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOCBKYW4gQWxvbnpvIDxqbWFsb256
b0B1bnBsdWdnYWJsZS5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNCw4ICsyNSwxMSBA
QAogI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXQtbWFyc2hhbC5o
IgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9y
d2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogCiAjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNs
dWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAi
Q29udGV4dE1lbnUuaCIKQEAgLTM3LDYgKzQxLDcgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnRH
dGsuaCIKICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJl
cXVlc3QuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCkBAIC01NzQsMTMgKzU3OSwxNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogICAgIHdlYmtpdF93ZWJfdmlld19zdG9wX2xv
YWRpbmcoV0VCS0lUX1dFQl9WSUVXKG9iamVjdCkpOwogCiAgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKFdFQktJVF9XRUJf
VklFVyhvYmplY3QpKTsKKwogICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2U7CiAgICAg
ZGVsZXRlIHdlYlZpZXdEYXRhLT5zZXR0aW5nczsKKyAgICBkZWxldGUgd2ViVmlld0RhdGEtPnVz
ZXJBZ2VudDsKKworICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXdEYXRhLT5iYWNrRm9yd2FyZExp
c3QpOwogICAgIGdfb2JqZWN0X3VucmVmKHdlYlZpZXdEYXRhLT5tYWluRnJhbWUpOwogICAgIGdf
b2JqZWN0X3VucmVmKHdlYlZpZXdEYXRhLT5pbUNvbnRleHQpOworCiAgICAgZ3RrX3RhcmdldF9s
aXN0X3VucmVmKHdlYlZpZXdEYXRhLT5jb3B5X3RhcmdldF9saXN0KTsKICAgICBndGtfdGFyZ2V0
X2xpc3RfdW5yZWYod2ViVmlld0RhdGEtPnBhc3RlX3RhcmdldF9saXN0KTsKLSAgICBkZWxldGUg
d2ViVmlld0RhdGEtPnVzZXJBZ2VudDsKIAogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJf
dmlld19wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQpAQCAtMTA0MCw2ICsxMDQ5
LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKICAgICB3ZWJWaWV3RGF0YS0+bGFzdFBvcHVwWFBvc2l0aW9uID0gd2ViVmlld0RhdGEt
Pmxhc3RQb3B1cFlQb3NpdGlvbiA9IC0xOwogICAgIHdlYlZpZXdEYXRhLT5lZGl0YWJsZSA9IGZh
bHNlOwogCisgICAgLyogSW5pdGlhbGl6ZSB0aGUgdmlldydzIGJhY2svZm9yd2FyZCBsaXN0ICov
CisgICAgd2ViVmlld0RhdGEtPmJhY2tGb3J3YXJkTGlzdCA9IHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfbmV3X3dpdGhfd2ViX3ZpZXcod2ViVmlldyk7CisKICNpZiBHVEtfQ0hFQ0tfVkVS
U0lPTigyLDEwLDApCiAgICAgR2RrQXRvbSB0ZXh0SHRtbCA9IGdka19hdG9tX2ludGVybl9zdGF0
aWNfc3RyaW5nKCJ0ZXh0L2h0bWwiKTsKICNlbHNlCkBAIC0xMDgwLDYgKzEwOTIsNjUgQEAgV2Vi
S2l0U2V0dGluZ3MqIHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3MoV2ViS2l0V2ViVmlldyog
d2ViVmlldykKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdf
c2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdDoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRX
ZWJWaWV3CisgKiBAZmxhZzogdG8gdGVsbCB0aGUgdmlldyB0byBtYWludGFpbiBhIGJhY2sgb3Ig
Zm9yd2FyZCBsaXN0CisgKgorICogU2V0IHRoZSB2aWV3IHRvIG1haW50YWluIGEgYmFjayBvciBm
b3J3YXJkIGxpc3Qgb2YgaGlzdG9yeSBpdGVtcy4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdf
c2V0X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBn
Ym9vbGVhbiBmbGFnKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpKTsKKworICAgIGNvcmUod2ViVmlldyktPmJhY2tGb3J3YXJkTGlzdCgpLT5zZXRF
bmFibGVkKGZsYWcpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3
YXJkX2xpc3Q6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybnMg
YSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiAKKyAqIFJldHVybiB2YWx1ZTogdGhlICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdF
QktJVF9XRUJfVklFV19HRVRfUFJJVkFURShXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworCisg
ICAgaWYgKCF3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UgfHwgIXdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmVuYWJsZWQoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICB9CisKKyAgICByZXR1cm4gd2ViVmlld0RhdGEtPmJhY2tGb3J3YXJkTGlzdDsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW06CisgKiBAd2ViVmll
dzogYSAjV2ViS2l0V2ViVmlldworICogQGl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtKgor
ICoKKyAqIEdvIHRvIHRoZSBzcGVjaWZpZWQgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICog
UmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBsb2FkaW5nIG9mIGl0ZW0gaXMgc3VjY2Vzc2Z1bCwgJUZB
TFNFIGlmIG5vdAorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3
YXJkX2l0ZW0oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0
ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZp
ZXcpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNU
T1JZX0lURU0oaXRlbSksIEZBTFNFKTsKKworICAgIGNvcmUod2ViVmlldyktPmdvVG9JdGVtKGNv
cmUoaXRlbSksIEZyYW1lTG9hZFR5cGVJbmRleGVkQmFja0ZvcndhcmQpOworICAgIHJldHVybiBU
UlVFOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZDoKKyAqIEB3ZWJW
aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBHbyB0byB0aGUgcHJldmlvdXMgcGFnZSwg
aWYgdGhlcmUncyBhbnkuCisgKi8KIHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ193YXJuaW5nKCJ3ZWJraXRfd2ViX3ZpZXdf
Z29fYmFja3dhcmQoKSBpcyBvYnNvbGV0ZTsgdXNlIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKCki
KTsKQEAgLTEwOTYsOCArMTE2Nyw3IEBAIHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2JhY2soV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19X
RUJfVklFVyh3ZWJWaWV3KSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5nb0Jh
Y2tPckZvcndhcmQoLTEpOworICAgIGNvcmUod2ViVmlldyktPmdvQmFjaygpOwogfQogCiAvKioK
QEAgLTExMjcsMTAgKzExOTcsMTcgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICBmcmFtZS0+bG9hZGVyKCktPmdv
QmFja09yRm9yd2FyZCgxKTsKKyAgICBjb3JlKHdlYlZpZXcpLT5nb0ZvcndhcmQoKTsKIH0KIAor
LyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkOgorICogQHdlYlZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldworICoKKyAqIENoZWNrcyB3aGV0aGVyIHRoZSB2aWV3IGNhbiBnbyBi
YWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiB0
aGUgcGFnZSBjYW4gZ28gYmFjaywgb3RoZXJ3aXNlIHJldHVybnMgJUZBTFNFCisgKi8KIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKIHsKICAgICBnX3dhcm5pbmcoIndlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQoKSBp
cyBvYnNvbGV0ZTsgdXNlIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjaygpIik7CkBAIC0xMTQ5
LDggKzEyMjYsMTIgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgcmV0dXJuIGZyYW1l
LT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKTsKKyAgICBQYWdlKiBwYWdlID0gY29y
ZSh3ZWJWaWV3KTsKKworICAgIGlmICghcGFnZSB8fCAhcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmJhY2tJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVFOwog
fQogCiAvKioKQEAgLTExODQsOCArMTI2NSwxNSBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdf
Y2FuX2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIEZBTFNFKTsKIAotICAgIEZy
YW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcp
KTsKLSAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5jYW5Hb0JhY2tPckZvcndhcmQoMSk7Cisg
ICAgUGFnZSogcGFnZSA9IGNvcmUod2ViVmlldyk7CisKKyAgICBpZiAoIXBhZ2UpCisgICAgICAg
IHJldHVybiBGQUxTRTsKKworICAgIGlmICghcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmZvcndh
cmRJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVybiBUUlVFOwogfQog
CiB2b2lkIHdlYmtpdF93ZWJfdmlld19vcGVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0
IGdjaGFyKiB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmll
dy5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAppbmRleCA3YzRhYWY3Li5h
NzAxMTZiIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCisr
KyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgKQEAgLTI0LDYgKzI0LDggQEAK
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2UuaD4KIAogI2luY2x1ZGUgIndlYmtpdGRl
ZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRl
ICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTkwLDggKzky
LDE0IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAodm9pZCk7CiBXRUJLSVRfQVBJIEd0a1dp
ZGdldCoKIHdlYmtpdF93ZWJfdmlld19uZXcgKHZvaWQpOwogCi1XRUJLSVRfT0JTT0xFVEVfQVBJ
IGdib29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldyk7CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRh
aW5zX2JhY2tfZm9yd2FyZF9saXN0IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgZ2Jvb2xlYW4g
ZmxhZyk7IAorCitXRUJLSVRfQVBJIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCoKK3dlYmtpdF93
ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsK
KworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2Fy
ZF9pdGVtIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0
ZW0pOwogCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sg
KFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKQEAgLTEwMiw5ICsxMTAsNiBAQCB3ZWJraXRfd2Vi
X3ZpZXdfY2FuX2dvX2JhY2tfb3JfZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdp
bnQgc3RlcHMpOwogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92aWV3X2Nhbl9nb19m
b3J3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKLVdFQktJVF9PQlNPTEVURV9BUEkg
dm9pZAotd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dyk7Ci0KIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYl92aWV3X2dvX2JhY2sgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3KTsKIApAQCAtMTg2LDYgKzE5MSwxMiBAQCB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X2NvcHlfdGFyZ2V0X2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOwogV0VCS0lUX0FQ
SSBHdGtUYXJnZXRMaXN0Kgogd2Via2l0X3dlYl92aWV3X2dldF9wYXN0ZV90YXJnZXRfbGlzdCAo
V2ViS2l0V2ViVmlldyogd2ViVmlldyk7CiAKK1dFQktJVF9PQlNPTEVURV9BUEkgZ2Jvb2xlYW4K
K3dlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
KTsKKworV0VCS0lUX09CU09MRVRFX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dh
cmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18693</attachid>
            <date>2008-01-25 22:00:01 -0800</date>
            <delta_ts>2008-01-26 00:16:45 -0800</delta_ts>
            <desc>cleanup coding style and doc</desc>
            <filename>webkitgtk-backforwardlist.patch</filename>
            <type>text/plain</type>
            <size>51138</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MjdiN2I3Li5hNTdkNTI3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMDgtMDEtMjUgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlv
bgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdCBhbmQgd2Via2l0d2ViaGlzdG9yeWl0ZW0KKwogMjAwOC0wMS0yMyAgQWxwIFRva2VyICA8
YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgTWFyayBSb3dlLgpk
aWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA4MGJkNzc4
Li5jMmE0ZDNhIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5h
bQpAQCAtMjM3LDcgKzIzNyw5IEBAIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0ZGVmaW5lcy5oIFwK
IAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCisJV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2ViZnJhbWUuaCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rv
cnlpdGVtLmggXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJzZXR0aW5ncy5oIFwKIAlX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIAogCkBAIC0yNTgsNyArMjYwLDkgQEAg
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXRwcml2YXRlLmNwcCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5jcHAg
XAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAogCVdlYktp
dC9ndGsvV2ViVmlldy93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZWM3MGJkMy4uMjQ3MWYzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOC0wMS0y
NSAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRF
U1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODExCisgICAgICAgIFtndGtdIFtyZXF1ZXN0XSBhZGQgYSB3
ZWJraXRfZ3RrX3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtIGZ1bmN0aW9uCisKKyAgICAgICAgQWRk
ZWQgd2Via2l0L2d0ayB3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QgYW5kIHdlYmtpdHdlYmhpc3Rv
cnlpdGVtCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAwOC0wMS0yNSAgU3RlcGhhbmll
IExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0uCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCAyZDYxNWU5Li5hZDlkZDU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk4OSw3ICs5ODksOSBAQCBndGstcG9ydCB7CiAgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggXAogICAgICAgICAuLi9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAgICAgICAgIC4uL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmggXAorCS4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJmcmFtZS5oIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
aGlzdG9yeWl0ZW0uaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJz
ZXR0aW5ncy5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
aCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmggXApAQCAtMTA2Niw3ICsxMDY4LDkgQEAgZ3RrLXBvcnQgewogICAgICAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcCBcCiAgICAgICAgIC4uL1dlYktp
dC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogICAgICAgICAuLi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAgXAorCS4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCisJLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHdlYmhpc3RvcnlpdGVtLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXR3ZWJzZXR0aW5ncy5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
d2Vidmlldy5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCBmMjNjZDRlLi5kMWM4NzQ2IDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5
IEBACisyMDA4LTAxLTI1ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B1bnBsdWdnYWJs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTEKKyAgICAgICAgW2d0
a10gW3JlcXVlc3RdIGFkZCBhIHdlYmtpdF9ndGtfcGFnZV9nb190b19oaXN0b3J5X2l0ZW0gZnVu
Y3Rpb24KKworICAgICAgICBpbXBsZW1lbnQgYmFjay9mb3J3YXJkIGxpc3QgYW5kIGhpc3Rvcnkg
aXRlbQorCisgICAgICAgICogV2ViVmlldy9oZWFkZXJzLnByaToKKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdC5oOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHA6CisgICAgICAg
ICogV2ViVmlldy93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJi
YWNrZm9yd2FyZGxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Rpc3Bvc2UpOgorICAg
ICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfY2xhc3NfaW5pdCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAg
KF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X25ld193aXRoX3dlYl92aWV3KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQpOgor
ICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fYmFjayk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKToK
KyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
bGlzdF93aXRoX2xpbWl0KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKF9XZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6
OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAg
IChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbnRoX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKToK
KyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCk6CisgICAgICAgIChfV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
bGltaXQpOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0KToKKyAgICAgICAgKiBXZWJWaWV3L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtp
dHdlYmhpc3RvcnlpdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0
ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtcyk6CisgICAgICAgIChfV2ViS2l0V2ViSGlz
dG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZCk6CisgICAgICAgIChfV2Vi
S2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX3JlbW92ZSk6Cisg
ICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9kaXNwb3NlKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6Ondl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0
b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQpOgorICAg
ICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1faW5pdCk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdl
Ykhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KToKKyAgICAg
ICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X25ld193aXRoX2RhdGEpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKToKKyAgICAgICAgKF9XZWJLaXRXZWJI
aXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVf
dGl0bGUpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZSk6CisgICAgICAgIChfV2ViS2l0V2Vi
SGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKToKKyAg
ICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX2dldF9vcmlnaW5hbF91cmkpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJp
dmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lKToKKyAg
ICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgICog
V2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2Vidmlldy5oOgor
CiAyMDA4LTAxLTI1ICBPcmkgQmVybnN0ZWluICA8b3JpQGVpZ2Vuc3RhdGUub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFscCBUb2tlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmll
dy9oZWFkZXJzLnByaSBiL1dlYktpdC9ndGsvV2ViVmlldy9oZWFkZXJzLnByaQppbmRleCBlOTk3
NjVhLi5kNTNkODI1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkK
KysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCkBAIC0xLDYgKzEsOCBAQAogV0VC
S0lUX0FQSV9IRUFERVJTID0gJCRQV0Qvd2Via2l0LmggXAogICAgICAgICAgICAgICAgICAgICAg
JCRQV0Qvd2Via2l0ZGVmaW5lcy5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtp
dG5ldHdvcmtyZXF1ZXN0LmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vi
ZnJhbWUuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYnNldHRpbmdzLmggXAog
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vidmlldy5oCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgK
aW5kZXggMmU3Y2Q5ZC4uNDQxMmNmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdC5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQuaApAQCAtMjUsNSArMjUsNyBA
QAogI2luY2x1ZGUgPHdlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0d2Vic2V0dGlu
Z3MuaD4KICNpbmNsdWRlIDx3ZWJraXR3ZWJ2aWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViYmFj
a2ZvcndhcmRsaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KIAogI2Vu
ZGlmIC8qIF9fV0VCS0lUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHByaXZhdGUuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmlu
ZGV4IGRjMmI2ZjcuLjNkZGNjNDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRwcml2YXRlLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAK
QEAgLTgwLDcgKzgwLDcgQEAgV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqIGNvcmVQ
YWdlKQogICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYlZpZXcoKSA6IDA7CiB9CiAKLX0K
K30gLyoqIGVuZCBuYW1lc3BhY2UgV2ViQ29yZSAqLwogCiB2b2lkIHdlYmtpdF9pbml0KCkKIHsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDNlMWFlZTcuLjM0NDNjZDQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWZodCAoQykg
MjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsMTkg
KzMyLDMwIEBACiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJzZXR0aW5ncy5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCisjaW5jbHVk
ZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3QuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKIAorI2luY2x1ZGUgPGdsaWIuaD4KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgV2ViS2l0V2ViVmlldyogZ2V0Vmlld0Zyb21GcmFtZShXZWJLaXRXZWJGcmFtZSopOwogCiAg
ICAgV2ViQ29yZTo6RnJhbWUqIGNvcmUoV2ViS2l0V2ViRnJhbWUqKTsKICAgICBXZWJLaXRXZWJG
cmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7CisKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdl
YktpdFdlYlZpZXcqKTsKICAgICBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSopOwor
CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKTsK
KyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSoga2l0KFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CisK
KyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGNvcmUoV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0Kik7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAtNjIsNiArNzQsOCBAQCBleHRlcm4gIkMiIHsK
ICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKICAg
ICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2VyQWdlbnQ7CiAKKyAgICAgICAgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7CisgICAgICAgIAogICAgICAgICBnaW50IGxh
c3RQb3B1cFhQb3NpdGlvbjsKICAgICAgICAgZ2ludCBsYXN0UG9wdXBZUG9zaXRpb247CiAKQEAg
LTkxLDggKzEwNSwxMyBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAgICB9
OwogCisgICAgLyogV2ViS2l0V2ViRnJhbWUgcHJpdmF0ZSBmdW5jdGlvbiAqLwogICAgIFdlYktp
dFdlYkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJW
aWV3KiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7CiAKKyAgICAvKiBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSBwcml2YXRlIGZ1bmN0aW9uICovCisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2NvcmVfaXRlbShXZWJDb3JlOjpI
aXN0b3J5SXRlbSopOworICAgIAorCiAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byB3ZWJraXR3
ZWJmcmFtZS5oIG9uY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdWxseQogICAgIC8vIGltcGxlbWVu
dGVkIGFuZCB0aGVpciBBUEkgaGFzIGJlZW4gZGlzY3Vzc2VkLgogCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBiL1dlYktpdC9ndGsv
V2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU0ZmNiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcApAQCAtMCwwICsxLDM4OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCisjaW5jbHVk
ZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCisj
aW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVk
ZSAiQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworZXh0ZXJuICJDIiB7CisKK3N0cnVjdCBfV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNr
Rm9yd2FyZExpc3Q7Cit9OworCisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Rf
R0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGUpKQorCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCwgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QgPSBXRUJL
SVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKG9iamVjdCk7CisKKyAgICBkZWxldGUgd2ViQmFja0Zv
cndhcmRMaXN0LT5wcml2LT5iYWNrRm9yd2FyZExpc3Q7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRXZWJCYWNrRm9yd2FyZExp
c3RDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZGlzcG9zZTsKKyAgICAKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRl
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfaW5pdChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICB3ZWJC
YWNrRm9yd2FyZExpc3QtPnByaXYgPSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0dFVF9Q
UklWQVRFKHdlYkJhY2tGb3J3YXJkTGlzdCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNr
X2ZvcndhcmRfbGlzdF9uZXdfd2l0aF93ZWJfdmlldzoKKyAqIEB3ZWJWaWV3OiB0aGUgYmFjayBm
b3J3YXJkIGxpc3QncyAjV2ViS2l0V2ViVmlldworICogCisgKiBDcmVhdGVzIGFuIGluc3RhbmNl
IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdCB3aXRoIGEgY29udHJvbGxpbmcgI1dlYktpdFdlYlZp
ZXcKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICov
CitXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
bmV3X3dpdGhfd2ViX3ZpZXcoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIE5VTEwpOworCisgICAg
V2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYlZpZXdEYXRhID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9Q
UklWQVRFKHdlYlZpZXcpOworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zv
cndhcmRMaXN0OworCisgICAgd2ViQmFja0ZvcndhcmRMaXN0ID0gV0VCS0lUX1dFQl9CQUNLX0ZP
UldBUkRfTElTVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
LCBOVUxMKSk7CisgICAgd2ViQmFja0ZvcndhcmRMaXN0LT5wcml2LT5iYWNrRm9yd2FyZExpc3Qg
PSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpOworICAgIHdlYkJhY2tG
b3J3YXJkTGlzdC0+cHJpdi0+YmFja0ZvcndhcmRMaXN0LT5zZXRFbmFibGVkKFRSVUUpOworCisg
ICAgcmV0dXJuIHdlYkJhY2tGb3J3YXJkTGlzdDsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBTdGVwcyBmb3J3YXJkIGluIHRoZSBiYWNr
IGZvcndhcmQgbGlzdAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29f
Zm9yd2FyZChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sK
KyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2Vi
QmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tG
b3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0Zvcndh
cmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29Gb3J3YXJkKCk7
Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19iYWNrOgorICog
QHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICog
U3RlcHMgYmFja3dhcmQgaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQgd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb19iYWNrKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCog
d2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpKTsKKworICAgIFdlYkNvcmU6
OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExp
c3QpOworICAgIGlmIChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgYmFja0Zv
cndhcmRMaXN0LT5nb0JhY2soKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X2NvbnRhaW5zX2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QKKyAqIEB3ZWJIaXN0b3J5SXRlbTogdGhlICNXZWJLaXRXZWJIaXN0
b3J5SXRlbSB0byBjaGVjaworICoKKyAqIENoZWNrcyBpZiBAd2ViSGlzdG9yeUl0ZW0gaXMgaW4g
dGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKgorICogUmV0dXJuOiAlVFJVRSBpZiBAd2ViSGlzdG9y
eUl0ZW0gaXMgaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0LCAlRkFMU0UgaWYgaXQgZG9lc24ndAor
ICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0o
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwp
OworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdl
Ykhpc3RvcnlJdGVtKSwgTlVMTCk7CisgICAgCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhp
c3RvcnlJdGVtID0gY29yZSh3ZWJIaXN0b3J5SXRlbSk7CisKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChoaXN0b3J5SXRlbSAhPSBOVUxMLCBGQUxTRSk7CisgICAgCisgICAgV2ViQ29yZTo6QmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7
CisKKyAgICByZXR1cm4gKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpID8gYmFja0ZvcndhcmRM
aXN0LT5jb250YWluc0l0ZW0oaGlzdG9yeUl0ZW0pIDogRkFMU0UpOworfQorCisvKioKKyAqIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbToKKyAqIEB3ZWJCYWNrRm9yd2Fy
ZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICogQHdlYkhpc3RvcnlJdGVtOiB0
aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHRvIGdvIHRvCisgKgorICogR28gdG8gdGhlIHNwZWNp
ZmllZCBAd2ViSGlzdG9yeUl0ZW0gaW4gdGhlIGJhY2sgZm9yd2FyZCBsaXN0CisgKi8KK3ZvaWQg
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtKFdlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlz
dG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCkpOworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIFdlYkNvcmU6
Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IGNvcmUod2ViSGlzdG9yeUl0ZW0pOworICAgIFdl
YkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9y
d2FyZExpc3QpOworCisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxlZCgpICYmIGhpc3Rv
cnlJdGVtKQorICAgICAgICBiYWNrRm9yd2FyZExpc3QtPmdvVG9JdGVtKGhpc3RvcnlJdGVtKTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xp
c3Rfd2l0aF9saW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIHJldHJpZXZlCisg
KgorICogUmV0dXJucyBhIGxpc3Qgb2YgaXRlbXMgdGhhdCBzdWNjZWVkIHRoZSBjdXJyZW50IGl0
ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNHTGlzdCBvZiBp
dGVtcyBzdWNjZWVkaW5nIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0ZWQgYnkgQGxpbWl0CisgKi8K
K0dMaXN0KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0
aF9saW1pdChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2lu
dCBsaW1pdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6
QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlz
dCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxl
ZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVj
dG9yIGl0ZW1zKGxpbWl0KTsKKyAgICBHTGlzdCogZm9yd2FyZEl0ZW1zID0geyAwIH07CisgICAg
CisgICAgYmFja0ZvcndhcmRMaXN0LT5mb3J3YXJkTGlzdFdpdGhMaW1pdChsaW1pdCwgaXRlbXMp
OworICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7
CisgICAgICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSA9IHdlYmtpdF93
ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2NvcmVfaXRlbShpdGVtc1tpXS5nZXQoKSk7CisgICAg
ICAgIGZvcndhcmRJdGVtcyA9IGdfbGlzdF9wcmVwZW5kKGZvcndhcmRJdGVtcywgZ19vYmplY3Rf
cmVmKHdlYkhpc3RvcnlJdGVtKSk7CisgICAgfQorCisgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNl
KGZvcndhcmRJdGVtcyk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nZXRfYmFja19saXN0X3dpdGhfbGltaXQ6CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0
byByZXRyaWV2ZQorICoKKyAqIFJldHVybnMgYSBsaXN0IG9mIGl0ZW1zIHRoYXQgcHJlY2VkZSB0
aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTog
YSAjR0xpc3Qgb2YgaXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0sIGxpbWl0ZWQgYnkg
QGxpbWl0CisgKi8KK0dMaXN0KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xpc3Rfd2l0aF9saW1pdChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCwgZ2ludCBsaW1pdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAg
V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tG
b3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlz
dC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtVmVjdG9yIGl0ZW1zKGxpbWl0KTsKKyAgICBHTGlzdCogYmFja0l0ZW1zID0geyAwIH07
CisKKyAgICBiYWNrRm9yd2FyZExpc3QtPmJhY2tMaXN0V2l0aExpbWl0KGxpbWl0LCBpdGVtcyk7
CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAg
ICAgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtID0gd2Via2l0X3dlYl9o
aXN0b3J5X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKGl0ZW1zW2ldLmdldCgpKTsKKyAgICAgICAg
YmFja0l0ZW1zID0gZ19saXN0X3ByZXBlbmQoYmFja0l0ZW1zLCBnX29iamVjdF9yZWYod2ViSGlz
dG9yeUl0ZW0pKTsKKyAgICB9CisKKyAgICByZXR1cm4gZ19saXN0X3JldmVyc2UoYmFja0l0ZW1z
KTsKK30KKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVt
OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViQmFja0ZvcndhcmRMaXN0CisgKgorICog
UmV0dXJucyB0aGUgaXRlbSB0aGF0IHByZWNlZGVzIHRoZSBjdXJyZW50IGl0ZW0KKyAqCisgKiBS
ZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gcHJlY2VkaW5nIHRoZSBjdXJy
ZW50IGl0ZW0KKyAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tG
b3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JB
Q0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29y
ZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJk
TGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJkTGlzdC0+ZW5h
YmxlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAKKyAgICBXZWJDb3JlOjpIaXN0b3J5
SXRlbSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmJhY2tJdGVtKCk7CisKKyAgICBy
ZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2N1cnJlbnRfaXRlbToKKyAqIEB3
ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJl
dHVybnMgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1cm5zIGEgTlVMTCB2YWx1ZSBpZiB0
aGUgYmFjayBmb3J3YXJkIGxpc3QgaXMgZW1wdHkKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI1dl
YktpdFdlYkhpc3RvcnlJdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW0oV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsK
KworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3
ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9y
d2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3Jl
OjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmN1cnJlbnRJdGVt
KCk7CisKKyAgICByZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwp
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
aXRlbToKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dAorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gdGhhdCBzdWNjZWVkcyB0aGUgY3VycmVudCBpdGVt
LgorICoKKyAqIFJldHVybnMgYSBOVUxMIHZhbHVlIGlmIHRoZXJlIG5vdGhpbmcgdGhhdCBzdWNj
ZWVkcyB0aGUgY3VycmVudCBpdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJI
aXN0b3J5SXRlbQorICovICAgIAorV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Qq
IHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisg
ICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJh
Y2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJk
TGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhp
c3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZEl0ZW0oKTsK
KworICAgIHJldHVybiAoaGlzdG9yeUl0ZW0gPyBraXQoaGlzdG9yeUl0ZW0pIDogTlVMTCk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW06Cisg
KiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBp
bmRleDogdGhlIGluZGV4IG9mIHRoZSBpdGVtCisgKgorICogUmV0dXJucyB0aGUgaXRlbSBhdCBh
IGdpdmVuIGluZGV4IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJu
IHZhbHVlOiB0aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIGxvY2F0ZWQgYXQgdGhlIHNwZWNpZmll
ZCBpbmRleCByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtCisgKi8KK1dlYktpdFdlYkhpc3Rv
cnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9udGhfaXRlbShXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBpbmRleCkKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdl
YkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0
KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFi
YWNrRm9yd2FyZExpc3QpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5pdGVtQXRJbmRleChpbmRl
eCk7CisKKyAgICByZXR1cm4gKGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwp
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVu
Z3RoOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0
CisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgcHJlY2VkIHRoZSBjdXJy
ZW50IGl0ZW0uCisgKgorICogUmV0dXJuIHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8g
dGhlIG51bWJlciBvZiBpdGVtcyBwcmVjZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKFdlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0
KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlz
dCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8
fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIGJhY2tGb3J3YXJkTGlzdC0+YmFja0xpc3RDb3VudCgpOworfQorICAgIAorLyoqCisg
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aDoKKyAqIEB3
ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJl
dHVybnMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHN1Y2NlZWQgdGhlIGN1cnJlbnQgaXRlbS4K
KyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI2dpbnQgY29ycmVzcG9uZGluZyB0byB0aGUgbnViZXIg
b2YgaXRlbXMgc3VjY2VlZGluZyB0aGUgY3VycmVudCBpdGVtCisgKi8KK2dpbnQgd2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGgoV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxM
KTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29y
ZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNr
Rm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0
dXJuIGJhY2tGb3J3YXJkTGlzdC0+Zm9yd2FyZExpc3RDb3VudCgpOworfQorCisvKioKKyAqIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2NhcGFjaXR5OgorICogQHdlYkJhY2tGb3J3
YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKgorICogUmV0dXJucyB0aGUg
bWF4aW11bSBsaW1pdCBvZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QuCisgKgorICogUmV0dXJuIHZh
bHVlOiBhICNnaW50IGluZGljYXRpbmcgdGhlIG51bWJlciBvZiAjV2ViSGlzdG9yeUl0ZW0gdGhl
IGJhY2sgZm9yd2FyZCBsaXN0IGNhbiBob2xkCisgKi8KK2dpbnQgd2Via2l0X3dlYl9iYWNrX2Zv
cndhcmRfbGlzdF9nZXRfbGltaXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9y
d2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNL
X0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6
OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExp
c3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gYmFja0ZvcndhcmRMaXN0LT5j
YXBhY2l0eSgpOworfQorICAgIAorLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X3NldF9saW1pdDoKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdAorICogQGxpbWl0OiB0aGUgbGltaXQgdG8gc2V0IHRoZSBiYWNrIGZvcndhcmQgbGlz
dCB0bworICoKKyAqIFNldHMgdGhlIG1heGltdW0gbGltaXQgb2YgdGhlIGJhY2sgZm9yd2FyZCBs
aXN0LiBJZiB0aGUgYmFjayBmb3J3YXJkIGxpc3QKKyAqIGV4Y2VlZHMgaXRzIGNhcGFjaXR5LCBp
dGVtcyB3aWxsIGJlIHJlbW92ZWQgZXZlcnl0aW1lIGEgbmV3IGl0ZW0gaGFzIGJlZW4KKyAqIGFk
ZGVkLgorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0KFdl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBnaW50IGxpbWl0KQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3
ZWJCYWNrRm9yd2FyZExpc3QpKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFj
a0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmIChiYWNrRm9y
d2FyZExpc3QpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+c2V0Q2FwYWNpdHkobGltaXQpOwor
fQorICAgIAorfSAvKiBlbmQgZXh0ZXJuICJDIiAqLworCitXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QqIFdlYktpdDo6Y29yZShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9S
V0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisgICAgcmV0dXJuIHdlYkJh
Y2tGb3J3YXJkTGlzdC0+cHJpdiA/IHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+YmFja0Zvcndh
cmRMaXN0IDogMDsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJi
YWNrZm9yd2FyZGxpc3QuaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2Fy
ZGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWZlOWNmCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlz
dC5oCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNo
YWVsIEMuIEFsb256byA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdFQktJVF9X
RUJfQkFDS19GT1JXQVJEX0xJU1RfSAorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9M
SVNUX0gKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorCisj
aW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVt
LmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JX
QVJEX0xJU1QgICAgICAgICAgICAod2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9CQUNL
X0ZPUldBUkRfTElTVCwgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KSkKKyNkZWZpbmUgV0VCS0lU
X1dFQl9CQUNLX0ZPUldBUkRfTElTVF9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9CQUNLX0ZP
UldBUkRfTElTVChvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfSVNf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZ
UEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCkpCisjZGVmaW5l
IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1RfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNU
LCBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcykpCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJp
dmF0ZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QgV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dENsYXNzIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzOworCisKK3N0cnVjdCBfV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0IHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIC8qPCBwcml2
YXRlID4qLworICAgIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGUgKnByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdENsYXNzIHsKKyAgICBHT2JqZWN0Q2xh
c3MgcGFyZW50OworfTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9uZXdfd2l0aF93ZWJfdmlldyAo
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ29fZm9yd2FyZCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3
ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fYmFjayAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFj
a19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2NvbnRhaW5zX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Vi
X2JhY2tfZm9yd2FyZF9saXN0LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVtKTsK
KworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0
ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogaGlzdG9yeV9pdGVtKTsKKworV0VCS0lUX0FQSSBHTGlzdCoKK3dl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfbGlzdF93aXRoX2xpbWl0IChX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBsaW1p
dCk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9iYWNrX2xpc3Rfd2l0aF9saW1pdCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFj
a19mb3J3YXJkX2xpc3QsIGdpbnQgbGltaXQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtIChXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dl
dF9jdXJyZW50X2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtpdF93ZWJf
YmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSAoV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0gKFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGluZGV4KTsK
KworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNr
X2xlbmd0aCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3Qp
OworCitXRUJLSVRfQVBJIGdpbnQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2Zv
cndhcmRfbGVuZ3RoIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRf
bGlzdCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9n
ZXRfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9s
aW1pdCAoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdp
bnQgbGltaXQpOworCitHX0VORF9ERUNMUworCisKKyNlbmRpZiAvKiBXRUJLSVRfV0VCX0JBQ0tf
Rk9SV0FSRF9MSVNUX0ggKi8KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJoaXN0b3J5aXRlbS5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0
ZW0uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkY2EyYjIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uY3Bw
CkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVs
IEMuIEFsb256bworICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIndlYmtpdHdlYmhp
c3RvcnlpdGVtLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xp
Yi5oPgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
ZXh0ZXJuICJDIiB7CisKK3N0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlIHsKKyAg
ICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW07CisgICAgCisgICAgZ2NoYXIqIHRp
dGxlOworICAgIGdjaGFyKiBhbHRlcm5hdGVUaXRsZTsKKyAgICBnY2hhciogdXJpOworICAgIGdj
aGFyKiBvcmlnaW5hbFVyaTsKK307CisKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1f
R0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUp
KQorCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkhpc3RvcnlJdGVtLCB3ZWJraXRfd2ViX2hpc3Rv
cnlfaXRlbSwgR19UWVBFX09CSkVDVCk7CisKKworc3RhdGljIEdIYXNoVGFibGUqIHdlYmtpdF9o
aXN0b3J5X2l0ZW1zKCkKK3sKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSogaGlzdG9yeUl0ZW1zID0g
Z19oYXNoX3RhYmxlX25ldyhnX2RpcmVjdF9oYXNoLCBnX2RpcmVjdF9lcXVhbCk7ICAgCisgICAg
cmV0dXJuIGhpc3RvcnlJdGVtczsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hpc3RvcnlfaXRl
bV9hZGQoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtLCBXZWJDb3JlOjpIaXN0
b3J5SXRlbSogaGlzdG9yeUl0ZW0pIAoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKyAgICAKKyAgICBHSGFzaFRhYmxl
KiB0YWJsZSA9IHdlYmtpdF9oaXN0b3J5X2l0ZW1zKCk7CisKKyAgICBoaXN0b3J5SXRlbS0+cmVm
KCk7CisgICAgZ19oYXNoX3RhYmxlX2luc2VydCh0YWJsZSwgaGlzdG9yeUl0ZW0sIGdfb2JqZWN0
X3JlZih3ZWJIaXN0b3J5SXRlbSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfaGlzdG9yeV9p
dGVtX3JlbW92ZShXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlzdG9yeUl0ZW0pCit7CisgICAgR0hh
c2hUYWJsZSogdGFibGUgPSB3ZWJraXRfaGlzdG9yeV9pdGVtcygpOworICAgIFdlYktpdFdlYkhp
c3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSA9IChXZWJLaXRXZWJIaXN0b3J5SXRlbSopIGdfaGFz
aF90YWJsZV9sb29rdXAodGFibGUsIGhpc3RvcnlJdGVtKTsKKworICAgIGdfcmV0dXJuX2lmX2Zh
aWwod2ViSGlzdG9yeUl0ZW0gIT0gTlVMTCk7CisgICAgCisgICAgZ19oYXNoX3RhYmxlX3JlbW92
ZSh0YWJsZSwgaGlzdG9yeUl0ZW0pOworICAgIGhpc3RvcnlJdGVtLT5kZXJlZigpOworICAgIGdf
b2JqZWN0X3VucmVmKHdlYkhpc3RvcnlJdGVtKTsKK30KKyAgICAKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfaGlzdG9yeV9pdGVtX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktp
dFdlYkhpc3RvcnlJdGVtKiBpdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0ob2JqZWN0KTsK
KworICAgIHdlYmtpdF9oaXN0b3J5X2l0ZW1fcmVtb3ZlKGl0ZW0tPnByaXYtPmhpc3RvcnlJdGVt
KTsKKyAgICAKKyAgICBkZWxldGUgaXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW07CisKKyAgICAvKiBk
ZXN0cm95IHRhYmxlIGlmIGVtcHR5ICovCisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRf
aGlzdG9yeV9pdGVtcygpOworICAgIGlmICghZ19oYXNoX3RhYmxlX3NpemUodGFibGUpKQorICAg
ICAgICBnX2hhc2hfdGFibGVfZGVzdHJveSh0YWJsZSk7CisgICAgCisgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3Qp
OworfQorICAgIAorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlJ
dGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0ob2JqZWN0KTsKKworICAgIGdfZnJlZShoaXN0
b3J5SXRlbS0+cHJpdi0+dGl0bGUpOworICAgIGdfZnJlZShoaXN0b3J5SXRlbS0+cHJpdi0+YWx0
ZXJuYXRlVGl0bGUpOworICAgIGdfZnJlZShoaXN0b3J5SXRlbS0+cHJpdi0+dXJpKTsKKyAgICBn
X2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFsVXJpKTsKKworICAgIEdfT0JKRUNUX0NM
QVNTKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVj
dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQo
V2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisgICAgZ29iamVjdF9jbGFz
cy0+ZGlzcG9zZSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2Rpc3Bvc2U7CisgICAgZ29iamVj
dF9jbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9maW5hbGl6ZTsKKwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShnb2JqZWN0X2NsYXNzLCBzaXplb2YoV2ViS2l0
V2ViSGlzdG9yeUl0ZW1Qcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2luaXQoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQorewor
ICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2ID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fR0VUX1BS
SVZBVEUod2ViSGlzdG9yeUl0ZW0pOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRl
IGEgbmV3IFdlYkhpc3RvcnlJdGVtIGluc3RhbmNlIHdoZW4gbmVlZGVkICovCitXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfY29yZV9pdGVtKFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3
ZWJIaXN0b3J5SXRlbSA9IGtpdChpdGVtKTsKKworICAgIGlmICghd2ViSGlzdG9yeUl0ZW0pIHsK
KyAgICAgICAgd2ViSGlzdG9yeUl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgTlVMTCkpOworICAgICAgICB3ZWJI
aXN0b3J5SXRlbS0+cHJpdi0+aGlzdG9yeUl0ZW0gPSBpdGVtOworICAgICAgICB3ZWJraXRfaGlz
dG9yeV9pdGVtX2FkZCh3ZWJIaXN0b3J5SXRlbSwgd2ViSGlzdG9yeUl0ZW0tPnByaXYtPmhpc3Rv
cnlJdGVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisKKworLyoq
CisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXc6CisgKgorICogQ3JlYXRlcyBhIG5ldyAj
V2ViS2l0V2ViSGlzdG9yeUl0ZW0gaW5zdGFuY2UKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBu
ZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcodm9pZCkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogd2ViSGlzdG9yeUl0ZW0gPSBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTShnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgTlVMTCkpOworCisgICAgd2ViSGlzdG9yeUl0
ZW0tPnByaXYtPmhpc3RvcnlJdGVtID0gbmV3IFdlYkNvcmU6Okhpc3RvcnlJdGVtKCk7CisKKyAg
ICB3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZCh3ZWJIaXN0b3J5SXRlbSwgd2ViSGlzdG9yeUl0ZW0t
PnByaXYtPmhpc3RvcnlJdGVtKTsKKworICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbTsKK30KKwor
CisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2RhdGE6CisgKiBAdXJp
OiB0aGUgdXJpIG9mIHRoZSBwYWdlCisgKiBAdGl0bGU6IHRoZSB0aXRsZSBvZiB0aGUgcGFnZQor
ICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHdpdGggdGhlIGdpdmVu
IFVSSSBhbmQgdGl0bGUKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSBuZXcgI1dlYktpdFdlYkhp
c3RvcnlJdGVtCisgKi8KK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9uZXdfd2l0aF9kYXRhKGNvbnN0IGdjaGFyKiB1cmksIGNvbnN0IGdjaGFyKiB0aXRsZSkK
K3sKKyAgICBXZWJDb3JlOjpLVVJMIGhpc3RvcnlVcmkodXJpKTsKKyAgICBXZWJDb3JlOjpTdHJp
bmcgaGlzdG9yeVRpdGxlKHRpdGxlKTsKKworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJI
aXN0b3J5SXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldygpOworCisgICAgd2ViSGlz
dG9yeUl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtID0gbmV3IFdlYkNvcmU6Okhpc3RvcnlJdGVtKGhp
c3RvcnlVcmksIGhpc3RvcnlUaXRsZSk7CisKKyAgICB3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZCh3
ZWJIaXN0b3J5SXRlbSwgd2ViSGlzdG9yeUl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtKTsKKyAgICAg
ICAgCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF90aXRsZToKKyAqIEB3ZWJIaXN0b3J5SXRlbTogYSAjV2ViS2l0V2Vi
SGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBwYWdlIHRpdGxlIG9mIEB3ZWJIaXN0b3J5
SXRlbQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxl
KFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSksIE5V
TEwpOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9XRUJf
SElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChpdGVtICE9IE5VTEwsIE5VTEwpOworICAgIAorICAgIFdlYkNvcmU6OlN0cmluZyB0aXRsZSA9
IGl0ZW0tPnRpdGxlKCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnRpdGxl
KTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSA9IGdfc3RyZHVwKHRpdGxlLnV0
ZjgoKS5kYXRhKCkpOworICAgICAgCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT50
aXRsZTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRl
X3RpdGxlOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoK
KyAqIFJldHVybnMgdGhlIGFsdGVybmF0ZSB0aXRsZSBvZiBAd2ViSGlzdG9yeUl0ZW0KKyAqCisg
KiBSZXR1cm4gdmFsdWU6IHRoZSBhbHRlcm5hdGUgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisg
Ki8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3Rp
dGxlKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSks
IE5VTEwpOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBnX3JldHVybl92YWxfaWZf
ZmFpbChpdGVtICE9IE5VTEwsIE5VTEwpOworICAgIAorICAgIFdlYkNvcmU6OlN0cmluZyBhbHRl
cm5hdGVUaXRsZSA9IGl0ZW0tPmFsdGVybmF0ZVRpdGxlKCk7CisKKyAgICBnX2ZyZWUod2ViSGlz
dG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5w
cml2LT5hbHRlcm5hdGVUaXRsZSA9IGdfc3RyZHVwKGFsdGVybmF0ZVRpdGxlLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5hbHRlcm5hdGVUaXRsZTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9zZXRfYWx0ZXJuYXRlX3RpdGxl
OgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICogQHRpdGxl
OiB0aGUgYWx0ZXJuYXRlIHRpdGxlIGZvciBAdGhpcyBoaXN0b3J5IGl0ZW0KKyAqCisgKiBTZXRz
IGFuIGFsdGVybmF0ZSB0aXRsZSBmb3IgQHdlYkhpc3RvcnlJdGVtCisgKi8KK3ZvaWQgd2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZShXZWJLaXRXZWJIaXN0b3J5SXRl
bSogd2ViSGlzdG9yeUl0ZW0sIGNvbnN0IGdjaGFyKiB0aXRsZSkgCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisg
ICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0gPSBjb3JlKFdFQktJVF9XRUJfSElTVE9SWV9J
VEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBjb25zdCBXZWJDb3JlOjpTdHJpbmcgYWx0ZXJu
YXRlVGl0bGUgPSB0aXRsZTsKKyAgICBpdGVtLT5zZXRBbHRlcm5hdGVUaXRsZShhbHRlcm5hdGVU
aXRsZSk7Cit9CisgICAgCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmk6
CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0
dXJucyB0aGUgVVJJIG9mIEB0aGlzCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgVVJJIG9mIEB3
ZWJIaXN0b3J5SXRlbQorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1f
Z2V0X3VyaShXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0
ZW0pLCBOVUxMKTsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoaXRlbSAhPSBOVUxMLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OlN0cmluZyB1cmkg
PSBpdGVtLT51cmxTdHJpbmcoKTsKKworICAgIGdfZnJlZSh3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+
dXJpKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT51cmkgPSBnX3N0cmR1cCh1cmkudXRm
OCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaTsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpOgorICog
QHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMg
dGhlIG9yaWdpbmFsIFVSSSBvZiBAd2ViSGlzdG9yeUl0ZW0uCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgb3JpZ2luYWwgVVJJIG9mIEB3ZWJIaXN0b3J5SVRlbQorICovCitjb25zdCBnY2hhciog
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaShXZWJLaXRXZWJIaXN0b3J5
SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdlYkNv
cmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJI
aXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBOVUxMLCBO
VUxMKTsKKworICAgIFdlYkNvcmU6OlN0cmluZyBvcmlnaW5hbFVyaSA9IGl0ZW0tPm9yaWdpbmFs
VVJMU3RyaW5nKCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9yaWdpbmFs
VXJpKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSA9IGdfc3RyZHVw
KG9yaWdpbmFsVXJpLnV0ZjgoKS5kYXRhKCkpOworICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5
SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fZ2V0X2xhc3RfdmlzaXN0ZWRfdGltZSA6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dl
YktpdFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJucyB0aGUgbGFzdCB0aW1lIEB3ZWJIaXN0
b3J5SXRlbSB3YXMgdmlzaXRlZAorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIHRpbWUgaW4gc2Vj
b25kcyB0aGlzIEB3ZWJIaXN0b3J5SXRlbSB3YXMgbGFzdCB2aXNpdGVkCisgKi8KK2dkb3VibGUg
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lKFdlYktpdFdlYkhp
c3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkgCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAg
IFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRF
TSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBO
VUxMLCAwKTsKKworICAgIHJldHVybiBpdGVtLT5sYXN0VmlzaXRlZFRpbWUoKTsKK30KKworfSAv
KiBlbmQgZXh0ZXJuICJDIiAqLworCitXZWJDb3JlOjpIaXN0b3J5SXRlbSogV2ViS2l0Ojpjb3Jl
KFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSksIE5V
TEwpOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtID0gd2ViSGlzdG9y
eUl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtOworCisgICAgcmV0dXJuIGhpc3RvcnlJdGVtID8gaGlz
dG9yeUl0ZW0gOiAwOworfQorCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogV2ViS2l0OjpraXQoV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKGhpc3RvcnlJdGVtICE9IE5VTEwsIE5VTEwpOworICAgIAorICAgIFdlYktpdFdlYkhpc3Rv
cnlJdGVtKiB3ZWJIaXN0b3J5SXRlbTsKKyAgICBHSGFzaFRhYmxlKiB0YWJsZSA9IHdlYmtpdF9o
aXN0b3J5X2l0ZW1zKCk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbSA9IChXZWJLaXRXZWJIaXN0b3J5
SXRlbSopIGdfaGFzaF90YWJsZV9sb29rdXAodGFibGUsIGhpc3RvcnlJdGVtKTsKKyAgICByZXR1
cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93
ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rv
cnlpdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjZhMDI0ZQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5o
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSmFuIE1pY2hhZWwg
Qy4gQWxvbnpvCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fSAorI2RlZmluZSBXRUJL
SVRfV0VCX0hJU1RPUllfSVRFTV9ICisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDxnZGsvZ2RrLmg+CisKKyNpbmNsdWRlICJ3ZWJraXRkZWZp
bmVzLmgiCisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfSElTVE9S
WV9JVEVNICAgICAgICAgICAgKHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdl
YktpdFdlYkhpc3RvcnlJdGVtKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fQ0xB
U1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcykpCisjZGVmaW5l
IFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0pKQorI2RlZmlu
ZSBXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNKSkKKyNkZWZp
bmUgV0VCS0lUX1dFQl9ISVNUT1JZX0lURU1fR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSwgV2ViS2l0
V2ViSGlzdG9yeUl0ZW1DbGFzcykpCisKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkhpc3Rv
cnlJdGVtUHJpdmF0ZSBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU7Cit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW0gV2ViS2l0V2ViSGlzdG9yeUl0ZW07Cit0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyBXZWJLaXRXZWJIaXN0b3J5SXRlbUNsYXNz
OworIAorCitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtIHsKKyAgICBHT2JqZWN0IHBhcmVu
dDsKKworICAgIC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0
ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzcyB7CisgICAg
R09iamVjdENsYXNzIHBhcmVudDsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX2dldF90eXBlICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0
b3J5SXRlbSoKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ldyAodm9pZCk7CisKK1dFQktJVF9B
UEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0
aF9kYXRhIChjb25zdCBnY2hhciogdXJpLCBjb25zdCBnY2hhciogdGl0bGUpOworCitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlIChXZWJL
aXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3Qg
Z2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfYWx0ZXJuYXRlX3RpdGxlIChXZWJL
aXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgdm9pZAor
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlz
dG9yeUl0ZW0qIHdlYl9oaXN0b3J5X2l0ZW0sIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpIChXZWJL
aXRXZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgY29uc3Qg
Z2NoYXIqCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfb3JpZ2luYWxfdXJpIChXZWJLaXRX
ZWJIaXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgZ2RvdWJsZQor
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lIChXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2ViX2hpc3RvcnlfaXRlbSk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
KiBXRUJLSVRfV0VCX0hJU1RPUllfSVRFTV9IICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmll
dy5jcHAKaW5kZXggNjc2MDRjNC4uNDA5NmUwNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJW
aWV3L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2
aWV3LmNwcApAQCAtMyw2ICszLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgogICogIENvcHlyaWdodCAoQykgMjAwNyBY
YW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEphbiBBbG9uem8gPGpt
YWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTI0LDggKzI1
LDExIEBACiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgogI2luY2x1ZGUgIndlYmtpdC1tYXJz
aGFsLmgiCiAjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCiAKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgog
I2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNs
dWRlICJDb250ZXh0TWVudS5oIgpAQCAtMzcsNiArNDEsNyBAQAogI2luY2x1ZGUgIkVkaXRvckNs
aWVudEd0ay5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyVHlwZXMuaCIKICNpbmNsdWRlICJIaXRU
ZXN0UmVxdWVzdC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKQEAgLTU3OSwxMyArNTg0LDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgd2Via2l0X3dlYl92aWV3X3N0
b3BfbG9hZGluZyhXRUJLSVRfV0VCX1ZJRVcob2JqZWN0KSk7CiAKICAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lU
X1dFQl9WSUVXKG9iamVjdCkpOwotICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2U7Cisg
ICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmJhY2tGb3J3YXJkTGlzdCk7CiAgICAgZ19v
YmplY3RfdW5yZWYod2ViVmlld0RhdGEtPndlYlNldHRpbmdzKTsKICAgICBnX29iamVjdF91bnJl
Zih3ZWJWaWV3RGF0YS0+bWFpbkZyYW1lKTsKICAgICBnX29iamVjdF91bnJlZih3ZWJWaWV3RGF0
YS0+aW1Db250ZXh0KTsKICAgICBndGtfdGFyZ2V0X2xpc3RfdW5yZWYod2ViVmlld0RhdGEtPmNv
cHlfdGFyZ2V0X2xpc3QpOwogICAgIGd0a190YXJnZXRfbGlzdF91bnJlZih3ZWJWaWV3RGF0YS0+
cGFzdGVfdGFyZ2V0X2xpc3QpOwogICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+dXNlckFnZW50Owor
ICAgIGRlbGV0ZSB3ZWJWaWV3RGF0YS0+Y29yZVBhZ2U7CiAKICAgICBHX09CSkVDVF9DTEFTUyh3
ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTEx
NzUsNiArMTE4MSw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiAgICAgd2ViVmlld0RhdGEtPmxhc3RQb3B1cFhQb3NpdGlvbiA9IHdl
YlZpZXdEYXRhLT5sYXN0UG9wdXBZUG9zaXRpb24gPSAtMTsKICAgICB3ZWJWaWV3RGF0YS0+ZWRp
dGFibGUgPSBmYWxzZTsKIAorICAgIC8qIEluaXRpYWxpemUgdGhlIHZpZXcncyBiYWNrL2Zvcndh
cmQgbGlzdCAqLworICAgIHdlYlZpZXdEYXRhLT5iYWNrRm9yd2FyZExpc3QgPSB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3dlYl92aWV3KHdlYlZpZXcpOworCiAjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMiwxMCwwKQogICAgIEdka0F0b20gdGV4dEh0bWwgPSBnZGtfYXRvbV9p
bnRlcm5fc3RhdGljX3N0cmluZygidGV4dC9odG1sIik7CiAjZWxzZQpAQCAtMTIyMSw2ICsxMjMw
LDY0IEBAIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3NldHRpbmdzKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHdlYlZpZXdEYXRhLT53ZWJTZXR0aW5n
czsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2Zvcndh
cmRfbGlzdDoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBAZmxhZzogdG8gdGVs
bCB0aGUgdmlldyB0byBtYWludGFpbiBhIGJhY2sgb3IgZm9yd2FyZCBsaXN0CisgKgorICogU2V0
IHRoZSB2aWV3IHRvIG1haW50YWluIGEgYmFjayBvciBmb3J3YXJkIGxpc3Qgb2YgaGlzdG9yeSBp
dGVtcy4KKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X21haW50YWluc19iYWNrX2Zvcndh
cmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnYm9vbGVhbiBmbGFnKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIGNvcmUo
d2ViVmlldyktPmJhY2tGb3J3YXJkTGlzdCgpLT5zZXRFbmFibGVkKGZsYWcpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJfdmlld19nZXRfYmFja19mb3J3YXJkX2xpc3Q6CisgKiBAd2ViVmlldzog
YSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybnMgYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0CisgKiAKKyAqIFJldHVybiB2YWx1ZTogdGhlICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QK
KyAqLworV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tf
Zm9yd2FyZF9saXN0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFU
RShXRUJLSVRfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgaWYgKCF3ZWJWaWV3RGF0YS0+Y29y
ZVBhZ2UgfHwgIXdlYlZpZXdEYXRhLT5jb3JlUGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gd2ViVmlld0RhdGEtPmJh
Y2tGb3J3YXJkTGlzdDsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ29fdG9fYmFja19m
b3J3YXJkX2l0ZW06CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGl0ZW06IGEg
I1dlYktpdFdlYkhpc3RvcnlJdGVtKgorICoKKyAqIEdvIHRvIHRoZSBzcGVjaWZpZWQgI1dlYktp
dFdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiAlVFJVRSBpZiBsb2FkaW5nIG9m
IGl0ZW0gaXMgc3VjY2Vzc2Z1bCwgJUZBTFNFIGlmIG5vdAorICovCitnYm9vbGVhbiB3ZWJraXRf
d2ViX3ZpZXdfZ29fdG9fYmFja19mb3J3YXJkX2l0ZW0oV2ViS2l0V2ViVmlldyogd2ViVmlldywg
V2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0oaXRlbSksIEZBTFNFKTsKKworICAgIGNv
cmUod2ViVmlldyktPmdvVG9JdGVtKGNvcmUoaXRlbSksIEZyYW1lTG9hZFR5cGVJbmRleGVkQmFj
a0ZvcndhcmQpOworICAgIHJldHVybiBUUlVFOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmll
d19nb19iYWNrd2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBH
byB0byB0aGUgcHJldmlvdXMgcGFnZSwgaWYgdGhlcmUncyBhbnkuCisgKi8KIHZvaWQgd2Via2l0
X3dlYl92aWV3X2dvX2JhY2t3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ193
YXJuaW5nKCJ3ZWJraXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQoKSBpcyBvYnNvbGV0ZTsgdXNlIHdl
YmtpdF93ZWJfdmlld19nb19iYWNrKCkiKTsKQEAgLTEyMzcsOCArMTMwNCw3IEBAIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2dvX2JhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3Jl
dHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAKLSAgICBGcmFtZSog
ZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0g
ICAgZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndhcmQoLTEpOworICAgIGNvcmUod2ViVmll
dyktPmdvQmFjaygpOwogfQogCiAvKioKQEAgLTEyNjgsMTAgKzEzMzQsMTcgQEAgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZ29fZm9yd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewogICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKIAotICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsK
LSAgICBmcmFtZS0+bG9hZGVyKCktPmdvQmFja09yRm9yd2FyZCgxKTsKKyAgICBjb3JlKHdlYlZp
ZXcpLT5nb0ZvcndhcmQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2Jh
Y2t3YXJkOgorICogQHdlYlZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICoKKyAqIENoZWNrcyB3
aGV0aGVyIHRoZSB2aWV3IGNhbiBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlCisgKgorICog
UmV0dXJuIHZhbHVlOiAlVFJVRSBpZiB0aGUgcGFnZSBjYW4gZ28gYmFjaywgb3RoZXJ3aXNlIHJl
dHVybnMgJUZBTFNFCisgKi8KIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dh
cmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBnX3dhcm5pbmcoIndlYmtpdF93ZWJf
dmlld19jYW5fZ29fYmFja3dhcmQoKSBpcyBvYnNvbGV0ZTsgdXNlIHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fYmFjaygpIik7CkBAIC0xMjkwLDggKzEzNjMsMTIgQEAgZ2Jvb2xlYW4gd2Via2l0X3dl
Yl92aWV3X2Nhbl9nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAg
ICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJW
aWV3KSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5sb2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0x
KTsKKyAgICBQYWdlKiBwYWdlID0gY29yZSh3ZWJWaWV3KTsKKworICAgIGlmICghcGFnZSB8fCAh
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmJhY2tJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIHJldHVybiBUUlVFOwogfQogCiAvKioKQEAgLTEzMjUsOCArMTQwMiwxNSBAQCBn
Ym9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKIHsKICAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIEZBTFNFKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUod2Via2l0X3dlYl92aWV3
X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKTsKLSAgICByZXR1cm4gZnJhbWUtPmxvYWRlcigpLT5j
YW5Hb0JhY2tPckZvcndhcmQoMSk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUod2ViVmlldyk7CisK
KyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmICghcGFnZS0+
YmFja0ZvcndhcmRMaXN0KCktPmZvcndhcmRJdGVtKCkpCisgICAgICAgIHJldHVybiBGQUxTRTsK
KworICAgIHJldHVybiBUUlVFOwogfQogCiB2b2lkIHdlYmtpdF93ZWJfdmlld19vcGVuKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGdjaGFyKiB1cmkpCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YnZpZXcuaAppbmRleCBhYjJmNWMwLi40YTZkZWEwIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2
aWV3LmgKQEAgLTI0LDYgKzI0LDggQEAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU0Jhc2Uu
aD4KIAogI2luY2x1ZGUgIndlYmtpdGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNr
Zm9yd2FyZGxpc3QuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogI2luY2x1
ZGUgIndlYmtpdHdlYnNldHRpbmdzLmgiCiAKIEdfQkVHSU5fREVDTFMKQEAgLTkxLDggKzkzLDE0
IEBAIHdlYmtpdF93ZWJfdmlld19nZXRfdHlwZSAodm9pZCk7CiBXRUJLSVRfQVBJIEd0a1dpZGdl
dCoKIHdlYmtpdF93ZWJfdmlld19uZXcgKHZvaWQpOwogCi1XRUJLSVRfT0JTT0xFVEVfQVBJIGdi
b29sZWFuCi13ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldyk7CitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmlld19zZXRfbWFpbnRhaW5z
X2JhY2tfZm9yd2FyZF9saXN0IChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgZ2Jvb2xlYW4gZmxh
Zyk7IAorCitXRUJLSVRfQVBJIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCoKK3dlYmtpdF93ZWJf
dmlld19nZXRfYmFja19mb3J3YXJkX2xpc3QgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKwor
V0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9p
dGVtIChXZWJLaXRXZWJWaWV3ICp3ZWJfdmlldywgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGl0ZW0p
OwogCiBXRUJLSVRfQVBJIGdib29sZWFuCiB3ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2sgKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3KTsKQEAgLTEwMyw5ICsxMTEsNiBAQCB3ZWJraXRfd2ViX3Zp
ZXdfY2FuX2dvX2JhY2tfb3JfZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQg
c3RlcHMpOwogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3
YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKLVdFQktJVF9PQlNPTEVURV9BUEkgdm9p
ZAotd2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7
Ci0KIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYl92aWV3X2dvX2JhY2sgKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3KTsKIApAQCAtMTkzLDYgKzE5OCwxMiBAQCB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3NldHRpbmdzIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViU2V0dGluZ3MqIHNl
dHRpbgogV0VCS0lUX0FQSSBXZWJLaXRXZWJTZXR0aW5ncyoKIHdlYmtpdF93ZWJfdmlld19nZXRf
c2V0dGluZ3MgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAorV0VCS0lUX09CU09MRVRFX0FQ
SSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcpOworCitXRUJLSVRfT0JTT0xFVEVfQVBJIHZvaWQKK3dlYmtpdF93ZWJfdmll
d19nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18701</attachid>
            <date>2008-01-26 00:16:45 -0800</date>
            <delta_ts>2008-01-27 11:44:55 -0800</delta_ts>
            <desc>updated patch</desc>
            <filename>webkitgtk-backforwardlist.patch</filename>
            <type>text/plain</type>
            <size>50521</size>
            <attacher name="Jan Alonzo">jmalonzo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1MjdiN2I3Li5hNTdkNTI3
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMDgtMDEtMjUgIEphbiBNaWNoYWVsIEFsb256byAgPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDgxMQorICAgICAgICBbZ3RrXSBb
cmVxdWVzdF0gYWRkIGEgd2Via2l0X2d0a19wYWdlX2dvX3RvX2hpc3RvcnlfaXRlbSBmdW5jdGlv
bgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdCBhbmQgd2Via2l0d2ViaGlzdG9yeWl0ZW0KKwogMjAwOC0wMS0yMyAgQWxwIFRva2VyICA8
YWxwQGF0b2tlci5jb20+CiAKICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgTWFyayBSb3dlLgpk
aWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA4MGJkNzc4
Li5jMmE0ZDNhIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5h
bQpAQCAtMjM3LDcgKzIzNyw5IEBAIHdlYmtpdGd0a19oX2FwaSArPSBcCiAJV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0ZGVmaW5lcy5oIFwK
IAlXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCisJV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAlXZWJLaXQvZ3RrL1dlYlZp
ZXcvd2Via2l0d2ViZnJhbWUuaCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3Rv
cnlpdGVtLmggXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJzZXR0aW5ncy5oIFwKIAlX
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oIAogCkBAIC0yNTgsNyArMjYwLDkgQEAg
d2Via2l0Z3RrX2hlYWRlcnMgKz0gXAogd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9n
dGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXRwcml2YXRlLmNwcCBcCisJV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmJhY2tm
b3J3YXJkbGlzdC5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5jcHAg
XAorCVdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5jcHAgXAogCVdlYktp
dC9ndGsvV2ViVmlldy93ZWJraXR3ZWJzZXR0aW5ncy5jcHAgXAogCVdlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJ2aWV3LmNwcCBcCiAJV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZWM3MGJkMy4uMjQ3MWYzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFu
Z2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAwOC0wMS0y
NSAgSmFuIE1pY2hhZWwgQWxvbnpvICA8am1hbG9uem9AdW5wbHVnZ2FibGUuY29tPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRF
U1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0ODExCisgICAgICAgIFtndGtdIFtyZXF1ZXN0XSBhZGQgYSB3
ZWJraXRfZ3RrX3BhZ2VfZ29fdG9faGlzdG9yeV9pdGVtIGZ1bmN0aW9uCisKKyAgICAgICAgQWRk
ZWQgd2Via2l0L2d0ayB3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QgYW5kIHdlYmtpdHdlYmhpc3Rv
cnlpdGVtCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKwogMjAwOC0wMS0yNSAgU3RlcGhhbmll
IExld2lzICA8c2xld2lzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0uCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCAyZDYxNWU5Li5hZDlkZDU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk4OSw3ICs5ODksOSBAQCBndGstcG9ydCB7CiAgICAg
ICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRkZWZpbmVzLmggXAogICAgICAgICAuLi9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAgICAgICAgIC4uL1dl
YktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmggXAorCS4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2Vi
Vmlldy93ZWJraXR3ZWJmcmFtZS5oIFwKKwkuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vi
aGlzdG9yeWl0ZW0uaCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJz
ZXR0aW5ncy5oIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcu
aCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmggXApAQCAtMTA2Niw3ICsxMDY4LDkgQEAgZ3RrLXBvcnQgewogICAgICAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcCBcCiAgICAgICAgIC4uL1dlYktp
dC9ndGsvV2ViVmlldy93ZWJraXRuZXR3b3JrcmVxdWVzdC5jcHAgXAogICAgICAgICAuLi9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAgXAorCS4uL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIFwKICAgICAgICAgLi4vV2ViS2l0L2d0ay9X
ZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcCBcCisJLi4vV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtp
dHdlYmhpc3RvcnlpdGVtLmNwcCBcCiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXR3ZWJzZXR0aW5ncy5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
d2Vidmlldy5jcHAgXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJL
aXQvZ3RrL0NoYW5nZUxvZwppbmRleCBmMjNjZDRlLi5kMWM4NzQ2IDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5
IEBACisyMDA4LTAxLTI1ICBKYW4gTWljaGFlbCBBbG9uem8gIDxqbWFsb256b0B1bnBsdWdnYWJs
ZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4MTEKKyAgICAgICAgW2d0
a10gW3JlcXVlc3RdIGFkZCBhIHdlYmtpdF9ndGtfcGFnZV9nb190b19oaXN0b3J5X2l0ZW0gZnVu
Y3Rpb24KKworICAgICAgICBpbXBsZW1lbnQgYmFjay9mb3J3YXJkIGxpc3QgYW5kIGhpc3Rvcnkg
aXRlbQorCisgICAgICAgICogV2ViVmlldy9oZWFkZXJzLnByaToKKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdC5oOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHA6CisgICAgICAg
ICogV2ViVmlldy93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy93ZWJraXR3ZWJi
YWNrZm9yd2FyZGxpc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2Rpc3Bvc2UpOgorICAg
ICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19m
b3J3YXJkX2xpc3RfY2xhc3NfaW5pdCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9pbml0KToKKyAgICAgICAg
KF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0X25ld193aXRoX3dlYl92aWV3KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQpOgor
ICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fYmFjayk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKToK
KyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dvX3RvX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3
YXJkTGlzdFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRf
bGlzdF93aXRoX2xpbWl0KToKKyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2
YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xpc3Rfd2l0aF9saW1p
dCk6CisgICAgICAgIChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dl
Yl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19pdGVtKToKKyAgICAgICAgKF9XZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9j
dXJyZW50X2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6
OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2ZvcndhcmRfaXRlbSk6CisgICAgICAg
IChfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2Zvcndh
cmRfbGlzdF9nZXRfbnRoX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGU6OndlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGVuZ3RoKToK
KyAgICAgICAgKF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlOjp3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCk6CisgICAgICAgIChfV2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0UHJpdmF0ZTo6d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRf
bGltaXQpOgorICAgICAgICAoX1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU6OndlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3Rfc2V0X2xpbWl0KToKKyAgICAgICAgKiBXZWJWaWV3L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3L3dlYmtp
dHdlYmhpc3RvcnlpdGVtLmNwcDogQWRkZWQuCisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0
ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtcyk6CisgICAgICAgIChfV2ViS2l0V2ViSGlz
dG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX2FkZCk6CisgICAgICAgIChfV2Vi
S2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfaGlzdG9yeV9pdGVtX3JlbW92ZSk6Cisg
ICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9kaXNwb3NlKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6Ondl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX2ZpbmFsaXplKToKKyAgICAgICAgKF9XZWJLaXRXZWJIaXN0
b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2NsYXNzX2luaXQpOgorICAg
ICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0
ZW1faW5pdCk6CisgICAgICAgIChfV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRf
d2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9jb3JlX2l0ZW0pOgorICAgICAgICAoX1dlYktpdFdl
Ykhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3KToKKyAgICAg
ICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVt
X25ld193aXRoX2RhdGEpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3RpdGxlKToKKyAgICAgICAgKF9XZWJLaXRXZWJI
aXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9hbHRlcm5hdGVf
dGl0bGUpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZTo6d2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZSk6CisgICAgICAgIChfV2ViS2l0V2Vi
SGlzdG9yeUl0ZW1Qcml2YXRlOjp3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpKToKKyAg
ICAgICAgKF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGU6OndlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX2dldF9vcmlnaW5hbF91cmkpOgorICAgICAgICAoX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJp
dmF0ZTo6d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2xhc3RfdmlzaXRlZF90aW1lKToKKyAg
ICAgICAgKFdlYktpdDo6Y29yZSk6CisgICAgICAgIChXZWJLaXQ6OmtpdCk6CisgICAgICAgICog
V2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJWaWV3
L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAqIFdlYlZpZXcvd2Via2l0d2Vidmlldy5oOgor
CiAyMDA4LTAxLTI1ICBPcmkgQmVybnN0ZWluICA8b3JpQGVpZ2Vuc3RhdGUub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFscCBUb2tlci4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmll
dy9oZWFkZXJzLnByaSBiL1dlYktpdC9ndGsvV2ViVmlldy9oZWFkZXJzLnByaQppbmRleCBlOTk3
NjVhLi5kNTNkODI1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYlZpZXcvaGVhZGVycy5wcmkK
KysrIGIvV2ViS2l0L2d0ay9XZWJWaWV3L2hlYWRlcnMucHJpCkBAIC0xLDYgKzEsOCBAQAogV0VC
S0lUX0FQSV9IRUFERVJTID0gJCRQV0Qvd2Via2l0LmggXAogICAgICAgICAgICAgICAgICAgICAg
JCRQV0Qvd2Via2l0ZGVmaW5lcy5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtp
dG5ldHdvcmtyZXF1ZXN0LmggXAorICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmggXAogICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vi
ZnJhbWUuaCBcCisgICAgICAgICAgICAgICAgICAgICAkJFBXRC93ZWJraXR3ZWJoaXN0b3J5aXRl
bS5oIFwKICAgICAgICAgICAgICAgICAgICAgICQkUFdEL3dlYmtpdHdlYnNldHRpbmdzLmggXAog
ICAgICAgICAgICAgICAgICAgICAgJCRQV0Qvd2Via2l0d2Vidmlldy5oCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LmgK
aW5kZXggMmU3Y2Q5ZC4uNDQxMmNmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdC5oCisrKyBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXQuaApAQCAtMjUsNSArMjUsNyBA
QAogI2luY2x1ZGUgPHdlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0d2Vic2V0dGlu
Z3MuaD4KICNpbmNsdWRlIDx3ZWJraXR3ZWJ2aWV3Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViYmFj
a2ZvcndhcmRsaXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KIAogI2Vu
ZGlmIC8qIF9fV0VCS0lUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dl
YmtpdHByaXZhdGUuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuY3BwCmlu
ZGV4IGRjMmI2ZjcuLjNkZGNjNDkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJr
aXRwcml2YXRlLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5jcHAK
QEAgLTgwLDcgKzgwLDcgQEAgV2ViS2l0V2ViVmlldyoga2l0KFdlYkNvcmU6OlBhZ2UqIGNvcmVQ
YWdlKQogICAgIHJldHVybiBjbGllbnQgPyBjbGllbnQtPndlYlZpZXcoKSA6IDA7CiB9CiAKLX0K
K30gLyoqIGVuZCBuYW1lc3BhY2UgV2ViQ29yZSAqLwogCiB2b2lkIHdlYmtpdF9pbml0KCkKIHsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQv
Z3RrL1dlYlZpZXcvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDNlMWFlZTcuLjM0NDNjZDQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0
ay9XZWJWaWV3L3dlYmtpdHByaXZhdGUuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWZodCAoQykg
MjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsMTkg
KzMyLDMwIEBACiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKICNpbmNsdWRlICJ3ZWJraXR3
ZWJzZXR0aW5ncy5oIgogI2luY2x1ZGUgIndlYmtpdG5ldHdvcmtyZXF1ZXN0LmgiCisjaW5jbHVk
ZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCiAKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExp
c3QuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXJDbGllbnQuaCIKIAorI2luY2x1ZGUgPGdsaWIuaD4KKwogbmFtZXNwYWNlIFdlYktpdCB7CiAg
ICAgV2ViS2l0V2ViVmlldyogZ2V0Vmlld0Zyb21GcmFtZShXZWJLaXRXZWJGcmFtZSopOwogCiAg
ICAgV2ViQ29yZTo6RnJhbWUqIGNvcmUoV2ViS2l0V2ViRnJhbWUqKTsKICAgICBXZWJLaXRXZWJG
cmFtZSoga2l0KFdlYkNvcmU6OkZyYW1lKik7CisKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdl
YktpdFdlYlZpZXcqKTsKICAgICBXZWJLaXRXZWJWaWV3KiBraXQoV2ViQ29yZTo6UGFnZSopOwor
CisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKTsK
KyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSoga2l0KFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CisK
KyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGNvcmUoV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0Kik7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAtNjIsNiArNzQsOCBAQCBleHRlcm4gIkMiIHsK
ICAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGFwcGxpY2F0aW9uTmFtZUZvclVzZXJBZ2VudDsKICAg
ICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1c2VyQWdlbnQ7CiAKKyAgICAgICAgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3Q7CisgICAgICAgIAogICAgICAgICBnaW50IGxh
c3RQb3B1cFhQb3NpdGlvbjsKICAgICAgICAgZ2ludCBsYXN0UG9wdXBZUG9zaXRpb247CiAKQEAg
LTkxLDggKzEwNSwxMyBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2NoYXIqIHVyaTsKICAgICB9
OwogCisgICAgLyogV2ViS2l0V2ViRnJhbWUgcHJpdmF0ZSBmdW5jdGlvbiAqLwogICAgIFdlYktp
dFdlYkZyYW1lKiB3ZWJraXRfd2ViX2ZyYW1lX2luaXRfd2l0aF93ZWJfdmlldyhXZWJLaXRXZWJW
aWV3KiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50Kik7CiAKKyAgICAvKiBXZWJLaXRX
ZWJIaXN0b3J5SXRlbSBwcml2YXRlIGZ1bmN0aW9uICovCisgICAgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2NvcmVfaXRlbShXZWJDb3JlOjpI
aXN0b3J5SXRlbSopOworICAgIAorCiAgICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byB3ZWJraXR3
ZWJmcmFtZS5oIG9uY2UgdGhlc2UgZnVuY3Rpb25zIGFyZSBmdWxseQogICAgIC8vIGltcGxlbWVu
dGVkIGFuZCB0aGVpciBBUEkgaGFzIGJlZW4gZGlzY3Vzc2VkLgogCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBiL1dlYktpdC9ndGsv
V2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjgzMGU1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL1dl
YlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcApAQCAtMCwwICsxLDM3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCisjaW5jbHVk
ZSAid2Via2l0cHJpdmF0ZS5oIgorI2luY2x1ZGUgIndlYmtpdHdlYmhpc3RvcnlpdGVtLmgiCisj
aW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorCisjaW5jbHVk
ZSAiQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKKworZXh0ZXJuICJDIiB7CisKK3N0cnVjdCBfV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0UHJpdmF0ZSB7CisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNr
Rm9yd2FyZExpc3Q7Cit9OworCisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1Rf
R0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBX
RUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QsIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dFByaXZhdGUpKQorCitHX0RFRklORV9UWVBFKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCwgd2Vi
a2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdCwgR19UWVBFX09CSkVDVCk7CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfY2xhc3NfaW5pdChXZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3RDbGFzcyoga2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0UHJpdmF0ZSkpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2luaXQoV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgd2ViQmFja0ZvcndhcmRMaXN0
LT5wcml2ID0gV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9HRVRfUFJJVkFURSh3ZWJCYWNr
Rm9yd2FyZExpc3QpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3Rf
bmV3X3dpdGhfd2ViX3ZpZXc6CisgKiBAd2ViVmlldzogdGhlIGJhY2sgZm9yd2FyZCBsaXN0J3Mg
I1dlYktpdFdlYlZpZXcKKyAqIAorICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB0aGUgYmFjayBm
b3J3YXJkIGxpc3Qgd2l0aCBhIGNvbnRyb2xsaW5nICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0
dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqLworV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X25ld193aXRoX3dlYl92
aWV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKworICAgIFdlYktpdFdlYlZpZXdQ
cml2YXRlKiB3ZWJWaWV3RGF0YSA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3
KTsKKyAgICBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdDsKKwor
ICAgIHdlYkJhY2tGb3J3YXJkTGlzdCA9IFdFQktJVF9XRUJfQkFDS19GT1JXQVJEX0xJU1QoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgTlVMTCkpOworICAg
IHdlYkJhY2tGb3J3YXJkTGlzdC0+cHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gd2ViVmlld0RhdGEt
PmNvcmVQYWdlLT5iYWNrRm9yd2FyZExpc3QoKTsKKyAgICB3ZWJCYWNrRm9yd2FyZExpc3QtPnBy
aXYtPmJhY2tGb3J3YXJkTGlzdC0+c2V0RW5hYmxlZChUUlVFKTsKKworICAgIHJldHVybiB3ZWJC
YWNrRm9yd2FyZExpc3Q7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlz
dF9nb19mb3J3YXJkOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0CisgKgorICogU3RlcHMgZm9yd2FyZCBpbiB0aGUgYmFjayBmb3J3YXJkIGxpc3QK
KyAqLwordm9pZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dvX2ZvcndhcmQoV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlz
dCkpOworCisgICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBj
b3JlKHdlYkJhY2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKGJhY2tGb3J3YXJkTGlzdC0+ZW5hYmxl
ZCgpKQorICAgICAgICBiYWNrRm9yd2FyZExpc3QtPmdvRm9yd2FyZCgpOworfQorCisvKioKKyAq
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ29fYmFjazoKKyAqIEB3ZWJCYWNrRm9yd2Fy
ZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFN0ZXBzIGJhY2t3YXJk
IGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFja19mb3J3
YXJkX2xpc3RfZ29fYmFjayhXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJhY2tGb3J3YXJk
TGlzdCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJE
X0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAo
YmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAgIGJhY2tGb3J3YXJkTGlzdC0+Z29C
YWNrKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWlu
c19pdGVtOgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0CisgKiBAd2ViSGlzdG9yeUl0ZW06IHRoZSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0gdG8gY2hl
Y2sKKyAqCisgKiBDaGVja3MgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRoZSBiYWNrIGZvcndh
cmQgbGlzdAorICoKKyAqIFJldHVybjogJVRSVUUgaWYgQHdlYkhpc3RvcnlJdGVtIGlzIGluIHRo
ZSBiYWNrIGZvcndhcmQgbGlzdCwgJUZBTFNFIGlmIGl0IGRvZXNuJ3QKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9jb250YWluc19pdGVtKFdlYktpdFdlYkJhY2tG
b3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0LCBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9C
QUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5SXRlbSks
IE5VTEwpOworICAgIAorICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IGNv
cmUod2ViSGlzdG9yeUl0ZW0pOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaGlzdG9yeUl0
ZW0gIT0gTlVMTCwgRkFMU0UpOworICAgIAorICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCog
YmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworCisgICAgcmV0dXJu
IChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSA/IGJhY2tGb3J3YXJkTGlzdC0+Y29udGFpbnNJ
dGVtKGhpc3RvcnlJdGVtKSA6IEZBTFNFKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dvX3RvX2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEB3ZWJIaXN0b3J5SXRlbTogdGhlICNXZWJLaXRXZWJI
aXN0b3J5SXRlbSB0byBnbyB0bworICoKKyAqIEdvIHRvIHRoZSBzcGVjaWZpZWQgQHdlYkhpc3Rv
cnlJdGVtIGluIHRoZSBiYWNrIGZvcndhcmQgbGlzdAorICovCit2b2lkIHdlYmtpdF93ZWJfYmFj
a19mb3J3YXJkX2xpc3RfZ29fdG9faXRlbShXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYkJh
Y2tGb3J3YXJkTGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQorewor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJC
YWNrRm9yd2FyZExpc3QpKTsKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElT
VE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSog
aGlzdG9yeUl0ZW0gPSBjb3JlKHdlYkhpc3RvcnlJdGVtKTsKKyAgICBXZWJDb3JlOjpCYWNrRm9y
d2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKwor
ICAgIGlmIChiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSAmJiBoaXN0b3J5SXRlbSkKKyAgICAg
ICAgYmFja0ZvcndhcmRMaXN0LT5nb1RvSXRlbShoaXN0b3J5SXRlbSk7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQ6
CisgKiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAq
IEBsaW1pdDogdGhlIG51bWJlciBvZiBpdGVtcyB0byByZXRyaWV2ZQorICoKKyAqIFJldHVybnMg
YSBsaXN0IG9mIGl0ZW1zIHRoYXQgc3VjY2VlZCB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5
IEBsaW1pdAorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjR0xpc3Qgb2YgaXRlbXMgc3VjY2VlZGlu
ZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICovCitHTGlzdCogd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9saXN0X3dpdGhfbGltaXQoV2ViS2l0
V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgbGltaXQpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3
ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICgh
YmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciBpdGVtcyhsaW1p
dCk7CisgICAgR0xpc3QqIGZvcndhcmRJdGVtcyA9IHsgMCB9OworICAgIAorICAgIGJhY2tGb3J3
YXJkTGlzdC0+Zm9yd2FyZExpc3RXaXRoTGltaXQobGltaXQsIGl0ZW1zKTsKKyAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICBXZWJL
aXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSB3ZWJraXRfd2ViX2hpc3RvcnlfaXRl
bV9uZXdfd2l0aF9jb3JlX2l0ZW0oaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBmb3J3YXJkSXRl
bXMgPSBnX2xpc3RfcHJlcGVuZChmb3J3YXJkSXRlbXMsIGdfb2JqZWN0X3JlZih3ZWJIaXN0b3J5
SXRlbSkpOworICAgIH0KKworICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShmb3J3YXJkSXRlbXMp
OworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfbGlz
dF93aXRoX2xpbWl0OgorICogQHdlYkJhY2tGb3J3YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0CisgKiBAbGltaXQ6IHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gcmV0cmlldmUKKyAq
CisgKiBSZXR1cm5zIGEgbGlzdCBvZiBpdGVtcyB0aGF0IHByZWNlZGUgdGhlIGN1cnJlbnQgaXRl
bSwgbGltaXRlZCBieSBAbGltaXQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IGEgI0dMaXN0IG9mIGl0
ZW1zIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtLCBsaW1pdGVkIGJ5IEBsaW1pdAorICovCitH
TGlzdCogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dpdGhfbGlt
aXQoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgbGlt
aXQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldB
UkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tG
b3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOwor
ICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciBp
dGVtcyhsaW1pdCk7CisgICAgR0xpc3QqIGJhY2tJdGVtcyA9IHsgMCB9OworCisgICAgYmFja0Zv
cndhcmRMaXN0LT5iYWNrTGlzdFdpdGhMaW1pdChsaW1pdCwgaXRlbXMpOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSA9IHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX25l
d193aXRoX2NvcmVfaXRlbShpdGVtc1tpXS5nZXQoKSk7CisgICAgICAgIGJhY2tJdGVtcyA9IGdf
bGlzdF9wcmVwZW5kKGJhY2tJdGVtcywgZ19vYmplY3RfcmVmKHdlYkhpc3RvcnlJdGVtKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGdfbGlzdF9yZXZlcnNlKGJhY2tJdGVtcyk7Cit9CisvKioKKyAq
IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbToKKyAqIEB3ZWJCYWNr
Rm9yd2FyZExpc3Q6IGEgI1dlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIGl0
ZW0gdGhhdCBwcmVjZWRlcyB0aGUgY3VycmVudCBpdGVtCisgKgorICogUmV0dXJuIHZhbHVlOiB0
aGUgI1dlYktpdFdlYkhpc3RvcnlJdGVtIHByZWNlZGluZyB0aGUgY3VycmVudCBpdGVtCisgKi8K
K1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9i
YWNrX2l0ZW0oV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElT
VCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJk
TGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlm
ICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJ
dGVtID0gYmFja0ZvcndhcmRMaXN0LT5iYWNrSXRlbSgpOworCisgICAgcmV0dXJuIChoaXN0b3J5
SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vi
X2JhY2tfZm9yd2FyZF9saXN0X2dldF9jdXJyZW50X2l0ZW06CisgKiBAd2ViQmFja0ZvcndhcmRM
aXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJy
ZW50IGl0ZW0uCisgKgorICogUmV0dXJucyBhIE5VTEwgdmFsdWUgaWYgdGhlIGJhY2sgZm9yd2Fy
ZCBsaXN0IGlzIGVtcHR5CisgKgorICogUmV0dXJuIHZhbHVlOiBhICNXZWJLaXRXZWJIaXN0b3J5
SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRf
bGlzdF9nZXRfY3VycmVudF9pdGVtKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0Zv
cndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFD
S19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3Jl
OjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRM
aXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFi
bGVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
IGhpc3RvcnlJdGVtID0gYmFja0ZvcndhcmRMaXN0LT5jdXJyZW50SXRlbSgpOworCisgICAgcmV0
dXJuIChoaXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2l0ZW06CisgKiBAd2Vi
QmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1
cm5zIHRoZSBpdGVtIHRoYXQgc3VjY2VlZHMgdGhlIGN1cnJlbnQgaXRlbS4KKyAqCisgKiBSZXR1
cm5zIGEgTlVMTCB2YWx1ZSBpZiB0aGVyZSBub3RoaW5nIHRoYXQgc3VjY2VlZHMgdGhlIGN1cnJl
bnQgaXRlbQorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAq
LyAgICAKK1dlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dldF9mb3J3YXJkX2l0ZW0oV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2Fy
ZExpc3QpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZP
UldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJh
Y2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRMaXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3Qp
OworICAgIGlmICghYmFja0ZvcndhcmRMaXN0IHx8ICFiYWNrRm9yd2FyZExpc3QtPmVuYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaGlz
dG9yeUl0ZW0gPSBiYWNrRm9yd2FyZExpc3QtPmZvcndhcmRJdGVtKCk7CisKKyAgICByZXR1cm4g
KGhpc3RvcnlJdGVtID8ga2l0KGhpc3RvcnlJdGVtKSA6IE5VTEwpOworfQorCisvKioKKyAqIHdl
YmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtOgorICogQHdlYkJhY2tGb3J3
YXJkTGlzdDogYSAjV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0CisgKiBAaW5kZXg6IHRoZSBpbmRl
eCBvZiB0aGUgaXRlbQorICoKKyAqIFJldHVybnMgdGhlIGl0ZW0gYXQgYSBnaXZlbiBpbmRleCBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpdGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlICNX
ZWJLaXRXZWJIaXN0b3J5SXRlbSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggcmVsYXRp
dmUgdG8gdGhlIGN1cnJlbnQgaXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0
X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfbnRoX2l0ZW0oV2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QsIGdpbnQgaW5kZXgpCit7CisgICAgZ19yZXR1cm5fdmFs
X2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJCYWNrRm9yd2FyZExp
c3QpLCBOVUxMKTsKKworICAgIFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdCogYmFja0ZvcndhcmRM
aXN0ID0gY29yZSh3ZWJCYWNrRm9yd2FyZExpc3QpOworICAgIGlmICghYmFja0ZvcndhcmRMaXN0
KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0
b3J5SXRlbSA9IGJhY2tGb3J3YXJkTGlzdC0+aXRlbUF0SW5kZXgoaW5kZXgpOworCisgICAgcmV0
dXJuIChoaXN0b3J5SXRlbSA/IGtpdChoaXN0b3J5SXRlbSkgOiBOVUxMKTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aDoKKyAqIEB3ZWJC
YWNrRm9yd2FyZExpc3Q6IGEgI1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVy
bnMgdGhlIG51bWJlciBvZiBpdGVtcyB0aGF0IHByZWNlZCB0aGUgY3VycmVudCBpdGVtLgorICoK
KyAqIFJldHVybiB2YWx1ZTogYSAjZ2ludCBjb3JyZXNwb25kaW5nIHRvIHRoZSBudW1iZXIgb2Yg
aXRlbXMgcHJlY2VkaW5nIHRoZSBjdXJyZW50IGl0ZW0KKyAqLworZ2ludCB3ZWJraXRfd2ViX2Jh
Y2tfZm9yd2FyZF9saXN0X2dldF9iYWNrX2xlbmd0aChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Qq
IHdlYkJhY2tGb3J3YXJkTGlzdCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUKHdlYkJhY2tGb3J3YXJkTGlzdCksIE5VTEwpOworCisg
ICAgV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBiYWNrRm9yd2FyZExpc3QgPSBjb3JlKHdlYkJh
Y2tGb3J3YXJkTGlzdCk7CisgICAgaWYgKCFiYWNrRm9yd2FyZExpc3QgfHwgIWJhY2tGb3J3YXJk
TGlzdC0+ZW5hYmxlZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNrRm9y
d2FyZExpc3QtPmJhY2tMaXN0Q291bnQoKTsKK30KKyAgICAKKy8qKgorICogd2Via2l0X3dlYl9i
YWNrX2ZvcndhcmRfbGlzdF9nZXRfZm9yd2FyZF9sZW5ndGg6CisgKiBAd2ViQmFja0ZvcndhcmRM
aXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqCisgKiBSZXR1cm5zIHRoZSBudW1i
ZXIgb2YgaXRlbXMgdGhhdCBzdWNjZWVkIHRoZSBjdXJyZW50IGl0ZW0uCisgKgorICogUmV0dXJu
IHZhbHVlOiBhICNnaW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG51YmVyIG9mIGl0ZW1zIHN1Y2Nl
ZWRpbmcgdGhlIGN1cnJlbnQgaXRlbQorICovCitnaW50IHdlYmtpdF93ZWJfYmFja19mb3J3YXJk
X2xpc3RfZ2V0X2ZvcndhcmRfbGVuZ3RoKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFj
a0ZvcndhcmRMaXN0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
QkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJD
b3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0Zvcndh
cmRMaXN0KTsKKyAgICBpZiAoIWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5l
bmFibGVkKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBiYWNrRm9yd2Fy
ZExpc3QtPmZvcndhcmRMaXN0Q291bnQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9jYXBhY2l0eToKKyAqIEB3ZWJCYWNrRm9yd2FyZExpc3Q6IGEgI1dl
YktpdFdlYkJhY2tGb3J3YXJkTGlzdAorICoKKyAqIFJldHVybnMgdGhlIG1heGltdW0gbGltaXQg
b2YgdGhlIGJhY2sgZm9yd2FyZCBsaXN0LgorICoKKyAqIFJldHVybiB2YWx1ZTogYSAjZ2ludCBp
bmRpY2F0aW5nIHRoZSBudW1iZXIgb2YgI1dlYkhpc3RvcnlJdGVtIHRoZSBiYWNrIGZvcndhcmQg
bGlzdCBjYW4gaG9sZAorICovCitnaW50IHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0
X2xpbWl0KFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViQmFja0ZvcndhcmRMaXN0KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qo
d2ViQmFja0ZvcndhcmRMaXN0KSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QqIGJhY2tGb3J3YXJkTGlzdCA9IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAo
IWJhY2tGb3J3YXJkTGlzdCB8fCAhYmFja0ZvcndhcmRMaXN0LT5lbmFibGVkKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tGb3J3YXJkTGlzdC0+Y2FwYWNpdHkoKTsKK30K
KyAgICAKKy8qKgorICogd2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQ6Cisg
KiBAd2ViQmFja0ZvcndhcmRMaXN0OiBhICNXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QKKyAqIEBs
aW1pdDogdGhlIGxpbWl0IHRvIHNldCB0aGUgYmFjayBmb3J3YXJkIGxpc3QgdG8KKyAqCisgKiBT
ZXRzIHRoZSBtYXhpbXVtIGxpbWl0IG9mIHRoZSBiYWNrIGZvcndhcmQgbGlzdC4gSWYgdGhlIGJh
Y2sgZm9yd2FyZCBsaXN0CisgKiBleGNlZWRzIGl0cyBjYXBhY2l0eSwgaXRlbXMgd2lsbCBiZSBy
ZW1vdmVkIGV2ZXJ5dGltZSBhIG5ldyBpdGVtIGhhcyBiZWVuCisgKiBhZGRlZC4KKyAqLwordm9p
ZCB3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X3NldF9saW1pdChXZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3QqIHdlYkJhY2tGb3J3YXJkTGlzdCwgZ2ludCBsaW1pdCkKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qod2ViQmFja0ZvcndhcmRM
aXN0KSk7CisKKyAgICBXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QqIGJhY2tGb3J3YXJkTGlzdCA9
IGNvcmUod2ViQmFja0ZvcndhcmRMaXN0KTsKKyAgICBpZiAoYmFja0ZvcndhcmRMaXN0KQorICAg
ICAgICBiYWNrRm9yd2FyZExpc3QtPnNldENhcGFjaXR5KGxpbWl0KTsKK30KKyAgICAKK30gLyog
ZW5kIGV4dGVybiAiQyIgKi8KKworV2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0KiBXZWJLaXQ6OmNv
cmUoV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJCYWNrRm9yd2FyZExpc3QpCit7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldBUkRfTElTVCh3ZWJC
YWNrRm9yd2FyZExpc3QpLCBOVUxMKTsKKworICAgIHJldHVybiB3ZWJCYWNrRm9yd2FyZExpc3Qt
PnByaXYgPyB3ZWJCYWNrRm9yd2FyZExpc3QtPnByaXYtPmJhY2tGb3J3YXJkTGlzdCA6IDA7Cit9
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0
LmggYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFmZTljZgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaApAQCAtMCwwICsx
LDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8g
PGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXRUJLSVRfV0VCX0JBQ0tfRk9SV0FS
RF9MSVNUX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9ICisKKyNpbmNs
dWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKworI2luY2x1ZGUgIndlYmtp
dGRlZmluZXMuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNUICAgICAg
ICAgICAgKHdlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5cGUoKSkKKyNkZWZpbmUg
V0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVChvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1Qs
IFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCkpCisjZGVmaW5lIFdFQktJVF9XRUJfQkFDS19GT1JX
QVJEX0xJU1RfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfV0VCX0JBQ0tfRk9SV0FSRF9MSVNULCBXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3RDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfQkFDS19GT1JXQVJEX0xJU1Qob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVf
V0VCX0JBQ0tfRk9SV0FSRF9MSVNUKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9CQUNLX0ZPUldB
UkRfTElTVF9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9XRUJfQkFDS19GT1JXQVJEX0xJU1QpKQorI2RlZmluZSBXRUJLSVRfV0VCX0JB
Q0tfRk9SV0FSRF9MSVNUX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFT
Uygob2JqKSwgIFdFQktJVF9UWVBFX1dFQl9CQUNLX0ZPUldBUkRfTElTVCwgV2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0Q2xhc3MpKQorCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9y
d2FyZExpc3RQcml2YXRlIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdFByaXZhdGU7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0IFdlYktpdFdlYkJhY2tGb3J3YXJkTGlz
dDsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcyBXZWJLaXRX
ZWJCYWNrRm9yd2FyZExpc3RDbGFzczsKKworCitzdHJ1Y3QgX1dlYktpdFdlYkJhY2tGb3J3YXJk
TGlzdCB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBX
ZWJLaXRXZWJCYWNrRm9yd2FyZExpc3RQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3RDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudDsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X3R5
cGUgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCoKK3dlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfbmV3X3dpdGhfd2ViX3ZpZXcgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dvX2ZvcndhcmQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2Fy
ZF9saXN0KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0
X2dvX2JhY2sgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9j
b250YWluc19pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRf
bGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nb190b19pdGVtIChXZWJLaXRXZWJC
YWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIGhpc3RvcnlfaXRlbSk7CisKK1dFQktJVF9BUEkgR0xpc3QqCit3ZWJraXRfd2ViX2JhY2tf
Zm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xpc3Rfd2l0aF9saW1pdCAoV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QsIGdpbnQgbGltaXQpOworCitXRUJLSVRf
QVBJIEdMaXN0Kgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19saXN0X3dp
dGhfbGltaXQgKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0
LCBnaW50IGxpbWl0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2JhY2tfaXRlbSAoV2ViS2l0V2ViQmFja0Zvcndh
cmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhp
c3RvcnlJdGVtKgord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfY3VycmVudF9pdGVt
IChXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9s
aXN0X2dldF9mb3J3YXJkX2l0ZW0gKFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tf
Zm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJIaXN0b3J5SXRlbSoKK3dlYmtp
dF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X250aF9pdGVtIChXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCwgZ2ludCBpbmRleCk7CisKK1dFQktJVF9BUEkg
Z2ludAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9nZXRfYmFja19sZW5ndGggKFdlYktp
dFdlYkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0KTsKKworV0VCS0lUX0FQ
SSBnaW50Cit3ZWJraXRfd2ViX2JhY2tfZm9yd2FyZF9saXN0X2dldF9mb3J3YXJkX2xlbmd0aCAo
V2ViS2l0V2ViQmFja0ZvcndhcmRMaXN0KiB3ZWJfYmFja19mb3J3YXJkX2xpc3QpOworCitXRUJL
SVRfQVBJIGdpbnQKK3dlYmtpdF93ZWJfYmFja19mb3J3YXJkX2xpc3RfZ2V0X2xpbWl0IChXZWJL
aXRXZWJCYWNrRm9yd2FyZExpc3QqIHdlYl9iYWNrX2ZvcndhcmRfbGlzdCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9zZXRfbGltaXQgKFdlYktpdFdl
YkJhY2tGb3J3YXJkTGlzdCogd2ViX2JhY2tfZm9yd2FyZF9saXN0LCBnaW50IGxpbWl0KTsKKwor
R19FTkRfREVDTFMKKworCisjZW5kaWYgLyogV0VCS0lUX1dFQl9CQUNLX0ZPUldBUkRfTElTVF9I
ICovCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0u
Y3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNhMmIyCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmhpc3RvcnlpdGVtLmNwcApAQCAtMCwwICsxLDMz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKYW4gTWljaGFlbCBDLiBBbG9uem8KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgor
I2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKworI2luY2x1
ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2V4dGVybiAiQyIgewor
CitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtUHJpdmF0ZSB7CisgICAgV2ViQ29yZTo6SGlz
dG9yeUl0ZW0qIGhpc3RvcnlJdGVtOworICAgIAorICAgIGdjaGFyKiB0aXRsZTsKKyAgICBnY2hh
ciogYWx0ZXJuYXRlVGl0bGU7CisgICAgZ2NoYXIqIHVyaTsKKyAgICBnY2hhciogb3JpZ2luYWxV
cmk7Cit9OworCisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0dFVF9QUklWQVRFKG9i
aikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VC
X0hJU1RPUllfSVRFTSwgV2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlKSkKKworR19ERUZJTkVf
VFlQRShXZWJLaXRXZWJIaXN0b3J5SXRlbSwgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW0sIEdfVFlQ
RV9PQkpFQ1QpOworCisKK3N0YXRpYyBHSGFzaFRhYmxlKiB3ZWJraXRfaGlzdG9yeV9pdGVtcygp
Cit7CisgICAgc3RhdGljIEdIYXNoVGFibGUqIGhpc3RvcnlJdGVtcyA9IGdfaGFzaF90YWJsZV9u
ZXcoZ19kaXJlY3RfaGFzaCwgZ19kaXJlY3RfZXF1YWwpOyAgIAorICAgIHJldHVybiBoaXN0b3J5
SXRlbXM7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9oaXN0b3J5X2l0ZW1fYWRkKFdlYktpdFdl
Ykhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGhpc3Rv
cnlJdGVtKSAKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9J
VEVNKHdlYkhpc3RvcnlJdGVtKSk7CisgICAgCisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJr
aXRfaGlzdG9yeV9pdGVtcygpOworCisgICAgaGlzdG9yeUl0ZW0tPnJlZigpOworICAgIGdfaGFz
aF90YWJsZV9pbnNlcnQodGFibGUsIGhpc3RvcnlJdGVtLCBnX29iamVjdF9yZWYod2ViSGlzdG9y
eUl0ZW0pKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2hpc3RvcnlfaXRlbV9yZW1vdmUoV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qIGhpc3RvcnlJdGVtKQoreworICAgIEdIYXNoVGFibGUqIHRhYmxl
ID0gd2Via2l0X2hpc3RvcnlfaXRlbXMoKTsKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKSBnX2hhc2hfdGFibGVfbG9va3Vw
KHRhYmxlLCBoaXN0b3J5SXRlbSk7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKHdlYkhpc3RvcnlJ
dGVtICE9IE5VTEwpOworICAgIAorICAgIGdfaGFzaF90YWJsZV9yZW1vdmUodGFibGUsIGhpc3Rv
cnlJdGVtKTsKKyAgICBoaXN0b3J5SXRlbS0+ZGVyZWYoKTsKKyAgICBnX29iamVjdF91bnJlZih3
ZWJIaXN0b3J5SXRlbSk7Cit9CisgICAgCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3Rvcnlf
aXRlbV9kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRl
bSogaXRlbSA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNKG9iamVjdCk7CisKKyAgICB3ZWJraXRf
aGlzdG9yeV9pdGVtX3JlbW92ZShpdGVtLT5wcml2LT5oaXN0b3J5SXRlbSk7CisgICAgCisgICAg
ZGVsZXRlIGl0ZW0tPnByaXYtPmhpc3RvcnlJdGVtOworCisgICAgLyogZGVzdHJveSB0YWJsZSBp
ZiBlbXB0eSAqLworICAgIEdIYXNoVGFibGUqIHRhYmxlID0gd2Via2l0X2hpc3RvcnlfaXRlbXMo
KTsKKyAgICBpZiAoIWdfaGFzaF90YWJsZV9zaXplKHRhYmxlKSkKKyAgICAgICAgZ19oYXNoX3Rh
YmxlX2Rlc3Ryb3kodGFibGUpOworICAgIAorICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJf
aGlzdG9yeV9pdGVtX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKyAgICAKKwor
c3RhdGljIHZvaWQgd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxpemUoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IFdFQktJVF9X
RUJfSElTVE9SWV9JVEVNKG9iamVjdCk7CisKKyAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYt
PnRpdGxlKTsKKyAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPmFsdGVybmF0ZVRpdGxlKTsK
KyAgICBnX2ZyZWUoaGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisgICAgZ19mcmVlKGhpc3RvcnlJ
dGVtLT5wcml2LT5vcmlnaW5hbFVyaSk7CisKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2Vi
X2hpc3RvcnlfaXRlbV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9jbGFzc19pbml0KFdlYktpdFdlYkhpc3Rv
cnlJdGVtQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9kaXNwb3NlOworICAgIGdvYmplY3RfY2xhc3MtPmZpbmFs
aXplID0gd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZmluYWxpemU7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoZ29iamVjdF9jbGFzcywgc2l6ZW9mKFdlYktpdFdlYkhpc3RvcnlJdGVt
UHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9pbml0
KFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJIaXN0b3J5SXRlbSkKK3sKKyAgICB3ZWJIaXN0b3J5
SXRlbS0+cHJpdiA9IFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0dFVF9QUklWQVRFKHdlYkhpc3Rv
cnlJdGVtKTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBXZWJIaXN0
b3J5SXRlbSBpbnN0YW5jZSB3aGVuIG5lZWRlZCAqLworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
YmtpdF93ZWJfaGlzdG9yeV9pdGVtX25ld193aXRoX2NvcmVfaXRlbShXZWJDb3JlOjpIaXN0b3J5
SXRlbSogaXRlbSkKK3sKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0g
PSBraXQoaXRlbSk7CisKKyAgICBpZiAoIXdlYkhpc3RvcnlJdGVtKSB7CisgICAgICAgIHdlYkhp
c3RvcnlJdGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX1dFQl9ISVNUT1JZX0lURU0sIE5VTEwpKTsKKyAgICAgICAgd2ViSGlzdG9yeUl0ZW0tPnBy
aXYtPmhpc3RvcnlJdGVtID0gaXRlbTsKKyAgICAgICAgd2Via2l0X2hpc3RvcnlfaXRlbV9hZGQo
d2ViSGlzdG9yeUl0ZW0sIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5SXRlbSk7CisgICAg
fQorCisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtOworfQorCisKKy8qKgorICogd2Via2l0X3dl
Yl9oaXN0b3J5X2l0ZW1fbmV3OgorICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFdlYkhpc3Rv
cnlJdGVtIGluc3RhbmNlCisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgbmV3ICNXZWJLaXRXZWJI
aXN0b3J5SXRlbQorICovCitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5
X2l0ZW1fbmV3KHZvaWQpCit7CisgICAgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJ
dGVtID0gV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9ISVNUT1JZX0lURU0sIE5VTEwpKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0
b3J5SXRlbSA9IG5ldyBXZWJDb3JlOjpIaXN0b3J5SXRlbSgpOworCisgICAgd2Via2l0X2hpc3Rv
cnlfaXRlbV9hZGQod2ViSGlzdG9yeUl0ZW0sIHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5
SXRlbSk7CisKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW07Cit9CisKKworLyoqCisgKiB3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXdfd2l0aF9kYXRhOgorICogQHVyaTogdGhlIHVyaSBvZiB0
aGUgcGFnZQorICogQHRpdGxlOiB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UKKyAqCisgKiBDcmVhdGVz
IGEgbmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRlbSB3aXRoIHRoZSBnaXZlbiBVUkkgYW5kIHRpdGxl
CisgKgorICogUmV0dXJuIHZhbHVlOiB0aGUgbmV3ICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICov
CitXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhf
ZGF0YShjb25zdCBnY2hhciogdXJpLCBjb25zdCBnY2hhciogdGl0bGUpCit7CisgICAgV2ViQ29y
ZTo6S1VSTCBoaXN0b3J5VXJpKHVyaSk7CisgICAgV2ViQ29yZTo6U3RyaW5nIGhpc3RvcnlUaXRs
ZSh0aXRsZSk7CisKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0gPSB3
ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcoKTsKKworICAgIHdlYkhpc3RvcnlJdGVtLT5wcml2
LT5oaXN0b3J5SXRlbSA9IG5ldyBXZWJDb3JlOjpIaXN0b3J5SXRlbShoaXN0b3J5VXJpLCBoaXN0
b3J5VGl0bGUpOworCisgICAgd2Via2l0X2hpc3RvcnlfaXRlbV9hZGQod2ViSGlzdG9yeUl0ZW0s
IHdlYkhpc3RvcnlJdGVtLT5wcml2LT5oaXN0b3J5SXRlbSk7CisgICAgICAgIAorICAgIHJldHVy
biB3ZWJIaXN0b3J5SXRlbTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9n
ZXRfdGl0bGU6CisgKiBAd2ViSGlzdG9yeUl0ZW06IGEgI1dlYktpdFdlYkhpc3RvcnlJdGVtCisg
KgorICogUmV0dXJucyB0aGUgcGFnZSB0aXRsZSBvZiBAd2ViSGlzdG9yeUl0ZW0KKyAqLworY29u
c3QgZ2NoYXIqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZShXZWJLaXRXZWJIaXN0
b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3
ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBOVUxM
LCBOVUxMKTsKKyAgICAKKyAgICBXZWJDb3JlOjpTdHJpbmcgdGl0bGUgPSBpdGVtLT50aXRsZSgp
OworCisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT50aXRsZSk7CisKKyAgICB3ZWJI
aXN0b3J5SXRlbS0+cHJpdi0+dGl0bGUgPSBnX3N0cmR1cCh0aXRsZS51dGY4KCkuZGF0YSgpKTsK
KyAgICAgIAorICAgIHJldHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dGl0bGU7Cit9CisKKy8q
KgorICogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZToKKyAqIEB3
ZWJIaXN0b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRo
ZSBhbHRlcm5hdGUgdGl0bGUgb2YgQHdlYkhpc3RvcnlJdGVtCisgKgorICogUmV0dXJuIHZhbHVl
OiB0aGUgYWx0ZXJuYXRlIHRpdGxlIG9mIEB3ZWJIaXN0b3J5SXRlbQorICovCitjb25zdCBnY2hh
ciogd2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZShXZWJLaXRXZWJI
aXN0b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAg
IFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRF
TSh3ZWJIaXN0b3J5SXRlbSkpOworCisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoaXRlbSAhPSBO
VUxMLCBOVUxMKTsKKyAgICAKKyAgICBXZWJDb3JlOjpTdHJpbmcgYWx0ZXJuYXRlVGl0bGUgPSBp
dGVtLT5hbHRlcm5hdGVUaXRsZSgpOworCisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2
LT5hbHRlcm5hdGVUaXRsZSk7CisKKyAgICB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+YWx0ZXJuYXRl
VGl0bGUgPSBnX3N0cmR1cChhbHRlcm5hdGVUaXRsZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJl
dHVybiB3ZWJIaXN0b3J5SXRlbS0+cHJpdi0+YWx0ZXJuYXRlVGl0bGU7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fc2V0X2FsdGVybmF0ZV90aXRsZToKKyAqIEB3ZWJIaXN0
b3J5SXRlbTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqIEB0aXRsZTogdGhlIGFsdGVybmF0
ZSB0aXRsZSBmb3IgQHRoaXMgaGlzdG9yeSBpdGVtCisgKgorICogU2V0cyBhbiBhbHRlcm5hdGUg
dGl0bGUgZm9yIEB3ZWJIaXN0b3J5SXRlbQorICovCit2b2lkIHdlYmtpdF93ZWJfaGlzdG9yeV9p
dGVtX3NldF9hbHRlcm5hdGVfdGl0bGUoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJ
dGVtLCBjb25zdCBnY2hhciogdGl0bGUpIAoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIFdlYkNvcmU6Okhp
c3RvcnlJdGVtKiBpdGVtID0gY29yZShXRUJLSVRfV0VCX0hJU1RPUllfSVRFTSh3ZWJIaXN0b3J5
SXRlbSkpOworCisgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nIGFsdGVybmF0ZVRpdGxlID0gdGl0
bGU7CisgICAgaXRlbS0+c2V0QWx0ZXJuYXRlVGl0bGUoYWx0ZXJuYXRlVGl0bGUpOworfQorICAg
IAorLyoqCisgKiB3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdXJpOgorICogQHdlYkhpc3Rv
cnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybnMgdGhlIFVSSSBv
ZiBAdGhpcworICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIFVSSSBvZiBAd2ViSGlzdG9yeUl0ZW0K
KyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF91cmkoV2ViS2l0
V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3RvcnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisK
KyAgICBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZ
X0lURU0od2ViSGlzdG9yeUl0ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0g
IT0gTlVMTCwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpTdHJpbmcgdXJpID0gaXRlbS0+dXJsU3Ry
aW5nKCk7CisKKyAgICBnX2ZyZWUod2ViSGlzdG9yeUl0ZW0tPnByaXYtPnVyaSk7CisKKyAgICB3
ZWJIaXN0b3J5SXRlbS0+cHJpdi0+dXJpID0gZ19zdHJkdXAodXJpLnV0ZjgoKS5kYXRhKCkpOwor
CisgICAgcmV0dXJuIHdlYkhpc3RvcnlJdGVtLT5wcml2LT51cmk7Cit9CisKKy8qKgorICogd2Vi
a2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaToKKyAqIEB3ZWJIaXN0b3J5SXRl
bTogYSAjV2ViS2l0V2ViSGlzdG9yeUl0ZW0KKyAqCisgKiBSZXR1cm5zIHRoZSBvcmlnaW5hbCBV
Ukkgb2YgQHdlYkhpc3RvcnlJdGVtLgorICoKKyAqIFJldHVybiB2YWx1ZTogdGhlIG9yaWdpbmFs
IFVSSSBvZiBAd2ViSGlzdG9yeUlUZW0KKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF9vcmlnaW5hbF91cmkoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdlYkhpc3Rv
cnlJdGVtKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9S
WV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0b3J5SXRl
bSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pKTsK
KworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwgTlVMTCk7CisKKyAgICBX
ZWJDb3JlOjpTdHJpbmcgb3JpZ2luYWxVcmkgPSBpdGVtLT5vcmlnaW5hbFVSTFN0cmluZygpOwor
CisgICAgZ19mcmVlKHdlYkhpc3RvcnlJdGVtLT5wcml2LT5vcmlnaW5hbFVyaSk7CisKKyAgICB3
ZWJIaXN0b3J5SXRlbS0+cHJpdi0+b3JpZ2luYWxVcmkgPSBnX3N0cmR1cChvcmlnaW5hbFVyaS51
dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gd2ViSGlzdG9yeUl0ZW0tPnByaXYtPm9y
aWdpbmFsVXJpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF9sYXN0
X3Zpc2lzdGVkX3RpbWUgOgorICogQHdlYkhpc3RvcnlJdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5
SXRlbQorICoKKyAqIFJldHVybnMgdGhlIGxhc3QgdGltZSBAd2ViSGlzdG9yeUl0ZW0gd2FzIHZp
c2l0ZWQKKyAqCisgKiBSZXR1cm4gdmFsdWU6IHRoZSB0aW1lIGluIHNlY29uZHMgdGhpcyBAd2Vi
SGlzdG9yeUl0ZW0gd2FzIGxhc3QgdmlzaXRlZAorICovCitnZG91YmxlIHdlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZShXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2Vi
SGlzdG9yeUl0ZW0pIAoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJf
SElTVE9SWV9JVEVNKHdlYkhpc3RvcnlJdGVtKSwgTlVMTCk7CisKKyAgICBXZWJDb3JlOjpIaXN0
b3J5SXRlbSogaXRlbSA9IGNvcmUoV0VCS0lUX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0
ZW0pKTsKKworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGl0ZW0gIT0gTlVMTCwgMCk7CisKKyAg
ICByZXR1cm4gaXRlbS0+bGFzdFZpc2l0ZWRUaW1lKCk7Cit9CisKK30gLyogZW5kIGV4dGVybiAi
QyIgKi8KKworV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIFdlYktpdDo6Y29yZShXZWJLaXRXZWJIaXN0
b3J5SXRlbSogd2ViSGlzdG9yeUl0ZW0pCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQl9ISVNUT1JZX0lURU0od2ViSGlzdG9yeUl0ZW0pLCBOVUxMKTsKKworICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBoaXN0b3J5SXRlbSA9IHdlYkhpc3RvcnlJdGVtLT5wcml2LT5o
aXN0b3J5SXRlbTsKKworICAgIHJldHVybiBoaXN0b3J5SXRlbSA/IGhpc3RvcnlJdGVtIDogMDsK
K30KKworV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIFdlYktpdDo6a2l0KFdlYkNvcmU6Okhpc3RvcnlJ
dGVtKiBoaXN0b3J5SXRlbSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChoaXN0b3J5SXRl
bSAhPSBOVUxMLCBOVUxMKTsKKyAgICAKKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbSogd2ViSGlz
dG9yeUl0ZW07CisgICAgR0hhc2hUYWJsZSogdGFibGUgPSB3ZWJraXRfaGlzdG9yeV9pdGVtcygp
OworCisgICAgd2ViSGlzdG9yeUl0ZW0gPSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qKSBnX2hhc2hf
dGFibGVfbG9va3VwKHRhYmxlLCBoaXN0b3J5SXRlbSk7CisgICAgcmV0dXJuIHdlYkhpc3RvcnlJ
dGVtOworfQorCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9y
eWl0ZW0uaCBiL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJoaXN0b3J5aXRlbS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YTAyNGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaApAQCAtMCwwICsxLDg0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEphbiBNaWNoYWVsIEMuIEFsb256bworICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZu
ZGVmIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0gKKyNkZWZpbmUgV0VCS0lUX1dFQl9ISVNUT1JZ
X0lURU1fSAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+Cisj
aW5jbHVkZSA8Z2RrL2dkay5oPgorCisjaW5jbHVkZSAid2Via2l0ZGVmaW5lcy5oIgorCitHX0JF
R0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSAgICAgICAg
ICAgICh3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0hJU1RPUllfSVRFTShvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNLCBXZWJLaXRXZWJIaXN0b3J5
SXRlbSkpCisjZGVmaW5lIFdFQktJVF9XRUJfSElTVE9SWV9JVEVNX0NMQVNTKGtsYXNzKSAgICAo
R19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZ
X0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VC
X0hJU1RPUllfSVRFTShvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfVFlQRV9XRUJfSElTVE9SWV9JVEVNKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dF
Ql9ISVNUT1JZX0lURU1fQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfV0VCX0hJU1RPUllfSVRFTSkpCisjZGVmaW5lIFdFQktJVF9XRUJf
SElTVE9SWV9JVEVNX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygo
b2JqKSwgIFdFQktJVF9UWVBFX1dFQl9ISVNUT1JZX0lURU0sIFdlYktpdFdlYkhpc3RvcnlJdGVt
Q2xhc3MpKQorCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUg
V2ViS2l0V2ViSGlzdG9yeUl0ZW1Qcml2YXRlOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkhp
c3RvcnlJdGVtIFdlYktpdFdlYkhpc3RvcnlJdGVtOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdl
Ykhpc3RvcnlJdGVtQ2xhc3MgV2ViS2l0V2ViSGlzdG9yeUl0ZW1DbGFzczsKKyAKKworc3RydWN0
IF9XZWJLaXRXZWJIaXN0b3J5SXRlbSB7CisgICAgR09iamVjdCBwYXJlbnQ7CisKKyAgICAvKjwg
cHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRXZWJIaXN0b3J5SXRlbVByaXZhdGUqIHByaXY7Cit9Owor
CitzdHJ1Y3QgX1dlYktpdFdlYkhpc3RvcnlJdGVtQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBw
YXJlbnQ7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2hpc3RvcnlfaXRlbV9n
ZXRfdHlwZSAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0V2ViSGlzdG9yeUl0ZW0qCit3ZWJr
aXRfd2ViX2hpc3RvcnlfaXRlbV9uZXcgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYkhp
c3RvcnlJdGVtKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fbmV3X3dpdGhfZGF0YSAoY29uc3Qg
Z2NoYXIqIHVyaSwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
cioKK3dlYmtpdF93ZWJfaGlzdG9yeV9pdGVtX2dldF90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X2FsdGVybmF0ZV90aXRsZSAoV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX3NldF9hbHRlcm5hdGVfdGl0bGUgKFdlYktpdFdlYkhpc3RvcnlJdGVtKiB3ZWJf
aGlzdG9yeV9pdGVtLCBjb25zdCBnY2hhciogdGl0bGUpOworCitXRUJLSVRfQVBJIGNvbnN0IGdj
aGFyKgord2Via2l0X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0
ZW0qIHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyKgord2Via2l0
X3dlYl9oaXN0b3J5X2l0ZW1fZ2V0X29yaWdpbmFsX3VyaSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0q
IHdlYl9oaXN0b3J5X2l0ZW0pOworCitXRUJLSVRfQVBJIGdkb3VibGUKK3dlYmtpdF93ZWJfaGlz
dG9yeV9pdGVtX2dldF9sYXN0X3Zpc2l0ZWRfdGltZSAoV2ViS2l0V2ViSGlzdG9yeUl0ZW0qIHdl
Yl9oaXN0b3J5X2l0ZW0pOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLyogV0VCS0lUX1dFQl9I
SVNUT1JZX0lURU1fSCAqLwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdl
YnZpZXcuY3BwIGIvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDY3
NjA0YzQuLjg0MDkzMDUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2
aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0
aWFuQHR3b3RvYXN0cy5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgWGFuIExvcGV6IDx4YW5A
Z25vbWUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogIENvcHlyaWdodCAoQykgMjAwOCBKYW4gQWxvbnpvIDxqbWFsb256b0B1bnBsdWdn
YWJsZS5jb20+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0yNCw4ICsyNSwxMSBAQAogI2luY2x1
ZGUgIndlYmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXQtbWFyc2hhbC5oIgogI2luY2x1
ZGUgIndlYmtpdHByaXZhdGUuaCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3Qu
aCIKKyNpbmNsdWRlICJ3ZWJraXR3ZWJoaXN0b3J5aXRlbS5oIgogCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNpbmNsdWRlICJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1l
bnUuaCIKQEAgLTM3LDYgKzQxLDcgQEAKICNpbmNsdWRlICJFZGl0b3JDbGllbnRHdGsuaCIKICNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlclR5cGVzLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CkBAIC01NzksNyArNTg0LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19maW5hbGl6
ZShHT2JqZWN0KiBvYmplY3QpCiAgICAgd2Via2l0X3dlYl92aWV3X3N0b3BfbG9hZGluZyhXRUJL
SVRfV0VCX1ZJRVcob2JqZWN0KSk7CiAKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmll
d0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKG9iamVj
dCkpOworCiAgICAgZGVsZXRlIHdlYlZpZXdEYXRhLT5jb3JlUGFnZTsKKworICAgIGdfb2JqZWN0
X3VucmVmKHdlYlZpZXdEYXRhLT5iYWNrRm9yd2FyZExpc3QpOwogICAgIGdfb2JqZWN0X3VucmVm
KHdlYlZpZXdEYXRhLT53ZWJTZXR0aW5ncyk7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0Rh
dGEtPm1haW5GcmFtZSk7CiAgICAgZ19vYmplY3RfdW5yZWYod2ViVmlld0RhdGEtPmltQ29udGV4
dCk7CkBAIC0xMTc1LDYgKzExODMsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5p
dChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHdlYlZpZXdEYXRhLT5sYXN0UG9wdXBYUG9z
aXRpb24gPSB3ZWJWaWV3RGF0YS0+bGFzdFBvcHVwWVBvc2l0aW9uID0gLTE7CiAgICAgd2ViVmll
d0RhdGEtPmVkaXRhYmxlID0gZmFsc2U7CiAKKyAgICAvKiBJbml0aWFsaXplIHRoZSB2aWV3J3Mg
YmFjay9mb3J3YXJkIGxpc3QgKi8KKyAgICB3ZWJWaWV3RGF0YS0+YmFja0ZvcndhcmRMaXN0ID0g
d2Via2l0X3dlYl9iYWNrX2ZvcndhcmRfbGlzdF9uZXdfd2l0aF93ZWJfdmlldyh3ZWJWaWV3KTsK
KwogI2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMTAsMCkKICAgICBHZGtBdG9tIHRleHRIdG1sID0g
Z2RrX2F0b21faW50ZXJuX3N0YXRpY19zdHJpbmcoInRleHQvaHRtbCIpOwogI2Vsc2UKQEAgLTEy
MjEsNiArMTIzMiw2NCBAQCBXZWJLaXRXZWJTZXR0aW5ncyogd2Via2l0X3dlYl92aWV3X2dldF9z
ZXR0aW5ncyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiB3ZWJWaWV3RGF0YS0+
d2ViU2V0dGluZ3M7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNf
YmFja19mb3J3YXJkX2xpc3Q6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGZs
YWc6IHRvIHRlbGwgdGhlIHZpZXcgdG8gbWFpbnRhaW4gYSBiYWNrIG9yIGZvcndhcmQgbGlzdAor
ICoKKyAqIFNldCB0aGUgdmlldyB0byBtYWludGFpbiBhIGJhY2sgb3IgZm9yd2FyZCBsaXN0IG9m
IGhpc3RvcnkgaXRlbXMuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl92aWV3X3NldF9tYWludGFpbnNf
YmFja19mb3J3YXJkX2xpc3QoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2Jvb2xlYW4gZmxhZykK
K3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisK
KyAgICBjb3JlKHdlYlZpZXcpLT5iYWNrRm9yd2FyZExpc3QoKS0+c2V0RW5hYmxlZChmbGFnKTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0OgorICog
QHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBSZXR1cm5zIGEgI1dlYktpdFdlYkJh
Y2tGb3J3YXJkTGlzdAorICogCisgKiBSZXR1cm4gdmFsdWU6IHRoZSAjV2ViS2l0V2ViQmFja0Zv
cndhcmRMaXN0CisgKi8KK1dlYktpdFdlYkJhY2tGb3J3YXJkTGlzdCogd2Via2l0X3dlYl92aWV3
X2dldF9iYWNrX2ZvcndhcmRfbGlzdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2ViVmlld0RhdGEgPSBXRUJLSVRfV0VCX1ZJRVdf
R0VUX1BSSVZBVEUoV0VCS0lUX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIGlmICghd2ViVmll
d0RhdGEtPmNvcmVQYWdlIHx8ICF3ZWJWaWV3RGF0YS0+Y29yZVBhZ2UtPmJhY2tGb3J3YXJkTGlz
dCgpLT5lbmFibGVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIHdlYlZp
ZXdEYXRhLT5iYWNrRm9yd2FyZExpc3Q7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dv
X3RvX2JhY2tfZm9yd2FyZF9pdGVtOgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAq
IEBpdGVtOiBhICNXZWJLaXRXZWJIaXN0b3J5SXRlbSoKKyAqCisgKiBHbyB0byB0aGUgc3BlY2lm
aWVkICNXZWJLaXRXZWJIaXN0b3J5SXRlbQorICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUgaWYg
bG9hZGluZyBvZiBpdGVtIGlzIHN1Y2Nlc3NmdWwsICVGQUxTRSBpZiBub3QKKyAqLworZ2Jvb2xl
YW4gd2Via2l0X3dlYl92aWV3X2dvX3RvX2JhY2tfZm9yd2FyZF9pdGVtKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcsIFdlYktpdFdlYkhpc3RvcnlJdGVtKiBpdGVtKQoreworICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFMU0UpOworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfSElTVE9SWV9JVEVNKGl0ZW0pLCBGQUxTRSk7
CisKKyAgICBjb3JlKHdlYlZpZXcpLT5nb1RvSXRlbShjb3JlKGl0ZW0pLCBGcmFtZUxvYWRUeXBl
SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworLyoqCisgKiB3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQ6CisgKiBAd2ViVmlldzogdGhlICNXZWJLaXRXZWJWaWV3
CisgKgorICogR28gdG8gdGhlIHByZXZpb3VzIHBhZ2UsIGlmIHRoZXJlJ3MgYW55LgorICovCiB2
b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQog
ewogICAgIGdfd2FybmluZygid2Via2l0X3dlYl92aWV3X2dvX2JhY2t3YXJkKCkgaXMgb2Jzb2xl
dGU7IHVzZSB3ZWJraXRfd2ViX3ZpZXdfZ29fYmFjaygpIik7CkBAIC0xMjM3LDggKzEzMDYsNyBA
QCB2b2lkIHdlYmtpdF93ZWJfdmlld19nb19iYWNrKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7
CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOwogCi0g
ICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2Vi
VmlldykpOwotICAgIGZyYW1lLT5sb2FkZXIoKS0+Z29CYWNrT3JGb3J3YXJkKC0xKTsKKyAgICBj
b3JlKHdlYlZpZXcpLT5nb0JhY2soKTsKIH0KIAogLyoqCkBAIC0xMjY4LDEwICsxMzM2LDE3IEBA
IHZvaWQgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQoV2ViS2l0V2ViVmlldyogd2ViVmlldykK
IHsKICAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CiAK
LSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3
ZWJWaWV3KSk7Ci0gICAgZnJhbWUtPmxvYWRlcigpLT5nb0JhY2tPckZvcndhcmQoMSk7CisgICAg
Y29yZSh3ZWJWaWV3KS0+Z29Gb3J3YXJkKCk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3
X2Nhbl9nb19iYWNrd2FyZDoKKyAqIEB3ZWJWaWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBDaGVja3Mgd2hldGhlciB0aGUgdmlldyBjYW4gZ28gYmFjayB0byB0aGUgcHJldmlvdXMgcGFn
ZQorICoKKyAqIFJldHVybiB2YWx1ZTogJVRSVUUgaWYgdGhlIHBhZ2UgY2FuIGdvIGJhY2ssIG90
aGVyd2lzZSByZXR1cm5zICVGQUxTRQorICovCiBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfY2Fu
X2dvX2JhY2t3YXJkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ193YXJuaW5nKCJ3
ZWJraXRfd2ViX3ZpZXdfY2FuX2dvX2JhY2t3YXJkKCkgaXMgb2Jzb2xldGU7IHVzZSB3ZWJraXRf
d2ViX3ZpZXdfY2FuX2dvX2JhY2soKSIpOwpAQCAtMTI5MCw4ICsxMzY1LDEyIEBAIGdib29sZWFu
IHdlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFjayhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogewog
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgRkFM
U0UpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5f
ZnJhbWUod2ViVmlldykpOwotICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPmNhbkdvQmFja09y
Rm9yd2FyZCgtMSk7CisgICAgUGFnZSogcGFnZSA9IGNvcmUod2ViVmlldyk7CisKKyAgICBpZiAo
IXBhZ2UgfHwgIXBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpKQorICAgICAgICBy
ZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogLyoqCkBAIC0xMzI1LDggKzE0
MDQsMTUgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2Nhbl9nb19mb3J3YXJkKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBGQUxTRSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHdlYmtp
dF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSk7Ci0gICAgcmV0dXJuIGZyYW1lLT5s
b2FkZXIoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpOworICAgIFBhZ2UqIHBhZ2UgPSBjb3JlKHdl
YlZpZXcpOworCisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBp
ZiAoIXBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5mb3J3YXJkSXRlbSgpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKIH0KIAogdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
b3BlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBnY2hhciogdXJpKQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvV2ViVmll
dy93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggYWIyZjVjMC4uNGE2ZGVhMCAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL1dlYlZpZXcv
d2Via2l0d2Vidmlldy5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNCYXNlLmg+CiAKICNpbmNsdWRlICJ3ZWJraXRkZWZpbmVzLmgiCisjaW5jbHVkZSAid2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0LmgiCisjaW5jbHVkZSAid2Via2l0d2ViaGlzdG9yeWl0ZW0u
aCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJzZXR0aW5ncy5oIgogCiBHX0JFR0lOX0RFQ0xTCkBAIC05
MSw4ICs5MywxNCBAQCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3R5cGUgKHZvaWQpOwogV0VCS0lUX0FQ
SSBHdGtXaWRnZXQqCiB3ZWJraXRfd2ViX3ZpZXdfbmV3ICh2b2lkKTsKIAotV0VCS0lUX09CU09M
RVRFX0FQSSBnYm9vbGVhbgotd2Via2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrd2FyZCAoV2ViS2l0
V2ViVmlldyogd2ViX3ZpZXcpOworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX3ZpZXdfc2V0
X21haW50YWluc19iYWNrX2ZvcndhcmRfbGlzdCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdi
b29sZWFuIGZsYWcpOyAKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3QqCit3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2JhY2tfZm9yd2FyZF9saXN0IChXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19nb190b19iYWNr
X2ZvcndhcmRfaXRlbSAoV2ViS2l0V2ViVmlldyAqd2ViX3ZpZXcsIFdlYktpdFdlYkhpc3RvcnlJ
dGVtKiBpdGVtKTsKIAogV0VCS0lUX0FQSSBnYm9vbGVhbgogd2Via2l0X3dlYl92aWV3X2Nhbl9n
b19iYWNrIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CkBAIC0xMDMsOSArMTExLDYgQEAgd2Vi
a2l0X3dlYl92aWV3X2Nhbl9nb19iYWNrX29yX2ZvcndhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92
aWV3LCBnaW50IHN0ZXBzKTsKIFdFQktJVF9BUEkgZ2Jvb2xlYW4KIHdlYmtpdF93ZWJfdmlld19j
YW5fZ29fZm9yd2FyZCAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogCi1XRUJLSVRfT0JTT0xF
VEVfQVBJIHZvaWQKLXdlYmtpdF93ZWJfdmlld19nb19iYWNrd2FyZCAoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcpOwotCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93ZWJfdmlld19nb19iYWNrIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKQEAgLTE5Myw2ICsxOTgsMTIgQEAgd2Via2l0X3dl
Yl92aWV3X3NldF9zZXR0aW5ncyAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYlNl
dHRpbmdzKiBzZXR0aW4KIFdFQktJVF9BUEkgV2ViS2l0V2ViU2V0dGluZ3MqCiB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3NldHRpbmdzIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAKK1dFQktJVF9P
QlNPTEVURV9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfdmlld19jYW5fZ29fYmFja3dhcmQgKFdl
YktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKworV0VCS0lUX09CU09MRVRFX0FQSSB2b2lkCit3ZWJr
aXRfd2ViX3ZpZXdfZ29fYmFja3dhcmQgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKKwogR19F
TkRfREVDTFMKIAogI2VuZGlmCg==
</data>
<flag name="review"
          id="8163"
          type_id="1"
          status="+"
          setter="alp"
    />
          </attachment>
      

    </bug>

</bugzilla>