<?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>39843</bug_id>
          
          <creation_ts>2010-05-27 08:24:57 -0700</creation_ts>
          <short_desc>[GTK] WebKitWebView should support drops</short_desc>
          <delta_ts>2010-07-11 10:37:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40307</dependson>
          <blocked>30623</blocked>
    
    <blocked>39844</blocked>
    
    <blocked>40788</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>231314</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-05-27 08:24:57 -0700</bug_when>
    <thetext>Currently the view only supports dragging content off. It should also support accepting drops i.e. in GTK+ parlance, serving as a drag-and-drop destination.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>236064</commentid>
    <comment_count>1</comment_count>
      <attachid>58304</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-06-09 15:56:51 -0700</bug_when>
    <thetext>Created attachment 58304
Add drop support to WebKit GTK+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>239004</commentid>
    <comment_count>2</comment_count>
      <attachid>58916</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-06-16 11:55:07 -0700</bug_when>
    <thetext>Created attachment 58916
Updated patch for this issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245484</commentid>
    <comment_count>3</comment_count>
      <attachid>58916</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-07-01 12:33:18 -0700</bug_when>
    <thetext>Comment on attachment 58916
Updated patch for this issue

WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp:42
 +  GdkDragAction dragOperationToGdkDragAction(DragOperation coreAction)
I feel this name is way too similar to the other function. How about dragOperationToSingleGdkDragAction?

WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp:58
 +      // to use it all applicable flags are on.
I failed to parse this comment. s/use it/check/?

WebKit/gtk/webkit/webkitwebview.cpp:1385
 +      g_idle_add(reinterpret_cast&lt;GSourceFunc&gt;(doDragLeaveLater), priv-&gt;droppingContexts-&gt;get(context));
I learned to not trust idles. They get starved, and we lose. Can we replace this with a g_timeout_add(0...) call instead? If not, I&apos;d prefer to have a flag that you raise to say these actions are pending, and perform them after handling drag-drop (perhaps register the timeout at that point?).

r- for the above, but otherwise yay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245930</commentid>
    <comment_count>4</comment_count>
      <attachid>60371</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-02 09:27:54 -0700</bug_when>
    <thetext>Created attachment 60371
Patch with Gustavo&apos;s suggestions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>245931</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-02 09:29:31 -0700</bug_when>
    <thetext>(In reply to comment #3)

Thanks for the review! I&apos;ve implemented all of your suggestions.

&gt;  +  GdkDragAction dragOperationToGdkDragAction(DragOperation coreAction)
&gt; I feel this name is way too similar to the other function. How about dragOperationToSingleGdkDragAction?
Done.

&gt; WebCore/platform/gtk/ClipboardUtilitiesGtk.cpp:58
&gt;  +      // to use it all applicable flags are on.
&gt; I failed to parse this comment. s/use it/check/?
I changed this to: to use it when all applicable flags are on.

&gt;  +      g_idle_add(reinterpret_cast&lt;GSourceFunc&gt;(doDragLeaveLater), priv-&gt;droppingContexts-&gt;get(context));
&gt; I learned to not trust idles. They get starved, and we lose. Can
&gt; we replace this with a g_timeout_add(0...) call instead? If not,
&gt; I&apos;d prefer to have a flag that you raise to say these actions are
&gt; pending, and perform them after handling drag-drop (perhaps
&gt; register the timeout at that point?).
Makes sense. g_timeout_add(0...) seems to work fine here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249615</commentid>
    <comment_count>6</comment_count>
      <attachid>60371</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-07-11 03:41:12 -0700</bug_when>
    <thetext>Comment on attachment 60371
Patch with Gustavo&apos;s suggestions

&gt;+void PasteboardHelper::fillDataObjectFromDropData(GtkSelectionData* data, guint info, DataObjectGtk* dataObject)
&gt;+{
&gt;+    if (!data-&gt;data)
&gt;+        return;
&gt;+
&gt;+    if (data-&gt;target == textPlainAtom)
&gt;+        dataObject-&gt;setText(selectionDataToUTF8String(data));
&gt;+
&gt;+    else if (data-&gt;target == markupAtom)
&gt;+        dataObject-&gt;setMarkup(selectionDataToUTF8String(data));
&gt;+
&gt;+    else if (data-&gt;target == uriListAtom) {
&gt;+        gchar** uris = gtk_selection_data_get_uris(data);
&gt;+        if (!uris)
&gt;+            return;
&gt;+
&gt;+        Vector&lt;KURL&gt; uriList(urisToKURLVector(uris));
&gt;+        dataObject-&gt;setURIList(uriList);
&gt;+        g_strfreev(uris);
&gt;+

I don&apos;t think the extra lines are according to the style guide.

&gt;+Vector&lt;GdkAtom&gt; PasteboardHelper::dropAtomsForContext(GtkWidget* widget, GdkDragContext* context)
&gt;+{
&gt;+    // Always search for these common atoms.
&gt;+    Vector&lt;GdkAtom&gt; dropAtoms;
&gt;+    dropAtoms.append(textPlainAtom);
&gt;+    dropAtoms.append(markupAtom);
&gt;+    dropAtoms.append(uriListAtom);
&gt;+    dropAtoms.append(netscapeURLAtom);

This could possibly be saved and be reused.

&gt;+
&gt;+    // For images, try to find the most applicable image type.
&gt;+    GRefPtr&lt;GtkTargetList&gt; list(gtk_target_list_new(0, 0));
&gt;+    gtk_target_list_add_image_targets(list.get(), getIdForTargetType(TargetTypeImage), TRUE);
&gt;+    GdkAtom atom = gtk_drag_dest_find_target(widget, context, list.get());
&gt;+    if (atom != GDK_NONE)
&gt;+        dropAtoms.append(atom);
&gt;+
&gt;+    return dropAtoms;
&gt;+}
&gt;+


&gt;+    // During a drop GTK+ will fire a drag-leave signal right before firing
&gt;+    // the drag-drop signal. We want the actions for drag-leave to happen after
&gt;+    // those for drag-drop, so schedule them to happen asynchronously here.
&gt;+    g_timeout_add(0, reinterpret_cast&lt;GSourceFunc&gt;(doDragLeaveLater), priv-&gt;droppingContexts-&gt;get(context));
&gt;+}

idle or timeout this seems like a bit of hack... :/

The patch looks sensible as far as I understand things anyway, so if Gustavo likes it r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249631</commentid>
    <comment_count>7</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-11 09:48:04 -0700</bug_when>
    <thetext>Thanks for the review!

&gt; I don&apos;t think the extra lines are according to the style guide.

Okay, I&apos;ve removed them. :)


&gt; &gt;+Vector&lt;GdkAtom&gt; PasteboardHelper::dropAtomsForContext(GtkWidget* widget, GdkDragContext* context)
&gt; &gt;+{
&gt; &gt;+    // Always search for these common atoms.
&gt; &gt;+    Vector&lt;GdkAtom&gt; dropAtoms;
&gt; &gt;+    dropAtoms.append(textPlainAtom);
&gt; &gt;+    dropAtoms.append(markupAtom);
&gt; &gt;+    dropAtoms.append(uriListAtom);
&gt; &gt;+    dropAtoms.append(netscapeURLAtom); 
&gt; This could possibly be saved and be reused.

Since the last element is dynamic I cannot think of a way to cache
this value without actually copying the vector for the return value.
It could possibly be two methods, but I&apos;m not sure the speedup is worth
the confusing code. I&apos;m willing to revisit this later, if you like.

&gt; idle or timeout this seems like a bit of hack... :/

I agree it&apos;s a bit dirty. Mozilla and Chromium pull the same trick:

http://mxr.mozilla.org/mozilla-central/source/widget/src/gtk2/nsWindow.cpp#3792
http://www.google.com/codesearch/p?hl=en#h0RrPvyPu-c/chrome/browser/tab_contents/web_drag_dest_gtk.cc&amp;q=package:%22src.chromium.org/svn/trunk%22%20drag-leave&amp;sa=N&amp;cd=5&amp;ct=rc&amp;l=205</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249640</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-07-11 10:37:45 -0700</bug_when>
    <thetext>Committed r63058: &lt;http://trac.webkit.org/changeset/63058&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58304</attachid>
            <date>2010-06-09 15:56:51 -0700</date>
            <delta_ts>2010-06-16 11:55:05 -0700</delta_ts>
            <desc>Add drop support to WebKit GTK+.</desc>
            <filename>bug-39843-20100609155650.patch</filename>
            <type>text/plain</type>
            <size>23121</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTNjNDA2MzhmMjNmYjk1MWRiMTY3ZWQzNjE1MDFmOTllMjEwYzZiYy4uMGI5OTc4MjhkMzZkZTZk
MjFhNjUyZDlkYWI4ODZhMmMyYTk2N2E2ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wNi0wOSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBzaG91bGQg
c3VwcG9ydCBkcm9wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk4NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgY29udGVudCBv
bnRvIEdUSysgV2ViVmlld3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGUgRFJUIGRv
ZXMgbm90IHN1cHBvcnQgc2ltdWxhdGluZyBkcm9wcyB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdP
cGVyYXRpb25Ub0dka0RyYWdBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
Q2xpcGJvYXJkVXRpbGl0aWVzR3RrLmg6IEFkZCBkZWNsYXJhdGlvbiBmb3IgZHJhZ09wZXJhdGlv
blRvR2RrRHJhZ0FjdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5jcHA6CisgICAgICAgIEFkZCBuZXcgdGFyZ2V0IGF0b20gYW5kIHJlbmFtZSB0aGUgbWFya3Vw
IHRhcmdldCB0eXBlIHRvIG1hdGNoIHRoZSBvdGhlcnMuCisgICAgICAgIEFkZCBhIG1ldGhvZCB3
aGljaCBmaWxscyBhIGRhdGEgb2JqZWN0IGZyb20gZHJvcCBkYXRhLgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZEhlbHBlcjo6aW5pdGlhbGl6ZVRhcmdldExpc3QpOiBBZGQgc3VwcG9ydCBm
b3IgbmV3IGF0b21zLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9uRGF0YVRvVVRGOFN0cmlu
Zyk6IEFkZGVkIHRoaXMgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEhlbHBl
cjo6Z2V0Q2xpcGJvYXJkQ29udGVudHMpOiBVc2UgdGhlIHNlbGVjdGlvbkRhdGFUb1VURjhTdHJp
bmcgaGVscGVyLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlz
dEZvckRhdGFPYmplY3QpOiBDaGFuZ2UgdG8gcmVmbGVjdCBtYXJrdXAgYXRvbSByZW5hbWUuCisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpmaWxsRGF0YU9iamVjdEZyb21Ecm9w
RGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZEhlbHBlcjo6ZHJvcEF0
b21zKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuaDog
QWRkIGRlY2xhcmF0aW9ucyBvZiBuZXcgbWV0aG9kcy4KKwogMjAxMC0wNi0wOCAgTWFydGluIFJv
Ymluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRV
dGlsaXRpZXNHdGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVz
R3RrLmNwcAppbmRleCBmNmRlYTc5MzdjY2NjYzJiN2YxYTMyMDViNTdhOWZjODRlMWM1ZmJiLi4z
YzQzMmY2NTE5ZjM4MWY5MjNkYjBkZTc3OGI4YTZlZjM2NzJjOWQwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAKQEAgLTM5LDYgKzM5LDE5IEBA
IEdka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoRHJhZ09wZXJhdGlv
biBjb3JlQWN0aW9uKQogICAgIHJldHVybiBnZGtBY3Rpb247CiB9CiAKK0dka0RyYWdBY3Rpb24g
ZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCit7
CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAm
IERyYWdPcGVyYXRpb25Db3B5KQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAg
IGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAgIHJldHVybiBHREtf
QUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAg
ICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElOSzsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdP
cGVyYXRpb25Qcml2YXRlKQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKK30KKwogRHJhZ09wZXJhdGlv
biBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQog
ewogICAgIHVuc2lnbmVkIGludCBhY3Rpb24gPSBEcmFnT3BlcmF0aW9uTm9uZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKaW5kZXggYmRiMmFlYzFmZTdi
MmI2MGNlYTJjMjQ1NDI5ZWNkZmZlODVlOTFjOC4uODA0M2IyM2FhOTE2MjcyZDZiMDMxOTA3MDVi
OWJkNDkzNGViMzI4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0
aWVzR3RrLmgKQEAgLTI1LDYgKzI1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR2RrRHJh
Z0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsKK0dk
a0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9uKTsK
IERyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0aW9u
KTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBl
ci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAppbmRleCAz
ZGM0Y2MwNmVkN2U2ZjlkOWZjNjI5NTIzZTVkZTk2ZWM0MWYyMzY0Li5kNjk4Mjg3Y2Y0MTg3YjJj
MTFkMzdmMjk1Y2Q1Njc1ZDU5NmIyNDI5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkSGVscGVyLmNwcApAQCAtMzMsNyArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0YXRpYyBHZGtBdG9tIGdka01hcmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRt
bCIsIEZBTFNFKTsKK3N0YXRpYyBHZGtBdG9tIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9pbnRl
cm4oInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIsIEZBTFNFKTsKK3N0YXRpYyBHZGtBdG9tIG1h
cmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKTsKIHN0YXRpYyBH
ZGtBdG9tIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybigiX05FVFNDQVBFX1VSTCIs
IEZBTFNFKTsKIHN0YXRpYyBHZGtBdG9tIHVyaUxpc3RBdG9tID0gZ2RrX2F0b21faW50ZXJuKCJ0
ZXh0L3VyaS1saXN0IiwgRkFMU0UpOwogCkBAIC00NywxMyArNDgsMTMgQEAgUGFzdGVib2FyZEhl
bHBlcjo6flBhc3RlYm9hcmRIZWxwZXIoKQogICAgIGd0a190YXJnZXRfbGlzdF91bnJlZihtX3Rh
cmdldExpc3QpOwogfQogCi0KIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6aW5pdGlhbGl6ZVRhcmdl
dExpc3QoKQogewogICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKG1fdGFyZ2V0
TGlzdCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVUZXh0KSk7Ci0gICAgZ3RrX3Rhcmdl
dF9saXN0X2FkZChtX3RhcmdldExpc3QsIGdka01hcmt1cEF0b20sIDAsIGdldElkRm9yVGFyZ2V0
VHlwZShUYXJnZXRUeXBlTWFya3VwKSk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3Rhcmdl
dExpc3QsIG1hcmt1cEF0b20sIDAsIGdldElkRm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlTWFya3Vw
KSk7CiAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhtX3RhcmdldExpc3QsIGdl
dElkRm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlVVJJTGlzdCkpOwogICAgIGd0a190YXJnZXRfbGlz
dF9hZGQobV90YXJnZXRMaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIGdldElkRm9yVGFyZ2V0VHlw
ZShUYXJnZXRUeXBlTmV0c2NhcGVVUkwpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2ltYWdl
X3RhcmdldHMobV90YXJnZXRMaXN0LCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlwZUltYWdl
KSwgVFJVRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0KiB3aWRnZXRGcm9tRnJhbWUo
RnJhbWUqIGZyYW1lKQpAQCAtMTAxLDYgKzEwMiwxNSBAQCBzdGF0aWMgVmVjdG9yPEtVUkw+IHVy
aXNUb0tVUkxWZWN0b3IoZ2NoYXIqKiB1cmlzKQogICAgIHJldHVybiB1cmlMaXN0OwogfQogCisK
K3N0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxlY3Rpb25EYXRh
KiBkYXRhKQoreworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKFRleHRS
ZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIsIHRydWUpKTsKKyAg
ICBTdHJpbmcgdGV4dChkZWNvZGVyLT5kZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oZGF0
YS0+ZGF0YSksIGRhdGEtPmxlbmd0aCkpOworICAgIHRleHQgKz0gZGVjb2Rlci0+Zmx1c2goKTsK
KyAgICByZXR1cm4gdGV4dDsKK30KKwogdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9h
cmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKICAgICBEYXRhT2JqZWN0R3Rr
KiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7CkBA
IC0xMTIsMTIgKzEyMiw5IEBAIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJkQ29u
dGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCiAgICAgICAgICAgICBkYXRhT2JqZWN0LT5z
ZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dERhdGEuZ2V0KCkpKTsKICAgICB9CiAKLSAgICBp
ZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBnZGtN
YXJrdXBBdG9tKSkgewotICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIGdka01hcmt1cEF0b20pKSB7Ci0g
ICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIoVGV4dFJlc291cmNl
RGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04IiwgdHJ1ZSkpOwotICAgICAgICAg
IFN0cmluZyBtYXJrdXAoZGVjb2Rlci0+ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGRh
dGEtPmRhdGEpLCBkYXRhLT5sZW5ndGgpKTsKLSAgICAgICAgICBtYXJrdXAgKz0gZGVjb2Rlci0+
Zmx1c2goKTsKLSAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKKyAgICBp
ZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBtYXJr
dXBBdG9tKSkgeworICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2NsaXBi
b2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7CisgICAgICAg
ICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkp
OwogICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwogICAgICAgIH0KICAg
ICB9CkBAIC0xNzksNyArMTg2LDcgQEAgR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBlcjo6
dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayogZGF0YU9iamUKICAgICAgICAg
Z3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlzdCwgZ2V0SWRGb3JUYXJnZXRUeXBl
KFRhcmdldFR5cGVUZXh0KSk7CiAKICAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkpCi0g
ICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgZ2RrTWFya3VwQXRvbSwgMCwgZ2V0SWRG
b3JUYXJnZXRUeXBlKFRhcmdldFR5cGVNYXJrdXApKTsKKyAgICAgICAgZ3RrX3RhcmdldF9saXN0
X2FkZChsaXN0LCBtYXJrdXBBdG9tLCAwLCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlwZU1h
cmt1cCkpOwogCiAgICAgaWYgKGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewogICAgICAgICBn
dGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QsIGdldElkRm9yVGFyZ2V0VHlwZShU
YXJnZXRUeXBlVVJJTGlzdCkpOwpAQCAtMTkyLDYgKzE5OSw1NyBAQCBHdGtUYXJnZXRMaXN0KiBQ
YXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKiBk
YXRhT2JqZQogICAgIHJldHVybiBsaXN0OwogfQogCit2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmZp
bGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIGd1aW50IGlu
Zm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7CisgICAgaWYgKCFkYXRhLT5kYXRhKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGF0YS0+dGFyZ2V0ID09IHRleHRQbGFpbkF0b20p
CisgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhk
YXRhKSk7CisKKyAgICBlbHNlIGlmIChkYXRhLT50YXJnZXQgPT0gbWFya3VwQXRvbSkKKyAgICAg
ICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkp
OworCisgICAgZWxzZSBpZiAoZGF0YS0+dGFyZ2V0ID09IHVyaUxpc3RBdG9tKSB7CisgICAgICAg
IGdjaGFyKiogdXJpcyA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdXJpcyhkYXRhKTsKKyAgICAg
ICAgaWYgKCF1cmlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxLVVJM
PiB1cmlMaXN0KHVyaXNUb0tVUkxWZWN0b3IodXJpcykpOworICAgICAgICBkYXRhT2JqZWN0LT5z
ZXRVUklMaXN0KHVyaUxpc3QpOworICAgICAgICBnX3N0cmZyZWV2KHVyaXMpOworCisgICAgfSBl
bHNlIGlmIChkYXRhLT50YXJnZXQgPT0gbmV0c2NhcGVVUkxBdG9tKSB7CisgICAgICAgIFN0cmlu
ZyB1cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisKKyAgICAg
ICAgVmVjdG9yPFN0cmluZz4gcGllY2VzOworICAgICAgICB1cmxXaXRoTGFiZWwuc3BsaXQoIlxu
IiwgcGllY2VzKTsKKworICAgICAgICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmktbGlz
dCBoZXJlLCBhcyBpdCBjYW4gaG9sZCBtb3JlCisgICAgICAgIC8vIHRoYW4gb25lIFVSSSBidXQg
c3RpbGwgdGFrZSAgdGhlIGxhYmVsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgaWYgKCFkYXRh
T2JqZWN0LT5oYXNVUkwoKSkgeworICAgICAgICAgICAgVmVjdG9yPEtVUkw+IHVyaUxpc3Q7Cisg
ICAgICAgICAgICB1cmlMaXN0LmFwcGVuZChLVVJMKEtVUkwoKSwgcGllY2VzWzBdKSk7CisgICAg
ICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHVyaUxpc3QpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+c2V0
VGV4dChwaWVjZXNbMV0pOworICAgIH0KK30KKworVmVjdG9yPEdka0F0b20+IFBhc3RlYm9hcmRI
ZWxwZXI6OmRyb3BBdG9tcygpCit7CisgICAgc3RhdGljIFZlY3RvcjxHZGtBdG9tPiBkcm9wQXRv
bXM7CisgICAgaWYgKGRyb3BBdG9tcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZHJvcEF0b21zLmFw
cGVuZCh0ZXh0UGxhaW5BdG9tKTsKKyAgICAgICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBBdG9t
KTsKKyAgICAgICAgZHJvcEF0b21zLmFwcGVuZCh1cmlMaXN0QXRvbSk7CisgICAgICAgIGRyb3BB
dG9tcy5hcHBlbmQobmV0c2NhcGVVUkxBdG9tKTsKKyAgICB9CisgICAgcmV0dXJuIGRyb3BBdG9t
czsKK30KKwogc3RhdGljIERhdGFPYmplY3RHdGsqIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0
ID0gMDsKIAogc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlw
Ym9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQg
aW5mbywgZ3BvaW50ZXIgZGF0YSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
aAppbmRleCAyZDQ2YWRjMzA1Y2Q1NjkzODczODBmOTc5Njg3MzhhNzgwZDY1NWY1Li5kYjM4OTY5
Njc4MGMwYTdmNzQxZjU4YjNlNjBmZmFjNDQwYTZhOTBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEhlbHBlci5oCkBAIC0zNiw2ICszNiw3IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtD
bGlwYm9hcmQgR3RrQ2xpcGJvYXJkOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgR3Rr
VGFyZ2V0TGlzdDsKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwogdHlwZWRl
ZiBzdHJ1Y3QgX0d0a1NlbGVjdGlvbkRhdGEgR3RrU2VsZWN0aW9uRGF0YTsKK3R5cGVkZWYgc3Ry
dWN0IF9HZGtBdG9tKiBHZGtBdG9tOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDYg
KzUzLDggQEAgcHVibGljOgogICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBjb25zdDsK
ICAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3Rr
Kik7CiAgICAgdm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQs
IERhdGFPYmplY3RHdGsqKTsKKyAgICB2b2lkIGZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0
a1NlbGVjdGlvbkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOworICAgIFZlY3RvcjxHZGtB
dG9tPiBkcm9wQXRvbXMoKTsKICAgICB2b2lkIHdyaXRlQ2xpcGJvYXJkQ29udGVudHMoR3RrQ2xp
cGJvYXJkKiwgR0Nsb3N1cmUqIGNsb3N1cmUgPSAwKTsKICAgICB2b2lkIGdldENsaXBib2FyZENv
bnRlbnRzKEd0a0NsaXBib2FyZCopOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGEwMGEzZmRiNDhkNTQzOThjOGEyNzY0OWYw
NGFkNDc5NWUxYTM5ZjcuLjk5ODMzYzg0YTlmMjlmZGVlZTg1NjBjYTMxYjY0NTA4NDFiMmQ3MjUg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDYtMDkgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2Jp
bnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIERyb3BwaW5nIHN1cHBvcnQKKworICAgICAgICBbR1RLXSBXZWJLaXRXZWJWaWV3
IHNob3VsZCBzdXBwb3J0IGRyb3BzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zOTg0MworCisgICAgICAgICogd2Via2l0L3dlYmtpdHByaXZhdGUuaDoK
KyAgICAgICAgQWRkIGEgRHJvcHBpbmdDb250ZXh0IHN0cnVjdCB0byBrZWVwIHRyYWNrIG9mIGRy
b3AgZGF0YSB3aGlsZSB0aGUgZHJvcCBpcworICAgICAgICBpbiBwcm9ncmVzcy4gSGF2ZSBXZWJL
aXRXZWJWaWV3IGtlZXAgYSBtYXAgb2YgR2RrRHJhZ0NvbnRleHRzIHRvIERyb3BwaW5nQ29udGV4
dHMuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOiBBZGQgbmVjZXNzYXJ5IGlu
Y2x1ZGVzIGFuZCBnbG9iYWxQb2ludEZvckNsaWVudFBvaW50IGhlbHBlci4KKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19wb3B1cF9tZW51X2hhbmRsZXIpOiBVc2UgZ2xvYmFsUG9pbnRGb3JDbGll
bnRQb2ludCBoZWxwZXIuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZSk6IFByb3Bl
cmx5IGNsZWFuIHVwIGRyb3BwaW5nQ29udGV4dHMgbWVtYmVyLgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2ZpbmFsaXplKTogRGVsZXRlIGRyb3BwaW5nQ29udGV4dCBtZW1iZXIuCisgICAgICAg
IChnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KTogQWRkZWQuCisgICAgICAgIChkb0RyYWdMZWF2
ZUxhdGVyKTogQWRkZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZSk6IEFk
ZGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdfbW90aW9uKTogQWRkZWQuCisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlY2VpdmVkKTogQWRkZWQuCisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKTogQWRkZWQuCisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdCk6IENvbm5lY3QgbmV3IGRyb3Agc2lnbmFsIGhhbmRsZXJzIHRvIHRo
ZSB3aWRnZXQgZGVmaW5pdGlvbi4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KTogU2V0
IHVwIHRoZSB3aWRnZXQgYXMgYSBkcm9wIGRlc3RpbmF0aW9uIGFuZCBpbml0aWFsaXplIGRyb3Bw
aW5nQ29udGV4dHMuCisKIDIwMTAtMDYtMDkgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI2MDg4OS4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCA0NGZmYzFlZGE2ZDVmOTgzZDMyMGZhNTYy
ZjU0YjUxYTY1NjViNzRkLi4wNmU2Mzc5MjA5NmQzMzRiODg0YWZlZjM1ODE2NzI5YTcxZTIxMGQ0
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC00OCwyMCArNDgsMjMgQEAKICNpbmNs
dWRlICJBcmNoaXZlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3QuaCIKICNp
bmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKICNpbmNs
dWRlIDxlbmNoYW50Lmg+CiAjaW5jbHVkZSAiR093blB0ci5oIgogI2luY2x1ZGUgIkdlb2xvY2F0
aW9uLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCiAj
aW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1
ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAjaW5jbHVkZSA8
YXRrL2F0ay5oPgpAQCAtMTAyLDcgKzEwNSwxNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAg
IFdlYktpdEhpdFRlc3RSZXN1bHQqIGtpdChjb25zdCBXZWJDb3JlOjpIaXRUZXN0UmVzdWx0Jik7
CiAKLSAgICBXZWJLaXQ6OlBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0
YW5jZSgpOworICAgIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5j
ZSgpOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0XyB7CisgICAgICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAgIEdka0RyYWdDb250ZXh0KiBnZGtDb250ZXh0
OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsKKyAg
ICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0aW9uOworICAgICAgICBpbnQg
cGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAgICAgICAgYm9vbCBkcm9wSGFwcGVuZWQ7CisgICAgfSBE
cm9wcGluZ0NvbnRleHQ7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAtMTUzLDYgKzE2NSw3IEBAIGV4
dGVybiAiQyIgewogICAgICAgICBjaGFyKiB0b29sdGlwVGV4dDsKIAogICAgICAgICBIYXNoTWFw
PEdka0RyYWdDb250ZXh0KiwgUmVmUHRyPFdlYkNvcmU6OkRhdGFPYmplY3RHdGs+ID4gZHJhZ2dp
bmdEYXRhT2JqZWN0czsKKyAgICAgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFdlYktpdDo6
RHJvcHBpbmdDb250ZXh0Kj4qIGRyb3BwaW5nQ29udGV4dHM7CiAgICAgfTsKIAogICAgICNkZWZp
bmUgV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwgV2ViS2l0V2ViRnJhbWVQ
cml2YXRlKSkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggNjc0NDczMmRlNTdk
M2EwYzk3MjNlN2JmYjdiMTFhMDMzZjVjMDNmNi4uNTYxYmQzMTVjNjY2OGIyYjY2MjU3MjQ2YjRh
NTU4NjkwMTViZmFhYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTUyLDcg
KzUyLDEwIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRHJhZ0FjdGlvbnMuaCIKICNp
bmNsdWRlICJEcmFnQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVudEd0ay5oIgogI2luY2x1
ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpAQCAtMTIzLDYgKzEyNiw3
IEBACiAKIHN0YXRpYyBjb25zdCBkb3VibGUgZGVmYXVsdERQSSA9IDk2LjA7CiBzdGF0aWMgV2Vi
S2l0Q2FjaGVNb2RlbCBjYWNoZU1vZGVsOworc3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9y
Q2xpZW50UG9pbnQoR2RrV2luZG93KiB3aW5kb3csIGNvbnN0IEludFBvaW50JiBjbGllbnRQb2lu
dCk7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
QEAgLTM3MCw5ICszNzQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3BvcHVw
X21lbnVfaGFuZGxlcihHdGtXaWRnZXQqIHdpZGdldCkKICAgICAgICAgbG9jYXRpb24gPSBJbnRQ
b2ludChyaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZpcnN0UmVjdC54KCksIGZp
cnN0UmVjdC5ib3R0b20oKSk7CiAgICAgfQogCi0gICAgaW50IHgsIHk7Ci0gICAgZ2RrX3dpbmRv
d19nZXRfb3JpZ2luKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lER0VUKHZpZXctPmhvc3RX
aW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpKSwgJngsICZ5KTsKLQogICAgIC8vIEZJWE1F
OiBUaGUgSW50U2l6ZSgwLCAtMSkgaXMgYSBoYWNrIHRvIGdldCB0aGUgaGl0LXRlc3RpbmcgdG8g
cmVzdWx0IGluIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgIC8vIElkZWFsbHkgd2UnZCBoYXZl
IHRoZSBwb3NpdGlvbiBvZiBhIGNvbnRleHQgbWVudSBldmVudCBiZSBzZXBhcmF0ZSBmcm9tIGl0
cyB0YXJnZXQgbm9kZS4KICAgICBsb2NhdGlvbiA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3cobG9j
YXRpb24pICsgSW50U2l6ZSgwLCAtMSk7CkBAIC0zODQsNyArMzg1LDcgQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9tZW51X2hhbmRsZXIoR3RrV2lkZ2V0KiB3aWRnZXQp
CiAgICAgICAgIGxvY2F0aW9uLnNldFgoY29udGV4dE1lbnVNYXJnaW4pOwogICAgIGVsc2UgaWYg
KGxvY2F0aW9uLngoKSA+IHZpZXctPndpZHRoKCkpCiAgICAgICAgIGxvY2F0aW9uLnNldFgodmll
dy0+d2lkdGgoKSAtIGNvbnRleHRNZW51TWFyZ2luKTsKLSAgICBJbnRQb2ludCBnbG9iYWwgPSBs
b2NhdGlvbiArIEludFNpemUoeCwgeSk7CisgICAgSW50UG9pbnQgZ2xvYmFsKGdsb2JhbFBvaW50
Rm9yQ2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIGxvY2F0aW9uKSk7
CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobG9jYXRpb24sIGdsb2JhbCwgUmlnaHRC
dXR0b24sIE1vdXNlRXZlbnRQcmVzc2VkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwg
Z3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7CiAKQEAgLTExNzAsNiArMTE3MSwxMyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAKICAg
ICBwcml2LT5kcmFnZ2luZ0RhdGFPYmplY3RzLmNsZWFyKCk7CiAKKyAgICBIYXNoTWFwPEdka0Ry
YWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGkgPSBwcml2LT5kcm9wcGlu
Z0NvbnRleHRzLT5iZWdpbigpOworICAgIHdoaWxlIChpICE9IHByaXYtPmRyb3BwaW5nQ29udGV4
dHMtPmVuZCgpKSB7CisgICAgICAgIGRlbGV0ZSBpLmdldCgpOworICAgICAgICArK2k7CisgICAg
fQorICAgIHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNsZWFyKCk7CisKICAgICBHX09CSkVDVF9D
TEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwogfQog
CkBAIC0xMTg0LDYgKzExOTIsOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZmluYWxp
emUoR09iamVjdCogb2JqZWN0KQogICAgIGdfZnJlZShwcml2LT5jdXN0b21FbmNvZGluZyk7CiAg
ICAgZ19mcmVlKHByaXYtPmljb25VUkkpOwogCisgICAgZGVsZXRlIHByaXYtPmRyb3BwaW5nQ29u
dGV4dHM7CisKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNz
KS0+ZmluYWxpemUob2JqZWN0KTsKIH0KIApAQCAtMTI3OCw2ICsxMjg4LDE0IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19zY3JlZW5fY2hhbmdlZChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
U2NyZWVuKiBwcmV2aW91CiAgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUo
bWluaW11bUxvZ2ljYWxGb250U2l6ZSAvIDcyLjAgKiBEUEkpOwogfQogCitzdGF0aWMgSW50UG9p
bnQgZ2xvYmFsUG9pbnRGb3JDbGllbnRQb2ludChHZGtXaW5kb3cqIHdpbmRvdywgY29uc3QgSW50
UG9pbnQmIGNsaWVudFBvaW50KQoreworICAgIGludCB4LCB5OworICAgIGdka193aW5kb3dfZ2V0
X29yaWdpbih3aW5kb3csICZ4LCAmeSk7CisgICAgcmV0dXJuIGNsaWVudFBvaW50ICsgSW50U2l6
ZSh4LCB5KTsKK30KKworCiBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19lbmQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQogewogICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKQEAgLTEzMjksNiArMTM0
NywxMjQgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9nZXQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb24KICAgICBwYXN0ZWJvYXJkSGVscGVySW5z
dGFuY2UoKS0+ZmlsbFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgcHJpdi0+ZHJh
Z2dpbmdEYXRhT2JqZWN0cy5nZXQoY29udGV4dCkuZ2V0KCkpOwogfQogCitzdGF0aWMgZ2Jvb2xl
YW4gZG9EcmFnTGVhdmVMYXRlcihEcm9wcGluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgV2Vi
S2l0V2ViVmlldyogd2ViVmlldyA9IGNvbnRleHQtPndlYlZpZXc7CisgICAgV2ViS2l0V2ViVmll
d1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisgICAgaWYgKCFwcml2LT5kcm9wcGlu
Z0NvbnRleHRzLT5jb250YWlucyhjb250ZXh0LT5nZGtDb250ZXh0KSkKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCBy
ZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKKyAgICAvLyBoYXBwZW5zIGluIHRoZSBj
YXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuIEFsc28gZG8gbm90IGNhbGwK
KyAgICAvLyBkcmFnRXhpdGVkIGlmIHdlIGFyZSBzdGlsbCB3YWl0aW5nIGZvciBkYXRhIGZyb20g
dGhlIGRyb3AuIFRoaXMgbWlnaHQKKyAgICAvLyBoYXBwZW4gaWYgdGhlIGN1cnNvciBsZWF2ZXMg
dGhlIHZpZXcgYmVmb3JlIHRoZSBkcmFnIHNvdXJjZSBmdWxmaWxscyBhbGwKKyAgICAvLyBkYXRh
IHJlcXVlc3RzLgorICAgIGlmICghY29udGV4dC0+ZHJvcEhhcHBlbmVkICYmICFjb250ZXh0LT5w
ZW5kaW5nRGF0YVJlcXVlc3RzKSB7CisgICAgICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9
IGNvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEo
Y29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGdsb2JhbFBvaW50Rm9yQ2xpZW50
UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQod2ViVmlldykpLCBwb3NpdGlv
biksIERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICAgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRy
b2xsZXIoKS0+ZHJhZ0V4aXRlZCgmZHJhZ0RhdGEpOworICAgIH0KKworICAgIHByaXYtPmRyb3Bw
aW5nQ29udGV4dHMtPnJlbW92ZShjb250ZXh0LT5nZGtDb250ZXh0KTsKKyAgICBkZWxldGUgY29u
dGV4dDsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2RyYWdfbGVhdmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0
LCBndWludCB0aW1lKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VC
X1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXct
PnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRl
eHQpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBm
aXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBk
cmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhh
cHBlbiBhZnRlcgorICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0g
dG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCisgICAgZ19pZGxlX2FkZChyZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihkb0RyYWdMZWF2ZUxhdGVyKSwgcHJpdi0+ZHJvcHBpbmdDb250
ZXh0cy0+Z2V0KGNvbnRleHQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19kcmFnX21vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29u
dGV4dCA9IDA7CisgICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5jb250YWlucyhjb250
ZXh0KSkgeworICAgICAgICBkcm9wcGluZ0NvbnRleHQgPSBuZXcgRHJvcHBpbmdDb250ZXh0Owor
ICAgICAgICBkcm9wcGluZ0NvbnRleHQtPndlYlZpZXcgPSB3ZWJWaWV3OworICAgICAgICBkcm9w
cGluZ0NvbnRleHQtPmdka0NvbnRleHQgPSBjb250ZXh0OworICAgICAgICBkcm9wcGluZ0NvbnRl
eHQtPmRhdGFPYmplY3QgPSBXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsKKyAgICAg
ICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzID0gMDsKKyAgICAgICAgZHJv
cHBpbmdDb250ZXh0LT5kcm9wSGFwcGVuZWQgPSBmYWxzZTsKKyAgICAgICAgcHJpdi0+ZHJvcHBp
bmdDb250ZXh0cy0+c2V0KGNvbnRleHQsIGRyb3BwaW5nQ29udGV4dCk7CisKKyAgICAgICAgVmVj
dG9yPEdka0F0b20+IGFjY2VwdGFibGVUYXJnZXRzKHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgp
LT5kcm9wQXRvbXMoKSk7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGd0a19k
cmFnX2dldF9kYXRhKHdpZGdldCwgY29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRp
bWUpOworCisgICAgfSBlbHNlCisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IHByaXYtPmRyb3Bw
aW5nQ29udGV4dHMtPmdldChjb250ZXh0KTsKKworICAgIC8vIERvbid0IHNlbmQgYW55IGRyYWcg
aW5mb3JtYXRpb24gdG8gV2ViQ29yZSB1bnRpbCB3ZSd2ZSByZXRyaWV2ZWQgYWxsCisgICAgLy8g
dGhlIGRhdGEgZm9yIHRoaXMgZHJhZyBvcGVyYXRpb24uIE90aGVyd2lzZSB3ZSdkIGhhdmUgdG8g
YmxvY2sgdG8gd2FpdAorICAgIC8vIGZvciB0aGUgZHJhZydzIGRhdGEuCisgICAgQVNTRVJUKGRy
b3BwaW5nQ29udGV4dCk7CisgICAgaWYgKGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cyA+IDApCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgSW50UG9pbnQgcG9zaXRpb24g
PSBJbnRQb2ludCh4LCB5KTsKKyAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlv
biA9IHBvc2l0aW9uOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0
YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoZ3RrX3dp
ZGdldF9nZXRfd2luZG93KHdpZGdldCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09w
ZXJhdGlvbihjb250ZXh0LT5hY3Rpb25zKSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24g
PSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEp
OworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0
aW9uKG9wZXJhdGlvbiksIHRpbWUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19kcmFnX2RhdGFfcmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgR3RrU2VsZWN0aW9uRGF0
YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGltZSkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAgV2ViS2l0V2Vi
Vmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisgICAgaWYgKCFwcml2LT5kcm9w
cGluZ0NvbnRleHRzLT5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRz
LT5nZXQoY29udGV4dCk7CisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3Rz
LS07CisgICAgcGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPmZpbGxEYXRhT2JqZWN0RnJvbURy
b3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5n
ZXQoKSk7CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3RzLCBz
dGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICBpZiAoIWRyb3BwaW5n
Q29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykgeworICAgICAgICBJbnRQb2ludCBwb3NpdGlv
bih4LCB5KTsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJvcHBpbmdDb250ZXh0LT5kYXRh
T2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgZ2xvYmFsUG9pbnRGb3JDbGllbnRQb2ludChndGtfd2lk
Z2V0X2dldF93aW5kb3cod2lkZ2V0KSwgcG9zaXRpb24pLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3Bl
cmF0aW9uKGNvbnRleHQtPmFjdGlvbnMpKTsKKyAgICAgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRp
b24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0Rh
dGEpOworICAgICAgICBnZGtfZHJhZ19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRvR2Rr
RHJhZ0FjdGlvbihvcGVyYXRpb24pLCB0aW1lKTsKKyAgICB9Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kcm9wKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29u
dGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOworICAgIFdlYktpdFdl
YlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKworICAgIGlmICghcHJpdi0+ZHJv
cHBpbmdDb250ZXh0cy0+Y29udGFpbnMoY29udGV4dCkpCisgICAgICAgIHJldHVybiBGQUxTRTsK
KworICAgIERyb3BwaW5nQ29udGV4dCogZHJvcHBpbmdDb250ZXh0ID0gcHJpdi0+ZHJvcHBpbmdD
b250ZXh0cy0+Z2V0KGNvbnRleHQpOworICAgIGRyb3BwaW5nQ29udGV4dC0+ZHJvcEhhcHBlbmVk
ID0gdHJ1ZTsKKworICAgIEludFBvaW50IHBvc2l0aW9uKHgsIHkpOworICAgIERyYWdEYXRhIGRy
YWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGdsb2Jh
bFBvaW50Rm9yQ2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIHBvc2l0
aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihjb250ZXh0LT5hY3Rpb25zKSk7Cisg
ICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+cGVyZm9ybURyYWcoJmRyYWdEYXRh
KTsKKworICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7Cisg
ICAgcmV0dXJuIFRSVUU7Cit9CisKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMiwgMCkKIHN0
YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcXVlcnlfdG9vbHRpcChHdGtXaWRnZXQgKndp
ZGdldCwgZ2ludCB4LCBnaW50IHksIGdib29sZWFuIGtleWJvYXJkX21vZGUsIEd0a1Rvb2x0aXAg
KnRvb2x0aXApCiB7CkBAIC0yMzI1LDYgKzI0NjEsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAg
d2lkZ2V0Q2xhc3MtPnNjcmVlbl9jaGFuZ2VkID0gd2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFu
Z2VkOwogICAgIHdpZGdldENsYXNzLT5kcmFnX2VuZCA9IHdlYmtpdF93ZWJfdmlld19kcmFnX2Vu
ZDsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX2dldCA9IHdlYmtpdF93ZWJfdmlld19kcmFn
X2RhdGFfZ2V0OworICAgIHdpZGdldENsYXNzLT5kcmFnX21vdGlvbiA9IHdlYmtpdF93ZWJfdmll
d19kcmFnX21vdGlvbjsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19sZWF2ZSA9IHdlYmtpdF93ZWJf
dmlld19kcmFnX2xlYXZlOworICAgIHdpZGdldENsYXNzLT5kcmFnX2Ryb3AgPSB3ZWJraXRfd2Vi
X3ZpZXdfZHJhZ19kcm9wOworICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVjZWl2ZWQgPSB3
ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX3JlY2VpdmVkOwogI2lmIEdUS19DSEVDS19WRVJTSU9O
KDIsIDEyLCAwKQogICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0X3dlYl92
aWV3X3F1ZXJ5X3Rvb2x0aXA7CiAjZW5kaWYKQEAgLTI5MDAsNiArMzA0MCwxMCBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHBy
aXYtPnN1YlJlc291cmNlcyA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0
cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CiAKICAgICBwcml2LT50b29sdGlwVGV4
dCA9IDA7CisKKyAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRzID0gbmV3IEhhc2hNYXA8R2RrRHJh
Z0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPigpOworICAgIGd0a19kcmFnX2Rlc3Rfc2V0KEdU
S19XSURHRVQod2ViVmlldyksIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAs
IHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJT05fQ09QWSB8IEdES19BQ1RJT05f
Q09QWSB8IEdES19BQ1RJT05fTU9WRSB8IEdES19BQ1RJT05fTElOSyB8IEdES19BQ1RJT05fUFJJ
VkFURSkpOworICAgIGd0a19kcmFnX2Rlc3Rfc2V0X3RhcmdldF9saXN0KEdUS19XSURHRVQod2Vi
VmlldyksIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpLT50YXJnZXRMaXN0KCkpOwogfQogCiBH
dGtXaWRnZXQqIHdlYmtpdF93ZWJfdmlld19uZXcodm9pZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>58916</attachid>
            <date>2010-06-16 11:55:07 -0700</date>
            <delta_ts>2010-07-02 09:27:51 -0700</delta_ts>
            <desc>Updated patch for this issue</desc>
            <filename>bug-39843-20100616115508.patch</filename>
            <type>text/plain</type>
            <size>24742</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NTNjZjY4ZWY3ZGFkNmRmM2VlZmRmMzhjZWI0MGZiN2Y4YWE1ZjlhOC4uOGRhYTczYTg2YzRmYTQw
YjAzNDQ4MzM0ZjFiYzhmZjgzOGEyNDZlYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNi0xNSAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBzaG91bGQg
c3VwcG9ydCBkcm9wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk4NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgY29udGVudCBv
bnRvIEdUSysgV2ViVmlld3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGUgRFJUIGRv
ZXMgbm90IHN1cHBvcnQgc2ltdWxhdGluZyBkcm9wcyB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdP
cGVyYXRpb25Ub0dka0RyYWdBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omdka0Ry
YWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24pOiBQcm9wZXJseSBkZXRlY3QgRHJhZ09wZXJhdGlvbkV2
ZXJ5LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaDogQWRk
IGRlY2xhcmF0aW9uIGZvciBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcDoKKyAgICAgICAgQWRkIG5ldyB0YXJn
ZXQgYXRvbSBhbmQgcmVuYW1lIHRoZSBtYXJrdXAgdGFyZ2V0IHR5cGUgdG8gbWF0Y2ggdGhlIG90
aGVycy4KKyAgICAgICAgQWRkIGEgbWV0aG9kIHdoaWNoIGZpbGxzIGEgZGF0YSBvYmplY3QgZnJv
bSBkcm9wIGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjppbml0aWFs
aXplVGFyZ2V0TGlzdCk6IEFkZCBzdXBwb3J0IGZvciBuZXcgYXRvbXMuCisgICAgICAgIChXZWJD
b3JlOjpzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKTogQWRkZWQgdGhpcyBoZWxwZXIuCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmRDb250ZW50cyk6IFVz
ZSB0aGUgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdCk6IENoYW5nZSB0byBy
ZWZsZWN0IG1hcmt1cCBhdG9tIHJlbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRI
ZWxwZXI6OmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRvbXMpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOiBBZGQgZGVjbGFyYXRpb25zIG9mIG5ldyBtZXRo
b2RzLgorCiAyMDEwLTA2LTE0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwCmluZGV4IGY2ZGVhNzkzN2NjY2Nj
MmI3ZjFhMzIwNWI1N2E5ZmM4NGUxYzVmYmIuLjE4ODMzMGFjMjNmYTc0MDU2YzNmYzE3YmYzZDQ3
MjEyMDdjYzk2NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0
aWxpdGllc0d0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0
aWVzR3RrLmNwcApAQCAtMzksOCArMzksMjcgQEAgR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9u
VG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCiAgICAgcmV0dXJuIGdk
a0FjdGlvbjsKIH0KIAorR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9u
KERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFjdGlvbiA9PSBEcmFn
T3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Db3B5KQorICAgICAg
ICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9uICYgRHJhZ09wZXJh
dGlvbk1vdmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7CisgICAgaWYgKGNvcmVB
Y3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdES19BQ1RJT05fTElO
SzsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRlKQorICAgICAgICBy
ZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHZGtEcmFn
QWN0aW9uPigwKTsKK30KKwogRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0
aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQogeworICAgIC8vIFdlIGhhdmUgbm8gZ29vZCB3
YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisgICAgLy8gdG8gdXNl
IGl0IGFsbCBhcHBsaWNhYmxlIGZsYWdzIGFyZSBvbi4KKyAgICBpZiAoZ2RrQWN0aW9uICYgR0RL
X0FDVElPTl9DT1BZICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTU9WRQorICAgICAgICAmJiBn
ZGtBY3Rpb24gJiBHREtfQUNUSU9OX0xJTksgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9QUklW
QVRFKQorICAgICAgICByZXR1cm4gRHJhZ09wZXJhdGlvbkV2ZXJ5OworCiAgICAgdW5zaWduZWQg
aW50IGFjdGlvbiA9IERyYWdPcGVyYXRpb25Ob25lOwogICAgIGlmIChnZGtBY3Rpb24gJiBHREtf
QUNUSU9OX0NPUFkpCiAgICAgICAgIGFjdGlvbiB8PSBEcmFnT3BlcmF0aW9uQ29weTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgKaW5kZXggYmRiMmFlYzFm
ZTdiMmI2MGNlYTJjMjQ1NDI5ZWNkZmZlODVlOTFjOC4uODA0M2IyM2FhOTE2MjcyZDZiMDMxOTA3
MDViOWJkNDkzNGViMzI4YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJv
YXJkVXRpbGl0aWVzR3RrLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRp
bGl0aWVzR3RrLmgKQEAgLTI1LDYgKzI1LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogR2Rr
RHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uKTsK
K0dka0RyYWdBY3Rpb24gZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbihEcmFnT3BlcmF0aW9u
KTsKIERyYWdPcGVyYXRpb24gZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihHZGtEcmFnQWN0
aW9uKTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAppbmRl
eCAzZGM0Y2MwNmVkN2U2ZjlkOWZjNjI5NTIzZTVkZTk2ZWM0MWYyMzY0Li5hNGQzNDBkMzYxYjM3
MmEwNzk0MzhjNzI0NGI3YjU0YWI2YTVhNDAxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmNwcApAQCAtMzMsNyArMzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLXN0YXRpYyBHZGtBdG9tIGdka01hcmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQv
aHRtbCIsIEZBTFNFKTsKK3N0YXRpYyBHZGtBdG9tIHRleHRQbGFpbkF0b20gPSBnZGtfYXRvbV9p
bnRlcm4oInRleHQvcGxhaW47Y2hhcnNldD11dGYtOCIsIEZBTFNFKTsKK3N0YXRpYyBHZGtBdG9t
IG1hcmt1cEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvaHRtbCIsIEZBTFNFKTsKIHN0YXRp
YyBHZGtBdG9tIG5ldHNjYXBlVVJMQXRvbSA9IGdka19hdG9tX2ludGVybigiX05FVFNDQVBFX1VS
TCIsIEZBTFNFKTsKIHN0YXRpYyBHZGtBdG9tIHVyaUxpc3RBdG9tID0gZ2RrX2F0b21faW50ZXJu
KCJ0ZXh0L3VyaS1saXN0IiwgRkFMU0UpOwogCkBAIC00NywxMyArNDgsMTMgQEAgUGFzdGVib2Fy
ZEhlbHBlcjo6flBhc3RlYm9hcmRIZWxwZXIoKQogICAgIGd0a190YXJnZXRfbGlzdF91bnJlZiht
X3RhcmdldExpc3QpOwogfQogCi0KIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6aW5pdGlhbGl6ZVRh
cmdldExpc3QoKQogewogICAgIGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKG1fdGFy
Z2V0TGlzdCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVUZXh0KSk7Ci0gICAgZ3RrX3Rh
cmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIGdka01hcmt1cEF0b20sIDAsIGdldElkRm9yVGFy
Z2V0VHlwZShUYXJnZXRUeXBlTWFya3VwKSk7CisgICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3Rh
cmdldExpc3QsIG1hcmt1cEF0b20sIDAsIGdldElkRm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlTWFy
a3VwKSk7CiAgICAgZ3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhtX3RhcmdldExpc3Qs
IGdldElkRm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlVVJJTGlzdCkpOwogICAgIGd0a190YXJnZXRf
bGlzdF9hZGQobV90YXJnZXRMaXN0LCBuZXRzY2FwZVVSTEF0b20sIDAsIGdldElkRm9yVGFyZ2V0
VHlwZShUYXJnZXRUeXBlTmV0c2NhcGVVUkwpKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2lt
YWdlX3RhcmdldHMobV90YXJnZXRMaXN0LCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlwZUlt
YWdlKSwgVFJVRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgR3RrV2lkZ2V0KiB3aWRnZXRGcm9tRnJh
bWUoRnJhbWUqIGZyYW1lKQpAQCAtMTAxLDYgKzEwMiwxNSBAQCBzdGF0aWMgVmVjdG9yPEtVUkw+
IHVyaXNUb0tVUkxWZWN0b3IoZ2NoYXIqKiB1cmlzKQogICAgIHJldHVybiB1cmlMaXN0OwogfQog
CisKK3N0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhHdGtTZWxlY3Rpb25E
YXRhKiBkYXRhKQoreworICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyKFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsICJVVEYtOCIsIHRydWUpKTsK
KyAgICBTdHJpbmcgdGV4dChkZWNvZGVyLT5kZWNvZGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
ZGF0YS0+ZGF0YSksIGRhdGEtPmxlbmd0aCkpOworICAgIHRleHQgKz0gZGVjb2Rlci0+Zmx1c2go
KTsKKyAgICByZXR1cm4gdGV4dDsKK30KKwogdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlw
Ym9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqIGNsaXBib2FyZCkKIHsKICAgICBEYXRhT2JqZWN0
R3RrKiBkYXRhT2JqZWN0ID0gRGF0YU9iamVjdEd0azo6Zm9yQ2xpcGJvYXJkKGNsaXBib2FyZCk7
CkBAIC0xMTIsMTIgKzEyMiw5IEBAIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0Q2xpcGJvYXJk
Q29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCiAgICAgICAgICAgICBkYXRhT2JqZWN0
LT5zZXRUZXh0KFN0cmluZzo6ZnJvbVVURjgodGV4dERhdGEuZ2V0KCkpKTsKICAgICB9CiAKLSAg
ICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBn
ZGtNYXJrdXBBdG9tKSkgewotICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3Rr
X2NsaXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIGdka01hcmt1cEF0b20pKSB7
Ci0gICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IGRlY29kZXIoVGV4dFJlc291
cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgIlVURi04IiwgdHJ1ZSkpOwotICAgICAg
ICAgIFN0cmluZyBtYXJrdXAoZGVjb2Rlci0+ZGVjb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+
KGRhdGEtPmRhdGEpLCBkYXRhLT5sZW5ndGgpKTsKLSAgICAgICAgICBtYXJrdXAgKz0gZGVjb2Rl
ci0+Zmx1c2goKTsKLSAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAobWFya3VwKTsKKyAg
ICBpZiAoZ3RrX2NsaXBib2FyZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBt
YXJrdXBBdG9tKSkgeworICAgICAgIGlmIChHdGtTZWxlY3Rpb25EYXRhKiBkYXRhID0gZ3RrX2Ns
aXBib2FyZF93YWl0X2Zvcl9jb250ZW50cyhjbGlwYm9hcmQsIG1hcmt1cEF0b20pKSB7CisgICAg
ICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0
YSkpOwogICAgICAgICAgIGd0a19zZWxlY3Rpb25fZGF0YV9mcmVlKGRhdGEpOwogICAgICAgIH0K
ICAgICB9CkBAIC0xNzksNyArMTg2LDcgQEAgR3RrVGFyZ2V0TGlzdCogUGFzdGVib2FyZEhlbHBl
cjo6dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayogZGF0YU9iamUKICAgICAg
ICAgZ3RrX3RhcmdldF9saXN0X2FkZF90ZXh0X3RhcmdldHMobGlzdCwgZ2V0SWRGb3JUYXJnZXRU
eXBlKFRhcmdldFR5cGVUZXh0KSk7CiAKICAgICBpZiAoZGF0YU9iamVjdC0+aGFzTWFya3VwKCkp
Ci0gICAgICAgIGd0a190YXJnZXRfbGlzdF9hZGQobGlzdCwgZ2RrTWFya3VwQXRvbSwgMCwgZ2V0
SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVNYXJrdXApKTsKKyAgICAgICAgZ3RrX3RhcmdldF9s
aXN0X2FkZChsaXN0LCBtYXJrdXBBdG9tLCAwLCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlw
ZU1hcmt1cCkpOwogCiAgICAgaWYgKGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKSkgewogICAgICAg
ICBndGtfdGFyZ2V0X2xpc3RfYWRkX3VyaV90YXJnZXRzKGxpc3QsIGdldElkRm9yVGFyZ2V0VHlw
ZShUYXJnZXRUeXBlVVJJTGlzdCkpOwpAQCAtMTkyLDYgKzE5OSw2NCBAQCBHdGtUYXJnZXRMaXN0
KiBQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3Rr
KiBkYXRhT2JqZQogICAgIHJldHVybiBsaXN0OwogfQogCit2b2lkIFBhc3RlYm9hcmRIZWxwZXI6
OmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEsIGd1aW50
IGluZm8sIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7CisgICAgaWYgKCFkYXRhLT5kYXRh
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZGF0YS0+dGFyZ2V0ID09IHRleHRQbGFpbkF0
b20pCisgICAgICAgIGRhdGFPYmplY3QtPnNldFRleHQoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmlu
ZyhkYXRhKSk7CisKKyAgICBlbHNlIGlmIChkYXRhLT50YXJnZXQgPT0gbWFya3VwQXRvbSkKKyAg
ICAgICAgZGF0YU9iamVjdC0+c2V0TWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0
YSkpOworCisgICAgZWxzZSBpZiAoZGF0YS0+dGFyZ2V0ID09IHVyaUxpc3RBdG9tKSB7CisgICAg
ICAgIGdjaGFyKiogdXJpcyA9IGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfdXJpcyhkYXRhKTsKKyAg
ICAgICAgaWYgKCF1cmlzKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIFZlY3RvcjxL
VVJMPiB1cmlMaXN0KHVyaXNUb0tVUkxWZWN0b3IodXJpcykpOworICAgICAgICBkYXRhT2JqZWN0
LT5zZXRVUklMaXN0KHVyaUxpc3QpOworICAgICAgICBnX3N0cmZyZWV2KHVyaXMpOworCisgICAg
fSBlbHNlIGlmIChkYXRhLT50YXJnZXQgPT0gbmV0c2NhcGVVUkxBdG9tKSB7CisgICAgICAgIFN0
cmluZyB1cmxXaXRoTGFiZWwoc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyhkYXRhKSk7CisKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gcGllY2VzOworICAgICAgICB1cmxXaXRoTGFiZWwuc3BsaXQo
IlxuIiwgcGllY2VzKTsKKworICAgICAgICAvLyBHaXZlIHByZWZlcmVuY2UgdG8gdGV4dC91cmkt
bGlzdCBoZXJlLCBhcyBpdCBjYW4gaG9sZCBtb3JlCisgICAgICAgIC8vIHRoYW4gb25lIFVSSSBi
dXQgc3RpbGwgdGFrZSAgdGhlIGxhYmVsIGlmIHRoZXJlIGlzIG9uZS4KKyAgICAgICAgaWYgKCFk
YXRhT2JqZWN0LT5oYXNVUkwoKSkgeworICAgICAgICAgICAgVmVjdG9yPEtVUkw+IHVyaUxpc3Q7
CisgICAgICAgICAgICB1cmlMaXN0LmFwcGVuZChLVVJMKEtVUkwoKSwgcGllY2VzWzBdKSk7Cisg
ICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRVUklMaXN0KHVyaUxpc3QpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHBpZWNlcy5zaXplKCkgPiAxKQorICAgICAgICAgICAgZGF0YU9iamVjdC0+
c2V0VGV4dChwaWVjZXNbMV0pOworICAgIH0KK30KKworVmVjdG9yPEdka0F0b20+IFBhc3RlYm9h
cmRIZWxwZXI6OmRyb3BBdG9tc0ZvckNvbnRleHQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0KQoreworICAgIC8vIEFsd2F5cyBzZWFyY2ggZm9yIHRoZXNlIGNvbW1v
biBhdG9tcy4KKyAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0b21zOworICAgIGRyb3BBdG9tcy5h
cHBlbmQodGV4dFBsYWluQXRvbSk7CisgICAgZHJvcEF0b21zLmFwcGVuZChtYXJrdXBBdG9tKTsK
KyAgICBkcm9wQXRvbXMuYXBwZW5kKHVyaUxpc3RBdG9tKTsKKyAgICBkcm9wQXRvbXMuYXBwZW5k
KG5ldHNjYXBlVVJMQXRvbSk7CisKKyAgICAvLyBGb3IgaW1hZ2VzLCB0cnkgdG8gZmluZCB0aGUg
bW9zdCBhcHBsaWNhYmxlIGltYWdlIHR5cGUuCisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0PiBs
aXN0KGd0a190YXJnZXRfbGlzdF9uZXcoMCwgMCkpOworICAgIGd0a190YXJnZXRfbGlzdF9hZGRf
aW1hZ2VfdGFyZ2V0cyhsaXN0LmdldCgpLCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlwZUlt
YWdlKSwgVFJVRSk7CisgICAgR2RrQXRvbSBhdG9tID0gZ3RrX2RyYWdfZGVzdF9maW5kX3Rhcmdl
dCh3aWRnZXQsIGNvbnRleHQsIGxpc3QuZ2V0KCkpOworICAgIGlmIChhdG9tICE9IEdES19OT05F
KQorICAgICAgICBkcm9wQXRvbXMuYXBwZW5kKGF0b20pOworCisgICAgcmV0dXJuIGRyb3BBdG9t
czsKK30KKwogc3RhdGljIERhdGFPYmplY3RHdGsqIHNldHRpbmdDbGlwYm9hcmREYXRhT2JqZWN0
ID0gMDsKIAogc3RhdGljIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHNDYWxsYmFjayhHdGtDbGlw
Ym9hcmQqIGNsaXBib2FyZCwgR3RrU2VsZWN0aW9uRGF0YSAqc2VsZWN0aW9uRGF0YSwgZ3VpbnQg
aW5mbywgZ3BvaW50ZXIgZGF0YSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIu
aAppbmRleCAyZDQ2YWRjMzA1Y2Q1NjkzODczODBmOTc5Njg3MzhhNzgwZDY1NWY1Li4zM2JlMWE4
ZjE5ZTM3M2JmZmNjOGZkNDRlMDMyYmQyZTFiZDhhMzk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEhlbHBlci5oCkBAIC0zNiw2ICszNiw4IEBAIHR5cGVkZWYgc3RydWN0IF9HdGtD
bGlwYm9hcmQgR3RrQ2xpcGJvYXJkOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1RhcmdldExpc3QgR3Rr
VGFyZ2V0TGlzdDsKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwogdHlwZWRl
ZiBzdHJ1Y3QgX0d0a1NlbGVjdGlvbkRhdGEgR3RrU2VsZWN0aW9uRGF0YTsKK3R5cGVkZWYgc3Ry
dWN0IF9HZGtEcmFnQ29udGV4dCBHZGtEcmFnQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9HZGtB
dG9tKiBHZGtBdG9tOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDYgKzU0LDggQEAg
cHVibGljOgogICAgIEd0a1RhcmdldExpc3QqIHRhcmdldExpc3QoKSBjb25zdDsKICAgICBHdGtU
YXJnZXRMaXN0KiB0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChEYXRhT2JqZWN0R3RrKik7CiAgICAg
dm9pZCBmaWxsU2VsZWN0aW9uRGF0YShHdGtTZWxlY3Rpb25EYXRhKiwgZ3VpbnQsIERhdGFPYmpl
Y3RHdGsqKTsKKyAgICB2b2lkIGZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKEd0a1NlbGVjdGlv
bkRhdGEqLCBndWludCwgRGF0YU9iamVjdEd0ayopOworICAgIFZlY3RvcjxHZGtBdG9tPiBkcm9w
QXRvbXNGb3JDb250ZXh0KEd0a1dpZGdldCosIEdka0RyYWdDb250ZXh0Kik7CiAgICAgdm9pZCB3
cml0ZUNsaXBib2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCosIEdDbG9zdXJlKiBjbG9zdXJlID0g
MCk7CiAgICAgdm9pZCBnZXRDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqKTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCA5ODQxY2JhZDJlMThlYzM5YzE1YTNlYWU0ZDgxMGNjMDY1ZWRlMTBmLi5jN2NmNjBjZmQ3ZTVh
MzcyOWIzZjhlM2JlMzgwYWQ3OTZhMGZkMmQ5IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEwLTA2
LTE1ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEcm9wcGluZyBzdXBwb3J0CisK
KyAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBzaG91bGQgc3VwcG9ydCBkcm9wcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk4NDMKKworICAgICAg
ICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAgIEFkZCBhIERyb3BwaW5nQ29udGV4
dCBzdHJ1Y3QgdG8ga2VlcCB0cmFjayBvZiBkcm9wIGRhdGEgd2hpbGUgdGhlIGRyb3AgaXMKKyAg
ICAgICAgaW4gcHJvZ3Jlc3MuIEhhdmUgV2ViS2l0V2ViVmlldyBrZWVwIGEgbWFwIG9mIEdka0Ry
YWdDb250ZXh0cyB0byBEcm9wcGluZ0NvbnRleHRzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDogQWRkIG5lY2Vzc2FyeSBpbmNsdWRlcyBhbmQgZ2xvYmFsUG9pbnRGb3JDbGll
bnRQb2ludCBoZWxwZXIuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWVudV9oYW5k
bGVyKTogVXNlIGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQgaGVscGVyLgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2Rpc3Bvc2UpOiBQcm9wZXJseSBjbGVhbiB1cCBkcm9wcGluZ0NvbnRleHRz
IG1lbWJlci4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZSk6IERlbGV0ZSBkcm9w
cGluZ0NvbnRleHQgbWVtYmVyLgorICAgICAgICAoZ2xvYmFsUG9pbnRGb3JDbGllbnRQb2ludCk6
IEFkZGVkLgorICAgICAgICAoZG9EcmFnTGVhdmVMYXRlcik6IEFkZGVkLgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2RyYWdfbGVhdmUpOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19kcmFnX21vdGlvbik6IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdfZGF0
YV9yZWNlaXZlZCk6IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2RyYWdfZHJvcCk6
IEFkZGVkLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBDb25uZWN0IG5l
dyBkcm9wIHNpZ25hbCBoYW5kbGVycyB0byB0aGUgd2lkZ2V0IGRlZmluaXRpb24uCisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfaW5pdCk6IFNldCB1cCB0aGUgd2lkZ2V0IGFzIGEgZHJvcCBkZXN0
aW5hdGlvbiBhbmQgaW5pdGlhbGl6ZSBkcm9wcGluZ0NvbnRleHRzLgorCiAyMDEwLTA2LTE0ICBJ
bHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGJ1aWxkIGZpeC4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCA0NGZmYzFlZGE2
ZDVmOTgzZDMyMGZhNTYyZjU0YjUxYTY1NjViNzRkLi4wNmU2Mzc5MjA5NmQzMzRiODg0YWZlZjM1
ODE2NzI5YTcxZTIxMGQ0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2
YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC00OCwyMCAr
NDgsMjMgQEAKICNpbmNsdWRlICJBcmNoaXZlUmVzb3VyY2UuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZExpc3QuaCIKICNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0Fj
dGlvbnMuaCIKICNpbmNsdWRlIDxlbmNoYW50Lmg+CiAjaW5jbHVkZSAiR093blB0ci5oIgogI2lu
Y2x1ZGUgIkdlb2xvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKLSNpbmNsdWRl
ICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1ZGUg
IkludFBvaW50LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiSW5zcGVjdG9yQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQu
aCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgpAQCAtMTAyLDcgKzEwNSwxNiBAQCBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAogICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGtpdChjb25zdCBXZWJDb3JlOjpI
aXRUZXN0UmVzdWx0Jik7CiAKLSAgICBXZWJLaXQ6OlBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3Rl
Ym9hcmRIZWxwZXJJbnN0YW5jZSgpOworICAgIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3RlYm9h
cmRIZWxwZXJJbnN0YW5jZSgpOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgRHJvcHBpbmdDb250ZXh0
XyB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAgIEdka0RyYWdDb250
ZXh0KiBnZGtDb250ZXh0OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0az4g
ZGF0YU9iamVjdDsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0aW9u
OworICAgICAgICBpbnQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAgICAgICAgYm9vbCBkcm9wSGFw
cGVuZWQ7CisgICAgfSBEcm9wcGluZ0NvbnRleHQ7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAtMTUz
LDYgKzE2NSw3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBjaGFyKiB0b29sdGlwVGV4dDsKIAog
ICAgICAgICBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgUmVmUHRyPFdlYkNvcmU6OkRhdGFPYmpl
Y3RHdGs+ID4gZHJhZ2dpbmdEYXRhT2JqZWN0czsKKyAgICAgICAgSGFzaE1hcDxHZGtEcmFnQ29u
dGV4dCosIFdlYktpdDo6RHJvcHBpbmdDb250ZXh0Kj4qIGRyb3BwaW5nQ29udGV4dHM7CiAgICAg
fTsKIAogICAgICNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShvYmopICAgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwg
V2ViS2l0V2ViRnJhbWVQcml2YXRlKSkKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5k
ZXggNjc0NDczMmRlNTdkM2EwYzk3MjNlN2JmYjdiMTFhMDMzZjVjMDNmNi4uNWQ2ZTI2MDhiOWEx
ZDRmMTk4OTY2NDU4NWIwZWE5MjJjYmM4OWUzNyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAKQEAgLTcsNyArNyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEd1c3Rhdm8gTm9y
b25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRp
IEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQ29sbGFib3JhIEx0ZC4K
LSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTAgSWdhbGlhIFMuTC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTW92aWFsIENyZWF0
aXZlIFRlY2hub2xvZ2llcyBJbmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEJvYmJ5IFBvd2Vy
cwogICoKQEAgLTUyLDcgKzUyLDEwIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRHJh
Z0FjdGlvbnMuaCIKICNpbmNsdWRlICJEcmFnQ2xpZW50R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0Nv
bnRyb2xsZXIuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEd0ay5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgpA
QCAtMTIzLDYgKzEyNiw3IEBACiAKIHN0YXRpYyBjb25zdCBkb3VibGUgZGVmYXVsdERQSSA9IDk2
LjA7CiBzdGF0aWMgV2ViS2l0Q2FjaGVNb2RlbCBjYWNoZU1vZGVsOworc3RhdGljIEludFBvaW50
IGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoR2RrV2luZG93KiB3aW5kb3csIGNvbnN0IEludFBv
aW50JiBjbGllbnRQb2ludCk7CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKQEAgLTM3MCw5ICszNzQsNiBAQCBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3dlYl92aWV3X3BvcHVwX21lbnVfaGFuZGxlcihHdGtXaWRnZXQqIHdpZGdldCkKICAgICAgICAg
bG9jYXRpb24gPSBJbnRQb2ludChyaWdodEFsaWduZWQgPyBmaXJzdFJlY3QucmlnaHQoKSA6IGZp
cnN0UmVjdC54KCksIGZpcnN0UmVjdC5ib3R0b20oKSk7CiAgICAgfQogCi0gICAgaW50IHgsIHk7
Ci0gICAgZ2RrX3dpbmRvd19nZXRfb3JpZ2luKGd0a193aWRnZXRfZ2V0X3dpbmRvdyhHVEtfV0lE
R0VUKHZpZXctPmhvc3RXaW5kb3coKS0+cGxhdGZvcm1QYWdlQ2xpZW50KCkpKSwgJngsICZ5KTsK
LQogICAgIC8vIEZJWE1FOiBUaGUgSW50U2l6ZSgwLCAtMSkgaXMgYSBoYWNrIHRvIGdldCB0aGUg
aGl0LXRlc3RpbmcgdG8gcmVzdWx0IGluIHRoZSBzZWxlY3RlZCBlbGVtZW50LgogICAgIC8vIElk
ZWFsbHkgd2UnZCBoYXZlIHRoZSBwb3NpdGlvbiBvZiBhIGNvbnRleHQgbWVudSBldmVudCBiZSBz
ZXBhcmF0ZSBmcm9tIGl0cyB0YXJnZXQgbm9kZS4KICAgICBsb2NhdGlvbiA9IHZpZXctPmNvbnRl
bnRzVG9XaW5kb3cobG9jYXRpb24pICsgSW50U2l6ZSgwLCAtMSk7CkBAIC0zODQsNyArMzg1LDcg
QEAgc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9tZW51X2hhbmRsZXIoR3Rr
V2lkZ2V0KiB3aWRnZXQpCiAgICAgICAgIGxvY2F0aW9uLnNldFgoY29udGV4dE1lbnVNYXJnaW4p
OwogICAgIGVsc2UgaWYgKGxvY2F0aW9uLngoKSA+IHZpZXctPndpZHRoKCkpCiAgICAgICAgIGxv
Y2F0aW9uLnNldFgodmlldy0+d2lkdGgoKSAtIGNvbnRleHRNZW51TWFyZ2luKTsKLSAgICBJbnRQ
b2ludCBnbG9iYWwgPSBsb2NhdGlvbiArIEludFNpemUoeCwgeSk7CisgICAgSW50UG9pbnQgZ2xv
YmFsKGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdl
dCksIGxvY2F0aW9uKSk7CiAKICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobG9jYXRpb24s
IGdsb2JhbCwgUmlnaHRCdXR0b24sIE1vdXNlRXZlbnRQcmVzc2VkLCAwLCBmYWxzZSwgZmFsc2Us
IGZhbHNlLCBmYWxzZSwgZ3RrX2dldF9jdXJyZW50X2V2ZW50X3RpbWUoKSk7CiAKQEAgLTExNjks
NiArMTE3MCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0
KiBvYmplY3QpCiAgICAgfQogCiAgICAgcHJpdi0+ZHJhZ2dpbmdEYXRhT2JqZWN0cy5jbGVhcigp
OworICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0
b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmVuZCgpOwor
ICAgIGZvciAoSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+OjppdGVy
YXRvciBpdGVyID0gcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy0+YmVnaW4oKTsgaXRlciAhPSBlbmRE
cm9wcGluZ0NvbnRleHRzOyArK2l0ZXIpCisgICAgICAgIGRlbGV0ZSAoaXRlci0+c2Vjb25kKTsK
KyAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5jbGVhcigpOwogCiAgICAgR19PQkpFQ1RfQ0xB
U1Mod2Via2l0X3dlYl92aWV3X3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KQEAg
LTExODQsNiArMTE4OSw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCiAgICAgZ19mcmVlKHByaXYtPmN1c3RvbUVuY29kaW5nKTsKICAgICBn
X2ZyZWUocHJpdi0+aWNvblVSSSk7CiAKKyAgICBkZWxldGUgcHJpdi0+ZHJvcHBpbmdDb250ZXh0
czsKKwogICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF93ZWJfdmlld19wYXJlbnRfY2xhc3MpLT5m
aW5hbGl6ZShvYmplY3QpOwogfQogCkBAIC0xMjc4LDYgKzEyODUsMTQgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtTY3Jl
ZW4qIHByZXZpb3UKICAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShtaW5p
bXVtTG9naWNhbEZvbnRTaXplIC8gNzIuMCAqIERQSSk7CiB9CiAKK3N0YXRpYyBJbnRQb2ludCBn
bG9iYWxQb2ludEZvckNsaWVudFBvaW50KEdka1dpbmRvdyogd2luZG93LCBjb25zdCBJbnRQb2lu
dCYgY2xpZW50UG9pbnQpCit7CisgICAgaW50IHgsIHk7CisgICAgZ2RrX3dpbmRvd19nZXRfb3Jp
Z2luKHdpbmRvdywgJngsICZ5KTsKKyAgICByZXR1cm4gY2xpZW50UG9pbnQgKyBJbnRTaXplKHgs
IHkpOworfQorCisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kcmFnX2VuZChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IFdFQktJVF9XRUJfVklFVyh3aWRnZXQpOwpAQCAtMTMyOSw2ICsxMzQ0LDEz
MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX2dldChHdGtXaWRnZXQq
IHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbgogICAgIHBhc3RlYm9hcmRIZWxwZXJJbnN0YW5j
ZSgpLT5maWxsU2VsZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBwcml2LT5kcmFnZ2lu
Z0RhdGFPYmplY3RzLmdldChjb250ZXh0KS5nZXQoKSk7CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBk
b0RyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gY29udGV4dC0+d2ViVmlldzsKKyAgICBXZWJLaXRXZWJWaWV3UHJp
dmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29u
dGV4dHMtPmNvbnRhaW5zKGNvbnRleHQtPmdka0NvbnRleHQpKQorICAgICAgICByZXR1cm4gRkFM
U0U7CisKKyAgICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0
ICh0aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBkYXRhKQorICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1
cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICBpZiAoY29udGV4
dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8g
RG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJv
cCBzaWduYWwuIFRoaXMKKyAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1
bCBkcm9wIG9udG8gdGhlIHZpZXcuCisgICAgaWYgKCFjb250ZXh0LT5kcm9wSGFwcGVuZWQpIHsK
KyAgICAgICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gY29udGV4dC0+bGFzdE1vdGlvblBv
c2l0aW9uOworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YShjb250ZXh0LT5kYXRhT2JqZWN0Lmdl
dCgpLCBwb3NpdGlvbiwgZ2xvYmFsUG9pbnRGb3JDbGllbnRQb2ludChndGtfd2lkZ2V0X2dldF93
aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSksIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUp
OworICAgICAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnRXhpdGVkKCZk
cmFnRGF0YSk7CisgICAgfQorCisgICAgY29yZSh3ZWJWaWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+
ZHJhZ0VuZGVkKCk7CisgICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy0+cmVtb3ZlKGNvbnRleHQt
Pmdka0NvbnRleHQpOworICAgIGRlbGV0ZSBjb250ZXh0OworICAgIHJldHVybiBGQUxTRTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2RyYWdfbGVhdmUoR3RrV2lkZ2V0KiB3aWRn
ZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBndWludCB0aW1lKQoreworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJW
aWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAoIXByaXYtPmRyb3Bw
aW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQg
YmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFnLWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBh
Y3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgorICAgIC8vIHRob3NlIGZvciBk
cmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUu
CisgICAgZ19pZGxlX2FkZChyZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb0RyYWdMZWF2
ZUxhdGVyKSwgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cy0+Z2V0KGNvbnRleHQpKTsKK30KKworc3Rh
dGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19kcmFnX21vdGlvbihHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQor
eworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsK
KyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBE
cm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IDA7CisgICAgSW50UG9pbnQgcG9zaXRp
b24gPSBJbnRQb2ludCh4LCB5KTsKKyAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNv
bnRhaW5zKGNvbnRleHQpKSB7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IG5ldyBEcm9wcGlu
Z0NvbnRleHQ7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+d2ViVmlldyA9IHdlYlZpZXc7Cisg
ICAgICAgIGRyb3BwaW5nQ29udGV4dC0+Z2RrQ29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIGRy
b3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdCA9IFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmNyZWF0
ZSgpOworICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IGZhbHNlOworICAg
ICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOworICAg
ICAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0
KTsKKworICAgICAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJsZVRhcmdldHMocGFzdGVib2Fy
ZEhlbHBlckluc3RhbmNlKCktPmRyb3BBdG9tc0ZvckNvbnRleHQod2lkZ2V0LCBjb250ZXh0KSk7
CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFi
bGVUYXJnZXRzLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY2NlcHRh
YmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGd0a19kcmFnX2dldF9kYXRhKHdp
ZGdldCwgY29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRpbWUpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dCA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmdl
dChjb250ZXh0KTsKKyAgICAgICAgZHJvcHBpbmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24g
PSBwb3NpdGlvbjsKKyAgICB9CisKKyAgICAvLyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0
aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUgcmV0cmlldmVkIGFsbAorICAgIC8vIHRoZSBkYXRh
IGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBPdGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRv
IHdhaXQKKyAgICAvLyBmb3IgdGhlIGRyYWcncyBkYXRhLgorICAgIEFTU0VSVChkcm9wcGluZ0Nv
bnRleHQpOworICAgIGlmIChkcm9wcGluZ0NvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAw
KQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5n
Q29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGdsb2JhbFBvaW50Rm9yQ2xpZW50
UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0Fj
dGlvblRvRHJhZ09wZXJhdGlvbihjb250ZXh0LT5hY3Rpb25zKSk7CisgICAgRHJhZ09wZXJhdGlv
biBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRl
ZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9u
VG9HZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kcmFnX2RhdGFfcmVjZWl2ZWQoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgR3Rr
U2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGltZSkKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7Cisg
ICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisgICAgaWYg
KCFwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgRHJvcHBpbmdDb250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9w
cGluZ0NvbnRleHRzLT5nZXQoY29udGV4dCk7CisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzLS07CisgICAgcGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPmZpbGxEYXRh
T2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+
ZGF0YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFz
c2VkIHRvIGRyYWctZGF0YS1yZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcworICAgIC8vIGlu
YWNjdXJhdGUgaW4gRFJULCBzbyB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlv
biBldmVudC4KKyAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQt
Pmxhc3RNb3Rpb25Qb3NpdGlvbjsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRp
bmcgcmVxdWVzdHMsIHN0YXJ0IHNlbmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgorICAg
IERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9z
aXRpb24sIGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdp
ZGdldCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihjb250ZXh0LT5h
Y3Rpb25zKSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5k
cmFnQ29udHJvbGxlcigpLT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFnX3N0
YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRp
bWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2RyYWdfZHJvcChHdGtX
aWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBn
dWludCB0aW1lKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJ
RVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnBy
aXY7CisKKyAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQp
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5n
Q29udGV4dCA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmdldChjb250ZXh0KTsKKyAgICBkcm9w
cGluZ0NvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICBJbnRQb2ludCBwb3NpdGlv
bih4LCB5KTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmpl
Y3QuZ2V0KCksIHBvc2l0aW9uLCBnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KGd0a193aWRnZXRf
Z2V0X3dpbmRvdyh3aWRnZXQpLCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRp
b24oY29udGV4dC0+YWN0aW9ucykpOworICAgIGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVy
KCktPnBlcmZvcm1EcmFnKCZkcmFnRGF0YSk7CisKKyAgICBndGtfZHJhZ19maW5pc2goY29udGV4
dCwgVFJVRSwgRkFMU0UsIHRpbWUpOworICAgIHJldHVybiBUUlVFOworfQorCiAjaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMiwgMTIsIDApCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3F1
ZXJ5X3Rvb2x0aXAoR3RrV2lkZ2V0ICp3aWRnZXQsIGdpbnQgeCwgZ2ludCB5LCBnYm9vbGVhbiBr
ZXlib2FyZF9tb2RlLCBHdGtUb29sdGlwICp0b29sdGlwKQogewpAQCAtMjMyNSw2ICsyNDY0LDEw
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdD
bGFzcyogd2ViVmlld0NsYXNzKQogICAgIHdpZGdldENsYXNzLT5zY3JlZW5fY2hhbmdlZCA9IHdl
YmtpdF93ZWJfdmlld19zY3JlZW5fY2hhbmdlZDsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19lbmQg
PSB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19lbmQ7CiAgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9n
ZXQgPSB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19kYXRhX2dldDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJh
Z19tb3Rpb24gPSB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb247CisgICAgd2lkZ2V0Q2xhc3Mt
PmRyYWdfbGVhdmUgPSB3ZWJraXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZTsKKyAgICB3aWRnZXRDbGFz
cy0+ZHJhZ19kcm9wID0gd2Via2l0X3dlYl92aWV3X2RyYWdfZHJvcDsKKyAgICB3aWRnZXRDbGFz
cy0+ZHJhZ19kYXRhX3JlY2VpdmVkID0gd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9yZWNlaXZl
ZDsKICNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLCAxMiwgMCkKICAgICB3aWRnZXRDbGFzcy0+cXVl
cnlfdG9vbHRpcCA9IHdlYmtpdF93ZWJfdmlld19xdWVyeV90b29sdGlwOwogI2VuZGlmCkBAIC0y
OTAwLDYgKzMwNDMsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0
V2ViVmlldyogd2ViVmlldykKICAgICBwcml2LT5zdWJSZXNvdXJjZXMgPSBnX2hhc2hfdGFibGVf
bmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYp
OwogCiAgICAgcHJpdi0+dG9vbHRpcFRleHQgPSAwOworCisgICAgcHJpdi0+ZHJvcHBpbmdDb250
ZXh0cyA9IG5ldyBIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4oKTsK
KyAgICBndGtfZHJhZ19kZXN0X3NldChHVEtfV0lER0VUKHdlYlZpZXcpLCBzdGF0aWNfY2FzdDxH
dGtEZXN0RGVmYXVsdHM+KDApLCAwLCAwLCBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtf
QUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNU
SU9OX0xJTksgfCBHREtfQUNUSU9OX1BSSVZBVEUpKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90
YXJnZXRfbGlzdChHVEtfV0lER0VUKHdlYlZpZXcpLCBwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2Uo
KS0+dGFyZ2V0TGlzdCgpKTsKIH0KIAogR3RrV2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZv
aWQpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60371</attachid>
            <date>2010-07-02 09:27:54 -0700</date>
            <delta_ts>2010-07-11 03:41:11 -0700</delta_ts>
            <desc>Patch with Gustavo&apos;s suggestions</desc>
            <filename>bug-39843-20100702092752.patch</filename>
            <type>text/plain</type>
            <size>25471</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODBjNGI4YmY0YzZkYTRhYzdkMzY0NWQzMzFjYmExNzhhYzNmYTBmZC4uZDBlODk0MzBjMmM1OTQ4
YmJkMTIzY2FiNjI3NGQzMmFlZDgwZDczZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMC0wNy0wMiAgTWFy
dGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBzaG91bGQg
c3VwcG9ydCBkcm9wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Mzk4NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgY29udGVudCBv
bnRvIEdUSysgV2ViVmlld3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBhcyB0aGUgRFJUIGRv
ZXMgbm90IHN1cHBvcnQgc2ltdWxhdGluZyBkcm9wcyB5ZXQuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYWdP
cGVyYXRpb25Ub0dka0RyYWdBY3Rpb24pOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Omdka0Ry
YWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24pOiBQcm9wZXJseSBkZXRlY3QgRHJhZ09wZXJhdGlvbkV2
ZXJ5LgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaDogQWRk
IGRlY2xhcmF0aW9uIGZvciBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9uLgorICAgICAgICAq
IHBsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcDoKKyAgICAgICAgQWRkIG5ldyB0YXJn
ZXQgYXRvbSBhbmQgcmVuYW1lIHRoZSBtYXJrdXAgdGFyZ2V0IHR5cGUgdG8gbWF0Y2ggdGhlIG90
aGVycy4KKyAgICAgICAgQWRkIGEgbWV0aG9kIHdoaWNoIGZpbGxzIGEgZGF0YSBvYmplY3QgZnJv
bSBkcm9wIGRhdGEuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjppbml0aWFs
aXplVGFyZ2V0TGlzdCk6IEFkZCBzdXBwb3J0IGZvciBuZXcgYXRvbXMuCisgICAgICAgIChXZWJD
b3JlOjpzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKTogQWRkZWQgdGhpcyBoZWxwZXIuCisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpnZXRDbGlwYm9hcmRDb250ZW50cyk6IFVz
ZSB0aGUgc2VsZWN0aW9uRGF0YVRvVVRGOFN0cmluZyBoZWxwZXIuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkSGVscGVyOjp0YXJnZXRMaXN0Rm9yRGF0YU9iamVjdCk6IENoYW5nZSB0byBy
ZWZsZWN0IG1hcmt1cCBhdG9tIHJlbmFtZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmRI
ZWxwZXI6OmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkSGVscGVyOjpkcm9wQXRvbXMpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oOiBBZGQgZGVjbGFyYXRpb25zIG9mIG5ldyBtZXRo
b2RzLgorCiAyMDEwLTA3LTAyICBUb3IgQXJuZSBWZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZFV0aWxpdGllc0d0ay5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuY3BwCmluZGV4IGY2ZGVhNzkz
N2NjY2NjMmI3ZjFhMzIwNWI1N2E5ZmM4NGUxYzVmYmIuLjlmYzBlNzQ0NmUwZWVkZTEyNWIxMGNh
NGE4MmU2OWE3ZjY1YTI1NTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0NsaXBi
b2FyZFV0aWxpdGllc0d0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJk
VXRpbGl0aWVzR3RrLmNwcApAQCAtMzksOCArMzksMjcgQEAgR2RrRHJhZ0FjdGlvbiBkcmFnT3Bl
cmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhEcmFnT3BlcmF0aW9uIGNvcmVBY3Rpb24pCiAgICAgcmV0
dXJuIGdka0FjdGlvbjsKIH0KIAorR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVH
ZGtEcmFnQWN0aW9uKERyYWdPcGVyYXRpb24gY29yZUFjdGlvbikKK3sKKyAgICBpZiAoY29yZUFj
dGlvbiA9PSBEcmFnT3BlcmF0aW9uRXZlcnkgfHwgY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25D
b3B5KQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9DT1BZOworICAgIGlmIChjb3JlQWN0aW9u
ICYgRHJhZ09wZXJhdGlvbk1vdmUpCisgICAgICAgIHJldHVybiBHREtfQUNUSU9OX01PVkU7Cisg
ICAgaWYgKGNvcmVBY3Rpb24gJiBEcmFnT3BlcmF0aW9uTGluaykKKyAgICAgICAgcmV0dXJuIEdE
S19BQ1RJT05fTElOSzsKKyAgICBpZiAoY29yZUFjdGlvbiAmIERyYWdPcGVyYXRpb25Qcml2YXRl
KQorICAgICAgICByZXR1cm4gR0RLX0FDVElPTl9QUklWQVRFOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHZGtEcmFnQWN0aW9uPigwKTsKK30KKwogRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9u
VG9EcmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24gZ2RrQWN0aW9uKQogeworICAgIC8vIFdlIGhh
dmUgbm8gZ29vZCB3YXkgdG8gZGV0ZWN0IERyYWdPcGVyYXRpb25FdmVyeSBvdGhlciB0aGFuCisg
ICAgLy8gdG8gdXNlIGl0IHdoZW4gYWxsIGFwcGxpY2FibGUgZmxhZ3MgYXJlIG9uLgorICAgIGlm
IChnZGtBY3Rpb24gJiBHREtfQUNUSU9OX0NPUFkgJiYgZ2RrQWN0aW9uICYgR0RLX0FDVElPTl9N
T1ZFCisgICAgICAgICYmIGdka0FjdGlvbiAmIEdES19BQ1RJT05fTElOSyAmJiBnZGtBY3Rpb24g
JiBHREtfQUNUSU9OX1BSSVZBVEUpCisgICAgICAgIHJldHVybiBEcmFnT3BlcmF0aW9uRXZlcnk7
CisKICAgICB1bnNpZ25lZCBpbnQgYWN0aW9uID0gRHJhZ09wZXJhdGlvbk5vbmU7CiAgICAgaWYg
KGdka0FjdGlvbiAmIEdES19BQ1RJT05fQ09QWSkKICAgICAgICAgYWN0aW9uIHw9IERyYWdPcGVy
YXRpb25Db3B5OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkVXRp
bGl0aWVzR3RrLmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsu
aAppbmRleCBiZGIyYWVjMWZlN2IyYjYwY2VhMmMyNDU0MjllY2RmZmU4NWU5MWM4Li4yNmY2MzQ2
OWUyYjhkZTQ1YzAxNzc3NWYwYjQyOTJiZDZiYWM0NzQyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9DbGlwYm9hcmRVdGlsaXRpZXNHdGsuaApAQCAtMjUsNiArMjUsNyBAQAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBHZGtEcmFnQWN0aW9uIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25z
KERyYWdPcGVyYXRpb24pOworR2RrRHJhZ0FjdGlvbiBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtE
cmFnQWN0aW9uKERyYWdPcGVyYXRpb24pOwogRHJhZ09wZXJhdGlvbiBnZGtEcmFnQWN0aW9uVG9E
cmFnT3BlcmF0aW9uKEdka0RyYWdBY3Rpb24pOwogCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuY3BwCmluZGV4IDk4Y2JlNDIxNTdjNzQ5ODgxOTc5ODM3YTkxNjE5MDkw
M2EzYzU5OTYuLmE2OWFjZWE1ZThhZWYzNTE4NTJjYjkzYzZlMDAwYTZmNjEyYzQ4ZjEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRIZWxwZXIuY3BwCkBAIC0zNCw3ICszNCw4IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEdka0F0b20gZ2RrTWFya3VwQXRvbSA9
IGdka19hdG9tX2ludGVybigidGV4dC9odG1sIiwgRkFMU0UpOworc3RhdGljIEdka0F0b20gdGV4
dFBsYWluQXRvbSA9IGdka19hdG9tX2ludGVybigidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04Iiwg
RkFMU0UpOworc3RhdGljIEdka0F0b20gbWFya3VwQXRvbSA9IGdka19hdG9tX2ludGVybigidGV4
dC9odG1sIiwgRkFMU0UpOwogc3RhdGljIEdka0F0b20gbmV0c2NhcGVVUkxBdG9tID0gZ2RrX2F0
b21faW50ZXJuKCJfTkVUU0NBUEVfVVJMIiwgRkFMU0UpOwogc3RhdGljIEdka0F0b20gdXJpTGlz
dEF0b20gPSBnZGtfYXRvbV9pbnRlcm4oInRleHQvdXJpLWxpc3QiLCBGQUxTRSk7CiAKQEAgLTQ4
LDEzICs0OSwxMyBAQCBQYXN0ZWJvYXJkSGVscGVyOjp+UGFzdGVib2FyZEhlbHBlcigpCiAgICAg
Z3RrX3RhcmdldF9saXN0X3VucmVmKG1fdGFyZ2V0TGlzdCk7CiB9CiAKLQogdm9pZCBQYXN0ZWJv
YXJkSGVscGVyOjppbml0aWFsaXplVGFyZ2V0TGlzdCgpCiB7CiAgICAgZ3RrX3RhcmdldF9saXN0
X2FkZF90ZXh0X3RhcmdldHMobV90YXJnZXRMaXN0LCBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0
VHlwZVRleHQpKTsKLSAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgZ2RrTWFy
a3VwQXRvbSwgMCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVNYXJrdXApKTsKKyAgICBn
dGtfdGFyZ2V0X2xpc3RfYWRkKG1fdGFyZ2V0TGlzdCwgbWFya3VwQXRvbSwgMCwgZ2V0SWRGb3JU
YXJnZXRUeXBlKFRhcmdldFR5cGVNYXJrdXApKTsKICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX3Vy
aV90YXJnZXRzKG1fdGFyZ2V0TGlzdCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVVUklM
aXN0KSk7CiAgICAgZ3RrX3RhcmdldF9saXN0X2FkZChtX3RhcmdldExpc3QsIG5ldHNjYXBlVVJM
QXRvbSwgMCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVOZXRzY2FwZVVSTCkpOworICAg
IGd0a190YXJnZXRfbGlzdF9hZGRfaW1hZ2VfdGFyZ2V0cyhtX3RhcmdldExpc3QsIGdldElkRm9y
VGFyZ2V0VHlwZShUYXJnZXRUeXBlSW1hZ2UpLCBUUlVFKTsKIH0KIAogc3RhdGljIGlubGluZSBH
dGtXaWRnZXQqIHdpZGdldEZyb21GcmFtZShGcmFtZSogZnJhbWUpCkBAIC0xMDIsNiArMTAzLDEz
IEBAIHN0YXRpYyBWZWN0b3I8S1VSTD4gdXJpc1RvS1VSTFZlY3RvcihnY2hhcioqIHVyaXMpCiAg
ICAgcmV0dXJuIHVyaUxpc3Q7CiB9CiAKK3N0YXRpYyBTdHJpbmcgc2VsZWN0aW9uRGF0YVRvVVRG
OFN0cmluZyhHdGtTZWxlY3Rpb25EYXRhKiBkYXRhKQoreworICAgIC8vIGdfc3RybmR1cCBndWFy
ZHMgYWdhaW5zdCBzZWxlY3Rpb24gZGF0YSB0aGF0IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCisg
ICAgR093blB0cjxnY2hhcj4gbWFya3VwU3RyaW5nKGdfc3RybmR1cChyZWludGVycHJldF9jYXN0
PGNvbnN0IGNoYXIqPihndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X2RhdGEoZGF0YSkpLCBndGtfc2Vs
ZWN0aW9uX2RhdGFfZ2V0X2xlbmd0aChkYXRhKSkpOworICAgIHJldHVybiBTdHJpbmc6OmZyb21V
VEY4KG1hcmt1cFN0cmluZy5nZXQoKSk7Cit9CisKIHZvaWQgUGFzdGVib2FyZEhlbHBlcjo6Z2V0
Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKiBjbGlwYm9hcmQpCiB7CiAgICAgRGF0YU9i
amVjdEd0ayogZGF0YU9iamVjdCA9IERhdGFPYmplY3RHdGs6OmZvckNsaXBib2FyZChjbGlwYm9h
cmQpOwpAQCAtMTEzLDExICsxMjEsOSBAQCB2b2lkIFBhc3RlYm9hcmRIZWxwZXI6OmdldENsaXBi
b2FyZENvbnRlbnRzKEd0a0NsaXBib2FyZCogY2xpcGJvYXJkKQogICAgICAgICAgICAgZGF0YU9i
amVjdC0+c2V0VGV4dChTdHJpbmc6OmZyb21VVEY4KHRleHREYXRhLmdldCgpKSk7CiAgICAgfQog
Ci0gICAgaWYgKGd0a19jbGlwYm9hcmRfd2FpdF9pc190YXJnZXRfYXZhaWxhYmxlKGNsaXBib2Fy
ZCwgZ2RrTWFya3VwQXRvbSkpIHsKLSAgICAgICAgaWYgKEd0a1NlbGVjdGlvbkRhdGEqIGRhdGEg
PSBndGtfY2xpcGJvYXJkX3dhaXRfZm9yX2NvbnRlbnRzKGNsaXBib2FyZCwgZ2RrTWFya3VwQXRv
bSkpIHsKLSAgICAgICAgICAgIC8vIGdfc3RybmR1cCBndWFyZHMgYWdhaW5zdCBzZWxlY3Rpb24g
ZGF0YSB0aGF0IGlzIG5vdCBudWxsLXRlcm1pbmF0ZWQuCi0gICAgICAgICAgICBHT3duUHRyPGdj
aGFyPiBtYXJrdXBTdHJpbmcoZ19zdHJuZHVwKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KGd0a19zZWxlY3Rpb25fZGF0YV9nZXRfZGF0YShkYXRhKSksIGd0a19zZWxlY3Rpb25fZGF0YV9n
ZXRfbGVuZ3RoKGRhdGEpKSk7Ci0gICAgICAgICAgICBkYXRhT2JqZWN0LT5zZXRNYXJrdXAoU3Ry
aW5nOjpmcm9tVVRGOChtYXJrdXBTdHJpbmcuZ2V0KCkpKTsKKyAgICBpZiAoZ3RrX2NsaXBib2Fy
ZF93YWl0X2lzX3RhcmdldF9hdmFpbGFibGUoY2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkgeworICAg
ICAgICBpZiAoR3RrU2VsZWN0aW9uRGF0YSogZGF0YSA9IGd0a19jbGlwYm9hcmRfd2FpdF9mb3Jf
Y29udGVudHMoY2xpcGJvYXJkLCBtYXJrdXBBdG9tKSkgeworICAgICAgICAgICAgZGF0YU9iamVj
dC0+c2V0TWFya3VwKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOwogICAgICAgICAg
ICAgZ3RrX3NlbGVjdGlvbl9kYXRhX2ZyZWUoZGF0YSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NDEsNyArMTQ3LDcgQEAgdm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpmaWxsU2VsZWN0aW9uRGF0YShH
dGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludAogCiAgICAgZWxzZSBpZiAoaW5m
byA9PSBnZXRJZEZvclRhcmdldFR5cGUoVGFyZ2V0VHlwZU1hcmt1cCkpIHsKICAgICAgICAgR093
blB0cjxnY2hhcj4gbWFya3VwKGdfc3RyZHVwKGRhdGFPYmplY3QtPm1hcmt1cCgpLnV0ZjgoKS5k
YXRhKCkpKTsKLSAgICAgICAgZ3RrX3NlbGVjdGlvbl9kYXRhX3NldChzZWxlY3Rpb25EYXRhLCBn
ZGtNYXJrdXBBdG9tLCA4LAorICAgICAgICBndGtfc2VsZWN0aW9uX2RhdGFfc2V0KHNlbGVjdGlv
bkRhdGEsIG1hcmt1cEF0b20sIDgsCiAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PGNvbnN0
IGd1Y2hhcio+KG1hcmt1cC5nZXQoKSksIHN0cmxlbihtYXJrdXAuZ2V0KCkpICsgMSk7CiAKICAg
ICB9IGVsc2UgaWYgKGluZm8gPT0gZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVVUklMaXN0
KSkgewpAQCAtMTc5LDcgKzE4NSw3IEBAIEd0a1RhcmdldExpc3QqIFBhc3RlYm9hcmRIZWxwZXI6
OnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KERhdGFPYmplY3RHdGsqIGRhdGFPYmplCiAgICAgICAg
IGd0a190YXJnZXRfbGlzdF9hZGRfdGV4dF90YXJnZXRzKGxpc3QsIGdldElkRm9yVGFyZ2V0VHlw
ZShUYXJnZXRUeXBlVGV4dCkpOwogCiAgICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKQot
ICAgICAgICBndGtfdGFyZ2V0X2xpc3RfYWRkKGxpc3QsIGdka01hcmt1cEF0b20sIDAsIGdldElk
Rm9yVGFyZ2V0VHlwZShUYXJnZXRUeXBlTWFya3VwKSk7CisgICAgICAgIGd0a190YXJnZXRfbGlz
dF9hZGQobGlzdCwgbWFya3VwQXRvbSwgMCwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVN
YXJrdXApKTsKIAogICAgIGlmIChkYXRhT2JqZWN0LT5oYXNVUklMaXN0KCkpIHsKICAgICAgICAg
Z3RrX3RhcmdldF9saXN0X2FkZF91cmlfdGFyZ2V0cyhsaXN0LCBnZXRJZEZvclRhcmdldFR5cGUo
VGFyZ2V0VHlwZVVSSUxpc3QpKTsKQEAgLTE5Miw2ICsxOTgsNjQgQEAgR3RrVGFyZ2V0TGlzdCog
UGFzdGVib2FyZEhlbHBlcjo6dGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayog
ZGF0YU9iamUKICAgICByZXR1cm4gbGlzdDsKIH0KIAordm9pZCBQYXN0ZWJvYXJkSGVscGVyOjpm
aWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25EYXRhKiBkYXRhLCBndWludCBp
bmZvLCBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0KQoreworICAgIGlmICghZGF0YS0+ZGF0YSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRhdGEtPnRhcmdldCA9PSB0ZXh0UGxhaW5BdG9t
KQorICAgICAgICBkYXRhT2JqZWN0LT5zZXRUZXh0KHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmco
ZGF0YSkpOworCisgICAgZWxzZSBpZiAoZGF0YS0+dGFyZ2V0ID09IG1hcmt1cEF0b20pCisgICAg
ICAgIGRhdGFPYmplY3QtPnNldE1hcmt1cChzZWxlY3Rpb25EYXRhVG9VVEY4U3RyaW5nKGRhdGEp
KTsKKworICAgIGVsc2UgaWYgKGRhdGEtPnRhcmdldCA9PSB1cmlMaXN0QXRvbSkgeworICAgICAg
ICBnY2hhcioqIHVyaXMgPSBndGtfc2VsZWN0aW9uX2RhdGFfZ2V0X3VyaXMoZGF0YSk7CisgICAg
ICAgIGlmICghdXJpcykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBWZWN0b3I8S1VS
TD4gdXJpTGlzdCh1cmlzVG9LVVJMVmVjdG9yKHVyaXMpKTsKKyAgICAgICAgZGF0YU9iamVjdC0+
c2V0VVJJTGlzdCh1cmlMaXN0KTsKKyAgICAgICAgZ19zdHJmcmVldih1cmlzKTsKKworICAgIH0g
ZWxzZSBpZiAoZGF0YS0+dGFyZ2V0ID09IG5ldHNjYXBlVVJMQXRvbSkgeworICAgICAgICBTdHJp
bmcgdXJsV2l0aExhYmVsKHNlbGVjdGlvbkRhdGFUb1VURjhTdHJpbmcoZGF0YSkpOworCisgICAg
ICAgIFZlY3RvcjxTdHJpbmc+IHBpZWNlczsKKyAgICAgICAgdXJsV2l0aExhYmVsLnNwbGl0KCJc
biIsIHBpZWNlcyk7CisKKyAgICAgICAgLy8gR2l2ZSBwcmVmZXJlbmNlIHRvIHRleHQvdXJpLWxp
c3QgaGVyZSwgYXMgaXQgY2FuIGhvbGQgbW9yZQorICAgICAgICAvLyB0aGFuIG9uZSBVUkkgYnV0
IHN0aWxsIHRha2UgIHRoZSBsYWJlbCBpZiB0aGVyZSBpcyBvbmUuCisgICAgICAgIGlmICghZGF0
YU9iamVjdC0+aGFzVVJMKCkpIHsKKyAgICAgICAgICAgIFZlY3RvcjxLVVJMPiB1cmlMaXN0Owor
ICAgICAgICAgICAgdXJpTGlzdC5hcHBlbmQoS1VSTChLVVJMKCksIHBpZWNlc1swXSkpOworICAg
ICAgICAgICAgZGF0YU9iamVjdC0+c2V0VVJJTGlzdCh1cmlMaXN0KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChwaWVjZXMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIGRhdGFPYmplY3QtPnNl
dFRleHQocGllY2VzWzFdKTsKKyAgICB9Cit9CisKK1ZlY3RvcjxHZGtBdG9tPiBQYXN0ZWJvYXJk
SGVscGVyOjpkcm9wQXRvbXNGb3JDb250ZXh0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICAvLyBBbHdheXMgc2VhcmNoIGZvciB0aGVzZSBjb21tb24g
YXRvbXMuCisgICAgVmVjdG9yPEdka0F0b20+IGRyb3BBdG9tczsKKyAgICBkcm9wQXRvbXMuYXBw
ZW5kKHRleHRQbGFpbkF0b20pOworICAgIGRyb3BBdG9tcy5hcHBlbmQobWFya3VwQXRvbSk7Cisg
ICAgZHJvcEF0b21zLmFwcGVuZCh1cmlMaXN0QXRvbSk7CisgICAgZHJvcEF0b21zLmFwcGVuZChu
ZXRzY2FwZVVSTEF0b20pOworCisgICAgLy8gRm9yIGltYWdlcywgdHJ5IHRvIGZpbmQgdGhlIG1v
c3QgYXBwbGljYWJsZSBpbWFnZSB0eXBlLgorICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gbGlz
dChndGtfdGFyZ2V0X2xpc3RfbmV3KDAsIDApKTsKKyAgICBndGtfdGFyZ2V0X2xpc3RfYWRkX2lt
YWdlX3RhcmdldHMobGlzdC5nZXQoKSwgZ2V0SWRGb3JUYXJnZXRUeXBlKFRhcmdldFR5cGVJbWFn
ZSksIFRSVUUpOworICAgIEdka0F0b20gYXRvbSA9IGd0a19kcmFnX2Rlc3RfZmluZF90YXJnZXQo
d2lkZ2V0LCBjb250ZXh0LCBsaXN0LmdldCgpKTsKKyAgICBpZiAoYXRvbSAhPSBHREtfTk9ORSkK
KyAgICAgICAgZHJvcEF0b21zLmFwcGVuZChhdG9tKTsKKworICAgIHJldHVybiBkcm9wQXRvbXM7
Cit9CisKIHN0YXRpYyBEYXRhT2JqZWN0R3RrKiBzZXR0aW5nQ2xpcGJvYXJkRGF0YU9iamVjdCA9
IDA7CiAKIHN0YXRpYyB2b2lkIGdldENsaXBib2FyZENvbnRlbnRzQ2FsbGJhY2soR3RrQ2xpcGJv
YXJkKiBjbGlwYm9hcmQsIEd0a1NlbGVjdGlvbkRhdGEgKnNlbGVjdGlvbkRhdGEsIGd1aW50IGlu
Zm8sIGdwb2ludGVyIGRhdGEpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkSGVscGVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkSGVscGVyLmgK
aW5kZXggMmQ0NmFkYzMwNWNkNTY5Mzg3MzgwZjk3OTY4NzM4YTc4MGQ2NTVmNS4uMzNiZTFhOGYx
OWUzNzNiZmZjYzhmZDQ0ZTAzMmJkMmUxYmQ4YTM5NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEhlbHBlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRIZWxwZXIuaApAQCAtMzYsNiArMzYsOCBAQCB0eXBlZGVmIHN0cnVjdCBfR3RrQ2xp
cGJvYXJkIEd0a0NsaXBib2FyZDsKIHR5cGVkZWYgc3RydWN0IF9HdGtUYXJnZXRMaXN0IEd0a1Rh
cmdldExpc3Q7CiB0eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKIHR5cGVkZWYg
c3RydWN0IF9HdGtTZWxlY3Rpb25EYXRhIEd0a1NlbGVjdGlvbkRhdGE7Cit0eXBlZGVmIHN0cnVj
dCBfR2RrRHJhZ0NvbnRleHQgR2RrRHJhZ0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrQXRv
bSogR2RrQXRvbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Miw2ICs1NCw4IEBAIHB1
YmxpYzoKICAgICBHdGtUYXJnZXRMaXN0KiB0YXJnZXRMaXN0KCkgY29uc3Q7CiAgICAgR3RrVGFy
Z2V0TGlzdCogdGFyZ2V0TGlzdEZvckRhdGFPYmplY3QoRGF0YU9iamVjdEd0ayopOwogICAgIHZv
aWQgZmlsbFNlbGVjdGlvbkRhdGEoR3RrU2VsZWN0aW9uRGF0YSosIGd1aW50LCBEYXRhT2JqZWN0
R3RrKik7CisgICAgdm9pZCBmaWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShHdGtTZWxlY3Rpb25E
YXRhKiwgZ3VpbnQsIERhdGFPYmplY3RHdGsqKTsKKyAgICBWZWN0b3I8R2RrQXRvbT4gZHJvcEF0
b21zRm9yQ29udGV4dChHdGtXaWRnZXQqLCBHZGtEcmFnQ29udGV4dCopOwogICAgIHZvaWQgd3Jp
dGVDbGlwYm9hcmRDb250ZW50cyhHdGtDbGlwYm9hcmQqLCBHQ2xvc3VyZSogY2xvc3VyZSA9IDAp
OwogICAgIHZvaWQgZ2V0Q2xpcGJvYXJkQ29udGVudHMoR3RrQ2xpcGJvYXJkKik7CiAKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXgg
MTI4NDJjZGZiNTQ3ZmI4NGNiYTJjZDUzN2ZiMmViOTUxMGViYWVmZC4uZjUyZjlkZTdmYTU1NjE5
MjM4NzBhMTRmODMzMGVmZWNmYzQ1YTZiNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOCBAQAorMjAxMC0wNy0w
MiAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBz
aG91bGQgc3VwcG9ydCBkcm9wcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mzk4NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZHJvcHBpbmcgY29u
dGVudCBvbnRvIEdUSysgV2ViVmlld3MuCisKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0
ZS5oOgorICAgICAgICBBZGQgYSBEcm9wcGluZ0NvbnRleHQgc3RydWN0IHRvIGtlZXAgdHJhY2sg
b2YgZHJvcCBkYXRhIHdoaWxlIHRoZSBkcm9wIGlzCisgICAgICAgIGluIHByb2dyZXNzLiBIYXZl
IFdlYktpdFdlYlZpZXcga2VlcCBhIG1hcCBvZiBHZGtEcmFnQ29udGV4dHMgdG8gRHJvcHBpbmdD
b250ZXh0cy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6IEFkZCBuZWNlc3Nh
cnkgaW5jbHVkZXMgYW5kIGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQgaGVscGVyLgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X3BvcHVwX21lbnVfaGFuZGxlcik6IFVzZSBnbG9iYWxQb2ludEZv
ckNsaWVudFBvaW50IGhlbHBlci4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTog
UHJvcGVybHkgY2xlYW4gdXAgZHJvcHBpbmdDb250ZXh0cyBtZW1iZXIuCisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZmluYWxpemUpOiBEZWxldGUgZHJvcHBpbmdDb250ZXh0IG1lbWJlci4KKyAg
ICAgICAgKGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQpOiBBZGRlZC4KKyAgICAgICAgKGRvRHJh
Z0xlYXZlTGF0ZXIpOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmFnX2xlYXZl
KTogQWRkZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb24pOiBBZGRlZC4K
KyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmFnX2RhdGFfcmVjZWl2ZWQpOiBBZGRlZC4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19kcmFnX2Ryb3ApOiBBZGRlZC4KKyAgICAgICAgKHdlYmtp
dF93ZWJfdmlld19jbGFzc19pbml0KTogQ29ubmVjdCBuZXcgZHJvcCBzaWduYWwgaGFuZGxlcnMg
dG8gdGhlIHdpZGdldCBkZWZpbml0aW9uLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQp
OiBTZXQgdXAgdGhlIHdpZGdldCBhcyBhIGRyb3AgZGVzdGluYXRpb24gYW5kIGluaXRpYWxpemUg
ZHJvcHBpbmdDb250ZXh0cy4KKwogMjAxMC0wNy0wMSAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR3VzdGF2byBOb3JvbmhhLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0cHJpdmF0ZS5oCmluZGV4IGZhNzRhYmMwZWYxNjg3ZTNiYjAwYTYxMmQxZmMzZDk1NTA5
YjhkZDMuLjczZjlmY2M5MTdkY2ViYTg1YWE4NDJlMjdhNjY2ZmZjNDFlNzI1MmUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTQ4LDIxICs0OCwyMyBAQAogI2luY2x1ZGUgIkFyY2hp
dmVSZXNvdXJjZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkRh
dGFPYmplY3RHdGsuaCIKLSNpbmNsdWRlIDxlbmNoYW50Lmg+CisjaW5jbHVkZSAiRHJhZ0FjdGlv
bnMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIKICNpbmNsdWRl
ICJHZW9sb2NhdGlvbi5oIgogI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCi0jaW5jbHVkZSAiU2V0
dGluZ3MuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgPGVuY2hh
bnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgpAQCAtMTAzLDcgKzEwNSwxNiBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogICAgIFdlYktpdEhpdFRlc3RSZXN1bHQqIGtpdChjb25zdCBXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0Jik7CiAKLSAgICBXZWJLaXQ6OlBhc3RlYm9hcmRIZWxwZXJHdGsqIHBh
c3RlYm9hcmRIZWxwZXJJbnN0YW5jZSgpOworICAgIFBhc3RlYm9hcmRIZWxwZXJHdGsqIHBhc3Rl
Ym9hcmRIZWxwZXJJbnN0YW5jZSgpOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgRHJvcHBpbmdDb250
ZXh0XyB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAgIEdka0RyYWdD
b250ZXh0KiBnZGtDb250ZXh0OworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6RGF0YU9iamVjdEd0
az4gZGF0YU9iamVjdDsKKyAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQgbGFzdE1vdGlvblBvc2l0
aW9uOworICAgICAgICBpbnQgcGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAgICAgICAgYm9vbCBkcm9w
SGFwcGVuZWQ7CisgICAgfSBEcm9wcGluZ0NvbnRleHQ7CiB9CiAKIGV4dGVybiAiQyIgewpAQCAt
MTU5LDYgKzE3MCw3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBndWludDMyIHByZXZpb3VzQ2xp
Y2tUaW1lOwogCiAgICAgICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBSZWZQdHI8V2ViQ29y
ZTo6RGF0YU9iamVjdEd0az4gPiogZHJhZ2dpbmdEYXRhT2JqZWN0czsKKyAgICAgICAgSGFzaE1h
cDxHZGtEcmFnQ29udGV4dCosIFdlYktpdDo6RHJvcHBpbmdDb250ZXh0Kj4qIGRyb3BwaW5nQ29u
dGV4dHM7CiAgICAgfTsKIAogICAgICNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFU
RShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBF
X1dFQl9GUkFNRSwgV2ViS2l0V2ViRnJhbWVQcml2YXRlKSkKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
dmlldy5jcHAKaW5kZXggNjI5OTdjNWEyMjhiYjczMjFmNTA4ZDBkMzllN2EwNThhODQ3NjdiOS4u
MTg3YTBlNzlhM2I5OTYwYTkwMTA5NWVjMWNkMTQ2NDljZTM2NzI3ZiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAKQEAgLTcsNyArNyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4
IEd1c3Rhdm8gTm9yb25oYSBTaWx2YSA8Z25zQGdub21lLm9yZz4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDggTnVhbnRpIEx0ZC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgQ29s
bGFib3JhIEx0ZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkg
TW92aWFsIENyZWF0aXZlIFRlY2hub2xvZ2llcyBJbmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5
IEJvYmJ5IFBvd2VycwogICoKQEAgLTUyLDcgKzUyLDEwIEBACiAjaW5jbHVkZSAiQ3Vyc29yLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2lu
Y2x1ZGUgIkRyYWdBY3Rpb25zLmgiCiAjaW5jbHVkZSAiRHJhZ0NsaWVudEd0ay5oIgorI2luY2x1
ZGUgIkRyYWdDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJF
ZGl0b3JDbGllbnRHdGsuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKQEAgLTEyMyw2ICsxMjYsNyBAQAogCiBzdGF0aWMgY29uc3QgZG91YmxlIGRlZmF1
bHREUEkgPSA5Ni4wOwogc3RhdGljIFdlYktpdENhY2hlTW9kZWwgY2FjaGVNb2RlbDsKK3N0YXRp
YyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KEdka1dpbmRvdyogd2luZG93LCBj
b25zdCBJbnRQb2ludCYgY2xpZW50UG9pbnQpOwogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0Owog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0zNzAsOSArMzc0LDYgQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdF93ZWJfdmlld19wb3B1cF9tZW51X2hhbmRsZXIoR3RrV2lkZ2V0KiB3aWRnZXQp
CiAgICAgICAgIGxvY2F0aW9uID0gSW50UG9pbnQocmlnaHRBbGlnbmVkID8gZmlyc3RSZWN0LnJp
Z2h0KCkgOiBmaXJzdFJlY3QueCgpLCBmaXJzdFJlY3QuYm90dG9tKCkpOwogICAgIH0KIAotICAg
IGludCB4LCB5OwotICAgIGdka193aW5kb3dfZ2V0X29yaWdpbihndGtfd2lkZ2V0X2dldF93aW5k
b3coR1RLX1dJREdFVCh2aWV3LT5ob3N0V2luZG93KCktPnBsYXRmb3JtUGFnZUNsaWVudCgpKSks
ICZ4LCAmeSk7Ci0KICAgICAvLyBGSVhNRTogVGhlIEludFNpemUoMCwgLTEpIGlzIGEgaGFjayB0
byBnZXQgdGhlIGhpdC10ZXN0aW5nIHRvIHJlc3VsdCBpbiB0aGUgc2VsZWN0ZWQgZWxlbWVudC4K
ICAgICAvLyBJZGVhbGx5IHdlJ2QgaGF2ZSB0aGUgcG9zaXRpb24gb2YgYSBjb250ZXh0IG1lbnUg
ZXZlbnQgYmUgc2VwYXJhdGUgZnJvbSBpdHMgdGFyZ2V0IG5vZGUuCiAgICAgbG9jYXRpb24gPSB2
aWV3LT5jb250ZW50c1RvV2luZG93KGxvY2F0aW9uKSArIEludFNpemUoMCwgLTEpOwpAQCAtMzg0
LDcgKzM4NSw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfcG9wdXBfbWVudV9o
YW5kbGVyKEd0a1dpZGdldCogd2lkZ2V0KQogICAgICAgICBsb2NhdGlvbi5zZXRYKGNvbnRleHRN
ZW51TWFyZ2luKTsKICAgICBlbHNlIGlmIChsb2NhdGlvbi54KCkgPiB2aWV3LT53aWR0aCgpKQog
ICAgICAgICBsb2NhdGlvbi5zZXRYKHZpZXctPndpZHRoKCkgLSBjb250ZXh0TWVudU1hcmdpbik7
Ci0gICAgSW50UG9pbnQgZ2xvYmFsID0gbG9jYXRpb24gKyBJbnRTaXplKHgsIHkpOworICAgIElu
dFBvaW50IGdsb2JhbChnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KGd0a193aWRnZXRfZ2V0X3dp
bmRvdyh3aWRnZXQpLCBsb2NhdGlvbikpOwogCiAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50
KGxvY2F0aW9uLCBnbG9iYWwsIFJpZ2h0QnV0dG9uLCBNb3VzZUV2ZW50UHJlc3NlZCwgMCwgZmFs
c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGd0a19nZXRfY3VycmVudF9ldmVudF90aW1lKCkpOwog
CkBAIC0xMTk3LDYgKzExOTgsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQogICAgIH0KIAogICAgIHByaXYtPmRyYWdnaW5nRGF0YU9iamVj
dHMtPmNsZWFyKCk7CisgICAgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4
dCo+OjppdGVyYXRvciBlbmREcm9wcGluZ0NvbnRleHRzID0gcHJpdi0+ZHJvcHBpbmdDb250ZXh0
cy0+ZW5kKCk7CisgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250
ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5iZWdpbigpOyBp
dGVyICE9IGVuZERyb3BwaW5nQ29udGV4dHM7ICsraXRlcikKKyAgICAgICAgZGVsZXRlIChpdGVy
LT5zZWNvbmQpOworICAgIHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNsZWFyKCk7CiAKICAgICBH
X09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmpl
Y3QpOwogfQpAQCAtMTIxNCw2ICsxMjE5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKIAogICAgIGRlbGV0ZSBwcml2LT5wcmV2aW91c0Ns
aWNrUG9pbnQ7CiAgICAgZGVsZXRlIHByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHM7CisgICAgZGVs
ZXRlIHByaXYtPmRyb3BwaW5nQ29udGV4dHM7CiAKICAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRf
d2ViX3ZpZXdfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKIH0KQEAgLTEzMDksNiAr
MTMxNSwxNCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2NyZWVuX2NoYW5nZWQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka1NjcmVlbiogcHJldmlvdQogICAgIHNldHRpbmdzLT5zZXRNaW5p
bXVtTG9naWNhbEZvbnRTaXplKG1pbmltdW1Mb2dpY2FsRm9udFNpemUgLyA3Mi4wICogRFBJKTsK
IH0KIAorc3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoR2RrV2luZG93
KiB3aW5kb3csIGNvbnN0IEludFBvaW50JiBjbGllbnRQb2ludCkKK3sKKyAgICBpbnQgeCwgeTsK
KyAgICBnZGtfd2luZG93X2dldF9vcmlnaW4od2luZG93LCAmeCwgJnkpOworICAgIHJldHVybiBj
bGllbnRQb2ludCArIEludFNpemUoeCwgeSk7Cit9CisKKwogc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2RyYWdfZW5kKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4
dCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdl
dCk7CkBAIC0xMzYwLDYgKzEzNzQsMTMwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19k
cmFnX2RhdGFfZ2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29uCiAgICAg
cGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPmZpbGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRh
dGEsIGluZm8sIHByaXYtPmRyYWdnaW5nRGF0YU9iamVjdHMtPmdldChjb250ZXh0KS5nZXQoKSk7
CiB9CiAKK3N0YXRpYyBnYm9vbGVhbiBkb0RyYWdMZWF2ZUxhdGVyKERyb3BwaW5nQ29udGV4dCog
Y29udGV4dCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gY29udGV4dC0+d2ViVmll
dzsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAg
ICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQtPmdka0NvbnRl
eHQpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBJZiB0aGUgdmlldyBkb2Vzbid0
IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVuZGluZyBkYXRhKQor
ICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgZHJhZy4KKyAgICBpZiAoY29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0cykKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhhdmUg
anVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKKyAgICAvLyBoYXBwZW5zIGlu
IHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCisgICAgaWYgKCFj
b250ZXh0LT5kcm9wSGFwcGVuZWQpIHsKKyAgICAgICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9u
ID0gY29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworICAgICAgICBEcmFnRGF0YSBkcmFnRGF0
YShjb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgZ2xvYmFsUG9pbnRGb3JDbGll
bnRQb2ludChndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVCh3ZWJWaWV3KSksIHBvc2l0
aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgICAgICBjb3JlKHdlYlZpZXcpLT5kcmFnQ29u
dHJvbGxlcigpLT5kcmFnRXhpdGVkKCZkcmFnRGF0YSk7CisgICAgfQorCisgICAgY29yZSh3ZWJW
aWV3KS0+ZHJhZ0NvbnRyb2xsZXIoKS0+ZHJhZ0VuZGVkKCk7CisgICAgcHJpdi0+ZHJvcHBpbmdD
b250ZXh0cy0+cmVtb3ZlKGNvbnRleHQtPmdka0NvbnRleHQpOworICAgIGRlbGV0ZSBjb250ZXh0
OworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Ry
YWdfbGVhdmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBndWlu
dCB0aW1lKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVco
d2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7
CisKKyAgICBpZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEg
ZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFnLWRy
b3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBh
ZnRlcgorICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFw
cGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCisgICAgZ190aW1lb3V0X2FkZCgwLCByZWludGVycHJl
dF9jYXN0PEdTb3VyY2VGdW5jPihkb0RyYWdMZWF2ZUxhdGVyKSwgcHJpdi0+ZHJvcHBpbmdDb250
ZXh0cy0+Z2V0KGNvbnRleHQpKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF93ZWJfdmll
d19kcmFnX21vdGlvbihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSog
cHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29u
dGV4dCA9IDA7CisgICAgSW50UG9pbnQgcG9zaXRpb24gPSBJbnRQb2ludCh4LCB5KTsKKyAgICBp
ZiAoIXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQpKSB7CisgICAgICAg
IGRyb3BwaW5nQ29udGV4dCA9IG5ldyBEcm9wcGluZ0NvbnRleHQ7CisgICAgICAgIGRyb3BwaW5n
Q29udGV4dC0+d2ViVmlldyA9IHdlYlZpZXc7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+Z2Rr
Q29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdCA9
IFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOworICAgICAgICBkcm9wcGluZ0NvbnRl
eHQtPmRyb3BIYXBwZW5lZCA9IGZhbHNlOworICAgICAgICBkcm9wcGluZ0NvbnRleHQtPmxhc3RN
b3Rpb25Qb3NpdGlvbiA9IHBvc2l0aW9uOworICAgICAgICBwcml2LT5kcm9wcGluZ0NvbnRleHRz
LT5zZXQoY29udGV4dCwgZHJvcHBpbmdDb250ZXh0KTsKKworICAgICAgICBWZWN0b3I8R2RrQXRv
bT4gYWNjZXB0YWJsZVRhcmdldHMocGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPmRyb3BBdG9t
c0ZvckNvbnRleHQod2lkZ2V0LCBjb250ZXh0KSk7CisgICAgICAgIGRyb3BwaW5nQ29udGV4dC0+
cGVuZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAg
ICAgICAgICAgIGd0a19kcmFnX2dldF9kYXRhKHdpZGdldCwgY29udGV4dCwgYWNjZXB0YWJsZVRh
cmdldHMuYXQoaSksIHRpbWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRyb3BwaW5nQ29udGV4
dCA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmdldChjb250ZXh0KTsKKyAgICAgICAgZHJvcHBp
bmdDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKKyAgICB9CisKKyAgICAv
LyBEb24ndCBzZW5kIGFueSBkcmFnIGluZm9ybWF0aW9uIHRvIFdlYkNvcmUgdW50aWwgd2UndmUg
cmV0cmlldmVkIGFsbAorICAgIC8vIHRoZSBkYXRhIGZvciB0aGlzIGRyYWcgb3BlcmF0aW9uLiBP
dGhlcndpc2Ugd2UnZCBoYXZlIHRvIGJsb2NrIHRvIHdhaXQKKyAgICAvLyBmb3IgdGhlIGRyYWcn
cyBkYXRhLgorICAgIEFTU0VSVChkcm9wcGluZ0NvbnRleHQpOworICAgIGlmIChkcm9wcGluZ0Nv
bnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMgPiAwKQorICAgICAgICByZXR1cm4gVFJVRTsKKwor
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwg
cG9zaXRpb24sIGdsb2JhbFBvaW50Rm9yQ2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93
KHdpZGdldCksIHBvc2l0aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihjb250ZXh0
LT5hY3Rpb25zKSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcp
LT5kcmFnQ29udHJvbGxlcigpLT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFn
X3N0YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJh
dGlvbiksIHRpbWUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF93ZWJfdmlld19kcmFnX2RhdGFfcmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0
aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGltZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKHdpZGdldCk7CisgICAgV2ViS2l0V2ViVmlld1ByaXZh
dGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2OworCisgICAgaWYgKCFwcml2LT5kcm9wcGluZ0NvbnRl
eHRzLT5jb250YWlucyhjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgRHJvcHBpbmdD
b250ZXh0KiBkcm9wcGluZ0NvbnRleHQgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLT5nZXQoY29u
dGV4dCk7CisgICAgZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzLS07CisgICAg
cGFzdGVib2FyZEhlbHBlckluc3RhbmNlKCktPmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNl
bGVjdGlvbkRhdGEsIGluZm8sIGRyb3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CisK
KyAgICBpZiAoZHJvcHBpbmdDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3RzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2VkIHRvIGRyYWctZGF0YS1yZWNl
aXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcworICAgIC8vIGluYWNjdXJhdGUgaW4gRFJULCBzbyB1
c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBldmVudC4KKyAgICBjb25zdCBJ
bnRQb2ludCYgcG9zaXRpb24gPSBkcm9wcGluZ0NvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsK
KworICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcgcmVxdWVzdHMsIHN0YXJ0IHNl
bmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgorICAgIERyYWdEYXRhIGRyYWdEYXRhKGRy
b3BwaW5nQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGdsb2JhbFBvaW50Rm9y
Q2xpZW50UG9pbnQoZ3RrX3dpZGdldF9nZXRfd2luZG93KHdpZGdldCksIHBvc2l0aW9uKSwgZ2Rr
RHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihjb250ZXh0LT5hY3Rpb25zKSk7CisgICAgRHJhZ09w
ZXJhdGlvbiBvcGVyYXRpb24gPSBjb3JlKHdlYlZpZXcpLT5kcmFnQ29udHJvbGxlcigpLT5kcmFn
RW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFnT3Bl
cmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2RyYWdfZHJvcChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQorewor
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcod2lkZ2V0KTsKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisKKyAgICBpZiAo
IXByaXYtPmRyb3BwaW5nQ29udGV4dHMtPmNvbnRhaW5zKGNvbnRleHQpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBEcm9wcGluZ0NvbnRleHQqIGRyb3BwaW5nQ29udGV4dCA9IHByaXYt
PmRyb3BwaW5nQ29udGV4dHMtPmdldChjb250ZXh0KTsKKyAgICBkcm9wcGluZ0NvbnRleHQtPmRy
b3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbih4LCB5KTsKKyAgICBE
cmFnRGF0YSBkcmFnRGF0YShkcm9wcGluZ0NvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0
aW9uLCBnbG9iYWxQb2ludEZvckNsaWVudFBvaW50KGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRn
ZXQpLCBwb3NpdGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oY29udGV4dC0+YWN0
aW9ucykpOworICAgIGNvcmUod2ViVmlldyktPmRyYWdDb250cm9sbGVyKCktPnBlcmZvcm1EcmFn
KCZkcmFnRGF0YSk7CisKKyAgICBndGtfZHJhZ19maW5pc2goY29udGV4dCwgVFJVRSwgRkFMU0Us
IHRpbWUpOworICAgIHJldHVybiBUUlVFOworfQorCiAjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwg
MTIsIDApCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X3F1ZXJ5X3Rvb2x0aXAoR3Rr
V2lkZ2V0ICp3aWRnZXQsIGdpbnQgeCwgZ2ludCB5LCBnYm9vbGVhbiBrZXlib2FyZF9tb2RlLCBH
dGtUb29sdGlwICp0b29sdGlwKQogewpAQCAtMjM1Niw2ICsyNDk0LDEwIEBAIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0Ns
YXNzKQogICAgIHdpZGdldENsYXNzLT5zY3JlZW5fY2hhbmdlZCA9IHdlYmtpdF93ZWJfdmlld19z
Y3JlZW5fY2hhbmdlZDsKICAgICB3aWRnZXRDbGFzcy0+ZHJhZ19lbmQgPSB3ZWJraXRfd2ViX3Zp
ZXdfZHJhZ19lbmQ7CiAgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9nZXQgPSB3ZWJraXRfd2Vi
X3ZpZXdfZHJhZ19kYXRhX2dldDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJr
aXRfd2ViX3ZpZXdfZHJhZ19tb3Rpb247CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3
ZWJraXRfd2ViX3ZpZXdfZHJhZ19sZWF2ZTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0g
d2Via2l0X3dlYl92aWV3X2RyYWdfZHJvcDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3Jl
Y2VpdmVkID0gd2Via2l0X3dlYl92aWV3X2RyYWdfZGF0YV9yZWNlaXZlZDsKICNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigyLCAxMiwgMCkKICAgICB3aWRnZXRDbGFzcy0+cXVlcnlfdG9vbHRpcCA9IHdl
YmtpdF93ZWJfdmlld19xdWVyeV90b29sdGlwOwogI2VuZGlmCkBAIC0yOTM3LDYgKzMwNzksOSBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQogICAgIHByaXYtPnByZXZpb3VzQ2xpY2tUaW1lID0gMDsKIAogICAgIHByaXYtPmRyYWdnaW5n
RGF0YU9iamVjdHMgPSBuZXcgSGFzaE1hcDxHZGtEcmFnQ29udGV4dCosIFJlZlB0cjxXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrPiA+KCk7CisgICAgcHJpdi0+ZHJvcHBpbmdDb250ZXh0cyA9IG5ldyBI
YXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj4oKTsKKyAgICBndGtfZHJh
Z19kZXN0X3NldChHVEtfV0lER0VUKHdlYlZpZXcpLCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVmYXVs
dHM+KDApLCAwLCAwLCBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NPUFkg
fCBHREtfQUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBH
REtfQUNUSU9OX1BSSVZBVEUpKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdChH
VEtfV0lER0VUKHdlYlZpZXcpLCBwYXN0ZWJvYXJkSGVscGVySW5zdGFuY2UoKS0+dGFyZ2V0TGlz
dCgpKTsKIH0KIAogR3RrV2lkZ2V0KiB3ZWJraXRfd2ViX3ZpZXdfbmV3KHZvaWQpCg==
</data>
<flag name="review"
          id="47822"
          type_id="1"
          status="+"
          setter="xan.lopez"
    />
          </attachment>
      

    </bug>

</bugzilla>