<?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>87113</bug_id>
          
          <creation_ts>2012-05-22 03:40:50 -0700</creation_ts>
          <short_desc>[GTK] Add inspector API to WebKit2 GTK+</short_desc>
          <delta_ts>2012-05-23 00:56:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>630174</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-22 03:40:50 -0700</bug_when>
    <thetext>API to allow interact with the inspector and also implement custom attach/detach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630200</commentid>
    <comment_count>1</comment_count>
      <attachid>143263</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-22 03:57:34 -0700</bug_when>
    <thetext>Created attachment 143263
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630207</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-22 04:04:16 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630360</commentid>
    <comment_count>3</comment_count>
      <attachid>143263</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-22 07:47:12 -0700</bug_when>
    <thetext>Comment on attachment 143263
Patch

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

Looks great. Couple nits below, but in general I really like the new API.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:134
&gt; +     * To prevent the inspector from being shown you can connecto the this

Nit connectto -&gt; &quot;connect to&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:150
&gt; +     * WebKitWebInspector::bring-to-front:

Perhaps this should be called &quot;raise&quot; to match &quot;gdk_window_raise&quot; or &quot;present&quot; to match &quot;gtk_window_present&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:161
&gt; +     * In both cases, if this signal is not hanlded, the default implementation

hanlded -&gt; handled

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:200
&gt; +     * attached to the inspected view, so you only need tyo handle this signal

need tyo -&gt; need to

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:224
&gt; +     * Emitted when the inspector is requested to be detached from the window
&gt; +     * where it currently is. The inspector is detached when the inspector page

Perhaps better phrased: &quot;Emitted when the #WebKitWebInspector is requesting to be detached from the window it is currently attached to.&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:226
&gt; +     * #WebKitWebInspector::closed, or when the user clicks on detach button

on detach button -&gt; on the detach button

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:340
&gt; + * Returns: the URI that is currently being inspected.

Can this be %NULL? If so, it would be good to mention it.

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:351
&gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;custom&quot;, testInspectorCustom);

This could probably be more specific about what it&apos;s testing. Perhaps &quot;manual-attach-detach&quot;

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:352
&gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;inspector-window-destroyed&quot;, testInspectorWindowDestroyed);

Perhaps &quot;containing-window-destroyed&quot; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630385</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-22 08:19:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 143263 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143263&amp;action=review
&gt; 
&gt; Looks great. Couple nits below, but in general I really like the new API.

Thanks!, and sorry for the typos :-(

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:150
&gt; &gt; +     * WebKitWebInspector::bring-to-front:
&gt; 
&gt; Perhaps this should be called &quot;raise&quot; to match &quot;gdk_window_raise&quot; or &quot;present&quot; to match &quot;gtk_window_present&quot;

Well, this depends on the implementation, for example, if the inspector is attached in a browser tab, bring-to-front is not just raise or present the window, but also make the tab active.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:224
&gt; &gt; +     * Emitted when the inspector is requested to be detached from the window
&gt; &gt; +     * where it currently is. The inspector is detached when the inspector page
&gt; 
&gt; Perhaps better phrased: &quot;Emitted when the #WebKitWebInspector is requesting to be detached from the window it is currently attached to.&quot;

Indeed.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp:340
&gt; &gt; + * Returns: the URI that is currently being inspected.
&gt; 
&gt; Can this be %NULL? If so, it would be good to mention it.

I think it&apos;s about:blank, but I&apos;ll check it.
 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:351
&gt; &gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;custom&quot;, testInspectorCustom);
&gt; 
&gt; This could probably be more specific about what it&apos;s testing. Perhaps &quot;manual-attach-detach&quot;

Ok.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:352
&gt; &gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;inspector-window-destroyed&quot;, testInspectorWindowDestroyed);
&gt; 
&gt; Perhaps &quot;containing-window-destroyed&quot; ?

containing window might be the inspected window when the inspector is attached, inspector window always refers to the external window that contains the inspector. This is testing the case when the external custom window, which not known by wk, is destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630401</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-22 08:35:01 -0700</bug_when>
    <thetext>(In reply to comment #4)

&gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:352
&gt; &gt; &gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;inspector-window-destroyed&quot;, testInspectorWindowDestroyed);
&gt; &gt; 
&gt; &gt; Perhaps &quot;containing-window-destroyed&quot; ?
&gt; 
&gt; containing window might be the inspected window when the inspector is attached, inspector window always refers to the external window that contains the inspector. This is testing the case when the external custom window, which not known by wk, is destroyed.

&quot;custom-container-destroyed&quot;  or something similar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630403</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-22 08:38:43 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; 
&gt; &gt; &gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestInspector.cpp:352
&gt; &gt; &gt; &gt; +    CustomInspectorTest::add(&quot;WebKitWebInspector&quot;, &quot;inspector-window-destroyed&quot;, testInspectorWindowDestroyed);
&gt; &gt; &gt; 
&gt; &gt; &gt; Perhaps &quot;containing-window-destroyed&quot; ?
&gt; &gt; 
&gt; &gt; containing window might be the inspected window when the inspector is attached, inspector window always refers to the external window that contains the inspector. This is testing the case when the external custom window, which not known by wk, is destroyed.
&gt; 
&gt; &quot;custom-container-destroyed&quot;  or something similar?

yeah, that sounds better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631357</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-05-23 00:56:04 -0700</bug_when>
    <thetext>Committed r118146: &lt;http://trac.webkit.org/changeset/118146&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143263</attachid>
            <date>2012-05-22 03:57:34 -0700</date>
            <delta_ts>2012-05-22 07:47:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-inspector-api.diff</filename>
            <type>text/plain</type>
            <size>67452</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYWZkMjMwLi5hOTkwMWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEx
IEBACisyMDEyLTA1LTIyICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNv
bT4KKworICAgICAgICBbR1RLXSBBZGQgaW5zcGVjdG9yIEFQSSB0byBXZWJLaXQyIEdUSysKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MTEzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmls
ZS5saXN0LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQy9ndGsvV0tJbnNwZWN0b3JDbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdLSW5zcGVjdG9yU2V0SW5zcGVjdG9yQ2xpZW50R3RrKToKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL0MvZ3RrL1dLSW5zcGVjdG9yQ2xpZW50R3RrLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJJbnNwZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdFdlYkluc3Bl
Y3RvckZpbmFsaXplKToKKyAgICAgICAgKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2luaXQpOgorICAg
ICAgICAod2Via2l0X3dlYl9pbnNwZWN0b3JfY2xhc3NfaW5pdCk6CisgICAgICAgIChvcGVuV2lu
ZG93KTogRW1pdCBXZWJLaXRXZWJJbnNwZWN0b3I6Om9wZW4td2luZG93IHNpbmdhbC4KKyAgICAg
ICAgKGRpZENsb3NlKTogRW1pdCBXZWJLaXRXZWJJbnNwZWN0b3I6OmNsb3NlZCBzaWduYWwuCisg
ICAgICAgIChicmluZ1RvRnJvbnQpOiBFbWl0IFdlYktpdFdlYkluc3BlY3Rvcjo6YnJpbmctdG8t
ZnJvbnQgc2luZ2FsLgorICAgICAgICAoaW5zcGVjdGVkVVJMQ2hhbmdlZCk6IFNldCB0aGUgaW5z
cGVjdGVkIFVSSSBhbmQgZW1pdAorICAgICAgICBHT2JqZWN0Ojpub3RpZnkgc2lnbmFsIGlmIGl0
IGNoYW5nZWQuCisgICAgICAgIChhdHRhY2gpOiBFbWl0IFdlYktpdFdlYkluc3BlY3Rvcjo6YXR0
YWNoIHNpZ25hbC4KKyAgICAgICAgKGRldGFjaCk6IEVtaXQgV2ViS2l0V2ViSW5zcGVjdG9yOjpk
ZXRhY2ggc2lnbmFsLgorICAgICAgICAoZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQpOiBTZXQgdGhl
IGF0dGFjaGVkIGhlaWdodCBhbmQgZW1pdAorICAgICAgICBHT2JqZWN0Ojpub3RpZnkgc2lnbmFs
IGlmIGl0IGNoYW5nZWQuCisgICAgICAgICh3ZWJraXRXZWJJbnNwZWN0b3JDcmVhdGUpOiBDZWF0
ZSBhIG5ldyBXZWJLaXRXZWJJbnNwZWN0b3Igb2JqZWN0CisgICAgICAgIGZvciB0aGUgZ2l2ZW4g
V0tJbnNwZWN0b3IuIEFsc28gaW5pdGlhbGl6ZSBhbmQgc2V0IHRoZSBpbnNwZWN0b3IKKyAgICAg
ICAgY2xpZW50LgorICAgICAgICAod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KTog
UmV0dXJuIHRoZSB3ZWIgdmlldyB1c2VkIHRvCisgICAgICAgIHJlbmRlciB0aGUgaW5zcGVjdG9y
LgorICAgICAgICAod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2luc3BlY3RlZF91cmkpOiBSZXR1
cm4gdGhlIFVSSSB0aGF0IGlzCisgICAgICAgIGJlaW5nIGluc3BlY3RlZC4KKyAgICAgICAgKHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKTogV2hldGhlciB0aGUgaW5zcGVjdG9yIHZp
ZXcgaXMKKyAgICAgICAgY3VycmVudGx5IGF0dGFjaGVkLgorICAgICAgICAod2Via2l0X3dlYl9p
bnNwZWN0b3JfYXR0YWNoKTogUmVxdWVzdCB0byBhdHRhY2ggdGhlIGluc3BlY3Rvci4KKyAgICAg
ICAgKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2RldGFjaCk6IFJlcXVlc3QgdG8gZGV0YWNoIHRoZSBp
bnNwZWN0b3IuCisgICAgICAgICh3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93KTogUmVxdWVzdCB0
byBzaG93IHRoZSBpbnNwZWN0b3IuCisgICAgICAgICh3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9z
ZSk6IFJlcXVlc3QgdG8gY2xvc2UgdGhlIGluc3BlY3Rvci4KKyAgICAgICAgKHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQpOiBSZXR1cm4gdGhlIGhlaWdodCB0aGF0Cisg
ICAgICAgIHRoZSBpbnNwZWN0b3IgdmlldyBzaG91bGQgaGF2ZSB3aGVuIGF0dGFjaGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwOgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IpOiBSZXR1cm4gdGhlIFdlYktpdFdl
Ykluc3BlY3RvcgorICAgICAgICBhc3NvY2lhdGVkIHRvIHRoZSB3ZWIgdmlldy4KKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZvcgor
ICAgICAgICBXZWJLaXRXZWJJbnNwZWN0b3IuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
ZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dDogQWQgbmV3IHN5bWJvbHMuCisgICAgICAgICog
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Vi
a2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3R5cGUuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgdGVzdCBmb3IgdGhlCisgICAgICAgIGluc3Bl
Y3RvciBBUEkuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAodGVzdEluc3BlY3RvckRlZmF1bHQpOgorICAgICAgICAo
dGVzdEluc3BlY3RvckN1c3RvbSk6CisgICAgICAgICh0ZXN0SW5zcGVjdG9yV2luZG93RGVzdHJv
eWVkKToKKyAgICAgICAgKGJlZm9yZUFsbCk6CisgICAgICAgIChhZnRlckFsbCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwOgorICAgICAgICAoV2Vi
Vmlld1Rlc3Q6OnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZCk6IEFkZCBvcHRpb25hbAor
ICAgICAgICBwYXJhbWV0ZXIgdG8gY3JlYXRlIGEgdG9wbGV2ZWwgb3IgcG9wdXAgd2luZG93Lgor
ICAgICAgICAoV2ViVmlld1Rlc3Q6OnJlc2l6ZVZpZXcpOiBIZWxwZXIgZnVuY3Rpb24gdG8gc2V0
IHRoZSB3aWRnZXQKKyAgICAgICAgYWxsb2NhdGlvbiB0byBhIGdpdmVuIHNpemUuCisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2d0ay93ZWJraXQyLmg6IEluY2x1ZGUgV2ViS2l0V2ViSW5zcGVjdG9yLmgKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaDoKKyAgICAgICAgKFdlYktpdDo6
V2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclZpZXcpOiBSZXR1cm4gdGhlIHZpZXcgdXNlZAor
ICAgICAgICB0byByZW5kZXIgdGhlIGluc3BlY3Rvci4KKyAgICAgICAgKiBVSVByb2Nlc3MvZ3Rr
L1dlYkluc3BlY3RvckNsaWVudEd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JDbGllbnRHdGs6Om9wZW5XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JDbGllbnRHdGs6OmRpZENsb3NlKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9y
Q2xpZW50R3RrOjpicmluZ1RvRnJvbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JD
bGllbnRHdGs6Omluc3BlY3RlZFVSTENoYW5nZWQpOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNw
ZWN0b3JDbGllbnRHdGs6OmF0dGFjaCk6CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvckNs
aWVudEd0azo6ZGV0YWNoKToKKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yQ2xpZW50R3Rr
OjpkaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCk6CisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJ
bnNwZWN0b3JDbGllbnRHdGsuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL2d0ay9XZWJJ
bnNwZWN0b3JQcm94eUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6Omluc3BlY3RvclZpZXdEZXN0
cm95ZWQpOiBDbG9zZSB0aGUgaW5zcGVjdG9yIHBhZ2Ugd2hlbgorICAgICAgICB0aGUgaW5zcGVj
dG9yIHZpZXcgaXMgZGVzdHJveWVkLCBpbnN0ZWFkIG9mIHdoZW4gdGhlIGluc3BlY3RvcgorICAg
ICAgICB3aW5kb3cgaXMgZGVsZXRlZCwgYmVjYXVzZSB0aGUgaW5zcGVjdG9yIHZpZXcgY2FuIG5v
dyBiZSBpbnNpZGUgYQorICAgICAgICB3aW5kb3cgY3JlYXRlZCBieSB0aGUgdXNlci4KKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OmluaXRpYWxpemVJbnNwZWN0b3JDbGllbnRH
dGspOgorICAgICAgICBJbml0aWFsemUgdGhlIGluc3BlY3RvciBjbGllbnQuCisgICAgICAgIChX
ZWJLaXQ6OldlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBhZ2UpOiBB
ZGQgYQorICAgICAgICB3ZWFrIHBvaW50ZXIgdG8gdGhlIGluc3BlY3RvciB2aWV3IHRvIG1ha2Ug
c3VyZSBpdCdzIE5VTEwgd2hlbgorICAgICAgICBkZXN0cm95ZWQuCisgICAgICAgIChXZWJLaXQ6
OldlYkluc3BlY3RvclByb3h5OjpjcmVhdGVJbnNwZWN0b3JXaW5kb3cpOiBDYWxsCisgICAgICAg
IG9wZW5XaW5kb3cgb24gdGhlIGluc3BlY3RvciBjbGllbnQsIGFuZCByZXR1cm4gZWFybHkgaWYg
dGhlCisgICAgICAgIGNhbGxiYWNrIHdhcyBoYW5kbGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJ
bnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVuKTogQ29ubmVjdCB0byBkZXN0cm95CisgICAgICAg
IHNpZ25hbCBvZiB0aGUgaW5zcGVjdG9yIHZpZXcgdG8gY2xvc2UgdGhlIHBhZ2Ugd2hlbiB0aGUg
dmlldyBpcworICAgICAgICBkZXN0cm95ZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rv
clByb3h5OjpwbGF0Zm9ybURpZENsb3NlKTogQ2FsbCBkaWRDbG9zZSBvbgorICAgICAgICB0aGUg
aW5zcGVjdG9yIGNsaWVudC4KKyAgICAgICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtQnJpbmdUb0Zyb250KTogQ2FsbAorICAgICAgICBicmluZ1RvRnJvbnQgb24gdGhlIGlu
c3BlY3RvciBjbGllbnQsIGFuZCByZXR1cm4gZWFybHkgaWYgdGhlCisgICAgICAgIGNhbGxiYWNr
IHdhcyBoYW5kbGVkLgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZv
cm1JbnNwZWN0ZWRVUkxDaGFuZ2VkKTogQ2FsbAorICAgICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2Vk
IG9uIHRoZSBpbnNwZWN0b3IgY2xpZW50LgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1BdHRhY2gpOiBDYWxsIGF0dGFjaCBvbiB0aGUKKyAgICAgICAgaW5zcGVj
dG9yIGNsaWVudCBhbmQgcmV0dXJuIGlmIHRoZSBjYWxsYmFjayB3YXMgaGFuZGxlZC4KKyAgICAg
ICAgKFdlYktpdDo6V2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtRGV0YWNoKTogQ2FsbCBkZXRh
Y2ggb24gdGhlCisgICAgICAgIGluc3BlY3RvciBjbGllbnQgYW5kIHJldHVybiBpZiB0aGUgY2Fs
bGJhY2sgd2FzIGhhbmRsZWQuCisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3RvclByb3h5Ojpw
bGF0Zm9ybVNldEF0dGFjaGVkV2luZG93SGVpZ2h0KTogQ2FsbAorICAgICAgICBkaWRDaGFuZ2VB
dHRhY2hlZEhlaWdodCBvbiB0aGUgaW5zcGVjdG9yIGNsaWVudC4KKwogMjAxMi0wNS0yMSAgQnJh
ZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzExNDYwMzM2PiBhbmQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3
MDYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYktpdDIvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiMGRiNWEyLi5hMTlkNGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM1LDYgKzM1LDcgQEAgd2Via2l0Ml9o
X2FwaSArPSBcCiAJJChXZWJLaXQyKS9TaGFyZWQvQVBJL2MvV0tVc2VyQ29udGVudFVSTFBhdHRl
cm4uaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLQVBJQ2FzdEd0ay5oIFwK
IAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tGdWxsU2NyZWVuQ2xpZW50R3RrLmgg
XAorCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0luc3BlY3RvckNsaWVudEd0ay5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmggXAogCSQoV2ViS2l0
MikvVUlQcm9jZXNzL0FQSS9DL3NvdXAvV0tBUElDYXN0U291cC5oIFwKIAkkKFdlYktpdDIpL1VJ
UHJvY2Vzcy9BUEkvQy9zb3VwL1dLQ29udGV4dFNvdXAuaCBcCkBAIC00NjksNiArNDcwLDggQEAg
d2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLQVBJQ2FzdEd0ay5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dL
RnVsbFNjcmVlbkNsaWVudEd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9ndGsvV0tGdWxsU2NyZWVuQ2xpZW50R3RrLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvQy9ndGsvV0tJbnNwZWN0b3JDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL0MvZ3RrL1dLSW5zcGVjdG9yQ2xpZW50R3RrLmggXAogCVNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvQy9ndGsvV0tWaWV3LmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2d0ay9XS1ZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9DL3NvdXAvV0tBUElDYXN0U291cC5oIFwKQEAgLTYyOCw2ICs2MzEsOSBAQCB3ZWJraXQyX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29u
dGV4dC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNv
bnRleHRQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYkluc3BlY3Rvci5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYkluc3BlY3Rvci5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlLmggXApAQCAtNjc1LDYgKzY4MSw4IEBA
IHdlYmtpdDJfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJG
dWxsU2NyZWVuQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJGdWxsU2NyZWVuQ2xpZW50R3RrLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsv
V2ViRnVsbFNjcmVlbk1hbmFnZXJQcm94eUd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9ndGsvV2ViSW5zcGVjdG9yQ2xpZW50R3RrLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JDbGllbnRHdGsuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2d0ay9XZWJQb3B1cE1lbnVQcm94eUd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0luc3BlY3RvckNsaWVudEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3RrL1dLSW5zcGVjdG9yQ2xpZW50R3RrLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWQ3NzdjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0luc3BlY3RvckNsaWVu
dEd0ay5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2Fs
aWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0tJbnNw
ZWN0b3JDbGllbnRHdGsuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldl
Ykluc3BlY3RvclByb3h5LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3ZvaWQgV0tJ
bnNwZWN0b3JTZXRJbnNwZWN0b3JDbGllbnRHdGsoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVm
LCBjb25zdCBXS0luc3BlY3RvckNsaWVudEd0ayogd2tDbGllbnQpCit7CisgICAgdG9JbXBsKGlu
c3BlY3RvclJlZiktPmluaXRpYWxpemVJbnNwZWN0b3JDbGllbnRHdGsod2tDbGllbnQpOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0luc3BlY3Rv
ckNsaWVudEd0ay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2d0ay9XS0luc3Bl
Y3RvckNsaWVudEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2NWUx
OWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvZ3Rr
L1dLSW5zcGVjdG9yQ2xpZW50R3RrLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdLSW5zcGVjdG9yQ2xp
ZW50R3RrX2gKKyNkZWZpbmUgV0tJbnNwZWN0b3JDbGllbnRHdGtfaAorCisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCit0eXBlZGVmIGJvb2wgKCpXS0luc3BlY3RvckNsaWVudEd0a0luc3BlY3RvckNhbGxiYWNr
KShXS0luc3BlY3RvclJlZiBpbnNwZWN0b3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlw
ZWRlZiB2b2lkICgqV0tJbnNwZWN0b3JDbGllbnRHdGtJbnNwZWN0b3JEaWRDbG9zZUNhbGxiYWNr
KShXS0luc3BlY3RvclJlZiBpbnNwZWN0b3IsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwordHlw
ZWRlZiB2b2lkICgqV0tJbnNwZWN0b3JDbGllbnRHdGtJbnNwZWN0ZWRVUkxDaGFuZ2VkQ2FsbGJh
Y2spKFdLSW5zcGVjdG9yUmVmIGluc3BlY3RvciwgV0tTdHJpbmdSZWYgdXJsLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKK3R5cGVkZWYgdm9pZCAoKldLSW5zcGVjdG9yQ2xpZW50R3RrRGlkQ2hh
bmdlQXR0YWNoZWRIZWlnaHRDYWxsYmFjaykoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yLCB1bnNp
Z25lZCBoZWlnaHQsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOworCitzdHJ1Y3QgV0tJbnNwZWN0
b3JDbGllbnRHdGsgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ZXJzaW9uOworICAgIGNvbnN0IHZvaWQqICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRJbmZvOworICAgIFdLSW5zcGVjdG9yQ2xpZW50
R3RrSW5zcGVjdG9yQ2FsbGJhY2sgICAgICAgICAgICAgICBvcGVuV2luZG93OworICAgIFdLSW5z
cGVjdG9yQ2xpZW50R3RrSW5zcGVjdG9yRGlkQ2xvc2VDYWxsYmFjayAgICAgICBkaWRDbG9zZTsK
KyAgICBXS0luc3BlY3RvckNsaWVudEd0a0luc3BlY3RvckNhbGxiYWNrICAgICAgICAgICAgICAg
YnJpbmdUb0Zyb250OworICAgIFdLSW5zcGVjdG9yQ2xpZW50R3RrSW5zcGVjdGVkVVJMQ2hhbmdl
ZENhbGxiYWNrICAgICBpbnNwZWN0ZWRVUkxDaGFuZ2VkOworICAgIFdLSW5zcGVjdG9yQ2xpZW50
R3RrSW5zcGVjdG9yQ2FsbGJhY2sgICAgICAgICAgICAgICBhdHRhY2g7CisgICAgV0tJbnNwZWN0
b3JDbGllbnRHdGtJbnNwZWN0b3JDYWxsYmFjayAgICAgICAgICAgICAgIGRldGFjaDsKKyAgICBX
S0luc3BlY3RvckNsaWVudEd0a0RpZENoYW5nZUF0dGFjaGVkSGVpZ2h0Q2FsbGJhY2sgZGlkQ2hh
bmdlQXR0YWNoZWRIZWlnaHQ7Cit9OwordHlwZWRlZiBzdHJ1Y3QgV0tJbnNwZWN0b3JDbGllbnRH
dGsgV0tJbnNwZWN0b3JDbGllbnRHdGs7CisKK2VudW0geyBrV0tJbnNwZWN0b3JDbGllbnRHdGtD
dXJyZW50VmVyc2lvbiA9IDAgfTsKKworV0tfRVhQT1JUIHZvaWQgV0tJbnNwZWN0b3JTZXRJbnNw
ZWN0b3JDbGllbnRHdGsoV0tJbnNwZWN0b3JSZWYgaW5zcGVjdG9yUmVmLCBjb25zdCBXS0luc3Bl
Y3RvckNsaWVudEd0ayogY2xpZW50KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KworI2VuZGlmIC8qIFdLSW5zcGVjdG9yQ2xpZW50R3RrX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaAppbmRleCA3ZGY3YjY3Li5iN2M1
MzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
dmF0ZS5oCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Rvd25sb2FkLmg+
CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0ZpbmRPcHRpb25zLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9X
S0Z1bGxTY3JlZW5DbGllbnRHdGsuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLSW5zcGVjdG9yLmg+
CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0luc3BlY3RvckNsaWVudEd0ay5oPgogI2luY2x1ZGUgPFdl
YktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ3ZjZiYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5j
cHAKQEAgLTAsMCArMSw0NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMu
TC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJJbnNwZWN0b3IuaCIK
KworI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCisjaW5jbHVkZSAiV2ViS2l0TWFyc2hh
bC5oIgorI2luY2x1ZGUgIldlYktpdFdlYkluc3BlY3RvclByaXZhdGUuaCIKKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK2Vu
dW0geworICAgIE9QRU5fV0lORE9XLAorICAgIEJSSU5HX1RPX0ZST05ULAorICAgIENMT1NFRCwK
KyAgICBBVFRBQ0gsCisgICAgREVUQUNILAorCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0g
eworICAgIFBST1BfMCwKKworICAgIFBST1BfSU5TUEVDVEVEX1VSSSwKKyAgICBQUk9QX0FUVEFD
SEVEX0hFSUdIVAorfTsKKworc3RydWN0IF9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlIHsKKyAg
ICBXS1JldGFpblB0cjxXS0luc3BlY3RvclJlZj4gd2tJbnNwZWN0b3I7CisgICAgQ1N0cmluZyBp
bnNwZWN0ZWRVUkk7CisgICAgdW5zaWduZWQgYXR0YWNoZWRIZWlnaHQ7Cit9OworCitzdGF0aWMg
Z3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK0dfREVGSU5FX1RZUEUoV2Vi
S2l0V2ViSW5zcGVjdG9yLCB3ZWJraXRfd2ViX2luc3BlY3RvciwgR19UWVBFX09CSkVDVCkKKwor
c3RhdGljIHZvaWQgd2Via2l0V2ViSW5zcGVjdG9yR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0
LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sK
KyAgICBXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IFdFQktJVF9XRUJfSU5TUEVDVE9S
KG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAgIGNhc2UgUFJPUF9JTlNQRUNU
RURfVVJJOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfaW5z
cGVjdG9yX2dldF9pbnNwZWN0ZWRfdXJpKGluc3BlY3RvcikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVRUQUNIRURfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZh
bHVlLCB3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfYXR0YWNoZWRfaGVpZ2h0KGluc3BlY3Rvcikp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRXZWJJbnNwZWN0b3JGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfSU5T
UEVDVE9SKG9iamVjdCktPnByaXY7CisgICAgV0tJbnNwZWN0b3JTZXRJbnNwZWN0b3JDbGllbnRH
dGsocHJpdi0+d2tJbnNwZWN0b3IuZ2V0KCksIDApOworICAgIHByaXYtPn5XZWJLaXRXZWJJbnNw
ZWN0b3JQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9pbnNwZWN0b3Jf
cGFyZW50X2NsYXNzKS0+ZmluYWxpemUob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9pbnNwZWN0b3JfaW5pdChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvcikKK3sKKyAg
ICBXZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKGluc3BlY3RvciwgV0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwgV2ViS2l0V2ViSW5z
cGVjdG9yUHJpdmF0ZSk7CisgICAgaW5zcGVjdG9yLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHBy
aXYpIFdlYktpdFdlYkluc3BlY3RvclByaXZhdGUoKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0
X3dlYl9pbnNwZWN0b3JfY2xhc3NfaW5pdChXZWJLaXRXZWJJbnNwZWN0b3JDbGFzcyogZmluZENs
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ09iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
ZmluZENsYXNzKTsKKyAgICBnT2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViSW5zcGVj
dG9yRmluYWxpemU7CisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRXZWJJ
bnNwZWN0b3JHZXRQcm9wZXJ0eTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShmaW5k
Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJJbnNwZWN0b3I6aW5zcGVjdGVkLXVyaToKKyAgICAgKgorICAgICAqIFRo
ZSBVUkkgdGhhdCBpcyBjdXJyZW50bHkgYmVpbmcgaW5zcGVjdGVkLgorICAgICAqLworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ09iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JTlNQRUNURURfVVJJLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygiaW5zcGVjdGVkLXVy
aSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkluc3BlY3RlZCBVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIFVSSSB0aGF0IGlzIGN1cnJlbnRseSBiZWlu
ZyBpbnNwZWN0ZWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisgICAgLyoqCisgICAg
ICogV2ViS2l0V2ViSW5zcGVjdG9yOmF0dGFjaGVkLWhlaWdodDoKKyAgICAgKgorICAgICAqIFRo
ZSBoZWlnaHQgdGhhdCB0aGUgaW5zcGVjdG9yIHZpZXcgc2hvdWxkIGhhdmUgd2hlbiBpdCBpcyBh
dHRhY2hlZC4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdP
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQVRU
QUNIRURfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX3VpbnQoImF0dGFjaGVkLWhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJBdHRhY2hlZCBIZWlnaHQiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBo
ZWlnaHQgdGhhdCB0aGUgaW5zcGVjdG9yIHZpZXcgc2hvdWxkIGhhdmUgd2hlbiBpdCBpcyBhdHRh
Y2hlZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR19NQVhVSU5ULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRXZWJJbnNwZWN0b3I6Om9wZW4td2luZG93OgorICAgICAqIEBpbnNwZWN0
b3I6IHRoZSAjV2ViS2l0V2ViSW5zcGVjdG9yIG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIHRoZSBpbnNwZWN0b3IgaXMgcmVxdWVzdGVk
IHRvIG9wZW4gaW4gYSBzZXBhcmF0ZSB3aW5kb3cuCisgICAgICogSWYgdGhpcyBzaWduYWwgaXMg
bm90IGhhbmRsZWQsIGEgI0d0a1dpbmRvdyB3aXRoIHRoZSBpbnNwZWN0b3Igd2lsbCBiZQorICAg
ICAqIGNyZWF0ZWQgYW5kIHNob3duLCBzbyB5b3Ugb25seSBuZWVkIHRvIGhhbmRsZSB0aGlzIHNp
Z25hbCBpZiB5b3Ugd2FudAorICAgICAqIHRvIHVzZSB5b3VyIG93biB3aW5kb3cuCisgICAgICog
VGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciAjV2ViS2l0V2ViSW5zcGVjdG9yOjpkZXRhY2gg
dG8gc2hvdworICAgICAqIHRoZSBpbnNwZWN0b3IgaW4gYSBzZXBhcmF0ZSB3aW5kb3cgYWZ0ZXIg
YmVpbmcgZGV0YWNoZWQuCisgICAgICoKKyAgICAgKiBUbyBwcmV2ZW50IHRoZSBpbnNwZWN0b3Ig
ZnJvbSBiZWluZyBzaG93biB5b3UgY2FuIGNvbm5lY3RvIHRoZSB0aGlzCisgICAgICogc2lnbmFs
IGFuZCBzaW1wbHkgcmV0dXJuICVUUlVFCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0
byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50Lgor
ICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICov
CisgICAgc2lnbmFsc1tPUEVOX1dJTkRPV10gPQorICAgICAgICBnX3NpZ25hbF9uZXcoIm9wZW4t
d2luZG93IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RD
bGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAg
ICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRv
cl90cnVlX2hhbmRsZWQsIDAsCisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9C
T09MRUFOX19WT0lELAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViSW5zcGVjdG9yOjpicmluZy10by1mcm9udDoKKyAg
ICAgKiBAaW5zcGVjdG9yOiB0aGUgI1dlYktpdFdlYkluc3BlY3RvciBvbiB3aGljaCB0aGUgc2ln
bmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgaW5zcGVjdG9y
IHNob3VsZCBiZSBzaG93bi4KKyAgICAgKgorICAgICAqIElmIHRoZSBpbnNwZWN0b3IgaXMgbm90
IGF0dGFjaGVkIHRoZSBpbnNwZWN0b3Igd2luZG93IHNob3VsZCBiZSBzaG93bgorICAgICAqIG9u
IHRvcCBvZiBhbnkgb3RoZXIgd2luZG93cy4KKyAgICAgKiBJZiB0aGUgaW5zcGVjdG9yIGlzIGF0
dGFjaGVkIHRoZSBpbnNwZWN0b3IgdmlldyBzaG91bGQgYmUgbWFkZSB2aXNpYmxlLgorICAgICAq
IEZvciBleGFtcGxlLCBpZiB0aGUgaW5zcGVjdG9yIHZpZXcgaXMgYXR0YWNoZWQgdXNpbmcgYSB0
YWIgaW4gYSBicm93c2VyCisgICAgICogd2luZG93LCB0aGUgYnJvd3NlciB3aW5kb3cgc2hvdWxk
IGJlIHJhaXNlZCBhbmQgdGhlIHRhYiBjb250YWluaW5nIHRoZQorICAgICAqIGluc3BlY3RvciB2
aWV3IHNob3VsZCBiZSB0aGUgYWN0aXZlIG9uZS4KKyAgICAgKiBJbiBib3RoIGNhc2VzLCBpZiB0
aGlzIHNpZ25hbCBpcyBub3QgaGFubGRlZCwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24KKyAg
ICAgKiBjYWxscyBndGtfd2luZG93X3ByZXNlbnQoKSBvbiB0aGUgY3VycmVudCB0b3BsZXZlbCAj
R3RrV2luZG93IG9mIHRoZQorICAgICAqIGluc3BlY3RvciB2aWV3LgorICAgICAqCisgICAgICog
UmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBoYW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQg
Zm9yIHRoZSBldmVudC4KKyAgICAgKiAgICAlRkFMU0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBm
dXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNbQlJJTkdfVE9fRlJPTlRdID0KKyAgICAgICAg
Z19zaWduYWxfbmV3KCJicmluZy10by1mcm9udCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgZ19zaWduYWxfYWNjdW11bGF0b3JfdHJ1ZV9oYW5kbGVkLCAwLAorICAgICAgICAgICAgICAg
ICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fVk9JRCwKKyAgICAgICAgICAgICAgICAgICAg
IEdfVFlQRV9CT09MRUFOLCAwKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYkluc3BlY3Rv
cjo6Y2xvc2VkOgorICAgICAqIEBpbnNwZWN0b3I6IHRoZSAjV2ViS2l0V2ViSW5zcGVjdG9yIG9u
IHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVu
IHRoZSBpbnNwZWN0b3IgcGFnZSBpcyBjbG9zZWQuIElmIHlvdSBhcmUgdXNpbmcgeW91ciBvd24K
KyAgICAgKiBpbnNwZWN0b3Igd2luZG93LCB5b3Ugc2hvdWxkIGNvbm5lY3QgdG8gdGhpcyBzaWdu
YWwgYW5kIGRlc3Ryb3kgeW91cgorICAgICAqIHdpbmRvdy4KKyAgICAgKi8KKyAgICBzaWduYWxz
W0NMT1NFRF0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoImNsb3NlZCIsCisgICAgICAgICAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhnT2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAg
ICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJJbnNwZWN0b3I6OmF0dGFjaDoKKyAgICAgKiBAaW5zcGVjdG9yOiB0aGUgI1dlYktpdFdl
Ykluc3BlY3RvciBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKgorICAgICAq
IEVtaXR0ZWQgd2hlbiB0aGUgaW5zcGVjdG9yIGlzIHJlcXVlc3RlZCB0byBiZSBhdHRhY2hlZCB0
byB0aGUgd2luZG93CisgICAgICogd2hlcmUgdGhlIGluc3BlY3RlZCB3ZWIgdmlldyBpcy4KKyAg
ICAgKiBJZiB0aGlzIHNpZ25hbCBpcyBub3QgaGFuZGxlZCB0aGUgaW5zcGVjdG9yIHZpZXcgd2ls
bCBiZSBhdXRvbWF0aWNhbGx5CisgICAgICogYXR0YWNoZWQgdG8gdGhlIGluc3BlY3RlZCB2aWV3
LCBzbyB5b3Ugb25seSBuZWVkIHR5byBoYW5kbGUgdGhpcyBzaWduYWwKKyAgICAgKiBpZiB5b3Ug
d2FudCB0byBhdHRhY2ggdGhlIGluc3BlY3RvciB2aWV3IHlvdXJzZWxmIChmb3IgZXhhbXBsZSwg
dG8gYWRkCisgICAgICogdGhlIGluc3BlY3RvciB2aWV3IHRvIGEgYnJvd3NlciB0YWIpLgorICAg
ICAqCisgICAgICogVG8gcHJldmVudCB0aGUgaW5zcGVjdG9yIHZldyBmcm9tIGJlaW5nIGF0dGFj
aGVkIHlvdSBjYW4gY29ubmVjdCB0byB0aGlzCisgICAgICogc2lnbmFsIGFuZCBzaW1wbHkgcmV0
dXJuICVUUlVFLgorICAgICAqCisgICAgICogUmV0dXJuczogJVRSVUUgdG8gc3RvcCBvdGhlciBo
YW5kbGVycyBmcm9tIGJlaW5nIGludm9rZWQgZm9yIHRoZSBldmVudC4KKyAgICAgKiAgICAlRkFM
U0UgdG8gcHJvcGFnYXRlIHRoZSBldmVudCBmdXJ0aGVyLgorICAgICAqLworICAgIHNpZ25hbHNb
QVRUQUNIXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiYXR0YWNoIiwKKyAgICAgICAgICAgICAg
ICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGdPYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAg
ICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9hY2N1bXVsYXRvcl90cnVlX2hhbmRsZWQsIDAsCisgICAg
ICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9CT09MRUFOX19WT0lELAorICAgICAgICAg
ICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDApOworCisgICAgLyoqCisgICAgICogV2ViS2l0
V2ViSW5zcGVjdG9yOjpkZXRhY2g6CisgICAgICogQGluc3BlY3RvcjogdGhlICNXZWJLaXRXZWJJ
bnNwZWN0b3Igb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICoKKyAgICAgKiBF
bWl0dGVkIHdoZW4gdGhlIGluc3BlY3RvciBpcyByZXF1ZXN0ZWQgdG8gYmUgZGV0YWNoZWQgZnJv
bSB0aGUgd2luZG93CisgICAgICogd2hlcmUgaXQgY3VycmVudGx5IGlzLiBUaGUgaW5zcGVjdG9y
IGlzIGRldGFjaGVkIHdoZW4gdGhlIGluc3BlY3RvciBwYWdlCisgICAgICogaXMgYWJvdXQgdG8g
YmUgY2xvc2VkLCBhbmQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZCByaWdodCBiZWZvcmUKKyAgICAg
KiAjV2ViS2l0V2ViSW5zcGVjdG9yOjpjbG9zZWQsIG9yIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9u
IGRldGFjaCBidXR0b24KKyAgICAgKiBpbiB0aGUgaW5zcGVjdG9yIHZpZXcgdG8gc2hvdyB0aGUg
aW5zcGVjdG9yIGluIGEgc2VwYXJhdGUgd2luZG93LiBJbiB0aGlzIGNhc2UKKyAgICAgKiB0aGUg
c2lnbmFsICNXZWJLaXRXZWJJbnNwZWN0b3I6Om9wZW4td2luZG93IGlzIGVtaXR0ZWQgYWZ0ZXIg
dGhpcyBvbmUuCisgICAgICoKKyAgICAgKiBUbyBwcmV2ZW50IHRoZSBpbnNwZWN0b3IgdmV3IGZy
b20gYmVpbmcgZGV0YWNoZWQgeW91IGNhbiBjb25uZWN0IHRvIHRoaXMKKyAgICAgKiBzaWduYWwg
YW5kIHNpbXBseSByZXR1cm4gJVRSVUUuCisgICAgICoKKyAgICAgKiBSZXR1cm5zOiAlVFJVRSB0
byBzdG9wIG90aGVyIGhhbmRsZXJzIGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50Lgor
ICAgICAqICAgICVGQUxTRSB0byBwcm9wYWdhdGUgdGhlIGV2ZW50IGZ1cnRoZXIuCisgICAgICov
CisgICAgc2lnbmFsc1tERVRBQ0hdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJkZXRhY2giLAor
ICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZ09iamVjdENsYXNzKSwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfc2lnbmFsX2FjY3VtdWxhdG9yX3RydWVfaGFu
ZGxlZCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX0JPT0xFQU5fX1ZP
SUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfQk9PTEVBTiwgMCk7Cit9CisKK3N0YXRp
YyBib29sIG9wZW5XaW5kb3coV0tJbnNwZWN0b3JSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRf
V0VCX0lOU1BFQ1RPUihjbGllbnRJbmZvKSwgc2lnbmFsc1tPUEVOX1dJTkRPV10sIDAsICZyZXR1
cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCitzdGF0aWMgdm9pZCBkaWRD
bG9zZShXS0luc3BlY3RvclJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnX3Np
Z25hbF9lbWl0KFdFQktJVF9XRUJfSU5TUEVDVE9SKGNsaWVudEluZm8pLCBzaWduYWxzW0NMT1NF
RF0sIDApOworfQorCitzdGF0aWMgYm9vbCBicmluZ1RvRnJvbnQoV0tJbnNwZWN0b3JSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAg
Z19zaWduYWxfZW1pdChXRUJLSVRfV0VCX0lOU1BFQ1RPUihjbGllbnRJbmZvKSwgc2lnbmFsc1tC
UklOR19UT19GUk9OVF0sIDAsICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJuIHJldHVyblZhbHVl
OworfQorCitzdGF0aWMgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKFdLSW5zcGVjdG9yUmVmLCBX
S1N0cmluZ1JlZiB1cmwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgV2ViS2l0V2Vi
SW5zcGVjdG9yKiBpbnNwZWN0b3IgPSBXRUJLSVRfV0VCX0lOU1BFQ1RPUihjbGllbnRJbmZvKTsK
KyAgICBDU3RyaW5nIHVyaSA9IHRvSW1wbCh1cmwpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgaWYg
KHVyaSA9PSBpbnNwZWN0b3ItPnByaXYtPmluc3BlY3RlZFVSSSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGluc3BlY3Rvci0+cHJpdi0+aW5zcGVjdGVkVVJJID0gdXJpOworICAgIGdfb2JqZWN0X25v
dGlmeShHX09CSkVDVChpbnNwZWN0b3IpLCAiaW5zcGVjdGVkLXVyaSIpOworfQorCitzdGF0aWMg
Ym9vbCBhdHRhY2goV0tJbnNwZWN0b3JSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgZ2Jvb2xlYW4gcmV0dXJuVmFsdWU7CisgICAgZ19zaWduYWxfZW1pdChXRUJLSVRfV0VCX0lO
U1BFQ1RPUihjbGllbnRJbmZvKSwgc2lnbmFsc1tBVFRBQ0hdLCAwLCAmcmV0dXJuVmFsdWUpOwor
ICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30KKworc3RhdGljIGJvb2wgZGV0YWNoKFdLSW5zcGVj
dG9yUmVmIGluc3BlY3RvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBnYm9vbGVh
biByZXR1cm5WYWx1ZTsKKyAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9XRUJfSU5TUEVDVE9SKGNs
aWVudEluZm8pLCBzaWduYWxzW0RFVEFDSF0sIDAsICZyZXR1cm5WYWx1ZSk7CisgICAgcmV0dXJu
IHJldHVyblZhbHVlOworfQorCitzdGF0aWMgdm9pZCBkaWRDaGFuZ2VBdHRhY2hlZEhlaWdodChX
S0luc3BlY3RvclJlZiwgdW5zaWduZWQgaGVpZ2h0LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yID0gV0VCS0lUX1dFQl9JTlNQRUNU
T1IoY2xpZW50SW5mbyk7CisgICAgaWYgKGluc3BlY3Rvci0+cHJpdi0+YXR0YWNoZWRIZWlnaHQg
PT0gaGVpZ2h0KQorICAgICAgICByZXR1cm47CisgICAgaW5zcGVjdG9yLT5wcml2LT5hdHRhY2hl
ZEhlaWdodCA9IGhlaWdodDsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoaW5zcGVjdG9y
KSwgImF0dGFjaGVkLWhlaWdodCIpOworfQorCitXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdFdl
Ykluc3BlY3RvckNyZWF0ZShXS0luc3BlY3RvclJlZiB3a0luc3BlY3RvcikKK3sKKyAgICBXZWJL
aXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvciA9IFdFQktJVF9XRUJfSU5TUEVDVE9SKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9XRUJfSU5TUEVDVE9SLCBOVUxMKSk7CisgICAgaW5zcGVjdG9yLT5w
cml2LT53a0luc3BlY3RvciA9IHdrSW5zcGVjdG9yOworCisgICAgV0tJbnNwZWN0b3JDbGllbnRH
dGsgd2tJbnNwZWN0b3JDbGllbnRHdGsgPSB7CisgICAgICAgIGtXS0luc3BlY3RvckNsaWVudEd0
a0N1cnJlbnRWZXJzaW9uLAorICAgICAgICBpbnNwZWN0b3IsIC8vIGNsaWVudEluZm8KKyAgICAg
ICAgb3BlbldpbmRvdywKKyAgICAgICAgZGlkQ2xvc2UsCisgICAgICAgIGJyaW5nVG9Gcm9udCwK
KyAgICAgICAgaW5zcGVjdGVkVVJMQ2hhbmdlZCwKKyAgICAgICAgYXR0YWNoLAorICAgICAgICBk
ZXRhY2gsCisgICAgICAgIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0CisgICAgfTsKKyAgICBXS0lu
c3BlY3RvclNldEluc3BlY3RvckNsaWVudEd0ayh3a0luc3BlY3RvciwgJndrSW5zcGVjdG9yQ2xp
ZW50R3RrKTsKKworICAgIHJldHVybiBpbnNwZWN0b3I7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3OgorICogQGluc3BlY3RvcjogYSAjV2ViS2l0V2ViSW5z
cGVjdG9yCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2ViVmlld0Jhc2UgdXNlZCB0byBkaXNwbGF5
IHRoZSBpbnNwZWN0b3IuCisgKiBUaGlzIG1pZ2h0IGJlICVOVUxMIGlmIHRoZSBpbnNwZWN0b3Ig
aGFzbid0IGJlZW4gbG9hZGVkIHlldCwKKyAqIG9yIGl0IGhhcyBiZWVuIGNsb3NlZC4KKyAqCisg
KiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0V2ViVmlld0Jhc2UgdXNlZCB0
byBkaXNwbGF5IHRoZSBpbnNwZWN0b3Igb3IgJU5VTEwKKyAqLworV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhXZWJLaXRXZWJJbnNwZWN0b3IqIGlu
c3BlY3RvcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0lOU1BF
Q1RPUihpbnNwZWN0b3IpLCAwKTsKKworICAgIHJldHVybiBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh0
b0ltcGwoaW5zcGVjdG9yLT5wcml2LT53a0luc3BlY3Rvci5nZXQoKSktPmluc3BlY3RvclZpZXco
KSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2luc3BlY3RlZF91cmk6
CisgKiBAaW5zcGVjdG9yOiBhICNXZWJLaXRXZWJJbnNwZWN0b3IKKyAqCisgKiBSZXR1cm5zOiB0
aGUgVVJJIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIGluc3BlY3RlZC4KKyAqLworY29uc3QgY2hh
ciogd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2luc3BlY3RlZF91cmkoV2ViS2l0V2ViSW5zcGVj
dG9yKiBpbnNwZWN0b3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9JTlNQRUNUT1IoaW5zcGVjdG9yKSwgMCk7CisKKyAgICByZXR1cm4gaW5zcGVjdG9yLT5wcml2
LT5pbnNwZWN0ZWRVUkkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJfaW5zcGVjdG9y
X2lzX2F0dGFjaGVkOgorICogQGluc3BlY3RvcjogYSAjV2ViS2l0V2ViSW5zcGVjdG9yCisgKgor
ICogV2hldGhlciB0aGUgQGluc3BlY3RvciB2aWV3IGlzIGN1cnJlbnRseSBhdHRhY2hlZCB0byB0
aGUgc2FtZSB3aW5kb3cgdGhhdCBjb250YWlucworICogdGhlIGluc3BlY3RlZCB2aWV3LgorICoK
KyAqIFJldHVybnM6ICVUUlVFIGlmIEBpbnNwZWN0b3IgaXMgY3VycmVudGx5IGF0dGFjaGVkIG9y
ICVGQUxTRSBvdGhlcndpc2UKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNf
YXR0YWNoZWQoV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9JTlNQRUNUT1IoaW5zcGVjdG9yKSwgRkFMU0UpOwor
CisgICAgcmV0dXJuIFdLSW5zcGVjdG9ySXNBdHRhY2hlZChpbnNwZWN0b3ItPnByaXYtPndrSW5z
cGVjdG9yLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2luc3BlY3Rvcl9hdHRhY2g6
CisgKiBAaW5zcGVjdG9yOiBhICNXZWJLaXRXZWJJbnNwZWN0b3IKKyAqCisgKiBSZXF1ZXN0IEBp
bnNwZWN0b3IgdG8gYmUgYXR0YWNoZWQuIFRoZSBzaWduYWwgI1dlYktpdFdlYkluc3BlY3Rvcjo6
YXR0YWNoCisgKiB3aWxsIGJlIGVtaXR0ZWQuIElmIHRoZSBpbnNwZWN0b3IgaXMgYWxyZWFkeSBh
dHRhY2hlZCBpdCBkb2VzIG5vdGhpbmcuCisgKi8KK3ZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3Jf
YXR0YWNoKFdlYktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9JTlNQRUNUT1IoaW5zcGVjdG9yKSk7CisKKyAgICBpZiAoV0tJ
bnNwZWN0b3JJc0F0dGFjaGVkKGluc3BlY3Rvci0+cHJpdi0+d2tJbnNwZWN0b3IuZ2V0KCkpKQor
ICAgICAgICByZXR1cm47CisgICAgV0tJbnNwZWN0b3JBdHRhY2goaW5zcGVjdG9yLT5wcml2LT53
a0luc3BlY3Rvci5nZXQoKSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9pbnNwZWN0b3JfZGV0
YWNoOgorICogQGluc3BlY3RvcjogYSAjV2ViS2l0V2ViSW5zcGVjdG9yCisgKgorICogUmVxdWVz
dCBAaW5zcGVjdG9yIHRvIGJlIGRldGFjaGVkLiBUaGUgc2lnbmFsICNXZWJLaXRXZWJJbnNwZWN0
b3I6OmRldGFjaAorICogd2lsbCBiZSBlbWl0dGVkLiBJZiB0aGUgaW5zcGVjdG9yIGlzIGFscmVh
ZHkgZGV0YWNoZWQgaXQgZG9lcyBub3RoaW5nLgorICovCit2b2lkIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX2RldGFjaChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3RvcikKK3sKKyAgICBnX3JldHVy
bl9pZl9mYWlsKFdFQktJVF9JU19XRUJfSU5TUEVDVE9SKGluc3BlY3RvcikpOworCisgICAgaWYg
KCFXS0luc3BlY3RvcklzQXR0YWNoZWQoaW5zcGVjdG9yLT5wcml2LT53a0luc3BlY3Rvci5nZXQo
KSkpCisgICAgICAgIHJldHVybjsKKyAgICBXS0luc3BlY3RvckRldGFjaChpbnNwZWN0b3ItPnBy
aXYtPndrSW5zcGVjdG9yLmdldCgpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9zaG93OgorICogQGluc3BlY3RvcjogYSAjV2ViS2l0V2ViSW5zcGVjdG9yCisgKgorICogUmVx
dWVzdCBAaW5zcGVjdG9yIHRvIGJlIHNob3duLgorICovCit2b2lkIHdlYmtpdF93ZWJfaW5zcGVj
dG9yX3Nob3coV2ViS2l0V2ViSW5zcGVjdG9yKiBpbnNwZWN0b3IpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX0lOU1BFQ1RPUihpbnNwZWN0b3IpKTsKKworICAgIFdLSW5z
cGVjdG9yU2hvdyhpbnNwZWN0b3ItPnByaXYtPndrSW5zcGVjdG9yLmdldCgpKTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZToKKyAqIEBpbnNwZWN0b3I6IGEgI1dlYktp
dFdlYkluc3BlY3RvcgorICoKKyAqIFJlcXVlc3QgQGluc3BlY3RvciB0byBiZSBjbG9zZWQuCisg
Ki8KK3ZvaWQgd2Via2l0X3dlYl9pbnNwZWN0b3JfY2xvc2UoV2ViS2l0V2ViSW5zcGVjdG9yKiBp
bnNwZWN0b3IpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX0lOU1BFQ1RP
UihpbnNwZWN0b3IpKTsKKworICAgIFdLSW5zcGVjdG9yQ2xvc2UoaW5zcGVjdG9yLT5wcml2LT53
a0luc3BlY3Rvci5nZXQoKSk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0
X2F0dGFjaGVkX2hlaWdodDoKKyAqIEBpbnNwZWN0b3I6IGEgI1dlYktpdFdlYkluc3BlY3Rvcgor
ICoKKyAqIEdldCB0aGUgaGVpZ2h0IHRoYXQgdGhlIGluc3BlY3RvciB2aWV3IHNob3VsZCBoYXZl
IHdoZW4KKyAqIGl0J3MgYXR0YWNoZWQuIElmIHRoZSBpbnNwZWN0b3IgdmlldyBpcyBub3QgYXR0
YWNoZWQgdGhpcworICogcmV0dXJucyAwLgorICoKKyAqIFJldHVybnM6IHRoZSBoZWlnaHQgb2Yg
dGhlIGluc3BlY3RvciB2aWV3IHdoZW4gYXR0YWNoZWQKKyAqLworZ3VpbnQgd2Via2l0X3dlYl9p
bnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodChXZWJLaXRXZWJJbnNwZWN0b3IqIGluc3BlY3Rv
cikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX0lOU1BFQ1RPUihp
bnNwZWN0b3IpLCAwKTsKKworICAgIGlmICghV0tJbnNwZWN0b3JJc0F0dGFjaGVkKGluc3BlY3Rv
ci0+cHJpdi0+d2tJbnNwZWN0b3IuZ2V0KCkpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gaW5zcGVjdG9yLT5wcml2LT5hdHRhY2hlZEhlaWdodDsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViSW5zcGVjdG9yLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjMjgxMAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3BlY3Rvci5oCkBAIC0w
LDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAh
ZGVmaW5lZChfX1dFQktJVDJfSF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxB
VElPTikKKyNlcnJvciAiT25seSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBk
aXJlY3RseS4iCisjZW5kaWYKKworI2lmbmRlZiBXZWJLaXRXZWJJbnNwZWN0b3JfaAorI2RlZmlu
ZSBXZWJLaXRXZWJJbnNwZWN0b3JfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdl
YlZpZXdCYXNlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJf
SU5TUEVDVE9SICAgICAgICAgICAgKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF90eXBlKCkpCisj
ZGVmaW5lIFdFQktJVF9XRUJfSU5TUEVDVE9SKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9JTlNQRUNUT1IsIFdlYktpdFdl
Ykluc3BlY3RvcikpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfSU5TUEVDVE9SKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9JTlNQ
RUNUT1IpKQorI2RlZmluZSBXRUJLSVRfV0VCX0lOU1BFQ1RPUl9DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfSU5TUEVDVE9S
LCBXZWJLaXRXZWJJbnNwZWN0b3JDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJfSU5TUEVD
VE9SX0NMQVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJ
VF9UWVBFX1dFQl9JTlNQRUNUT1IpKQorI2RlZmluZSBXRUJLSVRfV0VCX0lOU1BFQ1RPUl9HRVRf
Q0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQ
RV9XRUJfSU5TUEVDVE9SLCBXZWJLaXRXZWJJbnNwZWN0b3JDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJJbnNwZWN0b3IgICAgICAgIFdlYktpdFdlYkluc3BlY3RvcjsKK3R5cGVk
ZWYgc3RydWN0IF9XZWJLaXRXZWJJbnNwZWN0b3JDbGFzcyAgIFdlYktpdFdlYkluc3BlY3RvckNs
YXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkluc3BlY3RvclByaXZhdGUgV2ViS2l0V2Vi
SW5zcGVjdG9yUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJJbnNwZWN0b3IgeworICAgIEdP
YmplY3QgcGFyZW50OworCisgICAgV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfV2ViS2l0V2ViSW5zcGVjdG9yQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBw
YXJlbnRfY2xhc3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX2luc3BlY3Rv
cl9nZXRfdHlwZSAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJWaWV3
QmFzZSAqCit3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfd2ViX3ZpZXcgICAgICAgIChXZWJLaXRX
ZWJJbnNwZWN0b3IgKmluc3BlY3Rvcik7CisKK1dFQktJVF9BUEkgY29uc3QgY2hhciAqCit3ZWJr
aXRfd2ViX2luc3BlY3Rvcl9nZXRfaW5zcGVjdGVkX3VyaSAgIChXZWJLaXRXZWJJbnNwZWN0b3Ig
Kmluc3BlY3Rvcik7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF93ZWJfaW5zcGVjdG9y
X2lzX2F0dGFjaGVkICAgICAgICAgKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yKTsKKwor
V0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2luc3BlY3Rvcl9hdHRhY2ggICAgICAgICAgICAg
IChXZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3Rvcik7CisKK1dFQktJVF9BUEkgdm9pZAord2Vi
a2l0X3dlYl9pbnNwZWN0b3JfZGV0YWNoICAgICAgICAgICAgICAoV2ViS2l0V2ViSW5zcGVjdG9y
ICppbnNwZWN0b3IpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJfaW5zcGVjdG9yX3No
b3cgICAgICAgICAgICAgICAgKFdlYktpdFdlYkluc3BlY3RvciAqaW5zcGVjdG9yKTsKKworV0VC
S0lUX0FQSSB2b2lkCit3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZSAgICAgICAgICAgICAgIChX
ZWJLaXRXZWJJbnNwZWN0b3IgKmluc3BlY3Rvcik7CisKK1dFQktJVF9BUEkgZ3VpbnQKK3dlYmtp
dF93ZWJfaW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQgKFdlYktpdFdlYkluc3BlY3RvciAq
aW5zcGVjdG9yKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAzNDcyMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkluc3Bl
Y3RvclByaXZhdGUuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZV9oCisjZGVmaW5l
IFdlYktpdFdlYkluc3BlY3RvclByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdFdlYkluc3BlY3Rvci5oIgorCitXZWJLaXRXZWJJbnNwZWN0b3Iq
IHdlYmtpdFdlYkluc3BlY3RvckNyZWF0ZShXS0luc3BlY3RvclJlZik7CisKKyNlbmRpZiAvLyBX
ZWJLaXRXZWJJbnNwZWN0b3JQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggYWJlZTNkZS4uNjVkYWI2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJXZWJLaXRTZXR0aW5nc1ByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktpdFdlYkNvbnRleHRQ
cml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViSW5zcGVjdG9yUHJpdmF0ZS5oIgogI2luY2x1
ZGUgIldlYktpdFdlYlJlc291cmNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdC
YXNlUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCkBAIC0xMjAs
NiArMTIxLDggQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgR1JlZlB0cjxX
ZWJLaXRXZWJSZXNvdXJjZT4gbWFpblJlc291cmNlOwogICAgIExvYWRpbmdSZXNvdXJjZXNNYXAg
bG9hZGluZ1Jlc291cmNlc01hcDsKICAgICBSZXNvdXJjZXNNYXAgc3VicmVzb3VyY2VzTWFwOwor
CisgICAgR1JlZlB0cjxXZWJLaXRXZWJJbnNwZWN0b3I+IGluc3BlY3RvcjsKIH07CiAKIHN0YXRp
YyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKQEAgLTE5MjIsMyArMTkyNSwy
MyBAQCBHTGlzdCogd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoV2ViS2l0V2ViVmll
dyogd2ViVmlldykKIAogICAgIHJldHVybiBnX2xpc3RfcmV2ZXJzZShzdWJyZXNvdXJjZXMpOwog
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogR2V0IHRoZSAjV2ViS2l0V2ViSW5zcGVjdG9yIGFz
c29jaWF0ZWQgdG8gQHdlYl92aWV3CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0
aGUgI1dlYktpdFdlYkluc3BlY3RvciBvZiBAd2ViX3ZpZXcKKyAqLworV2ViS2l0V2ViSW5zcGVj
dG9yKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3
KSwgMCk7CisKKyAgICBpZiAoIXdlYlZpZXctPnByaXYtPmluc3BlY3RvcikgeworICAgICAgICBX
ZWJQYWdlUHJveHkqIHBhZ2UgPSB3ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9W
SUVXX0JBU0Uod2ViVmlldykpOworICAgICAgICB3ZWJWaWV3LT5wcml2LT5pbnNwZWN0b3IgPSBh
ZG9wdEdSZWYod2Via2l0V2ViSW5zcGVjdG9yQ3JlYXRlKHRvQVBJKHBhZ2UtPmluc3BlY3Rvcigp
KSkpOworICAgIH0KKworICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT5pbnNwZWN0b3IuZ2V0KCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmgKaW5kZXggOTIyNjViMi4uNGY1ZmUxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuaApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJl
cXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRl
IDx3ZWJraXQyL1dlYktpdFdlYkluc3BlY3Rvci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2ViUmVzb3VyY2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CiAj
aW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmg+CkBAIC0yOTgsNiArMjk5
LDEwIEBAIHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZSAgICAgICAgICAgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3CiAKIFdFQktJVF9BUEkgR0xpc3QgKgogd2Vi
a2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMgICAgICAgICAgICAgICAgICAgKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJJbnNw
ZWN0b3IgKgord2Via2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3IgICAgICAgICAgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKwogR19FTkRfREVDTFMK
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9k
b2NzL3dlYmtpdDJndGstZG9jcy5zZ21sIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAppbmRleCA2M2RiMDVmLi5iNmI5YWEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGst
ZG9jcy5zZ21sCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay1kb2NzLnNnbWwKQEAgLTMyLDYgKzMyLDcgQEAKICAgICA8eGk6aW5jbHVkZSBocmVm
PSJ4bWwvV2ViS2l0RmluZENvbnRyb2xsZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0i
eG1sL1dlYktpdENvb2tpZU1hbmFnZXIueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1s
L1dlYktpdFBsdWdpbi54bWwiLz4KKyAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0V2Vi
SW5zcGVjdG9yLnhtbCIvPgogICA8L2NoYXB0ZXI+CiAKICAgPGluZGV4IGlkPSJpbmRleC1hbGwi
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJr
aXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2Rv
Y3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggODg0MTc3Yi4uODY1YjVkZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNl
Y3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC05MSw2ICs5MSw3IEBAIHdlYmtpdF93ZWJfdmlld19j
YW5fZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQKIHdlYmtpdF93ZWJfdmlld19jYW5fZXhlY3V0ZV9l
ZGl0aW5nX2NvbW1hbmRfZmluaXNoCiB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2Nv
bW1hbmQKIHdlYmtpdF93ZWJfdmlld19nZXRfZmluZF9jb250cm9sbGVyCit3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X2luc3BlY3Rvcgogd2Via2l0X3dlYl92aWV3X2dldF9qYXZhc2NyaXB0X2dsb2JhbF9j
b250ZXh0CiB3ZWJraXRfd2ViX3ZpZXdfcnVuX2phdmFzY3JpcHQKIHdlYmtpdF93ZWJfdmlld19y
dW5famF2YXNjcmlwdF9maW5pc2gKQEAgLTYzNiwzICs2MzcsMjkgQEAgd2Via2l0X3BsdWdpbl9n
ZXRfdHlwZQogd2Via2l0X21pbWVfaW5mb19nZXRfdHlwZQogV2ViS2l0UGx1Z2luUHJpdmF0ZQog
PC9TRUNUSU9OPgorCis8U0VDVElPTj4KKzxGSUxFPldlYktpdFdlYkluc3BlY3RvcjwvRklMRT4K
K1dlYktpdFdlYkluc3BlY3Rvcgord2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3Cit3
ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfaW5zcGVjdGVkX3VyaQord2Via2l0X3dlYl9pbnNwZWN0
b3JfaXNfYXR0YWNoZWQKK3dlYmtpdF93ZWJfaW5zcGVjdG9yX2F0dGFjaAord2Via2l0X3dlYl9p
bnNwZWN0b3JfZGV0YWNoCit3ZWJraXRfd2ViX2luc3BlY3Rvcl9zaG93Cit3ZWJraXRfd2ViX2lu
c3BlY3Rvcl9jbG9zZQord2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X2F0dGFjaGVkX2hlaWdodAor
Cis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFdlYkluc3BlY3RvckNsYXNzCitXRUJLSVRf
VFlQRV9XRUJfSU5TUEVDVE9SCitXRUJLSVRfV0VCX0lOU1BFQ1RPUgorV0VCS0lUX0lTX1dFQl9J
TlNQRUNUT1IKK1dFQktJVF9XRUJfSU5TUEVDVE9SX0NMQVNTCitXRUJLSVRfSVNfV0VCX0lOU1BF
Q1RPUl9DTEFTUworV0VCS0lUX1dFQl9JTlNQRUNUT1JfR0VUX0NMQVNTCisKKzxTVUJTRUNUSU9O
IFByaXZhdGU+Cit3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRfdHlwZQorV2ViS2l0V2ViSW5zcGVj
dG9yUHJpdmF0ZQorPC9TRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCmluZGV4IGNkZjllZGQuLjkyYjZmYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay50eXBlcworKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGsudHlwZXMKQEAgLTE3LDMgKzE3LDQgQEAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dHlwZQogd2Via2l0X2Nvb2tpZV9tYW5hZ2VyX2dldF90eXBlCiB3ZWJraXRfcGx1Z2luX2dldF90
eXBlCiB3ZWJraXRfbWltZV9pbmZvX2dldF90eXBlCit3ZWJraXRfd2ViX2luc3BlY3Rvcl9nZXRf
dHlwZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMv
R05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9H
TlVtYWtlZmlsZS5hbQppbmRleCA4NzBkNjhhLi44ZmEwY2Q4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbQpAQCAtNCw2
ICs0LDcgQEAgVEVTVF9QUk9HUyArPSBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RC
YWNrRm9yd2FyZExpc3QgXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0Q29va2llTWFu
YWdlciBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3REb3dubG9hZHMgXAorCVByb2dy
YW1zL1dlYktpdDJBUElUZXN0cy9UZXN0SW5zcGVjdG9yIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJ
VGVzdHMvVGVzdExvYWRlckNsaWVudCBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RQ
cmludGluZyBcCiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMgXApAQCAt
MTUxLDQgKzE1MiwxMiBAQCBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdENvb2tpZU1hbmFn
ZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwZmxhZ3MpCiBQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdENvb2tpZU1hbmFnZXJfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQp
CiBQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdENvb2tpZU1hbmFnZXJfTERGTEFHUyA9ICQo
d2Via2l0Ml90ZXN0c19sZGZsYWdzKQogCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdElu
c3BlY3Rvcl9TT1VSQ0VTID0gXAorICAgICAgICBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay90ZXN0cy9UZXN0SW5zcGVjdG9yLmNwcAorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rl
c3RJbnNwZWN0b3JfQ1BQRkxBR1MgPSBcCisJLURXRUJLSVRfSU5TUEVDVE9SX1BBVEg9XCIke3No
ZWxsIHB3ZH0vJHt0b3BfYnVpbGRkaXJ9L3Jlc291cmNlcy9pbnNwZWN0b3JcIiBcCisJJCh3ZWJr
aXQyX3Rlc3RzX2NwcGZsYWdzKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RJbnNwZWN0
b3JfTERBREQgPSAkKHdlYmtpdDJfdGVzdHNfbGRhZGQpCitQcm9ncmFtc19XZWJLaXQyQVBJVGVz
dHNfVGVzdEluc3BlY3Rvcl9MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCisKIGVu
ZGlmICMgRU5BQkxFX1dFQktJVDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvdGVzdHMvVGVzdEluc3BlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTE0NTEwOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RJbnNwZWN0b3IuY3BwCkBAIC0wLDAgKzEsMzU3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIldlYlZpZXdUZXN0LmgiCisjaW5jbHVkZSA8d3RmL2dvYmplY3Qv
R1JlZlB0ci5oPgorCitzdGF0aWMgY29uc3QgdW5zaWduZWQgZ01pbmltdW1BdHRhY2hlZEluc3Bl
Y3RvckhlaWdodCA9IDI1MDsKKworY2xhc3MgSW5zcGVjdG9yVGVzdDogcHVibGljIFdlYlZpZXdU
ZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKEluc3BlY3RvclRlc3Qp
OworCisgICAgZW51bSBJbnNwZWN0b3JFdmVudHMgeworICAgICAgICBPcGVuV2luZG93LAorICAg
ICAgICBCcmluZ1RvRnJvbnQsCisgICAgICAgIENsb3NlZCwKKyAgICAgICAgQXR0YWNoLAorICAg
ICAgICBEZXRhY2gKKyAgICB9OworCisgICAgc3RhdGljIGdib29sZWFuIG9wZW5XaW5kb3dDYWxs
YmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRlc3QtPm9wZW5XaW5kb3coKTsKKyAgICB9CisKKyAgICBzdGF0aWMgZ2Jv
b2xlYW4gYnJpbmdUb0Zyb250Q2FsbGJhY2soV2ViS2l0V2ViSW5zcGVjdG9yKiwgSW5zcGVjdG9y
VGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHJldHVybiB0ZXN0LT5icmluZ1RvRnJvbnQoKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBjbG9zZWRDYWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0
b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRlc3QtPmNs
b3NlZCgpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBhdHRhY2hDYWxsYmFjayhXZWJL
aXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRlc3QtPmF0dGFjaCgpOworICAgIH0KKworICAgIHN0YXRpYyBnYm9vbGVhbiBkZXRhY2hD
YWxsYmFjayhXZWJLaXRXZWJJbnNwZWN0b3IqLCBJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRlc3QtPmRldGFjaCgpOworICAgIH0KKworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBnTWluaW11bUF0dGFjaGVkSW5zcGVjdG9ySGVpZ2h0ID0gMjUwOworCisgICAg
SW5zcGVjdG9yVGVzdCgpCisgICAgICAgIDogV2ViVmlld1Rlc3QoKQorICAgICAgICAsIG1faW5z
cGVjdG9yKHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKG1fd2ViVmlldykpCisgICAgICAg
ICwgbV9xdWl0T25CcmluZ1RvRnJvbnQoZmFsc2UpCisgICAgeworICAgICAgICB3ZWJraXRfc2V0
dGluZ3Nfc2V0X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0
dGluZ3MobV93ZWJWaWV3KSwgVFJVRSk7CisgICAgICAgIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QobV9pbnNwZWN0b3IpKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdChtX2luc3BlY3RvciwgIm9wZW4td2luZG93IiwgR19DQUxMQkFDSyhvcGVuV2luZG93
Q2FsbGJhY2spLCB0aGlzKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2luc3BlY3Rvciwg
ImJyaW5nLXRvLWZyb250IiwgR19DQUxMQkFDSyhicmluZ1RvRnJvbnRDYWxsYmFjayksIHRoaXMp
OworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiY2xvc2VkIiwgR19DQUxM
QkFDSyhjbG9zZWRDYWxsYmFjayksIHRoaXMpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
aW5zcGVjdG9yLCAiYXR0YWNoIiwgR19DQUxMQkFDSyhhdHRhY2hDYWxsYmFjayksIHRoaXMpOwor
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yLCAiZGV0YWNoIiwgR19DQUxMQkFD
SyhkZXRhY2hDYWxsYmFjayksIHRoaXMpOworICAgIH0KKworICAgIH5JbnNwZWN0b3JUZXN0KCkK
KyAgICB7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX2lu
c3BlY3RvciwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgMCwgMCwgdGhpcyk7CisgICAgfQor
CisgICAgdmlydHVhbCBib29sIG9wZW5XaW5kb3coKQorICAgIHsKKyAgICAgICAgbV9ldmVudHMu
YXBwZW5kKE9wZW5XaW5kb3cpOworICAgICAgICBnX21haW5fbG9vcF9xdWl0KG1fbWFpbkxvb3Ap
OworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgYnJpbmdU
b0Zyb250KCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChCcmluZ1RvRnJvbnQpOwor
ICAgICAgICBpZiAobV9xdWl0T25CcmluZ1RvRnJvbnQpCisgICAgICAgICAgICBnX21haW5fbG9v
cF9xdWl0KG1fbWFpbkxvb3ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGNsb3NlZCgpCisgICAgeworICAgICAgICBtX2V2ZW50cy5hcHBlbmQoQ2xv
c2VkKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcXVpdChtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgYXR0YWNoKCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChB
dHRhY2gpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGJvb2wg
ZGV0YWNoKCkKKyAgICB7CisgICAgICAgIG1fZXZlbnRzLmFwcGVuZChEZXRhY2gpOworICAgICAg
ICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICB2b2lkIHNob3dBbmRXYWl0VW50aWxGaW5pc2hl
ZChib29sIHF1aXRPbkJyaW5nVG9Gcm9udCkKKyAgICB7CisgICAgICAgIG1fcXVpdE9uQnJpbmdU
b0Zyb250ID0gcXVpdE9uQnJpbmdUb0Zyb250OworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rv
cl9zaG93KG1faW5zcGVjdG9yKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3Ap
OworICAgICAgICBtX3F1aXRPbkJyaW5nVG9Gcm9udCA9IGZhbHNlOworICAgIH0KKworICAgIHZv
aWQgcmVzaXplVmlld0FuZEF0dGFjaCgpCisgICAgeworICAgICAgICAvLyBSZXNpemUgdGhlIHZp
ZXcgdG8gbWFrZSByb29tIGZvciB0aGUgaW5zcGVjdG9yLgorICAgICAgICByZXNpemVWaWV3KDMw
MCwgKGdNaW5pbXVtQXR0YWNoZWRJbnNwZWN0b3JIZWlnaHQgKyAxKSAqIDQgLyAzKTsKKyAgICAg
ICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfYXR0YWNoKG1faW5zcGVjdG9yKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgZ2Jvb2xlYW4gZGV0YWNoSWRsZShJbnNwZWN0b3JUZXN0KiB0ZXN0KQorICAgIHsK
KyAgICAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3JfZGV0YWNoKHRlc3QtPm1faW5zcGVjdG9yKTsK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIHZvaWQgZGV0YWNoQW5kV2FpdFVu
dGlsV2luZG93T3BlbmVkKCkKKyAgICB7CisgICAgICAgIGdfaWRsZV9hZGQocmVpbnRlcnByZXRf
Y2FzdDxHU291cmNlRnVuYz4oZGV0YWNoSWRsZSksIHRoaXMpOworICAgICAgICBnX21haW5fbG9v
cF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdm9pZCBjbG9zZUFuZFdhaXRVbnRpbENs
b3NlZCgpCisgICAgeworICAgICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9jbG9zZShtX2luc3Bl
Y3Rvcik7CisgICAgICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAg
ICBXZWJLaXRXZWJJbnNwZWN0b3IqIG1faW5zcGVjdG9yOworICAgIGJvb2wgbV9xdWl0T25Ccmlu
Z1RvRnJvbnQ7CisgICAgVmVjdG9yPEluc3BlY3RvckV2ZW50cz4gbV9ldmVudHM7Cit9OworCitz
dGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yRGVmYXVsdChJbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29u
c3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNob3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChH
VEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAg
ICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVz
dDwvcD48L2JvZHk+PC9odG1sPiIsIDApOworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hl
ZCgpOworCisgICAgdGVzdC0+c2hvd0FuZFdhaXRVbnRpbEZpbmlzaGVkKGZhbHNlKTsKKyAgICAv
LyBXZSBkb24ndCBhZGQgdGhlIHZpZXcgdG8gYSBjb250YWluZXIsIHNvIGNvbnN1bWUgdGhlIHdl
YWsgcmVmIHdpdGggR1JlZlB0ci4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlZpZXdCYXNlPiBpbnNw
ZWN0b3JWaWV3ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3QtPm1faW5z
cGVjdG9yKTsKKyAgICBnX2Fzc2VydChpbnNwZWN0b3JWaWV3LmdldCgpKTsKKyAgICB0ZXN0LT5h
c3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKGluc3BlY3RvclZp
ZXcuZ2V0KCkpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNo
ZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHdlYmtpdF93ZWJf
aW5zcGVjdG9yX2dldF9hdHRhY2hlZF9oZWlnaHQodGVzdC0+bV9pbnNwZWN0b3IpLCA9PSwgMCk7
CisgICAgVmVjdG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRl
c3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMik7
CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkJyaW5n
VG9Gcm9udCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIEluc3BlY3RvclRl
c3Q6Ok9wZW5XaW5kb3cpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICB0ZXN0
LT5zaG93QW5kV2FpdFVudGlsRmluaXNoZWQodHJ1ZSk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9l
dmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBn
X2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QnJpbmdUb0Zyb250
KTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+cmVzaXplVmlld0Fu
ZEF0dGFjaCgpOworICAgIGdfYXNzZXJ0KHdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVk
KHRlc3QtPm1faW5zcGVjdG9yKSk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QXR0YWNoKTsKKyAgICB0ZXN0LT5tX2V2
ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+ZGV0YWNoQW5kV2FpdFVudGlsV2luZG93T3BlbmVk
KCk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfaW5zcGVjdG9yX2lzX2F0dGFjaGVkKHRlc3Qt
Pm1faW5zcGVjdG9yKSk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3Nl
cnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZl
bnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAgdGVzdC0+bV9l
dmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPmNsb3NlQW5kV2FpdFVudGlsQ2xvc2VkKCk7Cisg
ICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCAxKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgSW5zcGVj
dG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworfQorCitjbGFz
cyBDdXN0b21JbnNwZWN0b3JUZXN0OiBwdWJsaWMgSW5zcGVjdG9yVGVzdCB7CitwdWJsaWM6Cisg
ICAgTUFLRV9HTElCX1RFU1RfRklYVFVSRShDdXN0b21JbnNwZWN0b3JUZXN0KTsKKworICAgIEN1
c3RvbUluc3BlY3RvclRlc3QoKQorICAgICAgICA6IEluc3BlY3RvclRlc3QoKQorICAgICAgICAs
IG1faW5zcGVjdG9yV2luZG93KDApCisgICAgeworICAgIH0KKworICAgIH5DdXN0b21JbnNwZWN0
b3JUZXN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykKKyAgICAgICAg
ICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVuV2luZG93KCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KCFtX2luc3BlY3Rvcldp
bmRvdyk7CisgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJ
TkRPV19UT1BMRVZFTCk7CisgICAgICAgIFdlYktpdFdlYlZpZXdCYXNlKiBpbnNwZWN0b3JWaWV3
ID0gd2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KG1faW5zcGVjdG9yKTsKKyAgICAg
ICAgZ19hc3NlcnQoaW5zcGVjdG9yVmlldyk7CisgICAgICAgIGd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBHVEtfV0lER0VUKGluc3BlY3RvclZpZXcp
KTsKKyAgICAgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2luc3BlY3RvcldpbmRvdyk7CisKKyAg
ICAgICAgcmV0dXJuIEluc3BlY3RvclRlc3Q6Om9wZW5XaW5kb3coKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsb3NlZCgpCisgICAgeworICAgICAgICBpZiAobV9pbnNwZWN0b3JXaW5kb3cpIHsKKyAg
ICAgICAgICAgIGd0a193aWRnZXRfZGVzdHJveShtX2luc3BlY3RvcldpbmRvdyk7CisgICAgICAg
ICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
SW5zcGVjdG9yVGVzdDo6Y2xvc2VkKCk7CisgICAgfQorCisgICAgYm9vbCBhdHRhY2goKQorICAg
IHsKKyAgICAgICAgR1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdl
YmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7CisgICAgICAgIGlm
IChtX2luc3BlY3RvcldpbmRvdykgeworICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1vdmUo
R1RLX0NPTlRBSU5FUihtX2luc3BlY3RvcldpbmRvdyksIEdUS19XSURHRVQoaW5zcGVjdG9yVmll
dy5nZXQoKSkpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1faW5zcGVjdG9yV2lu
ZG93KTsKKyAgICAgICAgICAgIG1faW5zcGVjdG9yV2luZG93ID0gMDsKKyAgICAgICAgfQorCisg
ICAgICAgIEd0a1dpZGdldCogcGFuZTsKKyAgICAgICAgaWYgKGd0a19iaW5fZ2V0X2NoaWxkKEdU
S19CSU4obV9wYXJlbnRXaW5kb3cpKSA9PSBHVEtfV0lER0VUKG1fd2ViVmlldykpIHsKKyAgICAg
ICAgICAgIEdSZWZQdHI8V2ViS2l0V2ViVmlldz4gaW5zcGVjdGVkVmlldyA9IG1fd2ViVmlldzsK
KyAgICAgICAgICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYXJlbnRX
aW5kb3cpLCBHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgICAgICAgICAgcGFuZSA9IGd0a19w
YW5lZF9uZXcoR1RLX09SSUVOVEFUSU9OX1ZFUlRJQ0FMKTsKKyAgICAgICAgICAgIGd0a19wYW5l
ZF9hZGQxKEdUS19QQU5FRChwYW5lKSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICAgICAg
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9wYXJlbnRXaW5kb3cpLCBwYW5l
KTsKKyAgICAgICAgICAgIGd0a193aWRnZXRfc2hvd19hbGwocGFuZSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgcGFuZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRX
aW5kb3cpKTsKKyAgICAgICAgZ3RrX3BhbmVkX2FkZDIoR1RLX1BBTkVEKHBhbmUpLCBHVEtfV0lE
R0VUKGluc3BlY3RvclZpZXcuZ2V0KCkpKTsKKworICAgICAgICByZXR1cm4gSW5zcGVjdG9yVGVz
dDo6YXR0YWNoKCk7CisgICAgfQorCisgICAgYm9vbCBkZXRhY2goKQorICAgIHsKKyAgICAgICAg
R1JlZlB0cjxXZWJLaXRXZWJWaWV3QmFzZT4gaW5zcGVjdG9yVmlldyA9IHdlYmtpdF93ZWJfaW5z
cGVjdG9yX2dldF93ZWJfdmlldyhtX2luc3BlY3Rvcik7CisgICAgICAgIEd0a1dpZGdldCogcGFu
ZSA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9wYXJlbnRXaW5kb3cpKTsKKyAgICAgICAg
Z19hc3NlcnQoR1RLX0lTX1BBTkVEKHBhbmUpKTsKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9yZW1v
dmUoR1RLX0NPTlRBSU5FUihwYW5lKSwgR1RLX1dJREdFVChpbnNwZWN0b3JWaWV3LmdldCgpKSk7
CisgICAgICAgIHJldHVybiBJbnNwZWN0b3JUZXN0OjpkZXRhY2goKTsKKyAgICB9CisKKyAgICB2
b2lkIGRlc3Ryb3lXaW5kb3dBbmRXYWl0VW50aWxDbG9zZWQoKQorICAgIHsKKyAgICAgICAgZ19h
c3NlcnQobV9pbnNwZWN0b3JXaW5kb3cpOworICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3kobV9p
bnNwZWN0b3JXaW5kb3cpOworICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CisgICAgICAg
IGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29wKTsKKyAgICB9CisKKyAgICBHdGtXaWRnZXQqIG1f
aW5zcGVjdG9yV2luZG93OworfTsKKworc3RhdGljIHZvaWQgdGVzdEluc3BlY3RvckN1c3RvbShD
dXN0b21JbnNwZWN0b3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPnNo
b3dJbldpbmRvd0FuZFdhaXRVbnRpbE1hcHBlZChHVEtfV0lORE9XX1RPUExFVkVMKTsKKyAgICB0
ZXN0LT5yZXNpemVWaWV3KDIwMCwgMjAwKTsKKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJv
ZHk+PHA+V2ViS2l0R1RLKyBJbnNwZWN0b3IgdGVzdDwvcD48L2JvZHk+PC9odG1sPiIsIDApOwor
ICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+c2hvd0FuZFdh
aXRVbnRpbEZpbmlzaGVkKGZhbHNlKTsKKyAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRX
aGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHdlYmtpdF93ZWJfaW5zcGVjdG9yX2dldF93ZWJfdmll
dyh0ZXN0LT5tX2luc3BlY3RvcikpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl9pbnNwZWN0
b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAgICBWZWN0b3I8SW5zcGVjdG9y
VGVzdDo6SW5zcGVjdG9yRXZlbnRzPiYgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzBdLCA9PSwgSW5zcGVjdG9yVGVzdDo6QnJpbmdUb0Zyb250KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgSW5zcGVjdG9yVGVzdDo6T3BlbldpbmRvdyk7CisgICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPnJlc2l6ZVZpZXdBbmRBdHRhY2go
KTsKKyAgICBnX2Fzc2VydCh3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5t
X2luc3BlY3RvcikpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0
X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50
c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkF0dGFjaCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKKworICAgIHRlc3QtPmRldGFjaEFuZFdhaXRVbnRpbFdpbmRvd09wZW5lZCgpOworICAg
IGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19hdHRhY2hlZCh0ZXN0LT5tX2luc3Bl
Y3RvcikpOworICAgIGV2ZW50cyA9IHRlc3QtPm1fZXZlbnRzOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHMuc2l6ZSgpLCA9PSwgMik7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1swXSwg
PT0sIEluc3BlY3RvclRlc3Q6OkRldGFjaCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIEluc3BlY3RvclRlc3Q6Ok9wZW5XaW5kb3cpOworICAgIHRlc3QtPm1fZXZlbnRzLmNs
ZWFyKCk7CisKKyAgICB0ZXN0LT5yZXNpemVWaWV3QW5kQXR0YWNoKCk7CisgICAgZ19hc3NlcnQo
d2Via2l0X3dlYl9pbnNwZWN0b3JfaXNfYXR0YWNoZWQodGVzdC0+bV9pbnNwZWN0b3IpKTsKKyAg
ICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworICAgIHRlc3QtPmNsb3NlQW5kV2FpdFVudGlsQ2xv
c2VkKCk7CisgICAgZXZlbnRzID0gdGVzdC0+bV9ldmVudHM7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50cy5zaXplKCksID09LCAyKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9
PSwgSW5zcGVjdG9yVGVzdDo6RGV0YWNoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFd
LCA9PSwgSW5zcGVjdG9yVGVzdDo6Q2xvc2VkKTsKKyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0SW5zcGVjdG9yV2luZG93RGVzdHJveWVkKEN1c3RvbUlu
c3BlY3RvclRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+c2hvd0luV2lu
ZG93QW5kV2FpdFVudGlsTWFwcGVkKEdUS19XSU5ET1dfVE9QTEVWRUwpOworICAgIHRlc3QtPnJl
c2l6ZVZpZXcoMjAwLCAyMDApOworICAgIHRlc3QtPmxvYWRIdG1sKCI8aHRtbD48Ym9keT48cD5X
ZWJLaXRHVEsrIEluc3BlY3RvciB0ZXN0PC9wPjwvYm9keT48L2h0bWw+IiwgMCk7CisgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CisKKyAgICB0ZXN0LT5zaG93QW5kV2FpdFVudGls
RmluaXNoZWQoZmFsc2UpOworICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0
RmluaXNoZXMoR19PQkpFQ1Qod2Via2l0X3dlYl9pbnNwZWN0b3JfZ2V0X3dlYl92aWV3KHRlc3Qt
Pm1faW5zcGVjdG9yKSkpOworICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX2luc3BlY3Rvcl9pc19h
dHRhY2hlZCh0ZXN0LT5tX2luc3BlY3RvcikpOworCisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIo
KTsKKyAgICB0ZXN0LT5kZXN0cm95V2luZG93QW5kV2FpdFVudGlsQ2xvc2VkKCk7CisgICAgVmVj
dG9yPEluc3BlY3RvclRlc3Q6Okluc3BlY3RvckV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fZXZl
bnRzOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHMuc2l6ZSgpLCA9PSwgMSk7CisgICAgZ19h
c3NlcnRfY21waW50KGV2ZW50c1swXSwgPT0sIEluc3BlY3RvclRlc3Q6OkNsb3NlZCk7CisgICAg
dGVzdC0+bV9ldmVudHMuY2xlYXIoKTsKK30KKwordm9pZCBiZWZvcmVBbGwoKQoreworICAgIGdf
c2V0ZW52KCJXRUJLSVRfSU5TUEVDVE9SX1BBVEgiLCBXRUJLSVRfSU5TUEVDVE9SX1BBVEgsIEZB
TFNFKTsKKyAgICBJbnNwZWN0b3JUZXN0OjphZGQoIldlYktpdFdlYkluc3BlY3RvciIsICJkZWZh
dWx0IiwgdGVzdEluc3BlY3RvckRlZmF1bHQpOworICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFk
ZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImN1c3RvbSIsIHRlc3RJbnNwZWN0b3JDdXN0b20pOwor
ICAgIEN1c3RvbUluc3BlY3RvclRlc3Q6OmFkZCgiV2ViS2l0V2ViSW5zcGVjdG9yIiwgImluc3Bl
Y3Rvci13aW5kb3ctZGVzdHJveWVkIiwgdGVzdEluc3BlY3RvcldpbmRvd0Rlc3Ryb3llZCk7Cit9
CisKK3ZvaWQgYWZ0ZXJBbGwoKQoreworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuY3BwCmluZGV4IDgzZDRiMDIuLmUzNTVm
NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dl
YlZpZXdUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9XZWJWaWV3VGVzdC5jcHAKQEAgLTE2MiwxMCArMTYyLDEwIEBAIHN0YXRpYyBnYm9vbGVhbiBw
YXJlbnRXaW5kb3dNYXBwZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50KiwgV2ViVmlld1Rl
c3QqIHRlCiAgICAgcmV0dXJuIEZBTFNFOwogfQogCi12b2lkIFdlYlZpZXdUZXN0OjpzaG93SW5X
aW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKQordm9pZCBXZWJWaWV3VGVzdDo6c2hvd0luV2luZG93
QW5kV2FpdFVudGlsTWFwcGVkKEd0a1dpbmRvd1R5cGUgd2luZG93VHlwZSkKIHsKICAgICBnX2Fz
c2VydCghbV9wYXJlbnRXaW5kb3cpOwotICAgIG1fcGFyZW50V2luZG93ID0gZ3RrX3dpbmRvd19u
ZXcoR1RLX1dJTkRPV19QT1BVUCk7CisgICAgbV9wYXJlbnRXaW5kb3cgPSBndGtfd2luZG93X25l
dyh3aW5kb3dUeXBlKTsKICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKG1fcGFy
ZW50V2luZG93KSwgR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKICAgICBndGtfd2lkZ2V0X3Nob3co
R1RLX1dJREdFVChtX3dlYlZpZXcpKTsKIApAQCAtMTc0LDYgKzE3NCwxNyBAQCB2b2lkIFdlYlZp
ZXdUZXN0OjpzaG93SW5XaW5kb3dBbmRXYWl0VW50aWxNYXBwZWQoKQogICAgIGdfbWFpbl9sb29w
X3J1bihtX21haW5Mb29wKTsKIH0KIAordm9pZCBXZWJWaWV3VGVzdDo6cmVzaXplVmlldyhpbnQg
d2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uOworICAg
IGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcpLCAmYWxsb2Nh
dGlvbik7CisgICAgaWYgKHdpZHRoICE9IC0xKQorICAgICAgICBhbGxvY2F0aW9uLndpZHRoID0g
d2lkdGg7CisgICAgaWYgKGhlaWdodCAhPSAtMSkKKyAgICAgICAgYWxsb2NhdGlvbi5oZWlnaHQg
PSBoZWlnaHQ7CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKEdUS19XSURHRVQobV93ZWJW
aWV3KSwgJmFsbG9jYXRpb24pOworfQorCiB2b2lkIFdlYlZpZXdUZXN0Ojptb3VzZU1vdmVUbyhp
bnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycykKIHsKICAgICBnX2Fzc2Vy
dChtX3BhcmVudFdpbmRvdyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvV2ViVmlld1Rlc3QuaAppbmRleCA5MmUxMjM2Li5mZjZhOGM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9XZWJWaWV3VGVzdC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1dlYlZpZXdUZXN0
LmgKQEAgLTQ0LDcgKzQ0LDggQEAgcHVibGljOgogICAgIHZvaWQgd2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CiAgICAgdm9pZCB3YWl0VW50aWxUaXRsZUNoYW5nZWRUbyhjb25zdCBjaGFyKiBleHBl
Y3RlZFRpdGxlKTsKICAgICB2b2lkIHdhaXRVbnRpbFRpdGxlQ2hhbmdlZCgpOwotICAgIHZvaWQg
c2hvd0luV2luZG93QW5kV2FpdFVudGlsTWFwcGVkKCk7CisgICAgdm9pZCBzaG93SW5XaW5kb3dB
bmRXYWl0VW50aWxNYXBwZWQoR3RrV2luZG93VHlwZSA9IEdUS19XSU5ET1dfUE9QVVApOworICAg
IHZvaWQgcmVzaXplVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCiAgICAgdm9pZCBtb3Vz
ZU1vdmVUbyhpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBtb3VzZU1vZGlmaWVycyA9IDApOwog
ICAgIHZvaWQgY2xpY2tNb3VzZUJ1dHRvbihpbnQgeCwgaW50IHksIHVuc2lnbmVkIGludCBidXR0
b24gPSAxLCB1bnNpZ25lZCBpbnQgbW91c2VNb2RpZmllcnMgPSAwKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCA3Njk5YzQ5Li4yM2RiZDk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC00Myw2ICs0Myw3
IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Vi
a2l0Mi9XZWJLaXRVUklSZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViQ29u
dGV4dC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViSW5zcGVjdG9yLmg+CiAjaW5jbHVk
ZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
V2ViVmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmgKaW5kZXggZWEyNjQwZS4u
MDJjZjUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3Rv
clByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5
LmgKQEAgLTQ4LDYgKzQ4LDEwIEBAIE9CSkNfQ0xBU1MgV0tXZWJJbnNwZWN0b3JXS1ZpZXc7CiAj
aW5jbHVkZSA8V2ViQ29yZS9XaW5kb3dNZXNzYWdlTGlzdGVuZXIuaD4KICNlbmRpZgogCisjaWYg
UExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIldlYkluc3BlY3RvckNsaWVudEd0ay5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJGcmFtZVByb3h5OwpAQCAtOTEsNiAr
OTUsMTEgQEAgcHVibGljOgogICAgIHZvaWQgaW5zcGVjdGVkVmlld0ZyYW1lRGlkQ2hhbmdlKCk7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICBHdGtXaWRnZXQqIGluc3BlY3RvclZp
ZXcoKSBjb25zdCB7IHJldHVybiBtX2luc3BlY3RvclZpZXc7IH07CisgICAgdm9pZCBpbml0aWFs
aXplSW5zcGVjdG9yQ2xpZW50R3RrKGNvbnN0IFdLSW5zcGVjdG9yQ2xpZW50R3RrKik7CisjZW5k
aWYKKwogICAgIHZvaWQgc2hvd0NvbnNvbGUoKTsKICAgICB2b2lkIHNob3dSZXNvdXJjZXMoKTsK
ICAgICB2b2lkIHNob3dNYWluUmVzb3VyY2VGb3JGcmFtZShXZWJGcmFtZVByb3h5Kik7CkBAIC0y
MDQsNiArMjEzLDcgQEAgcHJpdmF0ZToKICAgICBIV05EIG1faW5zcGVjdG9yV2luZG93OwogICAg
IFJlZlB0cjxXZWJWaWV3PiBtX2luc3BlY3RvclZpZXc7CiAjZWxpZiBQTEFURk9STShHVEspCisg
ICAgV2ViSW5zcGVjdG9yQ2xpZW50R3RrIG1fY2xpZW50OwogICAgIEd0a1dpZGdldCogbV9pbnNw
ZWN0b3JWaWV3OwogICAgIEd0a1dpZGdldCogbV9pbnNwZWN0b3JXaW5kb3c7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yQ2xpZW50
R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yQ2xpZW50
R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDhmNDIzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JD
bGllbnRHdGsuY3BwCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
Ykluc3BlY3RvckNsaWVudEd0ay5oIgorCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVk
ZSAiV0tTaGFyZWRBUElDYXN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBXZWJLaXQgeworCitib29sIFdlYkluc3BlY3RvckNsaWVudEd0azo6b3Blbldp
bmRvdyhXZWJJbnNwZWN0b3JQcm94eSogaW5zcGVjdG9yKQoreworICAgIGlmICghbV9jbGllbnQu
b3BlbldpbmRvdykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudC5v
cGVuV2luZG93KHRvQVBJKGluc3BlY3RvciksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit2
b2lkIFdlYkluc3BlY3RvckNsaWVudEd0azo6ZGlkQ2xvc2UoV2ViSW5zcGVjdG9yUHJveHkqIGlu
c3BlY3RvcikKK3sKKyAgICBpZiAoIW1fY2xpZW50LmRpZENsb3NlKQorICAgICAgICByZXR1cm47
CisgICAgbV9jbGllbnQuZGlkQ2xvc2UodG9BUEkoaW5zcGVjdG9yKSwgbV9jbGllbnQuY2xpZW50
SW5mbyk7Cit9CisKK2Jvb2wgV2ViSW5zcGVjdG9yQ2xpZW50R3RrOjpicmluZ1RvRnJvbnQoV2Vi
SW5zcGVjdG9yUHJveHkqIGluc3BlY3RvcikKK3sKKyAgICBpZiAoIW1fY2xpZW50LmJyaW5nVG9G
cm9udCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2NsaWVudC5icmluZ1Rv
RnJvbnQodG9BUEkoaW5zcGVjdG9yKSwgbV9jbGllbnQuY2xpZW50SW5mbyk7Cit9CisKK3ZvaWQg
V2ViSW5zcGVjdG9yQ2xpZW50R3RrOjppbnNwZWN0ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclBy
b3h5KiBpbnNwZWN0b3IsIGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGlmICghbV9jbGllbnQu
aW5zcGVjdGVkVVJMQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xpZW50Lmluc3Bl
Y3RlZFVSTENoYW5nZWQodG9BUEkoaW5zcGVjdG9yKSwgdG9BUEkodXJsLmltcGwoKSksIG1fY2xp
ZW50LmNsaWVudEluZm8pOworfQorCitib29sIFdlYkluc3BlY3RvckNsaWVudEd0azo6YXR0YWNo
KFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3IpCit7CisgICAgaWYgKCFtX2NsaWVudC5hdHRh
Y2gpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9jbGllbnQuYXR0YWNoKHRv
QVBJKGluc3BlY3RvciksIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCitib29sIFdlYkluc3Bl
Y3RvckNsaWVudEd0azo6ZGV0YWNoKFdlYkluc3BlY3RvclByb3h5KiBpbnNwZWN0b3IpCit7Cisg
ICAgaWYgKCFtX2NsaWVudC5kZXRhY2gpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gbV9jbGllbnQuZGV0YWNoKHRvQVBJKGluc3BlY3RvciksIG1fY2xpZW50LmNsaWVudEluZm8p
OworfQorCit2b2lkIFdlYkluc3BlY3RvckNsaWVudEd0azo6ZGlkQ2hhbmdlQXR0YWNoZWRIZWln
aHQoV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvciwgdW5zaWduZWQgaGVpZ2h0KQoreworICAg
IGlmICghbV9jbGllbnQuZGlkQ2hhbmdlQXR0YWNoZWRIZWlnaHQpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NsaWVudC5kaWRDaGFuZ2VBdHRhY2hlZEhlaWdodCh0b0FQSShpbnNwZWN0b3IpLCBo
ZWlnaHQsIG1fY2xpZW50LmNsaWVudEluZm8pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yQ2xp
ZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvckNsaWVu
dEd0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZDBmNzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvZ3RrL1dlYkluc3BlY3RvckNs
aWVudEd0ay5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdh
bGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJJbnNwZWN0b3JDbGllbnRHdGtfaAorI2Rl
ZmluZSBXZWJJbnNwZWN0b3JDbGllbnRHdGtfaAorCisjaW5jbHVkZSAiQVBJQ2xpZW50LmgiCisj
aW5jbHVkZSAiV0tJbnNwZWN0b3JDbGllbnRHdGsuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgQVBJT2JqZWN0OworY2xh
c3MgV2ViSW5zcGVjdG9yUHJveHk7CisKK2NsYXNzIFdlYkluc3BlY3RvckNsaWVudEd0ayA6IHB1
YmxpYyBBUElDbGllbnQ8V0tJbnNwZWN0b3JDbGllbnRHdGssIGtXS0luc3BlY3RvckNsaWVudEd0
a0N1cnJlbnRWZXJzaW9uPiB7CitwdWJsaWM6CisgICAgYm9vbCBvcGVuV2luZG93KFdlYkluc3Bl
Y3RvclByb3h5Kik7CisgICAgdm9pZCBkaWRDbG9zZShXZWJJbnNwZWN0b3JQcm94eSopOworICAg
IGJvb2wgYnJpbmdUb0Zyb250KFdlYkluc3BlY3RvclByb3h5Kik7CisgICAgdm9pZCBpbnNwZWN0
ZWRVUkxDaGFuZ2VkKFdlYkluc3BlY3RvclByb3h5KiwgY29uc3QgU3RyaW5nJiB1cmwpOworICAg
IGJvb2wgYXR0YWNoKFdlYkluc3BlY3RvclByb3h5Kik7CisgICAgYm9vbCBkZXRhY2goV2ViSW5z
cGVjdG9yUHJveHkqKTsKKyAgICB2b2lkIGRpZENoYW5nZUF0dGFjaGVkSGVpZ2h0KFdlYkluc3Bl
Y3RvclByb3h5KiwgdW5zaWduZWQgaGVpZ2h0KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViSW5zcGVjdG9yQ2xpZW50R3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9ndGsvV2ViSW5zcGVjdG9yUHJveHlHdGsuY3BwIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2d0ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKaW5kZXggN2Qy
N2RmZC4uNDI1ZDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0ay9X
ZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2d0
ay9XZWJJbnNwZWN0b3JQcm94eUd0ay5jcHAKQEAgLTU0LDE1ICs1NCwxOCBAQCBzdGF0aWMgY29u
c3QgY2hhciogaW5zcGVjdG9yRmlsZXNCYXNlUGF0aCgpCiAgICAgcmV0dXJuIGluc3BlY3RvckZp
bGVzUGF0aDsKIH0KIAotc3RhdGljIGdib29sZWFuIGluc3BlY3RvcldpbmRvd0Nsb3NlZChHdGtX
aWRnZXQqIHdpbmRvdywgR2RrRXZlbnQqLCBncG9pbnRlciB1c2VyRGF0YSkKK3N0YXRpYyB2b2lk
IGluc3BlY3RvclZpZXdEZXN0cm95ZWQoR3RrV2lkZ2V0KiwgZ3BvaW50ZXIgdXNlckRhdGEpCiB7
CiAgICAgV2ViSW5zcGVjdG9yUHJveHkqIGluc3BlY3RvclByb3h5ID0gc3RhdGljX2Nhc3Q8V2Vi
SW5zcGVjdG9yUHJveHkqPih1c2VyRGF0YSk7CiAKICAgICAvLyBJbmZvcm0gV2ViUHJvY2VzcyBh
Ym91dCB3ZWJpbnNwZWN0b3IgY2xvc3VyZS4gTm90IGRvaW5nIHNvLAogICAgIC8vIHJlc3VsdHMg
aW4gZmFpbHVyZSBvZiBzdWJzZXF1ZW50IGludm9jYXRpb24gb2Ygd2ViaW5zcGVjdG9yLgogICAg
IGluc3BlY3RvclByb3h5LT5jbG9zZSgpOworfQogCi0gICAgcmV0dXJuIEZBTFNFOwordm9pZCBX
ZWJJbnNwZWN0b3JQcm94eTo6aW5pdGlhbGl6ZUluc3BlY3RvckNsaWVudEd0ayhjb25zdCBXS0lu
c3BlY3RvckNsaWVudEd0ayogaW5zcGVjdG9yQ2xpZW50KQoreworICAgIG1fY2xpZW50LmluaXRp
YWxpemUoaW5zcGVjdG9yQ2xpZW50KTsKIH0KIAogV2ViUGFnZVByb3h5KiBXZWJJbnNwZWN0b3JQ
cm94eTo6cGxhdGZvcm1DcmVhdGVJbnNwZWN0b3JQYWdlKCkKQEAgLTcwLDExICs3MywxNSBAQCBX
ZWJQYWdlUHJveHkqIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUNyZWF0ZUluc3BlY3RvclBh
Z2UoKQogICAgIEFTU0VSVChtX3BhZ2UpOwogICAgIEFTU0VSVCghbV9pbnNwZWN0b3JWaWV3KTsK
ICAgICBtX2luc3BlY3RvclZpZXcgPSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlQ3JlYXRl
KHBhZ2UoKS0+cHJvY2VzcygpLT5jb250ZXh0KCksIGluc3BlY3RvclBhZ2VHcm91cCgpKSk7Cisg
ICAgZ19vYmplY3RfYWRkX3dlYWtfcG9pbnRlcihHX09CSkVDVChtX2luc3BlY3RvclZpZXcpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1faW5zcGVjdG9yVmlldykpOwogICAgIHJldHVybiB3
ZWJraXRXZWJWaWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UobV9pbnNwZWN0b3JW
aWV3KSk7CiB9CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmNyZWF0ZUluc3BlY3RvcldpbmRv
dygpCiB7CisgICAgaWYgKG1fY2xpZW50Lm9wZW5XaW5kb3codGhpcykpCisgICAgICAgIHJldHVy
bjsKKwogICAgIEFTU0VSVCghbV9pbnNwZWN0b3JXaW5kb3cpOwogICAgIG1faW5zcGVjdG9yV2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcoR1RLX1dJTkRPV19UT1BMRVZFTCk7CiAKQEAgLTg0LDcgKzkx
LDYgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6Y3JlYXRlSW5zcGVjdG9yV2luZG93KCkKIAog
ICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cobV9pbnNwZWN0b3JXaW5kb3cpLCBf
KCJXZWIgSW5zcGVjdG9yIikpOwogICAgIGd0a193aW5kb3dfc2V0X2RlZmF1bHRfc2l6ZShHVEtf
V0lORE9XKG1faW5zcGVjdG9yV2luZG93KSwgaW5pdGlhbFdpbmRvd1dpZHRoLCBpbml0aWFsV2lu
ZG93SGVpZ2h0KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KG1faW5zcGVjdG9yV2luZG93LCAiZGVs
ZXRlLWV2ZW50IiwgR19DQUxMQkFDSyhpbnNwZWN0b3JXaW5kb3dDbG9zZWQpLCB0aGlzKTsKIAog
ICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIobV9pbnNwZWN0b3JXaW5kb3cpLCBt
X2luc3BlY3RvclZpZXcpOwogICAgIGd0a193aWRnZXRfc2hvdyhtX2luc3BlY3RvclZpZXcpOwpA
QCAtMTAyLDEwICsxMDgsMTYgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1PcGVu
KCkKICAgICAgICAgcGxhdGZvcm1BdHRhY2goKTsKICAgICBlbHNlCiAgICAgICAgIGNyZWF0ZUlu
c3BlY3RvcldpbmRvdygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9pbnNwZWN0b3JWaWV3LCAi
ZGVzdHJveSIsIEdfQ0FMTEJBQ0soaW5zcGVjdG9yVmlld0Rlc3Ryb3llZCksIHRoaXMpOwogfQog
CiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURpZENsb3NlKCkKIHsKKyAgICBpZiAo
bV9pbnNwZWN0b3JWaWV3KQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMobV9pbnNwZWN0b3JWaWV3LCByZWludGVycHJldF9jYXN0PHZvaWQqPihpbnNwZWN0b3JW
aWV3RGVzdHJveWVkKSwgdGhpcyk7CisKKyAgICBtX2NsaWVudC5kaWRDbG9zZSh0aGlzKTsKKwog
ICAgIGlmIChtX2luc3BlY3RvcldpbmRvdykgewogICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3ko
bV9pbnNwZWN0b3JXaW5kb3cpOwogICAgICAgICBtX2luc3BlY3RvcldpbmRvdyA9IDA7CkBAIC0x
MTUsNiArMTI3LDkgQEAgdm9pZCBXZWJJbnNwZWN0b3JQcm94eTo6cGxhdGZvcm1EaWRDbG9zZSgp
CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBsYXRmb3JtQnJpbmdUb0Zyb250KCkKIHsKKyAg
ICBpZiAobV9jbGllbnQuYnJpbmdUb0Zyb250KHRoaXMpKQorICAgICAgICByZXR1cm47CisKICAg
ICBHdGtXaWRnZXQqIHBhcmVudCA9IGd0a193aWRnZXRfZ2V0X3RvcGxldmVsKG1faW5zcGVjdG9y
Vmlldyk7CiAgICAgaWYgKFdlYkNvcmU6OndpZGdldElzT25zY3JlZW5Ub3BsZXZlbFdpbmRvdyhw
YXJlbnQpKQogICAgICAgICBndGtfd2luZG93X3ByZXNlbnQoR1RLX1dJTkRPVyhwYXJlbnQpKTsK
QEAgLTEzMCw2ICsxNDUsOCBAQCBib29sIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUlzRnJv
bnQoKQogCiB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUluc3BlY3RlZFVSTENoYW5n
ZWQoY29uc3QgU3RyaW5nJiB1cmwpCiB7CisgICAgbV9jbGllbnQuaW5zcGVjdGVkVVJMQ2hhbmdl
ZCh0aGlzLCB1cmwpOworCiAgICAgaWYgKCFtX2luc3BlY3RvcldpbmRvdykKICAgICAgICAgcmV0
dXJuOwogICAgIEdPd25QdHI8Z2NoYXI+IHRpdGxlKGdfc3RyZHVwX3ByaW50ZigiJXMgLSAlcyIs
IF8oIldlYiBJbnNwZWN0b3IiKSwgdXJsLnV0ZjgoKS5kYXRhKCkpKTsKQEAgLTE2NSw2ICsxODIs
OSBAQCB2b2lkIFdlYkluc3BlY3RvclByb3h5OjpwbGF0Zm9ybUF0dGFjaCgpCiAgICAgICAgIG1f
aW5zcGVjdG9yV2luZG93ID0gMDsKICAgICB9CiAKKyAgICBpZiAobV9jbGllbnQuYXR0YWNoKHRo
aXMpKQorICAgICAgICByZXR1cm47CisKICAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKG1fcGFnZS0+dmlld1dpZGdldCgpKSwgbV9pbnNwZWN0b3JWaWV3KTsKICAgICBndGtfd2lk
Z2V0X3Nob3cobV9pbnNwZWN0b3JWaWV3KTsKIH0KQEAgLTE3NSw3ICsxOTUsOSBAQCB2b2lkIFdl
Ykluc3BlY3RvclByb3h5OjpwbGF0Zm9ybURldGFjaCgpCiAgICAgICAgIHJldHVybjsKIAogICAg
IEdSZWZQdHI8R3RrV2lkZ2V0PiBpbnNwZWN0b3JWaWV3ID0gbV9pbnNwZWN0b3JWaWV3OwotICAg
IGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9wYWdlLT52aWV3V2lkZ2V0KCkp
LCBtX2luc3BlY3RvclZpZXcpOworICAgIGlmICghbV9jbGllbnQuZGV0YWNoKHRoaXMpKQorICAg
ICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKG1fcGFnZS0+dmlld1dpZGdl
dCgpKSwgbV9pbnNwZWN0b3JWaWV3KTsKKwogICAgIGlmICghbV9pc1Zpc2libGUpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMTg2LDYgKzIwOCw4IEBAIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OnBs
YXRmb3JtU2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQodW5zaWduZWQgaGVpZ2h0KQogewogICAgIGlm
ICghbV9pc0F0dGFjaGVkKQogICAgICAgICByZXR1cm47CisKKyAgICBtX2NsaWVudC5kaWRDaGFu
Z2VBdHRhY2hlZEhlaWdodCh0aGlzLCBoZWlnaHQpOwogICAgIHdlYmtpdFdlYlZpZXdCYXNlU2V0
SW5zcGVjdG9yVmlld0hlaWdodChXRUJLSVRfV0VCX1ZJRVdfQkFTRShtX3BhZ2UtPnZpZXdXaWRn
ZXQoKSksIGhlaWdodCk7CiB9CiAK
</data>
<flag name="review"
          id="149780"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>