<?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>62366</bug_id>
          
          <creation_ts>2011-06-09 03:43:24 -0700</creation_ts>
          <short_desc>[GTK] Support authentication dialogs in WebKit2</short_desc>
          <delta_ts>2011-06-14 07:37:08 -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.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>417938</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-09 03:43:24 -0700</bug_when>
    <thetext>In WebKit2 we currently don&apos;t add the Authentication Dialog feature to soup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417940</commentid>
    <comment_count>1</comment_count>
      <attachid>96570</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-09 03:56:14 -0700</bug_when>
    <thetext>Created attachment 96570
Patch

This patch moves the common code to show an auth dialog from webkitsoupauthdialog to a new C++ class in WebCore. In WebKit1 webkitsoupauthdialog has been converted into a C++ file with the same interface, since it&apos;s public in the api, and it simply contains the soup feature interface implementation using the new GtkAuthenticationDialog class. In WebKit2 I added the soup feature interface impemlentation to WebProcess/gtk/WebProcessMainGtk.cpp since it&apos;s very simple, but I can move it into its own file if you think it&apos;s better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417945</commentid>
    <comment_count>2</comment_count>
      <attachid>96571</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-09 04:19:00 -0700</bug_when>
    <thetext>Created attachment 96571
Patch rebased to current git master</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417947</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-09 04:22:07 -0700</bug_when>
    <thetext>Attachment 96571 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:48:  web_auth_dialog_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:55:  web_auth_dialog_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:59:  web_auth_dialog_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418079</commentid>
    <comment_count>4</comment_count>
      <attachid>96571</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-09 10:05:40 -0700</bug_when>
    <thetext>Comment on attachment 96571
Patch rebased to current git master

Attachment 96571 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8826077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418086</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-09 10:22:41 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 96571 [details])
&gt; Attachment 96571 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/8826077

The bot needs a clean build, because there&apos;s a file renamed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419048</commentid>
    <comment_count>6</comment_count>
      <attachid>96571</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-10 16:40:17 -0700</bug_when>
    <thetext>Comment on attachment 96571
Patch rebased to current git master

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

Looks very nice. I really appreciate the code reuse. I have some minor style nits, but I think it&apos;s enough to go one more round.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:30
&gt; +static GtkWidget* tableAddEntry(GtkTable* table, int row, const char* labelText)

Function names typically start with the verb, so I think this should be &quot;addEntryToTable.&quot;

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:89
&gt; +    // Build contents.

You can omit this comment.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:151
&gt; +static bool getSavedLogin(SoupAuth* auth, const char** username, const char** password)

Please use String&amp; here instead pointers.

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:175
&gt; +    const char* username = 0;
&gt; +    const char* password = 0;
&gt; +    bool haveSavedLoging = getSavedLogin(m_auth, &amp;username, &amp;password);
&gt; +    soup_session_pause_message(m_session, m_message.get());
&gt; +    gtk_entry_set_text(GTK_ENTRY(m_loginEntry), username ? username : &quot;&quot;);
&gt; +    gtk_entry_set_text(GTK_ENTRY(m_passwordEntry), password ? password : &quot;&quot;);

If you use String for username and password you can avoid the null check and simply do: username.utf8().data().

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:176
&gt; +    if (m_rememberCheckButton &amp;&amp; haveSavedLoging)

haveSavedLoging -&gt; haveSavedLogin

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:186
&gt; +    soup_session_unpause_message(m_session, m_message.get());

I&apos;m surprised it&apos;s the responsibility of WebKit to pause and unpause the message!

&gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.h:69
&gt; +    GOwnPtr&lt;char&gt; m_username;
&gt; +    GOwnPtr&lt;char&gt; m_password;

These would definitely be better as CStrings.

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:40
&gt; +static void webkit_soup_auth_dialog_session_feature_init(SoupSessionFeatureInterface* feature_interface, gpointer interface_data);
&gt; +static void attach(SoupSessionFeature* manager, SoupSession* session);
&gt; +static void detach(SoupSessionFeature* manager, SoupSession* session);

You should omit the variable names here now that this file is C++.

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:55
&gt; +    GObjectClass* object_class = G_OBJECT_CLASS(klass);

object_class -&gt; objectClass.

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:75
&gt; +                   NULL, NULL,

NULL -&gt; 0

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:81
&gt; +static void webkit_soup_auth_dialog_init(WebKitSoupAuthDialog* instance)

Here you can avoid the variable name.

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:86
&gt; +static void webkit_soup_auth_dialog_session_feature_init(SoupSessionFeatureInterface *feature_interface,
&gt; +                                                         gpointer interface_data)

The asterisk should move over, you can omit interface_data, feature_interface -&gt; featureInterface and this should be one line. :)

&gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:92
&gt; +static void session_authenticate(SoupSession* session, SoupMessage* message, SoupAuth* auth, gboolean retrying, SoupSessionFeature* manager)

You can omit &quot;retrying&quot; and &quot;manager&quot; here. Since this isn&apos;t a GObject method name, please use camelCase for the function name.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:42
&gt; +typedef struct {
&gt; +    GObject parent;
&gt; +} WebAuthDialog;

I&apos;d prefer this GObject to be in a separate file.

&gt;&gt; Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:48
&gt;&gt; +static GType web_auth_dialog_get_type(void);
&gt; 
&gt; web_auth_dialog_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

Please omit the void from the empty argument list.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:76
&gt; +    g_signal_handlers_disconnect_by_func(session, (gpointer)sessionAuthenticate, 0);

Please use a C++-style cast for sessionAuthenticate here.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:79
&gt; +static void webAuthDialogSessionFeatureInit(SoupSessionFeatureInterface *feature, gpointer)

The asterisk should move to the type name.

&gt; Source/WebKit2/WebProcess/gtk/WebProcessMainGtk.cpp:114
&gt; +    SoupSessionFeature* authDialog = static_cast&lt;SoupSessionFeature*&gt;(g_object_new(web_auth_dialog_get_type(), NULL));
&gt; +    soup_session_add_feature(session, authDialog);
&gt; +    g_object_unref(authDialog);
&gt; +

Please use GRefPtr here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419461</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-13 01:03:44 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 96571 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96571&amp;action=review
&gt; 
&gt; Looks very nice. I really appreciate the code reuse. I have some minor style nits, but I think it&apos;s enough to go one more round.

Ok, thanks for the review, I&apos;ll adress all issues in a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419493</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-13 03:08:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 96571 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96571&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:151
&gt; &gt; +static bool getSavedLogin(SoupAuth* auth, const char** username, const char** password)
&gt; 
&gt; Please use String&amp; here instead pointers.

Note that pointers are const, using String would duplicate the strings and would convert to UTF-16 and later  back to UTF-8 unnecessarily.
 
&gt; &gt; Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:186
&gt; &gt; +    soup_session_unpause_message(m_session, m_message.get());
&gt; 
&gt; I&apos;m surprised it&apos;s the responsibility of WebKit to pause and unpause the message!

I don&apos;t know libsoup api too much, this is copy-pasted from current code.
 
&gt; &gt; Source/WebKit/gtk/webkit/webkitsoupauthdialog.cpp:92
&gt; &gt; +static void session_authenticate(SoupSession* session, SoupMessage* message, SoupAuth* auth, gboolean retrying, SoupSessionFeature* manager)
&gt; 
&gt; You can omit &quot;retrying&quot; and &quot;manager&quot; here. Since this isn&apos;t a GObject method name, please use camelCase for the function name.

manager is used to emit the signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419503</commentid>
    <comment_count>9</comment_count>
      <attachid>96947</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-13 05:17:30 -0700</bug_when>
    <thetext>Created attachment 96947
Updated patch according to review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419505</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-13 05:20:39 -0700</bug_when>
    <thetext>Attachment 96947 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/WebProcess/gtk/WebAuthDialog.cpp:39:  web_auth_dialog_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/WebProcess/gtk/WebAuthDialog.cpp:43:  web_auth_dialog_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebKit2/WebProcess/gtk/WebAuthDialog.h:27:  web_auth_dialog_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/gtk/GtkAuthenticationDialog.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 4 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419506</commentid>
    <comment_count>11</comment_count>
      <attachid>96947</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-13 05:27:57 -0700</bug_when>
    <thetext>Comment on attachment 96947
Updated patch according to review

Attachment 96947 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8840005</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420400</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-14 07:37:08 -0700</bug_when>
    <thetext>Committed r88800: &lt;http://trac.webkit.org/changeset/88800&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96570</attachid>
            <date>2011-06-09 03:56:14 -0700</date>
            <delta_ts>2011-06-09 04:19:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-auth-dialog.diff</filename>
            <type>text/plain</type>
            <size>38627</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4NWE0YTQ2Li4yOWQxODY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgYXV0aGVudGljYXRpb24gZGlhbG9ncyBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM2NgorCisgICAgICAgIEFkZCBh
IG5ldyBjbGFzcyB0byBzaG93IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0aGF0IGlzIHVzZWQg
YnkKKyAgICAgICAgYm90aCBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkIGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIHBsYXRm
b3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6dGFibGVBZGRFbnRyeSk6CisgICAgICAgIChXZWJDb3JlOjpzZXNzaW9uQ2FuU2F2ZVBh
c3N3b3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6fkd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRTYXZlZExvZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpkZXN0
cm95KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzYXZlUGFz
c3dvcmRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6c2F2ZVBhc3N3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nOjphdXRoZW50aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGljYXRpb25E
aWFsb2c6OmF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6CisgICAgICAgICog
cGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6IEFkZGVkLgorCiAyMDExLTA2
LTA4ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNTgxOWJk
NC4uNmU2Yzg0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDExLTA2LTA5
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGF1dGhl
bnRpY2F0aW9uIGRpYWxvZ3MgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNjYKKworICAgICAgICBNb3ZlIHRoZSBjb21tb24gY29k
ZSBvZiB3ZWJraXRzb3VwYXV0aGRpYWxvZyB0byBhIGNvbW1vbiBDKysgY2xhc3MKKyAgICAgICAg
aW4gV2ViQ29yZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IFdlYktpdDIgdG9vLiBUaGUgZmls
ZSBoYXMKKyAgICAgICAgYmVlbiBjb252ZXJ0ZWQgaW50byBhIEMrKyBmaWxlLgorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06IFJlbmFtZSB3ZWJraXRzb3VwYXV0aGRpYWxvZy5jIHRvCisgICAg
ICAgIHdlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuYzogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c291cGF1dGhk
aWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdCk6CisgICAgICAg
IChzZXNzaW9uX2F1dGhlbnRpY2F0ZSk6IFVzZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBvYmpl
Y3QgZnJvbQorICAgICAgICBXZWJDb3JlLgorICAgICAgICAoYXR0YWNoKToKKyAgICAgICAgKGRl
dGFjaCk6CisgICAgICAgICogd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmg6CisKIDIwMTEt
MDYtMDcgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiZmIwNzRkLi5iYmIwYzRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDYtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgYXV0aGVudGljYXRpb24gZGlhbG9ncyBpbiBX
ZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
MjM2NgorCisgICAgICAgIEFkZCBhIG5ldyBzb3VwIGZlYXR1cmUgdG8gc2hvdyBhbiBhdXRoZW50
aWNhdGlvbiBkaWFsb2cgd2hlbiBpdAorICAgICAgICBnZXRzIGEgNDAxIEhUVFAgcmVzcG9uc2Uu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHA6CisgICAg
ICAgICh3ZWJfYXV0aF9kaWFsb2dfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJfYXV0aF9kaWFs
b2dfaW5pdCk6CisgICAgICAgIChzZXNzaW9uQXV0aGVudGljYXRlKToKKyAgICAgICAgKGF0dGFj
aCk6CisgICAgICAgIChkZXRhY2gpOgorICAgICAgICAod2ViQXV0aERpYWxvZ1Nlc3Npb25GZWF0
dXJlSW5pdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3NNYWluR3RrKToKKwogMjAxMS0w
Ni0wNyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggNGYyZjhlMS4uOTY5ZmNhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CkBAIC0zNzk3LDYgKzM3OTcsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HUmVmUHRyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dS
ZWZQdHJHdGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5X
aWRnZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDRhN2QKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZy5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2lu
Y2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHdGtXaWRn
ZXQqIHRhYmxlQWRkRW50cnkoR3RrVGFibGUqIHRhYmxlLCBpbnQgcm93LCBjb25zdCBjaGFyKiBs
YWJlbFRleHQpCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxU
ZXh0KTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGxhYmVsKSwgMC4wLCAw
LjUpOworCisgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtf
ZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRyeSksIFRSVUUpOworCisg
ICAgZ3RrX3RhYmxlX2F0dGFjaCh0YWJsZSwgbGFiZWwsIDAsIDEsIHJvdywgcm93ICsgMSwgR1RL
X0ZJTEwsIHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdUS19FWFBBTkQgfCBHVEtfRklM
TCksIDAsIDApOworICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHModGFibGUsIGVudHJ5LCAx
LCAyLCByb3csIHJvdyArIDEpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgYm9v
bCBzZXNzaW9uQ2FuU2F2ZVBhc3N3b3JkcyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyNpZmRl
ZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIpOworI2Vsc2UKKyAg
ICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZygpCit7Cit9CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNl
c3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKKyAg
ICA6IG1fZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCisgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikK
KyAgICAsIG1fbWVzc2FnZShtZXNzYWdlKQorICAgICwgbV9hdXRoKGF1dGgpCisgICAgLCBtX2xv
Z2luRW50cnkoMCkKKyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1lbWJlckNo
ZWNrQnV0dG9uKDApCisjaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKKyAgICAsIG1f
aXNTYXZpbmdQYXNzd29yZChmYWxzZSkKKyAgICAsIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcigwKQor
I2VuZGlmCit7CisgICAgR3RrRGlhbG9nKiBkaWFsb2cgPSBHVEtfRElBTE9HKG1fZGlhbG9nKTsK
KyAgICBndGtfZGlhbG9nX2FkZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RL
X1JFU1BPTlNFX0NBTkNFTCwgR1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOwor
CisgICAgLy8gU2V0IHRoZSBkaWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcy4KKyAgICBndGtf
Y29udGFpbmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKKyAg
ICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVh
KGRpYWxvZykpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KKyAgICBndGtfY29udGFpbmVyX3Nl
dF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShk
aWFsb2cpKSwgNSk7CisgICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2df
Z2V0X2FjdGlvbl9hcmVhKGRpYWxvZykpLCA2KTsKKworICAgIEd0a1dpbmRvdyogd2luZG93ID0g
R1RLX1dJTkRPVyhtX2RpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRv
dywgRkFMU0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0
a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElD
QVRJT04pOworCisgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShkaWFsb2csIEdU
S19SRVNQT05TRV9PSyk7CisKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2lu
ZG93X3NldF90cmFuc2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIC8vIEJ1
aWxkIGNvbnRlbnRzLgorICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwg
MTIpOworICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGhC
b3gpLCA1KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9j
b250ZW50X2FyZWEoZGlhbG9nKSksIGhCb3gsIFRSVUUsIFRSVUUsIDApOworCisgICAgR3RrV2lk
Z2V0KiBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVU
SEVOVElDQVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxp
Z25tZW50KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBHdGtXaWRnZXQq
IG1haW5WQm94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAxOCk7CisgICAgZ3RrX2JveF9wYWNrX3N0
YXJ0KEdUS19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIFNvdXBV
UkkqIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1fbWVzc2FnZS5nZXQoKSk7CisgICAgR093
blB0cjxjaGFyPmRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZihfKCJBIHVzZXJuYW1lIGFuZCBw
YXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiksIHVyaS0+aG9zdCkp
OworICAgIEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3Jp
cHRpb24uZ2V0KCkpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoZGVzY3Jp
cHRpb25MYWJlbCksIDAuMCwgMC41KTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtf
TEFCRUwoZGVzY3JpcHRpb25MYWJlbCksIFRSVUUpOworICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKG1haW5WQm94KSwgR1RLX1dJREdFVChkZXNjcmlwdGlvbkxhYmVsKSwgRkFMU0UsIEZB
TFNFLCAwKTsKKworICAgIEd0a1dpZGdldCogdkJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7
CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Qm94LCBGQUxTRSwg
RkFMU0UsIDApOworCisgICAgLy8gVGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCisg
ICAgR3RrV2lkZ2V0KiBlbnRyeUNvbnRhaW5lciA9IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4w
LCAxLjAsIDEuMCk7CisgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5U
KGVudHJ5Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1godkJveCksIGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgY29u
c3QgY2hhciogcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aCk7CisgICAgLy8gQ2hl
Y2tpbmcgdGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgorICAgIGJvb2wgaGFzUmVh
bG0gPSAocmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxl
ID0gZ3RrX3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxTRSk7CisgICAgZ3RrX3Rh
YmxlX3NldF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTIpOworICAgIGd0a190YWJs
ZV9zZXRfcm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDYpOworICAgIGd0a19jb250YWlu
ZXJfYWRkKEdUS19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCB0YWJsZSk7CisKKyAgICBpZiAo
aGFzUmVhbG0pIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25M
YWJlbCA9IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOworICAgICAgICBndGtf
bWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVs
KSwgMC4wLCAwLjUpOworICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwo
c2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKKyAgICAgICAgZ3RrX3RhYmxl
X2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRp
b25MYWJlbCwgMCwgMSwgMCwgMSk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdl
TGFiZWwgPSBndGtfbGFiZWxfbmV3KHJlYWxtKTsKKyAgICAgICAgZ3RrX21pc2Nfc2V0X2FsaWdu
bWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAwLjAsIDAuNSk7CisgICAgICAgIGd0
a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2ZXJNZXNzYWdlTGFiZWwpLCBUUlVF
KTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBz
ZXJ2ZXJNZXNzYWdlTGFiZWwsIDEsIDIsIDAsIDEpOworICAgIH0KKworICAgIG1fbG9naW5FbnRy
eSA9IHRhYmxlQWRkRW50cnkoR1RLX1RBQkxFKHRhYmxlKSwgaGFzUmVhbG0gPyAxIDogMCwgXygi
VXNlcm5hbWU6IikpOworICAgIG1fcGFzc3dvcmRFbnRyeSA9IHRhYmxlQWRkRW50cnkoR1RLX1RB
QkxFKHRhYmxlKSwgaGFzUmVhbG0gPyAyIDogMSwgXygiUGFzc3dvcmQ6IikpOworICAgIGd0a19l
bnRyeV9zZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwor
CisgICAgaWYgKHNlc3Npb25DYW5TYXZlUGFzc3dvcmRzKG1fc2Vzc2lvbikpIHsKKyAgICAgICAg
R3RrV2lkZ2V0KiByZW1lbWJlckJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAgICAg
IGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1lbWJlckJveCwgRkFMU0UsIEZB
TFNFLCAwKTsKKworICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0
dG9uX25ld193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKKyAgICAgICAg
Z3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19C
SU4obV9yZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKKyAgICAgICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIEZBTFNF
LCBGQUxTRSwgMCk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnZXRTYXZlZExvZ2luKFNvdXBB
dXRoKiBhdXRoLCBjb25zdCBjaGFyKiogdXNlcm5hbWUsIGNvbnN0IGNoYXIqKiBwYXNzd29yZCkK
K3sKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIEdTTGlzdCogdXNlcnMg
PSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgpOworICAgIGlmICghdXNlcnMpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICp1c2VybmFtZSA9IHN0YXRpY19jYXN0PGNoYXIqPih1
c2Vycy0+ZGF0YSk7CisgICAgKnBhc3N3b3JkID0gc291cF9hdXRoX2dldF9zYXZlZF9wYXNzd29y
ZChhdXRoLCAqdXNlcm5hbWUpOworICAgIGdfc2xpc3RfZnJlZSh1c2Vycyk7CisKKyAgICByZXR1
cm4gKnVzZXJuYW1lICYmICpwYXNzd29yZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2Vu
ZGlmCit9CisKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3coKQoreworICAgIGNv
bnN0IGNoYXIqIHVzZXJuYW1lID0gMDsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IDA7Cisg
ICAgYm9vbCBoYXZlU2F2ZWRMb2dpbmcgPSBnZXRTYXZlZExvZ2luKG1fYXV0aCwgJnVzZXJuYW1l
LCAmcGFzc3dvcmQpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbiwg
bV9tZXNzYWdlLmdldCgpKTsKKyAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9n
aW5FbnRyeSksIHVzZXJuYW1lID8gdXNlcm5hbWUgOiAiIik7CisgICAgZ3RrX2VudHJ5X3NldF90
ZXh0KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBwYXNzd29yZCA/IHBhc3N3b3JkIDogIiIp
OworICAgIGlmIChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgaGF2ZVNhdmVkTG9naW5nKQorICAg
ICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVt
ZW1iZXJDaGVja0J1dHRvbiksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kaWFsb2cs
ICJyZXNwb25zZSIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxi
YWNrKSwgdGhpcyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2RpYWxvZyk7Cit9CisKK3Zv
aWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQoreworICAgIGJvb2wgc2hvdWxk
RGVsZXRlID0gdHJ1ZTsKKworICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UobV9zZXNz
aW9uLCBtX21lc3NhZ2UuZ2V0KCkpOworICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RpYWxvZyk7
CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIHNob3VsZERlbGV0ZSA9
ICFtX2lzU2F2aW5nUGFzc3dvcmQ7CisjZW5kaWYKKworICAgIC8vIERvIG5vdCBkZWxldGUgdGhl
IG9iamVjdCBpZiBpdCdzIHN0aWxsIHNhdmluZyB0aGUgcGFzc3dvcmQsCisgICAgLy8gdGhlIHNh
dmUgcGFzc3dvcmQgY2FsbGJhY2sgd2lsbCBkZWxldGUgaXQuCisgICAgaWYgKHNob3VsZERlbGV0
ZSkKKyAgICAgICAgZGVsZXRlIHRoaXM7Cit9CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRf
TUFOQUdFUgordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkQ2FsbGJh
Y2soU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cp
Cit7CisgICAgZGlhbG9nLT5zYXZlUGFzc3dvcmQoKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNh
dGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkKCkKK3sKKyAgICBBU1NFUlQobV91c2VybmFtZSk7Cisg
ICAgQVNTRVJUKG1fcGFzc3dvcmQpOworCisgICAgLy8gQW55dGhpbmcgYnV0IDQwMSBhbmQgNXh4
IG1lYW5zIHRoZSBwYXNzd29yZCB3YXMgYWNjZXB0ZWQuCisgICAgaWYgKG1fbWVzc2FnZS5nZXQo
KS0+c3RhdHVzX2NvZGUgIT0gNDAxICYmIG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2NvZGUgPCA1
MDApCisgICAgICAgIHNvdXBfYXV0aF9zYXZlX3Bhc3N3b3JkKG1fYXV0aCwgbV91c2VybmFtZS5n
ZXQoKSwgbV9wYXNzd29yZC5nZXQoKSk7CisKKyAgICAvLyBEaXNjb25uZWN0IHRoZSBjYWxsYmFj
ay4gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCB3ZSBhcmUgZG9uZSwKKyAgICAvLyBh
bmQgaWYgaXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZyBhbmQgd2UnbGwKKyAgICAvLyBjb25uZWN0IHRvICdnb3QtaGVhZGVycycgYWdhaW4gaW4gR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZSgpCisgICAgZ19zaWduYWxfaGFuZGxl
cl9kaXNjb25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgbV9zYXZlUGFzc3dvcmRIYW5kbGVyKTsKKwor
ICAgIC8vIERpYWxvZyBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwgYWZ0ZXIgc2F2aW5nIHRo
ZSBwYXNzd29yZCBpdCBzaG91bGQgYmUgZGVsZXRlZC4KKyAgICBkZWxldGUgdGhpczsKK30KKyNl
bmRpZgorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoKQorewor
ICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWSht
X2xvZ2luRW50cnkpKTsKKyAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRf
dGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSk7CisgICAgc291cF9hdXRoX2F1dGhlbnRp
Y2F0ZShtX2F1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFT
U1dPUkRfTUFOQUdFUgorICAgIGlmIChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgZ3RrX3RvZ2ds
ZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0
b24pKSkgeworICAgICAgICBtX3VzZXJuYW1lLnNldChnX3N0cmR1cCh1c2VybmFtZSkpOworICAg
ICAgICBtX3Bhc3N3b3JkLnNldChnX3N0cmR1cChwYXNzd29yZCkpOworICAgICAgICBtX2lzU2F2
aW5nUGFzc3dvcmQgPSB0cnVlOworICAgICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3Np
Z25hbF9jb25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhz
YXZlUGFzc3dvcmRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJh
Y2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyog
ZGlhbG9nKQoreworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykKKyAgICAg
ICAgZGlhbG9nLT5hdXRoZW50aWNhdGUoKTsKKworICAgIGRpYWxvZy0+ZGVzdHJveSgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU2ZGQ3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrQXV0
aGVudGljYXRpb25EaWFsb2dfaAorI2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCisK
KyNkZWZpbmUgTElCU09VUF9JX0hBVkVfUkVBRF9CVUdfNTk0Mzc3X0FORF9LTk9XX1NPVVBfUEFT
U1dPUkRfTUFOQUdFUl9NSUdIVF9HT19BV0FZCisKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5j
bHVkZSAiR1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nKEd0a1dpbmRvdyosIFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCopOwor
ICAgIH5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOworCisgICAgdm9pZCBzaG93KCk7CisKK3By
aXZhdGU6CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coKTsKKworICAgIHZvaWQgZGVzdHJv
eSgpOworICAgIHZvaWQgYXV0aGVudGljYXRlKCk7CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dP
UkRfTUFOQUdFUgorICAgIHZvaWQgc2F2ZVBhc3N3b3JkKCk7CisgICAgc3RhdGljIHZvaWQgc2F2
ZVBhc3N3b3JkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyop
OworI2VuZGlmCisKKyAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNl
Q2FsbGJhY2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZyopOworCisgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKKyAgICBTb3VwU2Vzc2lvbiogbV9z
ZXNzaW9uOworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fbWVzc2FnZTsKKyAgICBTb3VwQXV0
aCogbV9hdXRoOworCisgICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CisgICAgR3RrV2lkZ2V0
KiBtX3Bhc3N3b3JkRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247
CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIGJvb2wgbV9pc1Nhdmlu
Z1Bhc3N3b3JkOworICAgIHVuc2lnbmVkIGxvbmcgbV9zYXZlUGFzc3dvcmRIYW5kbGVyOworICAg
IEdPd25QdHI8Y2hhcj4gbV91c2VybmFtZTsKKyAgICBHT3duUHRyPGNoYXI+IG1fcGFzc3dvcmQ7
CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0a0F1
dGhlbnRpY2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1h
a2VmaWxlLmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggYjY3NmQw
My4uOTk5ZWYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0K
KysrIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxNCw3ICsyMTQsNyBA
QCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dG5ldHdvcmtyZXNwb25zZXByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHNlY3VyaXR5b3JpZ2luLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNlY3VyaXR5b3JpZ2lucHJpdmF0ZS5oIFwKLQlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuYyBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNv
dXBhdXRoZGlhbG9nLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNp
b24uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1
dGVzLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmli
dXRlc3ByaXZhdGUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3Vw
YXV0aGRpYWxvZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA3ZTZhLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5j
CisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgSWdhbGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0g
KgotICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
LSAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jZGVmaW5lIExJQlNPVVBfSV9I
QVZFX1JFQURfQlVHXzU5NDM3N19BTkRfS05PV19TT1VQX1BBU1NXT1JEX01BTkFHRVJfTUlHSFRf
R09fQVdBWQotCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jaW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCi0jaW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgotI2luY2x1ZGUgIndlYmtpdHNvdXBhdXRo
ZGlhbG9nLmgiCi0KLS8qKgotICogU0VDVElPTjp3ZWJraXRzb3VwYXV0aGRpYWxvZwotICogQHNo
b3J0X2Rlc2NyaXB0aW9uOiBBICNTb3VwU2Vzc2lvbkZlYXR1cmUgdG8gcHJvdmlkZSBhIHNpbXBs
ZQotICogYXV0aGVudGljYXRpb24gZGlhbG9nIGZvciBIVFRQIGJhc2ljIGF1dGggc3VwcG9ydC4K
LSAqCi0gKiAjV2ViS2l0U291cEF1dGhEaWFsb2cgaXMgYSAjU291cFNlc3Npb25GZWF0dXJlIHRo
YXQgeW91IGNhbiBhdHRhY2ggdG8geW91cgotICogI1NvdXBTZXNzaW9uIHRvIHByb3ZpZGUgYSBz
aW1wbGUgYXV0aGVudGljYXRpb24gZGlhbG9nIHdoaWxlCi0gKiBoYW5kbGluZyBIVFRQIGJhc2lj
IGF1dGguIEl0IGlzIGJ1aWx0IGFzIGEgc2ltcGxlIEMtb25seSBtb2R1bGUKLSAqIHRvIGVhc2Ug
cmV1c2UuCi0gKi8KLQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lv
bl9mZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKiBmZWF0dXJlX2ludGVy
ZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpOwotc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBT
ZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pOwotc3RhdGljIHZv
aWQgZGV0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Np
b24pOwotCi1lbnVtIHsKLSAgICBDVVJSRU5UX1RPUExFVkVMLAotICAgIExBU1RfU0lHTkFMCi19
OwotCi1zdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0U291cEF1dGhEaWFsb2csIHdlYmtpdF9zb3VwX2F1dGhf
ZGlhbG9nLCBHX1RZUEVfT0JKRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1F
TlRfSU5URVJGQUNFKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vz
c2lvbl9mZWF0dXJlX2luaXQpKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9hdXRoX2RpYWxv
Z19jbGFzc19pbml0KFdlYktpdFNvdXBBdXRoRGlhbG9nQ2xhc3MqIGtsYXNzKQotewotICAgIEdP
YmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwotCi0gICAg
LyoqCi0gICAgICogV2ViS2l0U291cEF1dGhEaWFsb2c6OmN1cnJlbnQtdG9wbGV2ZWw6Ci0gICAg
ICogQGF1dGhEaWFsb2c6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
Ci0gICAgICogQG1lc3NhZ2U6IHRoZSAjU291cE1lc3NhZ2UgYmVpbmcgdXNlZCBpbiB0aGUgYXV0
aGVudGljYXRpb24gcHJvY2VzcwotICAgICAqCi0gICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRl
ZCBieSB0aGUgQGF1dGhEaWFsb2cgd2hlbiBpdCBuZWVkcyB0byBrbm93Ci0gICAgICogdGhlIGN1
cnJlbnQgdG9wbGV2ZWwgd2lkZ2V0IGluIG9yZGVyIHRvIGNvcnJlY3RseSBzZXQgdGhlCi0gICAg
ICogdHJhbnNpZW5jeSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZy4KLSAgICAgKgotICAg
ICAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCB0b3BsZXZlbCAj
R3RrV2lkZ2V0IG9yICVOVUxMIGlmIHRoZXJlJ3Mgbm9uZQotICAgICAqCi0gICAgICogU2luY2U6
IDEuMS4xCi0gICAgICovCi0gICAgc2lnbmFsc1tDVVJSRU5UX1RPUExFVkVMXSA9Ci0gICAgICBn
X3NpZ25hbF9uZXcoImN1cnJlbnQtdG9wbGV2ZWwiLAotICAgICAgICAgICAgICAgICAgIEdfT0JK
RUNUX0NMQVNTX1RZUEUob2JqZWN0X2NsYXNzKSwKLSAgICAgICAgICAgICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKLSAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0U291
cEF1dGhEaWFsb2dDbGFzcywgY3VycmVudF90b3BsZXZlbCksCi0gICAgICAgICAgICAgICAgICAg
TlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9PQkpFQ1RfX09C
SkVDVCwKLSAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9XSURHRVQsIDEsCi0gICAgICAgICAg
ICAgICAgICAgU09VUF9UWVBFX01FU1NBR0UpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291
cF9hdXRoX2RpYWxvZ19pbml0KFdlYktpdFNvdXBBdXRoRGlhbG9nKiBpbnN0YW5jZSkKLXsKLX0K
LQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2lu
aXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2lu
dGVyIGludGVyZmFjZV9kYXRhKQotewotICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBh
dHRhY2g7Ci0gICAgZmVhdHVyZV9pbnRlcmZhY2UtPmRldGFjaCA9IGRldGFjaDsKLX0KLQotdHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEF1dGhEYXRhIHsKLSAgICBTb3VwTWVzc2FnZSogbXNnOwotICAg
IFNvdXBBdXRoKiBhdXRoOwotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOwotICAgIFNvdXBTZXNz
aW9uRmVhdHVyZSogbWFuYWdlcjsKLSAgICBHdGtXaWRnZXQqIGxvZ2luRW50cnk7Ci0gICAgR3Rr
V2lkZ2V0KiBwYXNzd29yZEVudHJ5OwotICAgIEd0a1dpZGdldCogY2hlY2tCdXR0b247Ci0gICAg
Y2hhciAqdXNlcm5hbWU7Ci0gICAgY2hhciAqcGFzc3dvcmQ7Ci19IFdlYktpdEF1dGhEYXRhOwot
Ci1zdGF0aWMgdm9pZCBmcmVlX2F1dGhEYXRhKFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSkKLXsK
LSAgICBnX29iamVjdF91bnJlZihhdXRoRGF0YS0+bXNnKTsKLSAgICBnX2ZyZWUoYXV0aERhdGEt
PnVzZXJuYW1lKTsKLSAgICBnX2ZyZWUoYXV0aERhdGEtPnBhc3N3b3JkKTsKLSAgICBnX3NsaWNl
X2ZyZWUoV2ViS2l0QXV0aERhdGEsIGF1dGhEYXRhKTsKLX0KLQotI2lmZGVmIFNPVVBfVFlQRV9Q
QVNTV09SRF9NQU5BR0VSCi1zdGF0aWMgdm9pZCBzYXZlX3Bhc3N3b3JkX2NhbGxiYWNrKFNvdXBN
ZXNzYWdlKiBtc2csIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSkKLXsKLSAgICAvKiBBbnl0aGlu
ZyBidXQgNDAxIGFuZCA1eHggbWVhbnMgdGhlIHBhc3N3b3JkIHdhcyBhY2NlcHRlZCAqLwotICAg
IGlmIChtc2ctPnN0YXR1c19jb2RlICE9IDQwMSAmJiBtc2ctPnN0YXR1c19jb2RlIDwgNTAwKQot
ICAgICAgICBzb3VwX2F1dGhfc2F2ZV9wYXNzd29yZChhdXRoRGF0YS0+YXV0aCwgYXV0aERhdGEt
PnVzZXJuYW1lLCBhdXRoRGF0YS0+cGFzc3dvcmQpOwotCi0gICAgLyogRGlzY29ubmVjdCB0aGUg
Y2FsbGJhY2suIElmIHRoZSBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgd2UgYXJlCi0gICAgICog
ZG9uZSwgYW5kIGlmIGl0IGZhaWxlZCB3ZSdsbCBjcmVhdGUgYSBuZXcgYXV0aERhdGEgYW5kIHdl
J2xsCi0gICAgICogY29ubmVjdCB0byAnZ290LWhlYWRlcnMnIGFnYWluIGluIHJlc3BvbnNlX2Nh
bGxiYWNrICovCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1zZywg
c2F2ZV9wYXNzd29yZF9jYWxsYmFjaywgYXV0aERhdGEpOwotCi0gICAgZnJlZV9hdXRoRGF0YShh
dXRoRGF0YSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgcmVzcG9uc2VfY2FsbGJhY2soR3Rr
RGlhbG9nKiBkaWFsb2csIGdpbnQgcmVzcG9uc2VfaWQsIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0
YSkKLXsKLSAgICBnYm9vbGVhbiBmcmVlQXV0aERhdGEgPSBUUlVFOwotCi0gICAgaWYgKHJlc3Bv
bnNlX2lkID09IEdUS19SRVNQT05TRV9PSykgewotICAgICAgICBhdXRoRGF0YS0+dXNlcm5hbWUg
PSBnX3N0cmR1cChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGF1dGhEYXRhLT5sb2dpbkVu
dHJ5KSkpOwotICAgICAgICBhdXRoRGF0YS0+cGFzc3dvcmQgPSBnX3N0cmR1cChndGtfZW50cnlf
Z2V0X3RleHQoR1RLX0VOVFJZKGF1dGhEYXRhLT5wYXNzd29yZEVudHJ5KSkpOwotCi0gICAgICAg
IHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoYXV0aERhdGEtPmF1dGgsIGF1dGhEYXRhLT51c2VybmFt
ZSwgYXV0aERhdGEtPnBhc3N3b3JkKTsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5B
R0VSCi0gICAgICAgIGlmIChhdXRoRGF0YS0+Y2hlY2tCdXR0b24gJiYKLSAgICAgICAgICAgIGd0
a190b2dnbGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04oYXV0aERhdGEtPmNo
ZWNrQnV0dG9uKSkpIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXV0aERhdGEtPm1z
ZywgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhzYXZlX3Bhc3N3b3JkX2NhbGxiYWNrKSwgYXV0
aERhdGEpOwotICAgICAgICAgICAgZnJlZUF1dGhEYXRhID0gRkFMU0U7Ci0gICAgICAgIH0KLSNl
bmRpZgotICAgIH0KLQotICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoYXV0aERhdGEt
PnNlc3Npb24sIGF1dGhEYXRhLT5tc2cpOwotICAgIGlmIChmcmVlQXV0aERhdGEpCi0gICAgICAg
IGZyZWVfYXV0aERhdGEoYXV0aERhdGEpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lE
R0VUKGRpYWxvZykpOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0ICoKLXRhYmxlX2FkZF9lbnRyeShH
dGtXaWRnZXQqICB0YWJsZSwKLSAgICAgICAgICAgICAgICBpbnQgICAgICAgICByb3csCi0gICAg
ICAgICAgICAgICAgY29uc3QgY2hhciogbGFiZWxfdGV4dCwKLSAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiB2YWx1ZSwKLSAgICAgICAgICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17
Ci0gICAgR3RrV2lkZ2V0KiBlbnRyeTsKLSAgICBHdGtXaWRnZXQqIGxhYmVsOwotCi0gICAgbGFi
ZWwgPSBndGtfbGFiZWxfbmV3KGxhYmVsX3RleHQpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1l
bnQoR1RLX01JU0MobGFiZWwpLCAwLjAsIDAuNSk7Ci0KLSAgICBlbnRyeSA9IGd0a19lbnRyeV9u
ZXcoKTsKLSAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRy
eSksIFRSVUUpOwotCi0gICAgaWYgKHZhbHVlKQotICAgICAgICBndGtfZW50cnlfc2V0X3RleHQo
R1RLX0VOVFJZKGVudHJ5KSwgdmFsdWUpOwotCi0gICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFC
TEUodGFibGUpLCBsYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgIDAsIDEsIHJvdywgcm93ICsg
MSwKLSAgICAgICAgICAgICAgICAgICAgIEdUS19GSUxMLCBHVEtfRVhQQU5EIHwgR1RLX0ZJTEws
IDAsIDApOwotICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwg
ZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCByb3csIHJvdyArIDEp
OwotCi0gICAgcmV0dXJuIGVudHJ5OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2Vzc2lvbl9jYW5f
c2F2ZV9wYXNzd29yZHMoU291cFNlc3Npb24qIHNlc3Npb24pCi17Ci0jaWZkZWYgU09VUF9UWVBF
X1BBU1NXT1JEX01BTkFHRVIKLSAgICByZXR1cm4gc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNl
c3Npb24sIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSKSAhPSBOVUxMOwotI2Vsc2UKLSAgICBy
ZXR1cm4gRkFMU0U7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2hvd19hdXRoX2RpYWxvZyhX
ZWJLaXRBdXRoRGF0YSogYXV0aERhdGEsIGNvbnN0IGNoYXIqIGxvZ2luLCBjb25zdCBjaGFyKiBw
YXNzd29yZCkKLXsKLSAgICBHdGtXaWRnZXQqIHRvcGxldmVsOwotICAgIEd0a1dpZGdldCogd2lk
Z2V0OwotICAgIEd0a0RpYWxvZyogZGlhbG9nOwotICAgIEd0a1dpbmRvdyogd2luZG93OwotICAg
IEd0a1dpZGdldCogZW50cnlDb250YWluZXI7Ci0gICAgR3RrV2lkZ2V0KiBoYm94OwotICAgIEd0
a1dpZGdldCogbWFpblZCb3g7Ci0gICAgR3RrV2lkZ2V0KiB2Ym94OwotICAgIEd0a1dpZGdldCog
aWNvbjsKLSAgICBHdGtXaWRnZXQqIHRhYmxlOwotICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2Fn
ZURlc2NyaXB0aW9uTGFiZWw7Ci0gICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWw7Ci0g
ICAgR3RrV2lkZ2V0KiBkZXNjcmlwdGlvbkxhYmVsOwotICAgIGNoYXIqIGRlc2NyaXB0aW9uOwot
ICAgIGNvbnN0IGNoYXIqIHJlYWxtOwotICAgIGdib29sZWFuIGhhc1JlYWxtOwotICAgIFNvdXBV
UkkqIHVyaTsKLSAgICBHdGtXaWRnZXQqIHJlbWVtYmVyQm94OwotICAgIEd0a1dpZGdldCogY2hl
Y2tCdXR0b247Ci0KLSAgICAvKiBGcm9tIEdUSysgZ3RrbW91bnRvcGVyYXRpb24uYywgbW9kaWZp
ZWQgYW5kIHNpbXBsaWZpZWQuIExHUEwgMiBsaWNlbnNlICovCi0KLSAgICB3aWRnZXQgPSBndGtf
ZGlhbG9nX25ldygpOwotICAgIHdpbmRvdyA9IEdUS19XSU5ET1cod2lkZ2V0KTsKLSAgICBkaWFs
b2cgPSBHVEtfRElBTE9HKHdpZGdldCk7Ci0KLSAgICBndGtfZGlhbG9nX2FkZF9idXR0b25zKGRp
YWxvZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19S
RVNQT05TRV9DQU5DRUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT0ss
IEdUS19SRVNQT05TRV9PSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0g
ICAgLyogU2V0IHRoZSBkaWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcyAqLwotICAgIGd0a19j
b250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIDUpOwotICAg
IGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEo
ZGlhbG9nKSksIDIpOyAvKiAyICogNSArIDIgPSAxMiAqLwotICAgIGd0a19jb250YWluZXJfc2V0
X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRp
YWxvZykpLCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goZ3RrX2RpYWxvZ19n
ZXRfYWN0aW9uX2FyZWEoZGlhbG9nKSksIDYpOwotCi0gICAgZ3RrX3dpbmRvd19zZXRfcmVzaXph
YmxlKHdpbmRvdywgRkFMU0UpOwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIp
OwotICAgIGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0df
QVVUSEVOVElDQVRJT04pOwotCi0gICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShk
aWFsb2csIEdUS19SRVNQT05TRV9PSyk7Ci0KLSAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdG9wbGV2
ZWwgKi8KLSAgICBnX3NpZ25hbF9lbWl0KGF1dGhEYXRhLT5tYW5hZ2VyLCBzaWduYWxzW0NVUlJF
TlRfVE9QTEVWRUxdLCAwLCBhdXRoRGF0YS0+bXNnLCAmdG9wbGV2ZWwpOwotCi0gICAgaWYgKHRv
cGxldmVsKQotICAgICAgICBndGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yKHdpbmRvdywgR1RL
X1dJTkRPVyh0b3BsZXZlbCkpOwotCi0gICAgLyogQnVpbGQgY29udGVudHMgKi8KLSAgICBoYm94
ID0gZ3RrX2hib3hfbmV3KEZBTFNFLCAxMik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVy
X3dpZHRoKEdUS19DT05UQUlORVIoaGJveCksIDUpOwotICAgIGd0a19ib3hfcGFja19zdGFydChH
VEtfQk9YKGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpKSwgaGJveCwgVFJVRSwg
VFJVRSwgMCk7Ci0KLSAgICBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9D
S19ESUFMT0dfQVVUSEVOVElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHVEtfSUNPTl9TSVpFX0RJQUxPRyk7Ci0KLSAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50
KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1goaGJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICBtYWluVkJveCA9IGd0a192
Ym94X25ldyhGQUxTRSwgMTgpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gp
LCBtYWluVkJveCwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0
X3VyaShhdXRoRGF0YS0+bXNnKTsKLSAgICBkZXNjcmlwdGlvbiA9IGdfc3RyZHVwX3ByaW50Zihf
KCJBIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRl
ICVzIiksIHVyaS0+aG9zdCk7Ci0gICAgZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXco
ZGVzY3JpcHRpb24pOwotICAgIGdfZnJlZShkZXNjcmlwdGlvbik7Ci0gICAgZ3RrX21pc2Nfc2V0
X2FsaWdubWVudChHVEtfTUlTQyhkZXNjcmlwdGlvbkxhYmVsKSwgMC4wLCAwLjUpOwotICAgIGd0
a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChkZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7
Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCBHVEtfV0lER0VUKGRl
c2NyaXB0aW9uTGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIDAp
OwotCi0gICAgdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7Ci0gICAgZ3RrX2JveF9wYWNr
X3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Ym94LCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAg
LyogVGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMgKi8KLSAgICBlbnRyeUNvbnRhaW5l
ciA9IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAsIDEuMCk7Ci0KLSAgICBndGtfYWxp
Z25tZW50X3NldF9wYWRkaW5nKEdUS19BTElHTk1FTlQoZW50cnlDb250YWluZXIpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCk7Ci0KLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWCh2Ym94KSwgZW50cnlDb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0o
YXV0aERhdGEtPmF1dGgpOwotICAgIC8vIENoZWNraW5nIHRoYXQgcmVhbG0gaXMgbm90IGFuIGVt
cHR5IHN0cmluZwotICAgIGhhc1JlYWxtID0gKHJlYWxtICYmIChzdHJsZW4ocmVhbG0pID4gMCkp
OwotCi0gICAgdGFibGUgPSBndGtfdGFibGVfbmV3KGhhc1JlYWxtID8gMyA6IDIsIDIsIEZBTFNF
KTsKLSAgICBndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCAxMik7
Ci0gICAgZ3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgNik7Ci0g
ICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihlbnRyeUNvbnRhaW5lciksIHRhYmxl
KTsKLQotICAgIGlmIChoYXNSZWFsbSkgewotICAgICAgICBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRp
b25MYWJlbCA9IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOwotICAgICAgICBz
ZXJ2ZXJNZXNzYWdlTGFiZWwgPSBndGtfbGFiZWxfbmV3KHJlYWxtKTsKLSAgICAgICAgZ3RrX21p
c2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCks
IDAuMCwgMC41KTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKHNl
cnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7Ci0gICAgICAgIGd0a19taXNjX3Nl
dF9hbGlnbm1lbnQoR1RLX01JU0Moc2VydmVyTWVzc2FnZUxhYmVsKSwgMC4wLCAwLjUpOwotICAg
ICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVyTWVzc2FnZUxhYmVs
KSwgVFJVRSk7Ci0KLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUo
dGFibGUpLCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAxLCAwLCAxKTsKLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9k
ZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlTGFiZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMCwgMSk7Ci0gICAgfQotCi0gICAgYXV0aERh
dGEtPmxvZ2luRW50cnkgPSB0YWJsZV9hZGRfZW50cnkodGFibGUsIGhhc1JlYWxtID8gMSA6IDAs
IF8oIlVzZXJuYW1lOiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxvZ2luLCBOVUxMKTsKLSAgICBhdXRoRGF0YS0+cGFzc3dvcmRFbnRyeSA9IHRhYmxlX2Fk
ZF9lbnRyeSh0YWJsZSwgaGFzUmVhbG0gPyAyIDogMSwgXygiUGFzc3dvcmQ6IiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsIE5VTEwpOwot
Ci0gICAgZ3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShhdXRoRGF0YS0+cGFzc3dv
cmRFbnRyeSksIEZBTFNFKTsKLQotICAgIGlmIChzZXNzaW9uX2Nhbl9zYXZlX3Bhc3N3b3Jkcyhh
dXRoRGF0YS0+c2Vzc2lvbikpIHsKLSAgICAgICAgcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXco
RkFMU0UsIDYpOwotICAgICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcmVt
ZW1iZXJCb3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIDApOwot
ICAgICAgICBjaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMo
XygiX1JlbWVtYmVyIHBhc3N3b3JkIikpOwotICAgICAgICBpZiAobG9naW4gJiYgcGFzc3dvcmQp
Ci0gICAgICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVU
VE9OKGNoZWNrQnV0dG9uKSwgVFJVRSk7Ci0gICAgICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFw
KEdUS19MQUJFTChndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGNoZWNrQnV0dG9uKSkpLCBUUlVF
KTsKLSAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBjaGVj
a0J1dHRvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICAgICAgYXV0aERhdGEtPmNoZWNrQnV0dG9u
ID0gY2hlY2tCdXR0b247Ci0gICAgfQotCi0gICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJy
ZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVzcG9uc2VfY2FsbGJhY2spLCBhdXRoRGF0YSk7Ci0gICAg
Z3RrX3dpZGdldF9zaG93X2FsbCh3aWRnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzZXNzaW9uX2F1
dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgU291cEF1
dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gICAg
U291cFVSSSogdXJpOwotICAgIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YTsKLSAgICBTb3VwU2Vz
c2lvbkZlYXR1cmUqIG1hbmFnZXIgPSAoU291cFNlc3Npb25GZWF0dXJlKil1c2VyX2RhdGE7Ci0j
aWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKLSAgICBHU0xpc3QqIHVzZXJzOwotI2Vu
ZGlmCi0gICAgY29uc3QgY2hhciAqbG9naW4sICpwYXNzd29yZDsKLQotICAgIHNvdXBfc2Vzc2lv
bl9wYXVzZV9tZXNzYWdlKHNlc3Npb24sIG1zZyk7Ci0gICAgLyogV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhlIG1lc3NhZ2Ugc3RpY2tzIGFyb3VuZCB3aGVuIHBhdXNpbmcgaXQgKi8KLSAgICBnX29i
amVjdF9yZWYobXNnKTsKLQotICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyk7Ci0g
ICAgYXV0aERhdGEgPSBnX3NsaWNlX25ldzAoV2ViS2l0QXV0aERhdGEpOwotICAgIGF1dGhEYXRh
LT5tc2cgPSBtc2c7Ci0gICAgYXV0aERhdGEtPmF1dGggPSBhdXRoOwotICAgIGF1dGhEYXRhLT5z
ZXNzaW9uID0gc2Vzc2lvbjsKLSAgICBhdXRoRGF0YS0+bWFuYWdlciA9IG1hbmFnZXI7Ci0KLSAg
ICBsb2dpbiA9IHBhc3N3b3JkID0gTlVMTDsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9N
QU5BR0VSCi0gICAgdXNlcnMgPSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgpOwotICAg
IGlmICh1c2VycykgewotICAgICAgICBsb2dpbiA9IHVzZXJzLT5kYXRhOwotICAgICAgICBwYXNz
d29yZCA9IHNvdXBfYXV0aF9nZXRfc2F2ZWRfcGFzc3dvcmQoYXV0aCwgbG9naW4pOwotICAgICAg
ICBnX3NsaXN0X2ZyZWUodXNlcnMpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc2hvd19hdXRoX2Rp
YWxvZyhhdXRoRGF0YSwgbG9naW4sIHBhc3N3b3JkKTsKLX0KLQotc3RhdGljIHZvaWQgYXR0YWNo
KFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCi17Ci0g
ICAgZ19zaWduYWxfY29ubmVjdChzZXNzaW9uLCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhz
ZXNzaW9uX2F1dGhlbnRpY2F0ZSksIG1hbmFnZXIpOwotfQotCi1zdGF0aWMgdm9pZCBkZXRhY2go
U291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoc2Vzc2lvbiwgc2Vzc2lvbl9h
dXRoZW50aWNhdGUsIG1hbmFnZXIpOwotfQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc3ZTFjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJ3ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgorCisjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRp
b25EaWFsb2cuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCisvKioKKyAqIFNFQ1RJT046d2Via2l0c291cGF1dGhkaWFsb2cKKyAqIEBz
aG9ydF9kZXNjcmlwdGlvbjogQSAjU291cFNlc3Npb25GZWF0dXJlIHRvIHByb3ZpZGUgYSBzaW1w
bGUKKyAqIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBmb3IgSFRUUCBiYXNpYyBhdXRoIHN1cHBvcnQu
CisgKgorICogI1dlYktpdFNvdXBBdXRoRGlhbG9nIGlzIGEgI1NvdXBTZXNzaW9uRmVhdHVyZSB0
aGF0IHlvdSBjYW4gYXR0YWNoIHRvIHlvdXIKKyAqICNTb3VwU2Vzc2lvbiB0byBwcm92aWRlIGEg
c2ltcGxlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB3aGlsZQorICogaGFuZGxpbmcgSFRUUCBiYXNp
YyBhdXRoLgorICovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Np
b25fZmVhdHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSogZmVhdHVyZV9pbnRl
cmZhY2UsIGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKK3N0YXRpYyB2b2lkIGF0dGFjaChTb3Vw
U2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKTsKK3N0YXRpYyB2
b2lkIGRldGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNz
aW9uKTsKKworZW51bSB7CisgICAgQ1VSUkVOVF9UT1BMRVZFTCwKKyAgICBMQVNUX1NJR05BTAor
fTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK0dfREVG
SU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFNvdXBBdXRoRGlhbG9nLCB3ZWJraXRfc291cF9hdXRo
X2RpYWxvZywgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdfSU1QTEVN
RU5UX0lOVEVSRkFDRShTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nl
c3Npb25fZmVhdHVyZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFs
b2dfY2xhc3NfaW5pdChXZWJLaXRTb3VwQXV0aERpYWxvZ0NsYXNzKiBrbGFzcykKK3sKKyAgICBH
T2JqZWN0Q2xhc3MqIG9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAg
IC8qKgorICAgICAqIFdlYktpdFNvdXBBdXRoRGlhbG9nOjpjdXJyZW50LXRvcGxldmVsOgorICAg
ICAqIEBhdXRoRGlhbG9nOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRl
ZAorICAgICAqIEBtZXNzYWdlOiB0aGUgI1NvdXBNZXNzYWdlIGJlaW5nIHVzZWQgaW4gdGhlIGF1
dGhlbnRpY2F0aW9uIHByb2Nlc3MKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgYnkgdGhlIEBhdXRoRGlhbG9nIHdoZW4gaXQgbmVlZHMgdG8ga25vdworICAgICAqIHRoZSBj
dXJyZW50IHRvcGxldmVsIHdpZGdldCBpbiBvcmRlciB0byBjb3JyZWN0bHkgc2V0IHRoZQorICAg
ICAqIHRyYW5zaWVuY3kgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cuCisgICAgICoKKyAg
ICAgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgdG9wbGV2ZWwg
I0d0a1dpZGdldCBvciAlTlVMTCBpZiB0aGVyZSdzIG5vbmUKKyAgICAgKgorICAgICAqIFNpbmNl
OiAxLjEuMQorICAgICAqLworICAgIHNpZ25hbHNbQ1VSUkVOVF9UT1BMRVZFTF0gPQorICAgICAg
Z19zaWduYWxfbmV3KCJjdXJyZW50LXRvcGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICBHX09C
SkVDVF9DTEFTU19UWVBFKG9iamVjdF9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgR19TSUdO
QUxfUlVOX0xBU1QsCisgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFNv
dXBBdXRoRGlhbG9nQ2xhc3MsIGN1cnJlbnRfdG9wbGV2ZWwpLAorICAgICAgICAgICAgICAgICAg
IE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfT0JKRUNUX19P
QkpFQ1QsCisgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAxLAorICAgICAgICAg
ICAgICAgICAgIFNPVVBfVFlQRV9NRVNTQUdFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3Nv
dXBfYXV0aF9kaWFsb2dfaW5pdChXZWJLaXRTb3VwQXV0aERpYWxvZyogaW5zdGFuY2UpCit7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVhdHVyZV9p
bml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9p
bnRlciBpbnRlcmZhY2VfZGF0YSkKK3sKKyAgICBmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0g
YXR0YWNoOworICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7Cit9CisKK3N0
YXRpYyB2b2lkIHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3Vw
TWVzc2FnZSogbWVzc2FnZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBTb3Vw
U2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIpCit7CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cq
IGF1dGhEaWFsb2c7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IDA7CisKKyAgICAvKiBHZXQg
dGhlIGN1cnJlbnQgdG9wbGV2ZWwgKi8KKyAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25h
bHNbQ1VSUkVOVF9UT1BMRVZFTF0sIDAsIG1lc3NhZ2UsICZ0b3BsZXZlbCk7CisKKyAgICBhdXRo
RGlhbG9nID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVsID8gR1RLX1dJTkRP
Vyh0b3BsZXZlbCkgOiAwLCBzZXNzaW9uLCBtZXNzYWdlLCBhdXRoKTsKKyAgICBhdXRoRGlhbG9n
LT5zaG93KCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1h
bmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2Vz
c2lvbiwgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0soc2Vzc2lvbl9hdXRoZW50aWNhdGUpLCBt
YW5hZ2VyKTsKK30KKworc3RhdGljIHZvaWQgZGV0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFu
YWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKHNlc3Npb24sIChncG9pbnRlcilzZXNzaW9uX2F1dGhlbnRpY2F0ZSwg
bWFuYWdlcik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHNvdXBhdXRoZGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuaAppbmRleCAwOGI3YzlmLi41ZTY3Y2EwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaApAQCAtMjEsNiArMjEsNyBAQAog
I2RlZmluZSB3ZWJraXRzb3VwYXV0aGRpYWxvZ19oCiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMu
aD4KIAogR19CRUdJTl9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9n
dGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCmluZGV4IDYwZTUzN2YwLi5jMWMyOTE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsuaCIKIAogI2lu
Y2x1ZGUgIldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9SdW5Mb29wLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcm9jZXNzLmg+CkBAIC0zNiw2
ICszNyw1MSBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QgcGFyZW50OworfSBXZWJBdXRoRGlh
bG9nOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgR09iamVjdENsYXNzIHBhcmVudDsKK30gV2Vi
QXV0aERpYWxvZ0NsYXNzOworCitzdGF0aWMgR1R5cGUgd2ViX2F1dGhfZGlhbG9nX2dldF90eXBl
KHZvaWQpOworc3RhdGljIHZvaWQgd2ViQXV0aERpYWxvZ1Nlc3Npb25GZWF0dXJlSW5pdChTb3Vw
U2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqLCBncG9pbnRlcik7CisKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYkF1dGhEaWFsb2csIHdlYl9hdXRoX2RpYWxvZywgR19UWVBFX09CSkVDVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShTT1VQX1RZUEVfU0VT
U0lPTl9GRUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdlYkF1dGhEaWFsb2dTZXNzaW9uRmVhdHVyZUluaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJf
YXV0aF9kaWFsb2dfY2xhc3NfaW5pdChXZWJBdXRoRGlhbG9nQ2xhc3MqKQoreworfQorCitzdGF0
aWMgdm9pZCB3ZWJfYXV0aF9kaWFsb2dfaW5pdChXZWJBdXRoRGlhbG9nKikKK3sKK30KKworc3Rh
dGljIHZvaWQgc2Vzc2lvbkF1dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1l
c3NhZ2UqIG1lc3NhZ2UsIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiwgZ3BvaW50ZXIpCit7Cisg
ICAgV2ViQ29yZTo6R3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBuZXcgV2Vi
Q29yZTo6R3RrQXV0aGVudGljYXRpb25EaWFsb2coMCwgc2Vzc2lvbiwgbWVzc2FnZSwgYXV0aCk7
CisgICAgYXV0aERpYWxvZy0+c2hvdygpOworfQorCitzdGF0aWMgdm9pZCBhdHRhY2goU291cFNl
c3Npb25GZWF0dXJlKiwgU291cFNlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19zaWduYWxfY29u
bmVjdChzZXNzaW9uLCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhzZXNzaW9uQXV0aGVudGlj
YXRlKSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRldGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqLCBT
b3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0
X2J5X2Z1bmMoc2Vzc2lvbiwgKGdwb2ludGVyKXNlc3Npb25BdXRoZW50aWNhdGUsIDApOworfQor
CitzdGF0aWMgdm9pZCB3ZWJBdXRoRGlhbG9nU2Vzc2lvbkZlYXR1cmVJbml0KFNvdXBTZXNzaW9u
RmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZSwgZ3BvaW50ZXIpCit7CisgICAgZmVhdHVyZS0+YXR0
YWNoID0gYXR0YWNoOworICAgIGZlYXR1cmUtPmRldGFjaCA9IGRldGFjaDsKK30KKwogbmFtZXNw
YWNlIFdlYktpdCB7CiAKIFdLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50IGFyZ2Ms
IGNoYXIqIGFyZ3ZbXSkKQEAgLTYyLDYgKzEwOCwxMCBAQCBXS19FWFBPUlQgaW50IFdlYlByb2Nl
c3NNYWluR3RrKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAKICAgICBzb3VwX3Nlc3Npb25fYWRk
X2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKTsKIAor
ICAgIFNvdXBTZXNzaW9uRmVhdHVyZSogYXV0aERpYWxvZyA9IHN0YXRpY19jYXN0PFNvdXBTZXNz
aW9uRmVhdHVyZSo+KGdfb2JqZWN0X25ldyh3ZWJfYXV0aF9kaWFsb2dfZ2V0X3R5cGUoKSwgTlVM
TCkpOworICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBhdXRoRGlhbG9nKTsK
KyAgICBnX29iamVjdF91bnJlZihhdXRoRGlhbG9nKTsKKwogICAgIGludCBzb2NrZXQgPSBhdG9p
KGFyZ3ZbMV0pOwogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoc29ja2V0LCBS
dW5Mb29wOjptYWluKCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96571</attachid>
            <date>2011-06-09 04:19:00 -0700</date>
            <delta_ts>2011-06-13 05:17:30 -0700</delta_ts>
            <desc>Patch rebased to current git master</desc>
            <filename>wk2-auth-dialog2.diff</filename>
            <type>text/plain</type>
            <size>38621</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMmQ5YmU2Li4wODZmNGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMDkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgYXV0aGVudGljYXRpb24gZGlhbG9ncyBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM2NgorCisgICAgICAgIEFkZCBh
IG5ldyBjbGFzcyB0byBzaG93IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0aGF0IGlzIHVzZWQg
YnkKKyAgICAgICAgYm90aCBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnRhYmxlQWRkRW50cnkpOgorICAgICAgICAoV2ViQ29yZTo6c2Vzc2lvbkNhblNh
dmVQYXNzd29yZHMpOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGljYXRpb25EaWFsb2c6
On5HdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6R3RrQXV0aGVudGljYXRpb25EaWFsb2cpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0U2F2ZWRMb2dpbik6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6
ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2
ZVBhc3N3b3JkQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGljYXRpb25E
aWFsb2c6OnNhdmVQYXNzd29yZCk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZzo6YXV0aGVudGljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjphdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2spOgorICAgICAg
ICAqIHBsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oOiBBZGRlZC4KKwogMjAx
MS0wNi0wOSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDZkMzZlMTkuLjAxMjE3ZjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMS0wNi0wOSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gU3VwcG9ydCBhdXRoZW50aWNhdGlvbiBk
aWFsb2dzIGluIFdlYktpdDIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyMzY2CisKKyAgICAgICAgTW92ZSB0aGUgY29tbW9uIGNvZGUgb2Ygd2Via2l0
c291cGF1dGhkaWFsb2cgdG8gYSBjb21tb24gQysrIGNsYXNzCisgICAgICAgIGluIFdlYkNvcmUg
c28gdGhhdCBpdCBjYW4gYmUgdXNlZCBieSBXZWJLaXQyIHRvby4gVGhlIGZpbGUgaGFzCisgICAg
ICAgIGJlZW4gY29udmVydGVkIGludG8gYSBDKysgZmlsZS4KKworICAgICAgICAqIEdOVW1ha2Vm
aWxlLmFtOiBSZW5hbWUgd2Via2l0c291cGF1dGhkaWFsb2cuYyB0bworICAgICAgICB3ZWJraXRz
b3VwYXV0aGRpYWxvZy5jcHAuCisgICAgICAgICogd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9n
LmM6IFJlbW92ZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcDog
QWRkZWQuCisgICAgICAgICh3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19jbGFzc19pbml0KToKKyAg
ICAgICAgKHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX2luaXQpOgorICAgICAgICAod2Via2l0X3Nv
dXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQpOgorICAgICAgICAoc2Vzc2lvbl9h
dXRoZW50aWNhdGUpOiBVc2UgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgb2JqZWN0IGZyb20KKyAg
ICAgICAgV2ViQ29yZS4KKyAgICAgICAgKGF0dGFjaCk6CisgICAgICAgIChkZXRhY2gpOgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oOgorCiAyMDExLTA2LTA4ICBYYW4g
TG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4g
Um9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNWUyZjE1ZC4uYWFhODc1NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIyIEBACisyMDExLTA2LTA5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBTdXBwb3J0IGF1dGhlbnRpY2F0aW9uIGRpYWxvZ3MgaW4gV2ViS2l0MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNjYKKworICAg
ICAgICBBZGQgYSBuZXcgc291cCBmZWF0dXJlIHRvIHNob3cgYW4gYXV0aGVudGljYXRpb24gZGlh
bG9nIHdoZW4gaXQKKyAgICAgICAgZ2V0cyBhIDQwMSBIVFRQIHJlc3BvbnNlLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwOgorICAgICAgICAod2ViX2F1
dGhfZGlhbG9nX2NsYXNzX2luaXQpOgorICAgICAgICAod2ViX2F1dGhfZGlhbG9nX2luaXQpOgor
ICAgICAgICAoc2Vzc2lvbkF1dGhlbnRpY2F0ZSk6CisgICAgICAgIChhdHRhY2gpOgorICAgICAg
ICAoZGV0YWNoKToKKyAgICAgICAgKHdlYkF1dGhEaWFsb2dTZXNzaW9uRmVhdHVyZUluaXQpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0ayk6CisKIDIwMTEtMDYtMDkgIEV1bm1p
IExlZSAgPGV1bm1pMTUubGVlQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggOWNjNTU2Yi4uNWVkN2Y2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0z
ODAxLDYgKzM4MDEsOCBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2d0ay9HT3duUHRyR3RrLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HUmVmUHRyR3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0dSZWZQdHJH
dGsuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQbHVnaW5XaWRnZXQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtQb3B1cE1lbnUuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDRhN2QKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25E
aWFsb2cuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZy5oIgorCisjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5oIgorI2luY2x1ZGUg
PGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBHdGtXaWRnZXQqIHRh
YmxlQWRkRW50cnkoR3RrVGFibGUqIHRhYmxlLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJlbFRl
eHQpCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxUZXh0KTsK
KyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGxhYmVsKSwgMC4wLCAwLjUpOwor
CisgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlf
c2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRyeSksIFRSVUUpOworCisgICAgZ3Rr
X3RhYmxlX2F0dGFjaCh0YWJsZSwgbGFiZWwsIDAsIDEsIHJvdywgcm93ICsgMSwgR1RLX0ZJTEws
IHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdUS19FWFBBTkQgfCBHVEtfRklMTCksIDAs
IDApOworICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHModGFibGUsIGVudHJ5LCAxLCAyLCBy
b3csIHJvdyArIDEpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgYm9vbCBzZXNz
aW9uQ2FuU2F2ZVBhc3N3b3JkcyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyNpZmRlZiBTT1VQ
X1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1
cmUoc2Vzc2lvbiwgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKworR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5HdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZygpCit7Cit9CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlc3Npb24q
IHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKKyAgICA6IG1f
ZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCisgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAs
IG1fbWVzc2FnZShtZXNzYWdlKQorICAgICwgbV9hdXRoKGF1dGgpCisgICAgLCBtX2xvZ2luRW50
cnkoMCkKKyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1lbWJlckNoZWNrQnV0
dG9uKDApCisjaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKKyAgICAsIG1faXNTYXZp
bmdQYXNzd29yZChmYWxzZSkKKyAgICAsIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcigwKQorI2VuZGlm
Cit7CisgICAgR3RrRGlhbG9nKiBkaWFsb2cgPSBHVEtfRElBTE9HKG1fZGlhbG9nKTsKKyAgICBn
dGtfZGlhbG9nX2FkZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BP
TlNFX0NBTkNFTCwgR1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOworCisgICAg
Ly8gU2V0IHRoZSBkaWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcy4KKyAgICBndGtfY29udGFp
bmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKKyAgICBndGtf
Ym94X3NldF9zcGFjaW5nKEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxv
ZykpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KKyAgICBndGtfY29udGFpbmVyX3NldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cp
KSwgNSk7CisgICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2Fj
dGlvbl9hcmVhKGRpYWxvZykpLCA2KTsKKworICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJ
TkRPVyhtX2RpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFM
U0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193aW5k
b3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04p
OworCisgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShkaWFsb2csIEdUS19SRVNQ
T05TRV9PSyk7CisKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3Nl
dF90cmFuc2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIC8vIEJ1aWxkIGNv
bnRlbnRzLgorICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMTIpOwor
ICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGhCb3gpLCA1
KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50
X2FyZWEoZGlhbG9nKSksIGhCb3gsIFRSVUUsIFRSVUUsIDApOworCisgICAgR3RrV2lkZ2V0KiBp
Y29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElD
QVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50
KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBHdGtXaWRnZXQqIG1haW5W
Qm94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAxOCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1fbWVzc2FnZS5nZXQoKSk7CisgICAgR093blB0cjxj
aGFyPmRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZihfKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29y
ZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiksIHVyaS0+aG9zdCkpOworICAg
IEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3JpcHRpb24u
Z2V0KCkpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoZGVzY3JpcHRpb25M
YWJlbCksIDAuMCwgMC41KTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwo
ZGVzY3JpcHRpb25MYWJlbCksIFRSVUUpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KG1haW5WQm94KSwgR1RLX1dJREdFVChkZXNjcmlwdGlvbkxhYmVsKSwgRkFMU0UsIEZBTFNFLCAw
KTsKKworICAgIEd0a1dpZGdldCogdkJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Qm94LCBGQUxTRSwgRkFMU0Us
IDApOworCisgICAgLy8gVGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCisgICAgR3Rr
V2lkZ2V0KiBlbnRyeUNvbnRhaW5lciA9IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAs
IDEuMCk7CisgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5UKGVudHJ5
Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
dkJveCksIGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgY29uc3QgY2hh
ciogcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aCk7CisgICAgLy8gQ2hlY2tpbmcg
dGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgorICAgIGJvb2wgaGFzUmVhbG0gPSAo
cmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3Rr
X3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3Nl
dF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTIpOworICAgIGd0a190YWJsZV9zZXRf
cm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDYpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCB0YWJsZSk7CisKKyAgICBpZiAoaGFzUmVh
bG0pIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCA9
IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOworICAgICAgICBndGtfbWlzY19z
ZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgMC4w
LCAwLjUpOworICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVy
TWVzc2FnZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFj
aF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJl
bCwgMCwgMSwgMCwgMSk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWwg
PSBndGtfbGFiZWxfbmV3KHJlYWxtKTsKKyAgICAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChH
VEtfTUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAwLjAsIDAuNSk7CisgICAgICAgIGd0a19sYWJl
bF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2ZXJNZXNzYWdlTGFiZWwpLCBUUlVFKTsKKyAg
ICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJN
ZXNzYWdlTGFiZWwsIDEsIDIsIDAsIDEpOworICAgIH0KKworICAgIG1fbG9naW5FbnRyeSA9IHRh
YmxlQWRkRW50cnkoR1RLX1RBQkxFKHRhYmxlKSwgaGFzUmVhbG0gPyAxIDogMCwgXygiVXNlcm5h
bWU6IikpOworICAgIG1fcGFzc3dvcmRFbnRyeSA9IHRhYmxlQWRkRW50cnkoR1RLX1RBQkxFKHRh
YmxlKSwgaGFzUmVhbG0gPyAyIDogMSwgXygiUGFzc3dvcmQ6IikpOworICAgIGd0a19lbnRyeV9z
ZXRfdmlzaWJpbGl0eShHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSwgRkFMU0UpOworCisgICAg
aWYgKHNlc3Npb25DYW5TYXZlUGFzc3dvcmRzKG1fc2Vzc2lvbikpIHsKKyAgICAgICAgR3RrV2lk
Z2V0KiByZW1lbWJlckJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAgICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKHZCb3gpLCByZW1lbWJlckJveCwgRkFMU0UsIEZBTFNFLCAw
KTsKKworICAgICAgICBtX3JlbWVtYmVyQ2hlY2tCdXR0b24gPSBndGtfY2hlY2tfYnV0dG9uX25l
d193aXRoX21uZW1vbmljKF8oIl9SZW1lbWJlciBwYXNzd29yZCIpKTsKKyAgICAgICAgZ3RrX2xh
YmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4obV9y
ZW1lbWJlckNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKKyAgICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1gocmVtZW1iZXJCb3gpLCBtX3JlbWVtYmVyQ2hlY2tCdXR0b24sIEZBTFNFLCBGQUxT
RSwgMCk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnZXRTYXZlZExvZ2luKFNvdXBBdXRoKiBh
dXRoLCBjb25zdCBjaGFyKiogdXNlcm5hbWUsIGNvbnN0IGNoYXIqKiBwYXNzd29yZCkKK3sKKyNp
ZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIEdTTGlzdCogdXNlcnMgPSBzb3Vw
X2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgpOworICAgIGlmICghdXNlcnMpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICp1c2VybmFtZSA9IHN0YXRpY19jYXN0PGNoYXIqPih1c2Vycy0+
ZGF0YSk7CisgICAgKnBhc3N3b3JkID0gc291cF9hdXRoX2dldF9zYXZlZF9wYXNzd29yZChhdXRo
LCAqdXNlcm5hbWUpOworICAgIGdfc2xpc3RfZnJlZSh1c2Vycyk7CisKKyAgICByZXR1cm4gKnVz
ZXJuYW1lICYmICpwYXNzd29yZDsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9
CisKK3ZvaWQgR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OnNob3coKQoreworICAgIGNvbnN0IGNo
YXIqIHVzZXJuYW1lID0gMDsKKyAgICBjb25zdCBjaGFyKiBwYXNzd29yZCA9IDA7CisgICAgYm9v
bCBoYXZlU2F2ZWRMb2dpbmcgPSBnZXRTYXZlZExvZ2luKG1fYXV0aCwgJnVzZXJuYW1lLCAmcGFz
c3dvcmQpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbiwgbV9tZXNz
YWdlLmdldCgpKTsKKyAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5FbnRy
eSksIHVzZXJuYW1lID8gdXNlcm5hbWUgOiAiIik7CisgICAgZ3RrX2VudHJ5X3NldF90ZXh0KEdU
S19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBwYXNzd29yZCA/IHBhc3N3b3JkIDogIiIpOworICAg
IGlmIChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgaGF2ZVNhdmVkTG9naW5nKQorICAgICAgICBn
dGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKG1fcmVtZW1iZXJD
aGVja0J1dHRvbiksIFRSVUUpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9kaWFsb2csICJyZXNw
b25zZSIsIEdfQ0FMTEJBQ0soYXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKSwg
dGhpcyk7CisgICAgZ3RrX3dpZGdldF9zaG93X2FsbChtX2RpYWxvZyk7Cit9CisKK3ZvaWQgR3Rr
QXV0aGVudGljYXRpb25EaWFsb2c6OmRlc3Ryb3koKQoreworICAgIGJvb2wgc2hvdWxkRGVsZXRl
ID0gdHJ1ZTsKKworICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UobV9zZXNzaW9uLCBt
X21lc3NhZ2UuZ2V0KCkpOworICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RpYWxvZyk7CisKKyNp
ZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIHNob3VsZERlbGV0ZSA9ICFtX2lz
U2F2aW5nUGFzc3dvcmQ7CisjZW5kaWYKKworICAgIC8vIERvIG5vdCBkZWxldGUgdGhlIG9iamVj
dCBpZiBpdCdzIHN0aWxsIHNhdmluZyB0aGUgcGFzc3dvcmQsCisgICAgLy8gdGhlIHNhdmUgcGFz
c3dvcmQgY2FsbGJhY2sgd2lsbCBkZWxldGUgaXQuCisgICAgaWYgKHNob3VsZERlbGV0ZSkKKyAg
ICAgICAgZGVsZXRlIHRoaXM7Cit9CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdF
Ugordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6c2F2ZVBhc3N3b3JkQ2FsbGJhY2soU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBkaWFsb2cpCit7Cisg
ICAgZGlhbG9nLT5zYXZlUGFzc3dvcmQoKTsKK30KKwordm9pZCBHdGtBdXRoZW50aWNhdGlvbkRp
YWxvZzo6c2F2ZVBhc3N3b3JkKCkKK3sKKyAgICBBU1NFUlQobV91c2VybmFtZSk7CisgICAgQVNT
RVJUKG1fcGFzc3dvcmQpOworCisgICAgLy8gQW55dGhpbmcgYnV0IDQwMSBhbmQgNXh4IG1lYW5z
IHRoZSBwYXNzd29yZCB3YXMgYWNjZXB0ZWQuCisgICAgaWYgKG1fbWVzc2FnZS5nZXQoKS0+c3Rh
dHVzX2NvZGUgIT0gNDAxICYmIG1fbWVzc2FnZS5nZXQoKS0+c3RhdHVzX2NvZGUgPCA1MDApCisg
ICAgICAgIHNvdXBfYXV0aF9zYXZlX3Bhc3N3b3JkKG1fYXV0aCwgbV91c2VybmFtZS5nZXQoKSwg
bV9wYXNzd29yZC5nZXQoKSk7CisKKyAgICAvLyBEaXNjb25uZWN0IHRoZSBjYWxsYmFjay4gSWYg
dGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCB3ZSBhcmUgZG9uZSwKKyAgICAvLyBhbmQgaWYg
aXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5ldyBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyBhbmQg
d2UnbGwKKyAgICAvLyBjb25uZWN0IHRvICdnb3QtaGVhZGVycycgYWdhaW4gaW4gR3RrQXV0aGVu
dGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZSgpCisgICAgZ19zaWduYWxfaGFuZGxlcl9kaXNj
b25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgbV9zYXZlUGFzc3dvcmRIYW5kbGVyKTsKKworICAgIC8v
IERpYWxvZyBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3llZCwgYWZ0ZXIgc2F2aW5nIHRoZSBwYXNz
d29yZCBpdCBzaG91bGQgYmUgZGVsZXRlZC4KKyAgICBkZWxldGUgdGhpczsKK30KKyNlbmRpZgor
Cit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGUoKQoreworICAgIGNv
bnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dldF90ZXh0KEdUS19FTlRSWShtX2xvZ2lu
RW50cnkpKTsKKyAgICBjb25zdCBjaGFyICpwYXNzd29yZCA9IGd0a19lbnRyeV9nZXRfdGV4dChH
VEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSk7CisgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZSht
X2F1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRf
TUFOQUdFUgorICAgIGlmIChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgZ3RrX3RvZ2dsZV9idXR0
b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihtX3JlbWVtYmVyQ2hlY2tCdXR0b24pKSkg
eworICAgICAgICBtX3VzZXJuYW1lLnNldChnX3N0cmR1cCh1c2VybmFtZSkpOworICAgICAgICBt
X3Bhc3N3b3JkLnNldChnX3N0cmR1cChwYXNzd29yZCkpOworICAgICAgICBtX2lzU2F2aW5nUGFz
c3dvcmQgPSB0cnVlOworICAgICAgICBtX3NhdmVQYXNzd29yZEhhbmRsZXIgPSBnX3NpZ25hbF9j
b25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhzYXZlUGFz
c3dvcmRDYWxsYmFjayksIHRoaXMpOworICAgIH0KKyNlbmRpZgorfQorCit2b2lkIEd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nOjphdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2soR3Rr
V2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyogZGlhbG9n
KQoreworICAgIGlmIChyZXNwb25zZUlEID09IEdUS19SRVNQT05TRV9PSykKKyAgICAgICAgZGlh
bG9nLT5hdXRoZW50aWNhdGUoKTsKKworICAgIGRpYWxvZy0+ZGVzdHJveSgpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjU2ZGQ3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgR3RrQXV0aGVudGlj
YXRpb25EaWFsb2dfaAorI2RlZmluZSBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZ19oCisKKyNkZWZp
bmUgTElCU09VUF9JX0hBVkVfUkVBRF9CVUdfNTk0Mzc3X0FORF9LTk9XX1NPVVBfUEFTU1dPUkRf
TUFOQUdFUl9NSUdIVF9HT19BV0FZCisKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAi
R1JlZlB0ckd0ay5oIgorI2luY2x1ZGUgPGxpYnNvdXAvc291cC5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0QWxsb2NCYXNlLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR3RrQXV0aGVudGljYXRpb25EaWFsb2cgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKEd0
a1dpbmRvdyosIFNvdXBTZXNzaW9uKiwgU291cE1lc3NhZ2UqLCBTb3VwQXV0aCopOworICAgIH5H
dGtBdXRoZW50aWNhdGlvbkRpYWxvZygpOworCisgICAgdm9pZCBzaG93KCk7CisKK3ByaXZhdGU6
CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coKTsKKworICAgIHZvaWQgZGVzdHJveSgpOwor
ICAgIHZvaWQgYXV0aGVudGljYXRlKCk7CisKKyNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFO
QUdFUgorICAgIHZvaWQgc2F2ZVBhc3N3b3JkKCk7CisgICAgc3RhdGljIHZvaWQgc2F2ZVBhc3N3
b3JkQ2FsbGJhY2soU291cE1lc3NhZ2UqLCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyopOworI2Vu
ZGlmCisKKyAgICBzdGF0aWMgdm9pZCBhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJh
Y2soR3RrV2lkZ2V0KiwgZ2ludCByZXNwb25zZUlELCBHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyop
OworCisgICAgR3RrV2lkZ2V0KiBtX2RpYWxvZzsKKyAgICBTb3VwU2Vzc2lvbiogbV9zZXNzaW9u
OworICAgIEdSZWZQdHI8U291cE1lc3NhZ2U+IG1fbWVzc2FnZTsKKyAgICBTb3VwQXV0aCogbV9h
dXRoOworCisgICAgR3RrV2lkZ2V0KiBtX2xvZ2luRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3Bh
c3N3b3JkRW50cnk7CisgICAgR3RrV2lkZ2V0KiBtX3JlbWVtYmVyQ2hlY2tCdXR0b247CisKKyNp
ZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIGJvb2wgbV9pc1NhdmluZ1Bhc3N3
b3JkOworICAgIHVuc2lnbmVkIGxvbmcgbV9zYXZlUGFzc3dvcmRIYW5kbGVyOworICAgIEdPd25Q
dHI8Y2hhcj4gbV91c2VybmFtZTsKKyAgICBHT3duUHRyPGNoYXI+IG1fcGFzc3dvcmQ7CisjZW5k
aWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEd0a0F1dGhlbnRp
Y2F0aW9uRGlhbG9nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxl
LmFtIGIvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggYmRlZjhhYS4uYWQ2
MmU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KKysrIGIv
U291cmNlL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTIxNSw3ICsyMTUsNyBAQCB3ZWJr
aXRndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdv
cmtyZXNwb25zZXByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNl
Y3VyaXR5b3JpZ2luLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNlY3Vy
aXR5b3JpZ2lucHJpdmF0ZS5oIFwKLQlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuYyBcCisJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRo
ZGlhbG9nLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tl
ci5jcHAgXAogCVNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzcGVsbGNoZWNrZXJlbmNo
YW50LmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNwZWxsY2hlY2tlcmVu
Y2hhbnQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuYyBiL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRp
YWxvZy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNDA3ZTZhLi4wMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdh
bGlhIFMuTC4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCi0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jZGVmaW5lIExJQlNPVVBfSV9IQVZFX1JF
QURfQlVHXzU5NDM3N19BTkRfS05PV19TT1VQX1BBU1NXT1JEX01BTkFHRVJfTUlHSFRfR09fQVdB
WQotCi0jaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+Ci0KLSNpbmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCi0j
aW5jbHVkZSAid2Via2l0bWFyc2hhbC5oIgotI2luY2x1ZGUgIndlYmtpdHNvdXBhdXRoZGlhbG9n
LmgiCi0KLS8qKgotICogU0VDVElPTjp3ZWJraXRzb3VwYXV0aGRpYWxvZwotICogQHNob3J0X2Rl
c2NyaXB0aW9uOiBBICNTb3VwU2Vzc2lvbkZlYXR1cmUgdG8gcHJvdmlkZSBhIHNpbXBsZQotICog
YXV0aGVudGljYXRpb24gZGlhbG9nIGZvciBIVFRQIGJhc2ljIGF1dGggc3VwcG9ydC4KLSAqCi0g
KiAjV2ViS2l0U291cEF1dGhEaWFsb2cgaXMgYSAjU291cFNlc3Npb25GZWF0dXJlIHRoYXQgeW91
IGNhbiBhdHRhY2ggdG8geW91cgotICogI1NvdXBTZXNzaW9uIHRvIHByb3ZpZGUgYSBzaW1wbGUg
YXV0aGVudGljYXRpb24gZGlhbG9nIHdoaWxlCi0gKiBoYW5kbGluZyBIVFRQIGJhc2ljIGF1dGgu
IEl0IGlzIGJ1aWx0IGFzIGEgc2ltcGxlIEMtb25seSBtb2R1bGUKLSAqIHRvIGVhc2UgcmV1c2Uu
Ci0gKi8KLQotc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0
dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKiBmZWF0dXJlX2ludGVyZmFjZSwg
Z3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpOwotc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9u
RmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pOwotc3RhdGljIHZvaWQgZGV0
YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pOwot
Ci1lbnVtIHsKLSAgICBDVVJSRU5UX1RPUExFVkVMLAotICAgIExBU1RfU0lHTkFMCi19OwotCi1z
dGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAgfTsKLQotR19ERUZJTkVfVFlQ
RV9XSVRIX0NPREUoV2ViS2l0U291cEF1dGhEaWFsb2csIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9n
LCBHX1RZUEVfT0JKRUNULAotICAgICAgICAgICAgICAgICAgICAgICAgR19JTVBMRU1FTlRfSU5U
RVJGQUNFKFNPVVBfVFlQRV9TRVNTSU9OX0ZFQVRVUkUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9m
ZWF0dXJlX2luaXQpKQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19jbGFz
c19pbml0KFdlYktpdFNvdXBBdXRoRGlhbG9nQ2xhc3MqIGtsYXNzKQotewotICAgIEdPYmplY3RD
bGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOwotCi0gICAgLyoqCi0g
ICAgICogV2ViS2l0U291cEF1dGhEaWFsb2c6OmN1cnJlbnQtdG9wbGV2ZWw6Ci0gICAgICogQGF1
dGhEaWFsb2c6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAg
ICogQG1lc3NhZ2U6IHRoZSAjU291cE1lc3NhZ2UgYmVpbmcgdXNlZCBpbiB0aGUgYXV0aGVudGlj
YXRpb24gcHJvY2VzcwotICAgICAqCi0gICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBieSB0
aGUgQGF1dGhEaWFsb2cgd2hlbiBpdCBuZWVkcyB0byBrbm93Ci0gICAgICogdGhlIGN1cnJlbnQg
dG9wbGV2ZWwgd2lkZ2V0IGluIG9yZGVyIHRvIGNvcnJlY3RseSBzZXQgdGhlCi0gICAgICogdHJh
bnNpZW5jeSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZy4KLSAgICAgKgotICAgICAqIFJl
dHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCB0b3BsZXZlbCAjR3RrV2lk
Z2V0IG9yICVOVUxMIGlmIHRoZXJlJ3Mgbm9uZQotICAgICAqCi0gICAgICogU2luY2U6IDEuMS4x
Ci0gICAgICovCi0gICAgc2lnbmFsc1tDVVJSRU5UX1RPUExFVkVMXSA9Ci0gICAgICBnX3NpZ25h
bF9uZXcoImN1cnJlbnQtdG9wbGV2ZWwiLAotICAgICAgICAgICAgICAgICAgIEdfT0JKRUNUX0NM
QVNTX1RZUEUob2JqZWN0X2NsYXNzKSwKLSAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5f
TEFTVCwKLSAgICAgICAgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0U291cEF1dGhE
aWFsb2dDbGFzcywgY3VycmVudF90b3BsZXZlbCksCi0gICAgICAgICAgICAgICAgICAgTlVMTCwg
TlVMTCwKLSAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9PQkpFQ1RfX09CSkVDVCwK
LSAgICAgICAgICAgICAgICAgICBHVEtfVFlQRV9XSURHRVQsIDEsCi0gICAgICAgICAgICAgICAg
ICAgU09VUF9UWVBFX01FU1NBR0UpOwotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9hdXRo
X2RpYWxvZ19pbml0KFdlYktpdFNvdXBBdXRoRGlhbG9nKiBpbnN0YW5jZSkKLXsKLX0KLQotc3Rh
dGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQoU291
cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlICpmZWF0dXJlX2ludGVyZmFjZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGlu
dGVyZmFjZV9kYXRhKQotewotICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5hdHRhY2ggPSBhdHRhY2g7
Ci0gICAgZmVhdHVyZV9pbnRlcmZhY2UtPmRldGFjaCA9IGRldGFjaDsKLX0KLQotdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEF1dGhEYXRhIHsKLSAgICBTb3VwTWVzc2FnZSogbXNnOwotICAgIFNvdXBB
dXRoKiBhdXRoOwotICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOwotICAgIFNvdXBTZXNzaW9uRmVh
dHVyZSogbWFuYWdlcjsKLSAgICBHdGtXaWRnZXQqIGxvZ2luRW50cnk7Ci0gICAgR3RrV2lkZ2V0
KiBwYXNzd29yZEVudHJ5OwotICAgIEd0a1dpZGdldCogY2hlY2tCdXR0b247Ci0gICAgY2hhciAq
dXNlcm5hbWU7Ci0gICAgY2hhciAqcGFzc3dvcmQ7Ci19IFdlYktpdEF1dGhEYXRhOwotCi1zdGF0
aWMgdm9pZCBmcmVlX2F1dGhEYXRhKFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSkKLXsKLSAgICBn
X29iamVjdF91bnJlZihhdXRoRGF0YS0+bXNnKTsKLSAgICBnX2ZyZWUoYXV0aERhdGEtPnVzZXJu
YW1lKTsKLSAgICBnX2ZyZWUoYXV0aERhdGEtPnBhc3N3b3JkKTsKLSAgICBnX3NsaWNlX2ZyZWUo
V2ViS2l0QXV0aERhdGEsIGF1dGhEYXRhKTsKLX0KLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09S
RF9NQU5BR0VSCi1zdGF0aWMgdm9pZCBzYXZlX3Bhc3N3b3JkX2NhbGxiYWNrKFNvdXBNZXNzYWdl
KiBtc2csIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSkKLXsKLSAgICAvKiBBbnl0aGluZyBidXQg
NDAxIGFuZCA1eHggbWVhbnMgdGhlIHBhc3N3b3JkIHdhcyBhY2NlcHRlZCAqLwotICAgIGlmICht
c2ctPnN0YXR1c19jb2RlICE9IDQwMSAmJiBtc2ctPnN0YXR1c19jb2RlIDwgNTAwKQotICAgICAg
ICBzb3VwX2F1dGhfc2F2ZV9wYXNzd29yZChhdXRoRGF0YS0+YXV0aCwgYXV0aERhdGEtPnVzZXJu
YW1lLCBhdXRoRGF0YS0+cGFzc3dvcmQpOwotCi0gICAgLyogRGlzY29ubmVjdCB0aGUgY2FsbGJh
Y2suIElmIHRoZSBhdXRoZW50aWNhdGlvbiBzdWNjZWVkZWQgd2UgYXJlCi0gICAgICogZG9uZSwg
YW5kIGlmIGl0IGZhaWxlZCB3ZSdsbCBjcmVhdGUgYSBuZXcgYXV0aERhdGEgYW5kIHdlJ2xsCi0g
ICAgICogY29ubmVjdCB0byAnZ290LWhlYWRlcnMnIGFnYWluIGluIHJlc3BvbnNlX2NhbGxiYWNr
ICovCi0gICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKG1zZywgc2F2ZV9w
YXNzd29yZF9jYWxsYmFjaywgYXV0aERhdGEpOwotCi0gICAgZnJlZV9hdXRoRGF0YShhdXRoRGF0
YSk7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgcmVzcG9uc2VfY2FsbGJhY2soR3RrRGlhbG9n
KiBkaWFsb2csIGdpbnQgcmVzcG9uc2VfaWQsIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSkKLXsK
LSAgICBnYm9vbGVhbiBmcmVlQXV0aERhdGEgPSBUUlVFOwotCi0gICAgaWYgKHJlc3BvbnNlX2lk
ID09IEdUS19SRVNQT05TRV9PSykgewotICAgICAgICBhdXRoRGF0YS0+dXNlcm5hbWUgPSBnX3N0
cmR1cChndGtfZW50cnlfZ2V0X3RleHQoR1RLX0VOVFJZKGF1dGhEYXRhLT5sb2dpbkVudHJ5KSkp
OwotICAgICAgICBhdXRoRGF0YS0+cGFzc3dvcmQgPSBnX3N0cmR1cChndGtfZW50cnlfZ2V0X3Rl
eHQoR1RLX0VOVFJZKGF1dGhEYXRhLT5wYXNzd29yZEVudHJ5KSkpOwotCi0gICAgICAgIHNvdXBf
YXV0aF9hdXRoZW50aWNhdGUoYXV0aERhdGEtPmF1dGgsIGF1dGhEYXRhLT51c2VybmFtZSwgYXV0
aERhdGEtPnBhc3N3b3JkKTsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCi0g
ICAgICAgIGlmIChhdXRoRGF0YS0+Y2hlY2tCdXR0b24gJiYKLSAgICAgICAgICAgIGd0a190b2dn
bGVfYnV0dG9uX2dldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04oYXV0aERhdGEtPmNoZWNrQnV0
dG9uKSkpIHsKLSAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoYXV0aERhdGEtPm1zZywgImdv
dC1oZWFkZXJzIiwgR19DQUxMQkFDSyhzYXZlX3Bhc3N3b3JkX2NhbGxiYWNrKSwgYXV0aERhdGEp
OwotICAgICAgICAgICAgZnJlZUF1dGhEYXRhID0gRkFMU0U7Ci0gICAgICAgIH0KLSNlbmRpZgot
ICAgIH0KLQotICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoYXV0aERhdGEtPnNlc3Np
b24sIGF1dGhEYXRhLT5tc2cpOwotICAgIGlmIChmcmVlQXV0aERhdGEpCi0gICAgICAgIGZyZWVf
YXV0aERhdGEoYXV0aERhdGEpOwotICAgIGd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKGRp
YWxvZykpOwotfQotCi1zdGF0aWMgR3RrV2lkZ2V0ICoKLXRhYmxlX2FkZF9lbnRyeShHdGtXaWRn
ZXQqICB0YWJsZSwKLSAgICAgICAgICAgICAgICBpbnQgICAgICAgICByb3csCi0gICAgICAgICAg
ICAgICAgY29uc3QgY2hhciogbGFiZWxfdGV4dCwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiB2YWx1ZSwKLSAgICAgICAgICAgICAgICBncG9pbnRlciAgICB1c2VyX2RhdGEpCi17Ci0gICAg
R3RrV2lkZ2V0KiBlbnRyeTsKLSAgICBHdGtXaWRnZXQqIGxhYmVsOwotCi0gICAgbGFiZWwgPSBn
dGtfbGFiZWxfbmV3KGxhYmVsX3RleHQpOwotICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RL
X01JU0MobGFiZWwpLCAwLjAsIDAuNSk7Ci0KLSAgICBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsK
LSAgICBndGtfZW50cnlfc2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRyeSksIFRS
VUUpOwotCi0gICAgaWYgKHZhbHVlKQotICAgICAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VO
VFJZKGVudHJ5KSwgdmFsdWUpOwotCi0gICAgZ3RrX3RhYmxlX2F0dGFjaChHVEtfVEFCTEUodGFi
bGUpLCBsYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgIDAsIDEsIHJvdywgcm93ICsgMSwKLSAg
ICAgICAgICAgICAgICAgICAgIEdUS19GSUxMLCBHVEtfRVhQQU5EIHwgR1RLX0ZJTEwsIDAsIDAp
OwotICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHMoR1RLX1RBQkxFKHRhYmxlKSwgZW50cnks
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCByb3csIHJvdyArIDEpOwotCi0g
ICAgcmV0dXJuIGVudHJ5OwotfQotCi1zdGF0aWMgZ2Jvb2xlYW4gc2Vzc2lvbl9jYW5fc2F2ZV9w
YXNzd29yZHMoU291cFNlc3Npb24qIHNlc3Npb24pCi17Ci0jaWZkZWYgU09VUF9UWVBFX1BBU1NX
T1JEX01BTkFHRVIKLSAgICByZXR1cm4gc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHNlc3Npb24s
IFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSKSAhPSBOVUxMOwotI2Vsc2UKLSAgICByZXR1cm4g
RkFMU0U7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgc2hvd19hdXRoX2RpYWxvZyhXZWJLaXRB
dXRoRGF0YSogYXV0aERhdGEsIGNvbnN0IGNoYXIqIGxvZ2luLCBjb25zdCBjaGFyKiBwYXNzd29y
ZCkKLXsKLSAgICBHdGtXaWRnZXQqIHRvcGxldmVsOwotICAgIEd0a1dpZGdldCogd2lkZ2V0Owot
ICAgIEd0a0RpYWxvZyogZGlhbG9nOwotICAgIEd0a1dpbmRvdyogd2luZG93OwotICAgIEd0a1dp
ZGdldCogZW50cnlDb250YWluZXI7Ci0gICAgR3RrV2lkZ2V0KiBoYm94OwotICAgIEd0a1dpZGdl
dCogbWFpblZCb3g7Ci0gICAgR3RrV2lkZ2V0KiB2Ym94OwotICAgIEd0a1dpZGdldCogaWNvbjsK
LSAgICBHdGtXaWRnZXQqIHRhYmxlOwotICAgIEd0a1dpZGdldCogc2VydmVyTWVzc2FnZURlc2Ny
aXB0aW9uTGFiZWw7Ci0gICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWw7Ci0gICAgR3Rr
V2lkZ2V0KiBkZXNjcmlwdGlvbkxhYmVsOwotICAgIGNoYXIqIGRlc2NyaXB0aW9uOwotICAgIGNv
bnN0IGNoYXIqIHJlYWxtOwotICAgIGdib29sZWFuIGhhc1JlYWxtOwotICAgIFNvdXBVUkkqIHVy
aTsKLSAgICBHdGtXaWRnZXQqIHJlbWVtYmVyQm94OwotICAgIEd0a1dpZGdldCogY2hlY2tCdXR0
b247Ci0KLSAgICAvKiBGcm9tIEdUSysgZ3RrbW91bnRvcGVyYXRpb24uYywgbW9kaWZpZWQgYW5k
IHNpbXBsaWZpZWQuIExHUEwgMiBsaWNlbnNlICovCi0KLSAgICB3aWRnZXQgPSBndGtfZGlhbG9n
X25ldygpOwotICAgIHdpbmRvdyA9IEdUS19XSU5ET1cod2lkZ2V0KTsKLSAgICBkaWFsb2cgPSBH
VEtfRElBTE9HKHdpZGdldCk7Ci0KLSAgICBndGtfZGlhbG9nX2FkZF9idXR0b25zKGRpYWxvZywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TVE9DS19DQU5DRUwsIEdUS19SRVNQT05T
RV9DQU5DRUwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU1RPQ0tfT0ssIEdUS19S
RVNQT05TRV9PSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotCi0gICAgLyog
U2V0IHRoZSBkaWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcyAqLwotICAgIGd0a19jb250YWlu
ZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGRpYWxvZyksIDUpOwotICAgIGd0a19i
b3hfc2V0X3NwYWNpbmcoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50X2FyZWEoZGlhbG9n
KSksIDIpOyAvKiAyICogNSArIDIgPSAxMiAqLwotICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRl
cl93aWR0aChHVEtfQ09OVEFJTkVSKGd0a19kaWFsb2dfZ2V0X2FjdGlvbl9hcmVhKGRpYWxvZykp
LCA1KTsKLSAgICBndGtfYm94X3NldF9zcGFjaW5nKEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfYWN0
aW9uX2FyZWEoZGlhbG9nKSksIDYpOwotCi0gICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdp
bmRvdywgRkFMU0UpOwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOwotICAg
IGd0a193aW5kb3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVO
VElDQVRJT04pOwotCi0gICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShkaWFsb2cs
IEdUS19SRVNQT05TRV9PSyk7Ci0KLSAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdG9wbGV2ZWwgKi8K
LSAgICBnX3NpZ25hbF9lbWl0KGF1dGhEYXRhLT5tYW5hZ2VyLCBzaWduYWxzW0NVUlJFTlRfVE9Q
TEVWRUxdLCAwLCBhdXRoRGF0YS0+bXNnLCAmdG9wbGV2ZWwpOwotCi0gICAgaWYgKHRvcGxldmVs
KQotICAgICAgICBndGtfd2luZG93X3NldF90cmFuc2llbnRfZm9yKHdpbmRvdywgR1RLX1dJTkRP
Vyh0b3BsZXZlbCkpOwotCi0gICAgLyogQnVpbGQgY29udGVudHMgKi8KLSAgICBoYm94ID0gZ3Rr
X2hib3hfbmV3KEZBTFNFLCAxMik7Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRo
KEdUS19DT05UQUlORVIoaGJveCksIDUpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KGd0a19kaWFsb2dfZ2V0X2NvbnRlbnRfYXJlYShkaWFsb2cpKSwgaGJveCwgVFJVRSwgVFJVRSwg
MCk7Ci0KLSAgICBpY29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFM
T0dfQVVUSEVOVElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
VEtfSUNPTl9TSVpFX0RJQUxPRyk7Ci0KLSAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19N
SVNDKGljb24pLCAwLjUsIDAuMCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1goaGJv
eCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7Ci0KLSAgICBtYWluVkJveCA9IGd0a192Ym94X25l
dyhGQUxTRSwgMTgpOwotICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9YKGhib3gpLCBtYWlu
VkJveCwgVFJVRSwgVFJVRSwgMCk7Ci0KLSAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShh
dXRoRGF0YS0+bXNnKTsKLSAgICBkZXNjcmlwdGlvbiA9IGdfc3RyZHVwX3ByaW50ZihfKCJBIHVz
ZXJuYW1lIGFuZCBwYXNzd29yZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiks
IHVyaS0+aG9zdCk7Ci0gICAgZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3Jp
cHRpb24pOwotICAgIGdfZnJlZShkZXNjcmlwdGlvbik7Ci0gICAgZ3RrX21pc2Nfc2V0X2FsaWdu
bWVudChHVEtfTUlTQyhkZXNjcmlwdGlvbkxhYmVsKSwgMC4wLCAwLjUpOwotICAgIGd0a19sYWJl
bF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChkZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7Ci0gICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCBHVEtfV0lER0VUKGRlc2NyaXB0
aW9uTGFiZWwpLAotICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIDApOwotCi0g
ICAgdmJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0
KEdUS19CT1gobWFpblZCb3gpLCB2Ym94LCBGQUxTRSwgRkFMU0UsIDApOwotCi0gICAgLyogVGhl
IHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMgKi8KLSAgICBlbnRyeUNvbnRhaW5lciA9IGd0
a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAsIDEuMCk7Ci0KLSAgICBndGtfYWxpZ25tZW50
X3NldF9wYWRkaW5nKEdUS19BTElHTk1FTlQoZW50cnlDb250YWluZXIpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwgMCwgMCk7Ci0KLSAgICBndGtfYm94X3BhY2tfc3RhcnQo
R1RLX0JPWCh2Ym94KSwgZW50cnlDb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIEZB
TFNFLCBGQUxTRSwgMCk7Ci0KLSAgICByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0aERh
dGEtPmF1dGgpOwotICAgIC8vIENoZWNraW5nIHRoYXQgcmVhbG0gaXMgbm90IGFuIGVtcHR5IHN0
cmluZwotICAgIGhhc1JlYWxtID0gKHJlYWxtICYmIChzdHJsZW4ocmVhbG0pID4gMCkpOwotCi0g
ICAgdGFibGUgPSBndGtfdGFibGVfbmV3KGhhc1JlYWxtID8gMyA6IDIsIDIsIEZBTFNFKTsKLSAg
ICBndGtfdGFibGVfc2V0X2NvbF9zcGFjaW5ncyhHVEtfVEFCTEUodGFibGUpLCAxMik7Ci0gICAg
Z3RrX3RhYmxlX3NldF9yb3dfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgNik7Ci0gICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihlbnRyeUNvbnRhaW5lciksIHRhYmxlKTsKLQot
ICAgIGlmIChoYXNSZWFsbSkgewotICAgICAgICBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJl
bCA9IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOwotICAgICAgICBzZXJ2ZXJN
ZXNzYWdlTGFiZWwgPSBndGtfbGFiZWxfbmV3KHJlYWxtKTsKLSAgICAgICAgZ3RrX21pc2Nfc2V0
X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCksIDAuMCwg
MC41KTsKLSAgICAgICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKHNlcnZlck1l
c3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgVFJVRSk7Ci0gICAgICAgIGd0a19taXNjX3NldF9hbGln
bm1lbnQoR1RLX01JU0Moc2VydmVyTWVzc2FnZUxhYmVsKSwgMC4wLCAwLjUpOwotICAgICAgICBn
dGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVyTWVzc2FnZUxhYmVsKSwgVFJV
RSk7Ci0KLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUp
LCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCAxLCAwLCAxKTsKLSAgICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0
cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlTGFiZWwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMSwgMiwgMCwgMSk7Ci0gICAgfQotCi0gICAgYXV0aERhdGEtPmxv
Z2luRW50cnkgPSB0YWJsZV9hZGRfZW50cnkodGFibGUsIGhhc1JlYWxtID8gMSA6IDAsIF8oIlVz
ZXJuYW1lOiIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
Z2luLCBOVUxMKTsKLSAgICBhdXRoRGF0YS0+cGFzc3dvcmRFbnRyeSA9IHRhYmxlX2FkZF9lbnRy
eSh0YWJsZSwgaGFzUmVhbG0gPyAyIDogMSwgXygiUGFzc3dvcmQ6IiksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsIE5VTEwpOwotCi0gICAg
Z3RrX2VudHJ5X3NldF92aXNpYmlsaXR5KEdUS19FTlRSWShhdXRoRGF0YS0+cGFzc3dvcmRFbnRy
eSksIEZBTFNFKTsKLQotICAgIGlmIChzZXNzaW9uX2Nhbl9zYXZlX3Bhc3N3b3JkcyhhdXRoRGF0
YS0+c2Vzc2lvbikpIHsKLSAgICAgICAgcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXcoRkFMU0Us
IDYpOwotICAgICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Ym94KSwgcmVtZW1iZXJC
b3gsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwgRkFMU0UsIDApOwotICAgICAg
ICBjaGVja0J1dHRvbiA9IGd0a19jaGVja19idXR0b25fbmV3X3dpdGhfbW5lbW9uaWMoXygiX1Jl
bWVtYmVyIHBhc3N3b3JkIikpOwotICAgICAgICBpZiAobG9naW4gJiYgcGFzc3dvcmQpCi0gICAg
ICAgICAgICBndGtfdG9nZ2xlX2J1dHRvbl9zZXRfYWN0aXZlKEdUS19UT0dHTEVfQlVUVE9OKGNo
ZWNrQnV0dG9uKSwgVFJVRSk7Ci0gICAgICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19M
QUJFTChndGtfYmluX2dldF9jaGlsZChHVEtfQklOKGNoZWNrQnV0dG9uKSkpLCBUUlVFKTsKLSAg
ICAgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gocmVtZW1iZXJCb3gpLCBjaGVja0J1dHRv
biwgRkFMU0UsIEZBTFNFLCAwKTsKLSAgICAgICAgYXV0aERhdGEtPmNoZWNrQnV0dG9uID0gY2hl
Y2tCdXR0b247Ci0gICAgfQotCi0gICAgZ19zaWduYWxfY29ubmVjdChkaWFsb2csICJyZXNwb25z
ZSIsIEdfQ0FMTEJBQ0socmVzcG9uc2VfY2FsbGJhY2spLCBhdXRoRGF0YSk7Ci0gICAgZ3RrX3dp
ZGdldF9zaG93X2FsbCh3aWRnZXQpOwotfQotCi1zdGF0aWMgdm9pZCBzZXNzaW9uX2F1dGhlbnRp
Y2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgU291cEF1dGgqIGF1
dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0gICAgU291cFVS
SSogdXJpOwotICAgIFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YTsKLSAgICBTb3VwU2Vzc2lvbkZl
YXR1cmUqIG1hbmFnZXIgPSAoU291cFNlc3Npb25GZWF0dXJlKil1c2VyX2RhdGE7Ci0jaWZkZWYg
U09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKLSAgICBHU0xpc3QqIHVzZXJzOwotI2VuZGlmCi0g
ICAgY29uc3QgY2hhciAqbG9naW4sICpwYXNzd29yZDsKLQotICAgIHNvdXBfc2Vzc2lvbl9wYXVz
ZV9tZXNzYWdlKHNlc3Npb24sIG1zZyk7Ci0gICAgLyogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhl
IG1lc3NhZ2Ugc3RpY2tzIGFyb3VuZCB3aGVuIHBhdXNpbmcgaXQgKi8KLSAgICBnX29iamVjdF9y
ZWYobXNnKTsKLQotICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1zZyk7Ci0gICAgYXV0
aERhdGEgPSBnX3NsaWNlX25ldzAoV2ViS2l0QXV0aERhdGEpOwotICAgIGF1dGhEYXRhLT5tc2cg
PSBtc2c7Ci0gICAgYXV0aERhdGEtPmF1dGggPSBhdXRoOwotICAgIGF1dGhEYXRhLT5zZXNzaW9u
ID0gc2Vzc2lvbjsKLSAgICBhdXRoRGF0YS0+bWFuYWdlciA9IG1hbmFnZXI7Ci0KLSAgICBsb2dp
biA9IHBhc3N3b3JkID0gTlVMTDsKLQotI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VS
Ci0gICAgdXNlcnMgPSBzb3VwX2F1dGhfZ2V0X3NhdmVkX3VzZXJzKGF1dGgpOwotICAgIGlmICh1
c2VycykgewotICAgICAgICBsb2dpbiA9IHVzZXJzLT5kYXRhOwotICAgICAgICBwYXNzd29yZCA9
IHNvdXBfYXV0aF9nZXRfc2F2ZWRfcGFzc3dvcmQoYXV0aCwgbG9naW4pOwotICAgICAgICBnX3Ns
aXN0X2ZyZWUodXNlcnMpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc2hvd19hdXRoX2RpYWxvZyhh
dXRoRGF0YSwgbG9naW4sIHBhc3N3b3JkKTsKLX0KLQotc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBT
ZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCi17Ci0gICAgZ19z
aWduYWxfY29ubmVjdChzZXNzaW9uLCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhzZXNzaW9u
X2F1dGhlbnRpY2F0ZSksIG1hbmFnZXIpOwotfQotCi1zdGF0aWMgdm9pZCBkZXRhY2goU291cFNl
c3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMoc2Vzc2lvbiwgc2Vzc2lvbl9hdXRoZW50
aWNhdGUsIG1hbmFnZXIpOwotfQotCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c291cGF1dGhkaWFsb2cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjc3ZTFjM2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c291cGF1dGhkaWFsb2cuY3BwCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3
ZWJraXRzb3VwYXV0aGRpYWxvZy5oIgorCisjaW5jbHVkZSAiR3RrQXV0aGVudGljYXRpb25EaWFs
b2cuaCIKKyNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCisvKioKKyAqIFNFQ1RJT046d2Via2l0c291cGF1dGhkaWFsb2cKKyAqIEBzaG9ydF9k
ZXNjcmlwdGlvbjogQSAjU291cFNlc3Npb25GZWF0dXJlIHRvIHByb3ZpZGUgYSBzaW1wbGUKKyAq
IGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBmb3IgSFRUUCBiYXNpYyBhdXRoIHN1cHBvcnQuCisgKgor
ICogI1dlYktpdFNvdXBBdXRoRGlhbG9nIGlzIGEgI1NvdXBTZXNzaW9uRmVhdHVyZSB0aGF0IHlv
dSBjYW4gYXR0YWNoIHRvIHlvdXIKKyAqICNTb3VwU2Vzc2lvbiB0byBwcm92aWRlIGEgc2ltcGxl
IGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB3aGlsZQorICogaGFuZGxpbmcgSFRUUCBiYXNpYyBhdXRo
LgorICovCisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVh
dHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSogZmVhdHVyZV9pbnRlcmZhY2Us
IGdwb2ludGVyIGludGVyZmFjZV9kYXRhKTsKK3N0YXRpYyB2b2lkIGF0dGFjaChTb3VwU2Vzc2lv
bkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKTsKK3N0YXRpYyB2b2lkIGRl
dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKTsK
KworZW51bSB7CisgICAgQ1VSUkVOVF9UT1BMRVZFTCwKKyAgICBMQVNUX1NJR05BTAorfTsKKwor
c3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK0dfREVGSU5FX1RZ
UEVfV0lUSF9DT0RFKFdlYktpdFNvdXBBdXRoRGlhbG9nLCB3ZWJraXRfc291cF9hdXRoX2RpYWxv
ZywgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdfSU1QTEVNRU5UX0lO
VEVSRkFDRShTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25f
ZmVhdHVyZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfY2xh
c3NfaW5pdChXZWJLaXRTb3VwQXV0aERpYWxvZ0NsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIG9iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFNvdXBBdXRoRGlhbG9nOjpjdXJyZW50LXRvcGxldmVsOgorICAgICAqIEBh
dXRoRGlhbG9nOiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAg
ICAqIEBtZXNzYWdlOiB0aGUgI1NvdXBNZXNzYWdlIGJlaW5nIHVzZWQgaW4gdGhlIGF1dGhlbnRp
Y2F0aW9uIHByb2Nlc3MKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgYnkg
dGhlIEBhdXRoRGlhbG9nIHdoZW4gaXQgbmVlZHMgdG8ga25vdworICAgICAqIHRoZSBjdXJyZW50
IHRvcGxldmVsIHdpZGdldCBpbiBvcmRlciB0byBjb3JyZWN0bHkgc2V0IHRoZQorICAgICAqIHRy
YW5zaWVuY3kgZm9yIHRoZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cuCisgICAgICoKKyAgICAgKiBS
ZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlIGN1cnJlbnQgdG9wbGV2ZWwgI0d0a1dp
ZGdldCBvciAlTlVMTCBpZiB0aGVyZSdzIG5vbmUKKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjEu
MQorICAgICAqLworICAgIHNpZ25hbHNbQ1VSUkVOVF9UT1BMRVZFTF0gPQorICAgICAgZ19zaWdu
YWxfbmV3KCJjdXJyZW50LXRvcGxldmVsIiwKKyAgICAgICAgICAgICAgICAgICBHX09CSkVDVF9D
TEFTU19UWVBFKG9iamVjdF9jbGFzcyksCisgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVO
X0xBU1QsCisgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFNvdXBBdXRo
RGlhbG9nQ2xhc3MsIGN1cnJlbnRfdG9wbGV2ZWwpLAorICAgICAgICAgICAgICAgICAgIE5VTEws
IE5VTEwsCisgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfT0JKRUNUX19PQkpFQ1Qs
CisgICAgICAgICAgICAgICAgICAgR1RLX1RZUEVfV0lER0VULCAxLAorICAgICAgICAgICAgICAg
ICAgIFNPVVBfVFlQRV9NRVNTQUdFKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0
aF9kaWFsb2dfaW5pdChXZWJLaXRTb3VwQXV0aERpYWxvZyogaW5zdGFuY2UpCit7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX3Nlc3Npb25fZmVhdHVyZV9pbml0KFNv
dXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSAqZmVhdHVyZV9pbnRlcmZhY2UsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBp
bnRlcmZhY2VfZGF0YSkKK3sKKyAgICBmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNo
OworICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7Cit9CisKK3N0YXRpYyB2
b2lkIHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBTb3VwU2Vzc2lv
bkZlYXR1cmUqIG1hbmFnZXIpCit7CisgICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhE
aWFsb2c7CisgICAgR3RrV2lkZ2V0KiB0b3BsZXZlbCA9IDA7CisKKyAgICAvKiBHZXQgdGhlIGN1
cnJlbnQgdG9wbGV2ZWwgKi8KKyAgICBnX3NpZ25hbF9lbWl0KG1hbmFnZXIsIHNpZ25hbHNbQ1VS
UkVOVF9UT1BMRVZFTF0sIDAsIG1lc3NhZ2UsICZ0b3BsZXZlbCk7CisKKyAgICBhdXRoRGlhbG9n
ID0gbmV3IEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKHRvcGxldmVsID8gR1RLX1dJTkRPVyh0b3Bs
ZXZlbCkgOiAwLCBzZXNzaW9uLCBtZXNzYWdlLCBhdXRoKTsKKyAgICBhdXRoRGlhbG9nLT5zaG93
KCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIs
IFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2Vzc2lvbiwg
ImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0soc2Vzc2lvbl9hdXRoZW50aWNhdGUpLCBtYW5hZ2Vy
KTsKK30KKworc3RhdGljIHZvaWQgZGV0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwg
U291cFNlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKHNlc3Npb24sIChncG9pbnRlcilzZXNzaW9uX2F1dGhlbnRpY2F0ZSwgbWFuYWdl
cik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNv
dXBhdXRoZGlhbG9nLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhk
aWFsb2cuaAppbmRleCAwOGI3YzlmLi41ZTY3Y2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmlu
ZSB3ZWJraXRzb3VwYXV0aGRpYWxvZ19oCiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVk
ZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KIAog
R19CRUdJTl9ERUNMUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsv
V2ViUHJvY2Vzc01haW5HdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2Vi
UHJvY2Vzc01haW5HdGsuY3BwCmluZGV4IDYwZTUzN2YwLi5jMWMyOTE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsuY3BwCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01haW5HdGsuaCIKIAogI2luY2x1ZGUg
IldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcm9jZXNzLmg+CkBAIC0zNiw2ICszNyw1
MSBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAor
dHlwZWRlZiBzdHJ1Y3QgeworICAgIEdPYmplY3QgcGFyZW50OworfSBXZWJBdXRoRGlhbG9nOwor
Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgR09iamVjdENsYXNzIHBhcmVudDsKK30gV2ViQXV0aERp
YWxvZ0NsYXNzOworCitzdGF0aWMgR1R5cGUgd2ViX2F1dGhfZGlhbG9nX2dldF90eXBlKHZvaWQp
Oworc3RhdGljIHZvaWQgd2ViQXV0aERpYWxvZ1Nlc3Npb25GZWF0dXJlSW5pdChTb3VwU2Vzc2lv
bkZlYXR1cmVJbnRlcmZhY2UqLCBncG9pbnRlcik7CisKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYkF1dGhEaWFsb2csIHdlYl9hdXRoX2RpYWxvZywgR19UWVBFX09CSkVDVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShTT1VQX1RZUEVfU0VTU0lPTl9G
RUFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdl
YkF1dGhEaWFsb2dTZXNzaW9uRmVhdHVyZUluaXQpKQorCitzdGF0aWMgdm9pZCB3ZWJfYXV0aF9k
aWFsb2dfY2xhc3NfaW5pdChXZWJBdXRoRGlhbG9nQ2xhc3MqKQoreworfQorCitzdGF0aWMgdm9p
ZCB3ZWJfYXV0aF9kaWFsb2dfaW5pdChXZWJBdXRoRGlhbG9nKikKK3sKK30KKworc3RhdGljIHZv
aWQgc2Vzc2lvbkF1dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2Uq
IG1lc3NhZ2UsIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiwgZ3BvaW50ZXIpCit7CisgICAgV2Vi
Q29yZTo6R3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGF1dGhEaWFsb2cgPSBuZXcgV2ViQ29yZTo6
R3RrQXV0aGVudGljYXRpb25EaWFsb2coMCwgc2Vzc2lvbiwgbWVzc2FnZSwgYXV0aCk7CisgICAg
YXV0aERpYWxvZy0+c2hvdygpOworfQorCitzdGF0aWMgdm9pZCBhdHRhY2goU291cFNlc3Npb25G
ZWF0dXJlKiwgU291cFNlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19zaWduYWxfY29ubmVjdChz
ZXNzaW9uLCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhzZXNzaW9uQXV0aGVudGljYXRlKSwg
MCk7Cit9CisKK3N0YXRpYyB2b2lkIGRldGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqLCBTb3VwU2Vz
c2lvbiogc2Vzc2lvbikKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1
bmMoc2Vzc2lvbiwgKGdwb2ludGVyKXNlc3Npb25BdXRoZW50aWNhdGUsIDApOworfQorCitzdGF0
aWMgdm9pZCB3ZWJBdXRoRGlhbG9nU2Vzc2lvbkZlYXR1cmVJbml0KFNvdXBTZXNzaW9uRmVhdHVy
ZUludGVyZmFjZSAqZmVhdHVyZSwgZ3BvaW50ZXIpCit7CisgICAgZmVhdHVyZS0+YXR0YWNoID0g
YXR0YWNoOworICAgIGZlYXR1cmUtPmRldGFjaCA9IGRldGFjaDsKK30KKwogbmFtZXNwYWNlIFdl
YktpdCB7CiAKIFdLX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5HdGsoaW50IGFyZ2MsIGNoYXIq
IGFyZ3ZbXSkKQEAgLTYyLDYgKzEwOCwxMCBAQCBXS19FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWlu
R3RrKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAKICAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1
cmVfYnlfdHlwZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9ERUNPREVSKTsKIAorICAgIFNv
dXBTZXNzaW9uRmVhdHVyZSogYXV0aERpYWxvZyA9IHN0YXRpY19jYXN0PFNvdXBTZXNzaW9uRmVh
dHVyZSo+KGdfb2JqZWN0X25ldyh3ZWJfYXV0aF9kaWFsb2dfZ2V0X3R5cGUoKSwgTlVMTCkpOwor
ICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBhdXRoRGlhbG9nKTsKKyAgICBn
X29iamVjdF91bnJlZihhdXRoRGlhbG9nKTsKKwogICAgIGludCBzb2NrZXQgPSBhdG9pKGFyZ3Zb
MV0pOwogICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoc29ja2V0LCBSdW5Mb29w
OjptYWluKCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwo=
</data>
<flag name="review"
          id="90292"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="90334"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96947</attachid>
            <date>2011-06-13 05:17:30 -0700</date>
            <delta_ts>2011-06-13 09:25:33 -0700</delta_ts>
            <desc>Updated patch according to review</desc>
            <filename>wk2-auth-dialogs3.diff</filename>
            <type>text/plain</type>
            <size>42387</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDgzMmFjLi5iMTVkZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzAg
QEAKIDIwMTEtMDYtMTMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgYXV0aGVudGljYXRpb24gZGlhbG9ncyBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjM2NgorCisgICAgICAgIEFkZCBh
IG5ldyBjbGFzcyB0byBzaG93IGFuIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyB0aGF0IGlzIHVzZWQg
YnkKKyAgICAgICAgYm90aCBXZWJLaXQxIGFuZCBXZWJLaXQyLgorCisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbTogQWRkIG5ldyBmaWxlcyB0byBjb21waWxhdGlvbi4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmFkZEVudHJ5VG9UYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXNzaW9uQ2Fu
U2F2ZVBhc3N3b3Jkcyk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zzo6fkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhl
bnRpY2F0aW9uRGlhbG9nOjpHdGtBdXRoZW50aWNhdGlvbkRpYWxvZyk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRTYXZlZExvZ2luKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjpzaG93KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9n
OjpkZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpz
YXZlUGFzc3dvcmRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHdGtBdXRoZW50aWNhdGlv
bkRpYWxvZzo6c2F2ZVBhc3N3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6Okd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nOjphdXRoZW50aWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3RrQXV0aGVudGlj
YXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmg6IEFkZGVkLgorCisy
MDExLTA2LTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCiAKICAgICAgICAgW0dUS10gQWRk
IGNvbnRleHQgbWVudSBzdXBwb3J0IGZvciBXZWJraXQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggNTc0
MzMyZi4uYmUxYzZjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI5IEBACiAyMDExLTA2
LTEzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGF1
dGhlbnRpY2F0aW9uIGRpYWxvZ3MgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIzNjYKKworICAgICAgICBNb3ZlIHRoZSBjb21tb24g
Y29kZSBvZiB3ZWJraXRzb3VwYXV0aGRpYWxvZyB0byBhIGNvbW1vbiBDKysgY2xhc3MKKyAgICAg
ICAgaW4gV2ViQ29yZSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIGJ5IFdlYktpdDIgdG9vLiBUaGUg
ZmlsZSBoYXMKKyAgICAgICAgYmVlbiBjb252ZXJ0ZWQgaW50byBhIEMrKyBmaWxlLgorCisgICAg
ICAgICogR05VbWFrZWZpbGUuYW06IFJlbmFtZSB3ZWJraXRzb3VwYXV0aGRpYWxvZy5jIHRvCisg
ICAgICAgIHdlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
c291cGF1dGhkaWFsb2cuYzogUmVtb3ZlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c291cGF1
dGhkaWFsb2cuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX2Ns
YXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3NvdXBfYXV0aF9kaWFsb2dfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdCk6CisgICAg
ICAgIChzZXNzaW9uQXV0aGVudGljYXRlKTogVXNlIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nIG9i
amVjdCBmcm9tCisgICAgICAgIFdlYkNvcmUuCisgICAgICAgIChhdHRhY2gpOgorICAgICAgICAo
ZGV0YWNoKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaDoKKworMjAx
MS0wNi0xMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgogCiAgICAgICAgIFtHVEtdIEV4cG9y
dCBhbiBBUEkgc2ltaWxhciB0byBXZWJLaXQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODY3NTE4Yi4uZjYwOTYw
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI3IEBACiAyMDExLTA2LTEzICBDYXJsb3MgR2FyY2lh
IENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGF1dGhlbnRpY2F0aW9uIGRpYWxv
Z3MgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjIzNjYKKworICAgICAgICBBZGQgYSBuZXcgc291cCBmZWF0dXJlIHRvIHNob3cgYW4g
YXV0aGVudGljYXRpb24gZGlhbG9nIHdoZW4gaXQKKyAgICAgICAgZ2V0cyBhIDQwMSBIVFRQIHJl
c3BvbnNlLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmlsZXMgdG8gY29t
cGlsYXRpb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvV2ViQXV0aERpYWxvZy5jcHA6IEFk
ZGVkLgorICAgICAgICAod2ViX2F1dGhfZGlhbG9nX2NsYXNzX2luaXQpOgorICAgICAgICAod2Vi
X2F1dGhfZGlhbG9nX2luaXQpOgorICAgICAgICAoc2Vzc2lvbkF1dGhlbnRpY2F0ZSk6CisgICAg
ICAgIChhdHRhY2gpOgorICAgICAgICAoZGV0YWNoKToKKyAgICAgICAgKHdlYkF1dGhEaWFsb2dT
ZXNzaW9uRmVhdHVyZUluaXQpOgorICAgICAgICAqIFdlYlByb2Nlc3MvZ3RrL1dlYkF1dGhEaWFs
b2cuaDogQWRkZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9ndGsvV2ViUHJvY2Vzc01haW5HdGsu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpbkd0ayk6CisKKzIwMTEtMDYtMTMg
IENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFJl
dmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KIAogICAgICAgICBbR1RLXSBBZGQgY29udGV4dCBt
ZW51IHN1cHBvcnQgZm9yIFdlYmtpdDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4
IDljYzU1NmIuLjVlZDdmNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMzgw
MSw2ICszODAxLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvR093blB0ckd0ay5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R1JlZlB0ckd0ay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HUmVmUHRyR3Rr
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRpYWxv
Zy5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9HdGtBdXRoZW50aWNhdGlvbkRp
YWxvZy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUGx1Z2luV2lkZ2V0LmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a1BsdWdpbldpZGdldC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrUG9wdXBNZW51LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjk2ZTY2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlh
bG9nLmNwcApAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cuaCIKKworI2luY2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKKyNpbmNsdWRlIDxn
bGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNpbmNsdWRlIDxsaWJzb3Vw
L3NvdXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgR3RrV2lkZ2V0KiBhZGRF
bnRyeVRvVGFibGUoR3RrVGFibGUqIHRhYmxlLCBpbnQgcm93LCBjb25zdCBjaGFyKiBsYWJlbFRl
eHQpCit7CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxUZXh0KTsK
KyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGxhYmVsKSwgMC4wLCAwLjUpOwor
CisgICAgR3RrV2lkZ2V0KiBlbnRyeSA9IGd0a19lbnRyeV9uZXcoKTsKKyAgICBndGtfZW50cnlf
c2V0X2FjdGl2YXRlc19kZWZhdWx0KEdUS19FTlRSWShlbnRyeSksIFRSVUUpOworCisgICAgZ3Rr
X3RhYmxlX2F0dGFjaCh0YWJsZSwgbGFiZWwsIDAsIDEsIHJvdywgcm93ICsgMSwgR1RLX0ZJTEws
IHN0YXRpY19jYXN0PEd0a0F0dGFjaE9wdGlvbnM+KEdUS19FWFBBTkQgfCBHVEtfRklMTCksIDAs
IDApOworICAgIGd0a190YWJsZV9hdHRhY2hfZGVmYXVsdHModGFibGUsIGVudHJ5LCAxLCAyLCBy
b3csIHJvdyArIDEpOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgYm9vbCBzZXNz
aW9uQ2FuU2F2ZVBhc3N3b3JkcyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKK3sKKyNpZmRlZiBTT1VQ
X1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0X2ZlYXR1
cmUoc2Vzc2lvbiwgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIpOworI2Vsc2UKKyAgICByZXR1
cm4gZmFsc2U7CisjZW5kaWYKK30KKworR3RrQXV0aGVudGljYXRpb25EaWFsb2c6On5HdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZygpCit7Cit9CisKK0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyhHdGtXaW5kb3cqIHBhcmVudFdpbmRvdywgU291cFNlc3Npb24q
IHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCkKKyAgICA6IG1f
ZGlhbG9nKGd0a19kaWFsb2dfbmV3KCkpCisgICAgLCBtX3Nlc3Npb24oc2Vzc2lvbikKKyAgICAs
IG1fbWVzc2FnZShtZXNzYWdlKQorICAgICwgbV9hdXRoKGF1dGgpCisgICAgLCBtX2xvZ2luRW50
cnkoMCkKKyAgICAsIG1fcGFzc3dvcmRFbnRyeSgwKQorICAgICwgbV9yZW1lbWJlckNoZWNrQnV0
dG9uKDApCisjaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKKyAgICAsIG1faXNTYXZp
bmdQYXNzd29yZChmYWxzZSkKKyAgICAsIG1fc2F2ZVBhc3N3b3JkSGFuZGxlcigwKQorI2VuZGlm
Cit7CisgICAgR3RrRGlhbG9nKiBkaWFsb2cgPSBHVEtfRElBTE9HKG1fZGlhbG9nKTsKKyAgICBn
dGtfZGlhbG9nX2FkZF9idXR0b25zKGRpYWxvZywgR1RLX1NUT0NLX0NBTkNFTCwgR1RLX1JFU1BP
TlNFX0NBTkNFTCwgR1RLX1NUT0NLX09LLCBHVEtfUkVTUE9OU0VfT0ssIE5VTEwpOworCisgICAg
Ly8gU2V0IHRoZSBkaWFsb2cgdXAgd2l0aCBISUcgcHJvcGVydGllcy4KKyAgICBndGtfY29udGFp
bmVyX3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihkaWFsb2cpLCA1KTsKKyAgICBndGtf
Ym94X3NldF9zcGFjaW5nKEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxv
ZykpLCAyKTsgLyogMiAqIDUgKyAyID0gMTIgKi8KKyAgICBndGtfY29udGFpbmVyX3NldF9ib3Jk
ZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihndGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cp
KSwgNSk7CisgICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2Fj
dGlvbl9hcmVhKGRpYWxvZykpLCA2KTsKKworICAgIEd0a1dpbmRvdyogd2luZG93ID0gR1RLX1dJ
TkRPVyhtX2RpYWxvZyk7CisgICAgZ3RrX3dpbmRvd19zZXRfcmVzaXphYmxlKHdpbmRvdywgRkFM
U0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKHdpbmRvdywgIiIpOworICAgIGd0a193aW5k
b3dfc2V0X2ljb25fbmFtZSh3aW5kb3csIEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElDQVRJT04p
OworCisgICAgZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShkaWFsb2csIEdUS19SRVNQ
T05TRV9PSyk7CisKKyAgICBpZiAocGFyZW50V2luZG93KQorICAgICAgICBndGtfd2luZG93X3Nl
dF90cmFuc2llbnRfZm9yKHdpbmRvdywgcGFyZW50V2luZG93KTsKKworICAgIC8vIEJ1aWxkIGNv
bnRlbnRzLgorICAgIEd0a1dpZGdldCogaEJveCA9IGd0a19oYm94X25ldyhGQUxTRSwgMTIpOwor
ICAgIGd0a19jb250YWluZXJfc2V0X2JvcmRlcl93aWR0aChHVEtfQ09OVEFJTkVSKGhCb3gpLCA1
KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChndGtfZGlhbG9nX2dldF9jb250ZW50
X2FyZWEoZGlhbG9nKSksIGhCb3gsIFRSVUUsIFRSVUUsIDApOworCisgICAgR3RrV2lkZ2V0KiBp
Y29uID0gZ3RrX2ltYWdlX25ld19mcm9tX3N0b2NrKEdUS19TVE9DS19ESUFMT0dfQVVUSEVOVElD
QVRJT04sIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKKyAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50
KEdUS19NSVNDKGljb24pLCAwLjUsIDAuMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19C
T1goaEJveCksIGljb24sIEZBTFNFLCBGQUxTRSwgMCk7CisKKyAgICBHdGtXaWRnZXQqIG1haW5W
Qm94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAxOCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goaEJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKKworICAgIFNvdXBVUkkqIHVy
aSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKG1fbWVzc2FnZS5nZXQoKSk7CisgICAgR093blB0cjxj
aGFyPmRlc2NyaXB0aW9uKGdfc3RyZHVwX3ByaW50ZihfKCJBIHVzZXJuYW1lIGFuZCBwYXNzd29y
ZCBhcmUgYmVpbmcgcmVxdWVzdGVkIGJ5IHRoZSBzaXRlICVzIiksIHVyaS0+aG9zdCkpOworICAg
IEd0a1dpZGdldCogZGVzY3JpcHRpb25MYWJlbCA9IGd0a19sYWJlbF9uZXcoZGVzY3JpcHRpb24u
Z2V0KCkpOworICAgIGd0a19taXNjX3NldF9hbGlnbm1lbnQoR1RLX01JU0MoZGVzY3JpcHRpb25M
YWJlbCksIDAuMCwgMC41KTsKKyAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwo
ZGVzY3JpcHRpb25MYWJlbCksIFRSVUUpOworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KG1haW5WQm94KSwgR1RLX1dJREdFVChkZXNjcmlwdGlvbkxhYmVsKSwgRkFMU0UsIEZBTFNFLCAw
KTsKKworICAgIEd0a1dpZGdldCogdkJveCA9IGd0a192Ym94X25ldyhGQUxTRSwgNik7CisgICAg
Z3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1gobWFpblZCb3gpLCB2Qm94LCBGQUxTRSwgRkFMU0Us
IDApOworCisgICAgLy8gVGhlIHRhYmxlIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCisgICAgR3Rr
V2lkZ2V0KiBlbnRyeUNvbnRhaW5lciA9IGd0a19hbGlnbm1lbnRfbmV3KDAuMCwgMC4wLCAxLjAs
IDEuMCk7CisgICAgZ3RrX2FsaWdubWVudF9zZXRfcGFkZGluZyhHVEtfQUxJR05NRU5UKGVudHJ5
Q29udGFpbmVyKSwgMCwgMCwgMCwgMCk7CisgICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdUS19CT1go
dkJveCksIGVudHJ5Q29udGFpbmVyLCBGQUxTRSwgRkFMU0UsIDApOworCisgICAgY29uc3QgY2hh
ciogcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKG1fYXV0aCk7CisgICAgLy8gQ2hlY2tpbmcg
dGhhdCByZWFsbSBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgorICAgIGJvb2wgaGFzUmVhbG0gPSAo
cmVhbG0gJiYgcmVhbG1bMF0gIT0gJ1wwJyk7CisKKyAgICBHdGtXaWRnZXQqIHRhYmxlID0gZ3Rr
X3RhYmxlX25ldyhoYXNSZWFsbSA/IDMgOiAyLCAyLCBGQUxTRSk7CisgICAgZ3RrX3RhYmxlX3Nl
dF9jb2xfc3BhY2luZ3MoR1RLX1RBQkxFKHRhYmxlKSwgMTIpOworICAgIGd0a190YWJsZV9zZXRf
cm93X3NwYWNpbmdzKEdUS19UQUJMRSh0YWJsZSksIDYpOworICAgIGd0a19jb250YWluZXJfYWRk
KEdUS19DT05UQUlORVIoZW50cnlDb250YWluZXIpLCB0YWJsZSk7CisKKyAgICBpZiAoaGFzUmVh
bG0pIHsKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbCA9
IGd0a19sYWJlbF9uZXcoXygiU2VydmVyIG1lc3NhZ2U6IikpOworICAgICAgICBndGtfbWlzY19z
ZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsKSwgMC4w
LCAwLjUpOworICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChHVEtfTEFCRUwoc2VydmVy
TWVzc2FnZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKKyAgICAgICAgZ3RrX3RhYmxlX2F0dGFj
aF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJl
bCwgMCwgMSwgMCwgMSk7CisKKyAgICAgICAgR3RrV2lkZ2V0KiBzZXJ2ZXJNZXNzYWdlTGFiZWwg
PSBndGtfbGFiZWxfbmV3KHJlYWxtKTsKKyAgICAgICAgZ3RrX21pc2Nfc2V0X2FsaWdubWVudChH
VEtfTUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAwLjAsIDAuNSk7CisgICAgICAgIGd0a19sYWJl
bF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2ZXJNZXNzYWdlTGFiZWwpLCBUUlVFKTsKKyAg
ICAgICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFCTEUodGFibGUpLCBzZXJ2ZXJN
ZXNzYWdlTGFiZWwsIDEsIDIsIDAsIDEpOworICAgIH0KKworICAgIG1fbG9naW5FbnRyeSA9IGFk
ZEVudHJ5VG9UYWJsZShHVEtfVEFCTEUodGFibGUpLCBoYXNSZWFsbSA/IDEgOiAwLCBfKCJVc2Vy
bmFtZToiKSk7CisgICAgbV9wYXNzd29yZEVudHJ5ID0gYWRkRW50cnlUb1RhYmxlKEdUS19UQUJM
RSh0YWJsZSksIGhhc1JlYWxtID8gMiA6IDEsIF8oIlBhc3N3b3JkOiIpKTsKKyAgICBndGtfZW50
cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKG1fcGFzc3dvcmRFbnRyeSksIEZBTFNFKTsKKwor
ICAgIGlmIChzZXNzaW9uQ2FuU2F2ZVBhc3N3b3JkcyhtX3Nlc3Npb24pKSB7CisgICAgICAgIEd0
a1dpZGdldCogcmVtZW1iZXJCb3ggPSBndGtfdmJveF9uZXcoRkFMU0UsIDYpOworICAgICAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWCh2Qm94KSwgcmVtZW1iZXJCb3gsIEZBTFNFLCBGQUxT
RSwgMCk7CisKKyAgICAgICAgbV9yZW1lbWJlckNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRv
bl9uZXdfd2l0aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7CisgICAgICAgIGd0
a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChndGtfYmluX2dldF9jaGlsZChHVEtfQklO
KG1fcmVtZW1iZXJDaGVja0J1dHRvbikpKSwgVFJVRSk7CisgICAgICAgIGd0a19ib3hfcGFja19z
dGFydChHVEtfQk9YKHJlbWVtYmVyQm94KSwgbV9yZW1lbWJlckNoZWNrQnV0dG9uLCBGQUxTRSwg
RkFMU0UsIDApOworICAgIH0KK30KKworc3RhdGljIGJvb2wgZ2V0U2F2ZWRMb2dpbihTb3VwQXV0
aCogYXV0aCwgY29uc3QgY2hhcioqIHVzZXJuYW1lLCBjb25zdCBjaGFyKiogcGFzc3dvcmQpCit7
CisjaWZkZWYgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKKyAgICBHU0xpc3QqIHVzZXJzID0g
c291cF9hdXRoX2dldF9zYXZlZF91c2VycyhhdXRoKTsKKyAgICBpZiAoIXVzZXJzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAqdXNlcm5hbWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4odXNl
cnMtPmRhdGEpOworICAgICpwYXNzd29yZCA9IHNvdXBfYXV0aF9nZXRfc2F2ZWRfcGFzc3dvcmQo
YXV0aCwgKnVzZXJuYW1lKTsKKyAgICBnX3NsaXN0X2ZyZWUodXNlcnMpOworCisgICAgcmV0dXJu
ICp1c2VybmFtZSAmJiAqcGFzc3dvcmQ7CisjZWxzZQorICAgIHJldHVybiBmYWxzZTsKKyNlbmRp
ZgorfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzaG93KCkKK3sKKyAgICBjb25z
dCBjaGFyKiB1c2VybmFtZSA9IDA7CisgICAgY29uc3QgY2hhciogcGFzc3dvcmQgPSAwOworICAg
IGJvb2wgaGF2ZVNhdmVkTG9naW4gPSBnZXRTYXZlZExvZ2luKG1fYXV0aCwgJnVzZXJuYW1lLCAm
cGFzc3dvcmQpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKG1fc2Vzc2lvbiwgbV9t
ZXNzYWdlLmdldCgpKTsKKyAgICBndGtfZW50cnlfc2V0X3RleHQoR1RLX0VOVFJZKG1fbG9naW5F
bnRyeSksIHVzZXJuYW1lID8gdXNlcm5hbWUgOiAiIik7CisgICAgZ3RrX2VudHJ5X3NldF90ZXh0
KEdUS19FTlRSWShtX3Bhc3N3b3JkRW50cnkpLCBwYXNzd29yZCA/IHBhc3N3b3JkIDogIiIpOwor
ICAgIGlmIChtX3JlbWVtYmVyQ2hlY2tCdXR0b24gJiYgaGF2ZVNhdmVkTG9naW4pCisgICAgICAg
IGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUoR1RLX1RPR0dMRV9CVVRUT04obV9yZW1lbWJl
ckNoZWNrQnV0dG9uKSwgVFJVRSk7CisgICAgZ19zaWduYWxfY29ubmVjdChtX2RpYWxvZywgInJl
c3BvbnNlIiwgR19DQUxMQkFDSyhhdXRoZW50aWNhdGlvbkRpYWxvZ1Jlc3BvbnNlQ2FsbGJhY2sp
LCB0aGlzKTsKKyAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKG1fZGlhbG9nKTsKK30KKwordm9pZCBH
dGtBdXRoZW50aWNhdGlvbkRpYWxvZzo6ZGVzdHJveSgpCit7CisgICAgYm9vbCBzaG91bGREZWxl
dGUgPSB0cnVlOworCisgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShtX3Nlc3Npb24s
IG1fbWVzc2FnZS5nZXQoKSk7CisgICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZGlhbG9nKTsKKwor
I2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCisgICAgc2hvdWxkRGVsZXRlID0gIW1f
aXNTYXZpbmdQYXNzd29yZDsKKyNlbmRpZgorCisgICAgLy8gRG8gbm90IGRlbGV0ZSB0aGUgb2Jq
ZWN0IGlmIGl0J3Mgc3RpbGwgc2F2aW5nIHRoZSBwYXNzd29yZCwKKyAgICAvLyB0aGUgc2F2ZSBw
YXNzd29yZCBjYWxsYmFjayB3aWxsIGRlbGV0ZSBpdC4KKyAgICBpZiAoc2hvdWxkRGVsZXRlKQor
ICAgICAgICBkZWxldGUgdGhpczsKK30KKworI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5B
R0VSCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjpzYXZlUGFzc3dvcmRDYWxsYmFjayhT
b3VwTWVzc2FnZSogbWVzc2FnZSwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykKK3sK
KyAgICBkaWFsb2ctPnNhdmVQYXNzd29yZCgpOworfQorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9u
RGlhbG9nOjpzYXZlUGFzc3dvcmQoKQoreworICAgIEFTU0VSVCghbV91c2VybmFtZS5pc051bGwo
KSk7CisgICAgQVNTRVJUKCFtX3Bhc3N3b3JkLmlzTnVsbCgpKTsKKworICAgIC8vIEFueXRoaW5n
IGJ1dCA0MDEgYW5kIDV4eCBtZWFucyB0aGUgcGFzc3dvcmQgd2FzIGFjY2VwdGVkLgorICAgIGlm
IChtX21lc3NhZ2UuZ2V0KCktPnN0YXR1c19jb2RlICE9IDQwMSAmJiBtX21lc3NhZ2UuZ2V0KCkt
PnN0YXR1c19jb2RlIDwgNTAwKQorICAgICAgICBzb3VwX2F1dGhfc2F2ZV9wYXNzd29yZChtX2F1
dGgsIG1fdXNlcm5hbWUuZGF0YSgpLCBtX3Bhc3N3b3JkLmRhdGEoKSk7CisKKyAgICAvLyBEaXNj
b25uZWN0IHRoZSBjYWxsYmFjay4gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCB3ZSBh
cmUgZG9uZSwKKyAgICAvLyBhbmQgaWYgaXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5ldyBHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZyBhbmQgd2UnbGwKKyAgICAvLyBjb25uZWN0IHRvICdnb3QtaGVh
ZGVycycgYWdhaW4gaW4gR3RrQXV0aGVudGljYXRpb25EaWFsb2c6OmF1dGhlbnRpY2F0ZSgpCisg
ICAgZ19zaWduYWxfaGFuZGxlcl9kaXNjb25uZWN0KG1fbWVzc2FnZS5nZXQoKSwgbV9zYXZlUGFz
c3dvcmRIYW5kbGVyKTsKKworICAgIC8vIERpYWxvZyBoYXMgYmVlbiBhbHJlYWR5IGRlc3Ryb3ll
ZCwgYWZ0ZXIgc2F2aW5nIHRoZSBwYXNzd29yZCBpdCBzaG91bGQgYmUgZGVsZXRlZC4KKyAgICBk
ZWxldGUgdGhpczsKK30KKyNlbmRpZgorCit2b2lkIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nOjph
dXRoZW50aWNhdGUoKQoreworICAgIGNvbnN0IGNoYXIgKnVzZXJuYW1lID0gZ3RrX2VudHJ5X2dl
dF90ZXh0KEdUS19FTlRSWShtX2xvZ2luRW50cnkpKTsKKyAgICBjb25zdCBjaGFyICpwYXNzd29y
ZCA9IGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkobV9wYXNzd29yZEVudHJ5KSk7CisgICAg
c291cF9hdXRoX2F1dGhlbnRpY2F0ZShtX2F1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisKKyNp
ZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgorICAgIGlmIChtX3JlbWVtYmVyQ2hlY2tC
dXR0b24gJiYgZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTiht
X3JlbWVtYmVyQ2hlY2tCdXR0b24pKSkgeworICAgICAgICBtX3VzZXJuYW1lID0gdXNlcm5hbWU7
CisgICAgICAgIG1fcGFzc3dvcmQgPSBwYXNzd29yZDsKKyAgICAgICAgbV9pc1NhdmluZ1Bhc3N3
b3JkID0gdHJ1ZTsKKyAgICAgICAgbV9zYXZlUGFzc3dvcmRIYW5kbGVyID0gZ19zaWduYWxfY29u
bmVjdChtX21lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soc2F2ZVBhc3N3
b3JkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZzo6YXV0aGVudGljYXRpb25EaWFsb2dSZXNwb25zZUNhbGxiYWNrKEd0a1dp
ZGdldCosIGdpbnQgcmVzcG9uc2VJRCwgR3RrQXV0aGVudGljYXRpb25EaWFsb2cqIGRpYWxvZykK
K3sKKyAgICBpZiAocmVzcG9uc2VJRCA9PSBHVEtfUkVTUE9OU0VfT0spCisgICAgICAgIGRpYWxv
Zy0+YXV0aGVudGljYXRlKCk7CisKKyAgICBkaWFsb2ctPmRlc3Ryb3koKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
R3RrQXV0aGVudGljYXRpb25EaWFsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5hMDY4MGUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0d0a0F1dGhlbnRpY2F0aW9uRGlhbG9nLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSwgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIEd0a0F1dGhlbnRpY2F0
aW9uRGlhbG9nX2gKKyNkZWZpbmUgR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaAorCisjZGVmaW5l
IExJQlNPVVBfSV9IQVZFX1JFQURfQlVHXzU5NDM3N19BTkRfS05PV19TT1VQX1BBU1NXT1JEX01B
TkFHRVJfTUlHSFRfR09fQVdBWQorCisjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdS
ZWZQdHJHdGsuaCIKKyNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KKyNpbmNsdWRlIDx3dGYvRmFz
dEFsbG9jQmFzZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHdGtBdXRo
ZW50aWNhdGlvbkRpYWxvZyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3RrQXV0aGVudGlj
YXRpb25EaWFsb2cpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6Cisg
ICAgR3RrQXV0aGVudGljYXRpb25EaWFsb2coR3RrV2luZG93KiwgU291cFNlc3Npb24qLCBTb3Vw
TWVzc2FnZSosIFNvdXBBdXRoKik7CisgICAgfkd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKCk7CisK
KyAgICB2b2lkIHNob3coKTsKKworcHJpdmF0ZToKKyAgICBHdGtBdXRoZW50aWNhdGlvbkRpYWxv
ZygpOworCisgICAgdm9pZCBkZXN0cm95KCk7CisgICAgdm9pZCBhdXRoZW50aWNhdGUoKTsKKwor
I2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5BR0VSCisgICAgdm9pZCBzYXZlUGFzc3dvcmQo
KTsKKyAgICBzdGF0aWMgdm9pZCBzYXZlUGFzc3dvcmRDYWxsYmFjayhTb3VwTWVzc2FnZSosIEd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkIGF1dGhl
bnRpY2F0aW9uRGlhbG9nUmVzcG9uc2VDYWxsYmFjayhHdGtXaWRnZXQqLCBnaW50IHJlc3BvbnNl
SUQsIEd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKik7CisKKyAgICBHdGtXaWRnZXQqIG1fZGlhbG9n
OworICAgIFNvdXBTZXNzaW9uKiBtX3Nlc3Npb247CisgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4g
bV9tZXNzYWdlOworICAgIFNvdXBBdXRoKiBtX2F1dGg7CisKKyAgICBHdGtXaWRnZXQqIG1fbG9n
aW5FbnRyeTsKKyAgICBHdGtXaWRnZXQqIG1fcGFzc3dvcmRFbnRyeTsKKyAgICBHdGtXaWRnZXQq
IG1fcmVtZW1iZXJDaGVja0J1dHRvbjsKKworI2lmZGVmIFNPVVBfVFlQRV9QQVNTV09SRF9NQU5B
R0VSCisgICAgYm9vbCBtX2lzU2F2aW5nUGFzc3dvcmQ7CisgICAgdW5zaWduZWQgbG9uZyBtX3Nh
dmVQYXNzd29yZEhhbmRsZXI7CisgICAgQ1N0cmluZyBtX3VzZXJuYW1lOworICAgIENTdHJpbmcg
bV9wYXNzd29yZDsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gR3RrQXV0aGVudGljYXRpb25EaWFsb2dfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9ndGsvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpp
bmRleCBlZTk3ZTZkLi5kMDllNmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVt
YWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMjE2
LDcgKzIxNiw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlcHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW5wcml2YXRlLmggXAotCVNvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKKwlTb3VyY2UvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c291cGF1dGhkaWFsb2cuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c3BlbGxjaGVja2VyLmNwcCBcCiAJU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHNwZWxsY2hlY2tlcmVuY2hhbnQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c3BlbGxjaGVja2VyZW5jaGFudC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIGIvU291cmNlL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0
MDdlNmEuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwOSBJZ2FsaWEgUy5MLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNkZWZpbmUg
TElCU09VUF9JX0hBVkVfUkVBRF9CVUdfNTk0Mzc3X0FORF9LTk9XX1NPVVBfUEFTU1dPUkRfTUFO
QUdFUl9NSUdIVF9HT19BV0FZCi0KLSNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgotI2luY2x1
ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KLQotI2luY2x1ZGUgIkd0
a1ZlcnNpb25pbmcuaCIKLSNpbmNsdWRlICJ3ZWJraXRtYXJzaGFsLmgiCi0jaW5jbHVkZSAid2Vi
a2l0c291cGF1dGhkaWFsb2cuaCIKLQotLyoqCi0gKiBTRUNUSU9OOndlYmtpdHNvdXBhdXRoZGlh
bG9nCi0gKiBAc2hvcnRfZGVzY3JpcHRpb246IEEgI1NvdXBTZXNzaW9uRmVhdHVyZSB0byBwcm92
aWRlIGEgc2ltcGxlCi0gKiBhdXRoZW50aWNhdGlvbiBkaWFsb2cgZm9yIEhUVFAgYmFzaWMgYXV0
aCBzdXBwb3J0LgotICoKLSAqICNXZWJLaXRTb3VwQXV0aERpYWxvZyBpcyBhICNTb3VwU2Vzc2lv
bkZlYXR1cmUgdGhhdCB5b3UgY2FuIGF0dGFjaCB0byB5b3VyCi0gKiAjU291cFNlc3Npb24gdG8g
cHJvdmlkZSBhIHNpbXBsZSBhdXRoZW50aWNhdGlvbiBkaWFsb2cgd2hpbGUKLSAqIGhhbmRsaW5n
IEhUVFAgYmFzaWMgYXV0aC4gSXQgaXMgYnVpbHQgYXMgYSBzaW1wbGUgQy1vbmx5IG1vZHVsZQot
ICogdG8gZWFzZSByZXVzZS4KLSAqLwotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9hdXRoX2Rp
YWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqIGZl
YXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2VfZGF0YSk7Ci1zdGF0aWMgdm9pZCBh
dHRhY2goU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbik7
Ci1zdGF0aWMgdm9pZCBkZXRhY2goU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vz
c2lvbiogc2Vzc2lvbik7Ci0KLWVudW0gewotICAgIENVUlJFTlRfVE9QTEVWRUwsCi0gICAgTEFT
VF9TSUdOQUwKLX07Ci0KLXN0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCB9
OwotCi1HX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRTb3VwQXV0aERpYWxvZywgd2Via2l0
X3NvdXBfYXV0aF9kaWFsb2csIEdfVFlQRV9PQkpFQ1QsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoU09VUF9UWVBFX1NFU1NJT05fRkVBVFVSRSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfc291cF9hdXRo
X2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdCkpCi0KLXN0YXRpYyB2b2lkIHdlYmtpdF9zb3Vw
X2F1dGhfZGlhbG9nX2NsYXNzX2luaXQoV2ViS2l0U291cEF1dGhEaWFsb2dDbGFzcyoga2xhc3Mp
Ci17Ci0gICAgR09iamVjdENsYXNzKiBvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFz
cyk7Ci0KLSAgICAvKioKLSAgICAgKiBXZWJLaXRTb3VwQXV0aERpYWxvZzo6Y3VycmVudC10b3Bs
ZXZlbDoKLSAgICAgKiBAYXV0aERpYWxvZzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFs
IGlzIGVtaXR0ZWQKLSAgICAgKiBAbWVzc2FnZTogdGhlICNTb3VwTWVzc2FnZSBiZWluZyB1c2Vk
IGluIHRoZSBhdXRoZW50aWNhdGlvbiBwcm9jZXNzCi0gICAgICoKLSAgICAgKiBUaGlzIHNpZ25h
bCBpcyBlbWl0dGVkIGJ5IHRoZSBAYXV0aERpYWxvZyB3aGVuIGl0IG5lZWRzIHRvIGtub3cKLSAg
ICAgKiB0aGUgY3VycmVudCB0b3BsZXZlbCB3aWRnZXQgaW4gb3JkZXIgdG8gY29ycmVjdGx5IHNl
dCB0aGUKLSAgICAgKiB0cmFuc2llbmN5IGZvciB0aGUgYXV0aGVudGljYXRpb24gZGlhbG9nLgot
ICAgICAqCi0gICAgICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSBjdXJyZW50
IHRvcGxldmVsICNHdGtXaWRnZXQgb3IgJU5VTEwgaWYgdGhlcmUncyBub25lCi0gICAgICoKLSAg
ICAgKiBTaW5jZTogMS4xLjEKLSAgICAgKi8KLSAgICBzaWduYWxzW0NVUlJFTlRfVE9QTEVWRUxd
ID0KLSAgICAgIGdfc2lnbmFsX25ldygiY3VycmVudC10b3BsZXZlbCIsCi0gICAgICAgICAgICAg
ICAgICAgR19PQkpFQ1RfQ0xBU1NfVFlQRShvYmplY3RfY2xhc3MpLAotICAgICAgICAgICAgICAg
ICAgIEdfU0lHTkFMX1JVTl9MQVNULAotICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNF
VChXZWJLaXRTb3VwQXV0aERpYWxvZ0NsYXNzLCBjdXJyZW50X3RvcGxldmVsKSwKLSAgICAgICAg
ICAgICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X09CSkVDVF9fT0JKRUNULAotICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1dJREdFVCwgMSwK
LSAgICAgICAgICAgICAgICAgICBTT1VQX1RZUEVfTUVTU0FHRSk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9nX2luaXQoV2ViS2l0U291cEF1dGhEaWFsb2cqIGluc3Rh
bmNlKQotewotfQotCi1zdGF0aWMgdm9pZCB3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19zZXNzaW9u
X2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UgKmZlYXR1cmVfaW50ZXJm
YWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ3BvaW50ZXIgaW50ZXJmYWNlX2RhdGEpCi17Ci0gICAgZmVhdHVyZV9pbnRlcmZhY2Ut
PmF0dGFjaCA9IGF0dGFjaDsKLSAgICBmZWF0dXJlX2ludGVyZmFjZS0+ZGV0YWNoID0gZGV0YWNo
OwotfQotCi10eXBlZGVmIHN0cnVjdCBfV2ViS2l0QXV0aERhdGEgewotICAgIFNvdXBNZXNzYWdl
KiBtc2c7Ci0gICAgU291cEF1dGgqIGF1dGg7Ci0gICAgU291cFNlc3Npb24qIHNlc3Npb247Ci0g
ICAgU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyOwotICAgIEd0a1dpZGdldCogbG9naW5FbnRy
eTsKLSAgICBHdGtXaWRnZXQqIHBhc3N3b3JkRW50cnk7Ci0gICAgR3RrV2lkZ2V0KiBjaGVja0J1
dHRvbjsKLSAgICBjaGFyICp1c2VybmFtZTsKLSAgICBjaGFyICpwYXNzd29yZDsKLX0gV2ViS2l0
QXV0aERhdGE7Ci0KLXN0YXRpYyB2b2lkIGZyZWVfYXV0aERhdGEoV2ViS2l0QXV0aERhdGEqIGF1
dGhEYXRhKQotewotICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5tc2cpOwotICAgIGdfZnJl
ZShhdXRoRGF0YS0+dXNlcm5hbWUpOwotICAgIGdfZnJlZShhdXRoRGF0YS0+cGFzc3dvcmQpOwot
ICAgIGdfc2xpY2VfZnJlZShXZWJLaXRBdXRoRGF0YSwgYXV0aERhdGEpOwotfQotCi0jaWZkZWYg
U09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIKLXN0YXRpYyB2b2lkIHNhdmVfcGFzc3dvcmRfY2Fs
bGJhY2soU291cE1lc3NhZ2UqIG1zZywgV2ViS2l0QXV0aERhdGEqIGF1dGhEYXRhKQotewotICAg
IC8qIEFueXRoaW5nIGJ1dCA0MDEgYW5kIDV4eCBtZWFucyB0aGUgcGFzc3dvcmQgd2FzIGFjY2Vw
dGVkICovCi0gICAgaWYgKG1zZy0+c3RhdHVzX2NvZGUgIT0gNDAxICYmIG1zZy0+c3RhdHVzX2Nv
ZGUgPCA1MDApCi0gICAgICAgIHNvdXBfYXV0aF9zYXZlX3Bhc3N3b3JkKGF1dGhEYXRhLT5hdXRo
LCBhdXRoRGF0YS0+dXNlcm5hbWUsIGF1dGhEYXRhLT5wYXNzd29yZCk7Ci0KLSAgICAvKiBEaXNj
b25uZWN0IHRoZSBjYWxsYmFjay4gSWYgdGhlIGF1dGhlbnRpY2F0aW9uIHN1Y2NlZWRlZCB3ZSBh
cmUKLSAgICAgKiBkb25lLCBhbmQgaWYgaXQgZmFpbGVkIHdlJ2xsIGNyZWF0ZSBhIG5ldyBhdXRo
RGF0YSBhbmQgd2UnbGwKLSAgICAgKiBjb25uZWN0IHRvICdnb3QtaGVhZGVycycgYWdhaW4gaW4g
cmVzcG9uc2VfY2FsbGJhY2sgKi8KLSAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2Z1bmMobXNnLCBzYXZlX3Bhc3N3b3JkX2NhbGxiYWNrLCBhdXRoRGF0YSk7Ci0KLSAgICBmcmVl
X2F1dGhEYXRhKGF1dGhEYXRhKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCByZXNwb25zZV9j
YWxsYmFjayhHdGtEaWFsb2cqIGRpYWxvZywgZ2ludCByZXNwb25zZV9pZCwgV2ViS2l0QXV0aERh
dGEqIGF1dGhEYXRhKQotewotICAgIGdib29sZWFuIGZyZWVBdXRoRGF0YSA9IFRSVUU7Ci0KLSAg
ICBpZiAocmVzcG9uc2VfaWQgPT0gR1RLX1JFU1BPTlNFX09LKSB7Ci0gICAgICAgIGF1dGhEYXRh
LT51c2VybmFtZSA9IGdfc3RyZHVwKGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoYXV0aERh
dGEtPmxvZ2luRW50cnkpKSk7Ci0gICAgICAgIGF1dGhEYXRhLT5wYXNzd29yZCA9IGdfc3RyZHVw
KGd0a19lbnRyeV9nZXRfdGV4dChHVEtfRU5UUlkoYXV0aERhdGEtPnBhc3N3b3JkRW50cnkpKSk7
Ci0KLSAgICAgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShhdXRoRGF0YS0+YXV0aCwgYXV0aERh
dGEtPnVzZXJuYW1lLCBhdXRoRGF0YS0+cGFzc3dvcmQpOwotCi0jaWZkZWYgU09VUF9UWVBFX1BB
U1NXT1JEX01BTkFHRVIKLSAgICAgICAgaWYgKGF1dGhEYXRhLT5jaGVja0J1dHRvbiAmJgotICAg
ICAgICAgICAgZ3RrX3RvZ2dsZV9idXR0b25fZ2V0X2FjdGl2ZShHVEtfVE9HR0xFX0JVVFRPTihh
dXRoRGF0YS0+Y2hlY2tCdXR0b24pKSkgewotICAgICAgICAgICAgZ19zaWduYWxfY29ubmVjdChh
dXRoRGF0YS0+bXNnLCAiZ290LWhlYWRlcnMiLCBHX0NBTExCQUNLKHNhdmVfcGFzc3dvcmRfY2Fs
bGJhY2spLCBhdXRoRGF0YSk7Ci0gICAgICAgICAgICBmcmVlQXV0aERhdGEgPSBGQUxTRTsKLSAg
ICAgICAgfQotI2VuZGlmCi0gICAgfQotCi0gICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2Fn
ZShhdXRoRGF0YS0+c2Vzc2lvbiwgYXV0aERhdGEtPm1zZyk7Ci0gICAgaWYgKGZyZWVBdXRoRGF0
YSkKLSAgICAgICAgZnJlZV9hdXRoRGF0YShhdXRoRGF0YSk7Ci0gICAgZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQoZGlhbG9nKSk7Ci19Ci0KLXN0YXRpYyBHdGtXaWRnZXQgKgotdGFibGVf
YWRkX2VudHJ5KEd0a1dpZGdldCogIHRhYmxlLAotICAgICAgICAgICAgICAgIGludCAgICAgICAg
IHJvdywKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBsYWJlbF90ZXh0LAotICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlLAotICAgICAgICAgICAgICAgIGdwb2ludGVyICAgIHVz
ZXJfZGF0YSkKLXsKLSAgICBHdGtXaWRnZXQqIGVudHJ5OwotICAgIEd0a1dpZGdldCogbGFiZWw7
Ci0KLSAgICBsYWJlbCA9IGd0a19sYWJlbF9uZXcobGFiZWxfdGV4dCk7Ci0gICAgZ3RrX21pc2Nf
c2V0X2FsaWdubWVudChHVEtfTUlTQyhsYWJlbCksIDAuMCwgMC41KTsKLQotICAgIGVudHJ5ID0g
Z3RrX2VudHJ5X25ldygpOwotICAgIGd0a19lbnRyeV9zZXRfYWN0aXZhdGVzX2RlZmF1bHQoR1RL
X0VOVFJZKGVudHJ5KSwgVFJVRSk7Ci0KLSAgICBpZiAodmFsdWUpCi0gICAgICAgIGd0a19lbnRy
eV9zZXRfdGV4dChHVEtfRU5UUlkoZW50cnkpLCB2YWx1ZSk7Ci0KLSAgICBndGtfdGFibGVfYXR0
YWNoKEdUS19UQUJMRSh0YWJsZSksIGxhYmVsLAotICAgICAgICAgICAgICAgICAgICAgMCwgMSwg
cm93LCByb3cgKyAxLAotICAgICAgICAgICAgICAgICAgICAgR1RLX0ZJTEwsIEdUS19FWFBBTkQg
fCBHVEtfRklMTCwgMCwgMCk7Ci0gICAgZ3RrX3RhYmxlX2F0dGFjaF9kZWZhdWx0cyhHVEtfVEFC
TEUodGFibGUpLCBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDIsIHJv
dywgcm93ICsgMSk7Ci0KLSAgICByZXR1cm4gZW50cnk7Ci19Ci0KLXN0YXRpYyBnYm9vbGVhbiBz
ZXNzaW9uX2Nhbl9zYXZlX3Bhc3N3b3JkcyhTb3VwU2Vzc2lvbiogc2Vzc2lvbikKLXsKLSNpZmRl
ZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgotICAgIHJldHVybiBzb3VwX3Nlc3Npb25fZ2V0
X2ZlYXR1cmUoc2Vzc2lvbiwgU09VUF9UWVBFX1BBU1NXT1JEX01BTkFHRVIpICE9IE5VTEw7Ci0j
ZWxzZQotICAgIHJldHVybiBGQUxTRTsKLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBzaG93X2F1
dGhfZGlhbG9nKFdlYktpdEF1dGhEYXRhKiBhdXRoRGF0YSwgY29uc3QgY2hhciogbG9naW4sIGNv
bnN0IGNoYXIqIHBhc3N3b3JkKQotewotICAgIEd0a1dpZGdldCogdG9wbGV2ZWw7Ci0gICAgR3Rr
V2lkZ2V0KiB3aWRnZXQ7Ci0gICAgR3RrRGlhbG9nKiBkaWFsb2c7Ci0gICAgR3RrV2luZG93KiB3
aW5kb3c7Ci0gICAgR3RrV2lkZ2V0KiBlbnRyeUNvbnRhaW5lcjsKLSAgICBHdGtXaWRnZXQqIGhi
b3g7Ci0gICAgR3RrV2lkZ2V0KiBtYWluVkJveDsKLSAgICBHdGtXaWRnZXQqIHZib3g7Ci0gICAg
R3RrV2lkZ2V0KiBpY29uOwotICAgIEd0a1dpZGdldCogdGFibGU7Ci0gICAgR3RrV2lkZ2V0KiBz
ZXJ2ZXJNZXNzYWdlRGVzY3JpcHRpb25MYWJlbDsKLSAgICBHdGtXaWRnZXQqIHNlcnZlck1lc3Nh
Z2VMYWJlbDsKLSAgICBHdGtXaWRnZXQqIGRlc2NyaXB0aW9uTGFiZWw7Ci0gICAgY2hhciogZGVz
Y3JpcHRpb247Ci0gICAgY29uc3QgY2hhciogcmVhbG07Ci0gICAgZ2Jvb2xlYW4gaGFzUmVhbG07
Ci0gICAgU291cFVSSSogdXJpOwotICAgIEd0a1dpZGdldCogcmVtZW1iZXJCb3g7Ci0gICAgR3Rr
V2lkZ2V0KiBjaGVja0J1dHRvbjsKLQotICAgIC8qIEZyb20gR1RLKyBndGttb3VudG9wZXJhdGlv
bi5jLCBtb2RpZmllZCBhbmQgc2ltcGxpZmllZC4gTEdQTCAyIGxpY2Vuc2UgKi8KLQotICAgIHdp
ZGdldCA9IGd0a19kaWFsb2dfbmV3KCk7Ci0gICAgd2luZG93ID0gR1RLX1dJTkRPVyh3aWRnZXQp
OwotICAgIGRpYWxvZyA9IEdUS19ESUFMT0cod2lkZ2V0KTsKLQotICAgIGd0a19kaWFsb2dfYWRk
X2J1dHRvbnMoZGlhbG9nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NUT0NLX0NB
TkNFTCwgR1RLX1JFU1BPTlNFX0NBTkNFTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TVE9DS19PSywgR1RLX1JFU1BPTlNFX09LLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCk7Ci0KLSAgICAvKiBTZXQgdGhlIGRpYWxvZyB1cCB3aXRoIEhJRyBwcm9wZXJ0aWVzICov
Ci0gICAgZ3RrX2NvbnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoZGlhbG9n
KSwgNSk7Ci0gICAgZ3RrX2JveF9zZXRfc3BhY2luZyhHVEtfQk9YKGd0a19kaWFsb2dfZ2V0X2Nv
bnRlbnRfYXJlYShkaWFsb2cpKSwgMik7IC8qIDIgKiA1ICsgMiA9IDEyICovCi0gICAgZ3RrX2Nv
bnRhaW5lcl9zZXRfYm9yZGVyX3dpZHRoKEdUS19DT05UQUlORVIoZ3RrX2RpYWxvZ19nZXRfYWN0
aW9uX2FyZWEoZGlhbG9nKSksIDUpOwotICAgIGd0a19ib3hfc2V0X3NwYWNpbmcoR1RLX0JPWChn
dGtfZGlhbG9nX2dldF9hY3Rpb25fYXJlYShkaWFsb2cpKSwgNik7Ci0KLSAgICBndGtfd2luZG93
X3NldF9yZXNpemFibGUod2luZG93LCBGQUxTRSk7Ci0gICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUo
d2luZG93LCAiIik7Ci0gICAgZ3RrX3dpbmRvd19zZXRfaWNvbl9uYW1lKHdpbmRvdywgR1RLX1NU
T0NLX0RJQUxPR19BVVRIRU5USUNBVElPTik7Ci0KLSAgICBndGtfZGlhbG9nX3NldF9kZWZhdWx0
X3Jlc3BvbnNlKGRpYWxvZywgR1RLX1JFU1BPTlNFX09LKTsKLQotICAgIC8qIEdldCB0aGUgY3Vy
cmVudCB0b3BsZXZlbCAqLwotICAgIGdfc2lnbmFsX2VtaXQoYXV0aERhdGEtPm1hbmFnZXIsIHNp
Z25hbHNbQ1VSUkVOVF9UT1BMRVZFTF0sIDAsIGF1dGhEYXRhLT5tc2csICZ0b3BsZXZlbCk7Ci0K
LSAgICBpZiAodG9wbGV2ZWwpCi0gICAgICAgIGd0a193aW5kb3dfc2V0X3RyYW5zaWVudF9mb3Io
d2luZG93LCBHVEtfV0lORE9XKHRvcGxldmVsKSk7Ci0KLSAgICAvKiBCdWlsZCBjb250ZW50cyAq
LwotICAgIGhib3ggPSBndGtfaGJveF9uZXcoRkFMU0UsIDEyKTsKLSAgICBndGtfY29udGFpbmVy
X3NldF9ib3JkZXJfd2lkdGgoR1RLX0NPTlRBSU5FUihoYm94KSwgNSk7Ci0gICAgZ3RrX2JveF9w
YWNrX3N0YXJ0KEdUS19CT1goZ3RrX2RpYWxvZ19nZXRfY29udGVudF9hcmVhKGRpYWxvZykpLCBo
Ym94LCBUUlVFLCBUUlVFLCAwKTsKLQotICAgIGljb24gPSBndGtfaW1hZ2VfbmV3X2Zyb21fc3Rv
Y2soR1RLX1NUT0NLX0RJQUxPR19BVVRIRU5USUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdUS19JQ09OX1NJWkVfRElBTE9HKTsKLQotICAgIGd0a19taXNjX3Nl
dF9hbGlnbm1lbnQoR1RLX01JU0MoaWNvbiksIDAuNSwgMC4wKTsKLSAgICBndGtfYm94X3BhY2tf
c3RhcnQoR1RLX0JPWChoYm94KSwgaWNvbiwgRkFMU0UsIEZBTFNFLCAwKTsKLQotICAgIG1haW5W
Qm94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCAxOCk7Ci0gICAgZ3RrX2JveF9wYWNrX3N0YXJ0KEdU
S19CT1goaGJveCksIG1haW5WQm94LCBUUlVFLCBUUlVFLCAwKTsKLQotICAgIHVyaSA9IHNvdXBf
bWVzc2FnZV9nZXRfdXJpKGF1dGhEYXRhLT5tc2cpOwotICAgIGRlc2NyaXB0aW9uID0gZ19zdHJk
dXBfcHJpbnRmKF8oIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBiZWluZyByZXF1ZXN0ZWQg
YnkgdGhlIHNpdGUgJXMiKSwgdXJpLT5ob3N0KTsKLSAgICBkZXNjcmlwdGlvbkxhYmVsID0gZ3Rr
X2xhYmVsX25ldyhkZXNjcmlwdGlvbik7Ci0gICAgZ19mcmVlKGRlc2NyaXB0aW9uKTsKLSAgICBn
dGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKGRlc2NyaXB0aW9uTGFiZWwpLCAwLjAsIDAu
NSk7Ci0gICAgZ3RrX2xhYmVsX3NldF9saW5lX3dyYXAoR1RLX0xBQkVMKGRlc2NyaXB0aW9uTGFi
ZWwpLCBUUlVFKTsKLSAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChtYWluVkJveCksIEdU
S19XSURHRVQoZGVzY3JpcHRpb25MYWJlbCksCi0gICAgICAgICAgICAgICAgICAgICAgIEZBTFNF
LCBGQUxTRSwgMCk7Ci0KLSAgICB2Ym94ID0gZ3RrX3Zib3hfbmV3KEZBTFNFLCA2KTsKLSAgICBn
dGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChtYWluVkJveCksIHZib3gsIEZBTFNFLCBGQUxTRSwg
MCk7Ci0KLSAgICAvKiBUaGUgdGFibGUgdGhhdCBob2xkcyB0aGUgZW50cmllcyAqLwotICAgIGVu
dHJ5Q29udGFpbmVyID0gZ3RrX2FsaWdubWVudF9uZXcoMC4wLCAwLjAsIDEuMCwgMS4wKTsKLQot
ICAgIGd0a19hbGlnbm1lbnRfc2V0X3BhZGRpbmcoR1RLX0FMSUdOTUVOVChlbnRyeUNvbnRhaW5l
ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwKTsKLQotICAgIGd0
a19ib3hfcGFja19zdGFydChHVEtfQk9YKHZib3gpLCBlbnRyeUNvbnRhaW5lciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgRkFMU0UsIEZBTFNFLCAwKTsKLQotICAgIHJlYWxtID0gc291cF9hdXRo
X2dldF9yZWFsbShhdXRoRGF0YS0+YXV0aCk7Ci0gICAgLy8gQ2hlY2tpbmcgdGhhdCByZWFsbSBp
cyBub3QgYW4gZW1wdHkgc3RyaW5nCi0gICAgaGFzUmVhbG0gPSAocmVhbG0gJiYgKHN0cmxlbihy
ZWFsbSkgPiAwKSk7Ci0KLSAgICB0YWJsZSA9IGd0a190YWJsZV9uZXcoaGFzUmVhbG0gPyAzIDog
MiwgMiwgRkFMU0UpOwotICAgIGd0a190YWJsZV9zZXRfY29sX3NwYWNpbmdzKEdUS19UQUJMRSh0
YWJsZSksIDEyKTsKLSAgICBndGtfdGFibGVfc2V0X3Jvd19zcGFjaW5ncyhHVEtfVEFCTEUodGFi
bGUpLCA2KTsKLSAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKGVudHJ5Q29udGFp
bmVyKSwgdGFibGUpOwotCi0gICAgaWYgKGhhc1JlYWxtKSB7Ci0gICAgICAgIHNlcnZlck1lc3Nh
Z2VEZXNjcmlwdGlvbkxhYmVsID0gZ3RrX2xhYmVsX25ldyhfKCJTZXJ2ZXIgbWVzc2FnZToiKSk7
Ci0gICAgICAgIHNlcnZlck1lc3NhZ2VMYWJlbCA9IGd0a19sYWJlbF9uZXcocmVhbG0pOwotICAg
ICAgICBndGtfbWlzY19zZXRfYWxpZ25tZW50KEdUS19NSVNDKHNlcnZlck1lc3NhZ2VEZXNjcmlw
dGlvbkxhYmVsKSwgMC4wLCAwLjUpOwotICAgICAgICBndGtfbGFiZWxfc2V0X2xpbmVfd3JhcChH
VEtfTEFCRUwoc2VydmVyTWVzc2FnZURlc2NyaXB0aW9uTGFiZWwpLCBUUlVFKTsKLSAgICAgICAg
Z3RrX21pc2Nfc2V0X2FsaWdubWVudChHVEtfTUlTQyhzZXJ2ZXJNZXNzYWdlTGFiZWwpLCAwLjAs
IDAuNSk7Ci0gICAgICAgIGd0a19sYWJlbF9zZXRfbGluZV93cmFwKEdUS19MQUJFTChzZXJ2ZXJN
ZXNzYWdlTGFiZWwpLCBUUlVFKTsKLQotICAgICAgICBndGtfdGFibGVfYXR0YWNoX2RlZmF1bHRz
KEdUS19UQUJMRSh0YWJsZSksIHNlcnZlck1lc3NhZ2VEZXNjcmlwdGlvbkxhYmVsLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsIDAsIDEpOwotICAgICAgICBndGtfdGFi
bGVfYXR0YWNoX2RlZmF1bHRzKEdUS19UQUJMRSh0YWJsZSksIHNlcnZlck1lc3NhZ2VMYWJlbCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAyLCAwLCAxKTsKLSAgICB9Ci0K
LSAgICBhdXRoRGF0YS0+bG9naW5FbnRyeSA9IHRhYmxlX2FkZF9lbnRyeSh0YWJsZSwgaGFzUmVh
bG0gPyAxIDogMCwgXygiVXNlcm5hbWU6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbG9naW4sIE5VTEwpOwotICAgIGF1dGhEYXRhLT5wYXNzd29yZEVudHJ5
ID0gdGFibGVfYWRkX2VudHJ5KHRhYmxlLCBoYXNSZWFsbSA/IDIgOiAxLCBfKCJQYXNzd29yZDoi
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29y
ZCwgTlVMTCk7Ci0KLSAgICBndGtfZW50cnlfc2V0X3Zpc2liaWxpdHkoR1RLX0VOVFJZKGF1dGhE
YXRhLT5wYXNzd29yZEVudHJ5KSwgRkFMU0UpOwotCi0gICAgaWYgKHNlc3Npb25fY2FuX3NhdmVf
cGFzc3dvcmRzKGF1dGhEYXRhLT5zZXNzaW9uKSkgewotICAgICAgICByZW1lbWJlckJveCA9IGd0
a192Ym94X25ldyhGQUxTRSwgNik7Ci0gICAgICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KHZib3gpLCByZW1lbWJlckJveCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLCBG
QUxTRSwgMCk7Ci0gICAgICAgIGNoZWNrQnV0dG9uID0gZ3RrX2NoZWNrX2J1dHRvbl9uZXdfd2l0
aF9tbmVtb25pYyhfKCJfUmVtZW1iZXIgcGFzc3dvcmQiKSk7Ci0gICAgICAgIGlmIChsb2dpbiAm
JiBwYXNzd29yZCkKLSAgICAgICAgICAgIGd0a190b2dnbGVfYnV0dG9uX3NldF9hY3RpdmUoR1RL
X1RPR0dMRV9CVVRUT04oY2hlY2tCdXR0b24pLCBUUlVFKTsKLSAgICAgICAgZ3RrX2xhYmVsX3Nl
dF9saW5lX3dyYXAoR1RLX0xBQkVMKGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oY2hlY2tCdXR0
b24pKSksIFRSVUUpOwotICAgICAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RLX0JPWChyZW1lbWJl
ckJveCksIGNoZWNrQnV0dG9uLCBGQUxTRSwgRkFMU0UsIDApOwotICAgICAgICBhdXRoRGF0YS0+
Y2hlY2tCdXR0b24gPSBjaGVja0J1dHRvbjsKLSAgICB9Ci0KLSAgICBnX3NpZ25hbF9jb25uZWN0
KGRpYWxvZywgInJlc3BvbnNlIiwgR19DQUxMQkFDSyhyZXNwb25zZV9jYWxsYmFjayksIGF1dGhE
YXRhKTsKLSAgICBndGtfd2lkZ2V0X3Nob3dfYWxsKHdpZGdldCk7Ci19Ci0KLXN0YXRpYyB2b2lk
IHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSog
bXNnLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIGdwb2ludGVyIHVzZXJfZGF0
YSkKLXsKLSAgICBTb3VwVVJJKiB1cmk7Ci0gICAgV2ViS2l0QXV0aERhdGEqIGF1dGhEYXRhOwot
ICAgIFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciA9IChTb3VwU2Vzc2lvbkZlYXR1cmUqKXVz
ZXJfZGF0YTsKLSNpZmRlZiBTT1VQX1RZUEVfUEFTU1dPUkRfTUFOQUdFUgotICAgIEdTTGlzdCog
dXNlcnM7Ci0jZW5kaWYKLSAgICBjb25zdCBjaGFyICpsb2dpbiwgKnBhc3N3b3JkOwotCi0gICAg
c291cF9zZXNzaW9uX3BhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbXNnKTsKLSAgICAvKiBXZSBuZWVk
IHRvIG1ha2Ugc3VyZSB0aGUgbWVzc2FnZSBzdGlja3MgYXJvdW5kIHdoZW4gcGF1c2luZyBpdCAq
LwotICAgIGdfb2JqZWN0X3JlZihtc2cpOwotCi0gICAgdXJpID0gc291cF9tZXNzYWdlX2dldF91
cmkobXNnKTsKLSAgICBhdXRoRGF0YSA9IGdfc2xpY2VfbmV3MChXZWJLaXRBdXRoRGF0YSk7Ci0g
ICAgYXV0aERhdGEtPm1zZyA9IG1zZzsKLSAgICBhdXRoRGF0YS0+YXV0aCA9IGF1dGg7Ci0gICAg
YXV0aERhdGEtPnNlc3Npb24gPSBzZXNzaW9uOwotICAgIGF1dGhEYXRhLT5tYW5hZ2VyID0gbWFu
YWdlcjsKLQotICAgIGxvZ2luID0gcGFzc3dvcmQgPSBOVUxMOwotCi0jaWZkZWYgU09VUF9UWVBF
X1BBU1NXT1JEX01BTkFHRVIKLSAgICB1c2VycyA9IHNvdXBfYXV0aF9nZXRfc2F2ZWRfdXNlcnMo
YXV0aCk7Ci0gICAgaWYgKHVzZXJzKSB7Ci0gICAgICAgIGxvZ2luID0gdXNlcnMtPmRhdGE7Ci0g
ICAgICAgIHBhc3N3b3JkID0gc291cF9hdXRoX2dldF9zYXZlZF9wYXNzd29yZChhdXRoLCBsb2dp
bik7Ci0gICAgICAgIGdfc2xpc3RfZnJlZSh1c2Vycyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBz
aG93X2F1dGhfZGlhbG9nKGF1dGhEYXRhLCBsb2dpbiwgcGFzc3dvcmQpOwotfQotCi1zdGF0aWMg
dm9pZCBhdHRhY2goU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vz
c2lvbikKLXsKLSAgICBnX3NpZ25hbF9jb25uZWN0KHNlc3Npb24sICJhdXRoZW50aWNhdGUiLCBH
X0NBTExCQUNLKHNlc3Npb25fYXV0aGVudGljYXRlKSwgbWFuYWdlcik7Ci19Ci0KLXN0YXRpYyB2
b2lkIGRldGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNz
aW9uKQotewotICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhzZXNzaW9u
LCBzZXNzaW9uX2F1dGhlbnRpY2F0ZSwgbWFuYWdlcik7Ci19Ci0KLQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0Yjc3NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jcHAKQEAgLTAsMCArMSwxMTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIndlYmtpdHNvdXBhdXRoZGlhbG9nLmgiCisKKyNpbmNsdWRlICJHdGtB
dXRoZW50aWNhdGlvbkRpYWxvZy5oIgorI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKKy8qKgorICogU0VDVElPTjp3ZWJraXRzb3VwYXV0aGRp
YWxvZworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBBICNTb3VwU2Vzc2lvbkZlYXR1cmUgdG8gcHJv
dmlkZSBhIHNpbXBsZQorICogYXV0aGVudGljYXRpb24gZGlhbG9nIGZvciBIVFRQIGJhc2ljIGF1
dGggc3VwcG9ydC4KKyAqCisgKiAjV2ViS2l0U291cEF1dGhEaWFsb2cgaXMgYSAjU291cFNlc3Np
b25GZWF0dXJlIHRoYXQgeW91IGNhbiBhdHRhY2ggdG8geW91cgorICogI1NvdXBTZXNzaW9uIHRv
IHByb3ZpZGUgYSBzaW1wbGUgYXV0aGVudGljYXRpb24gZGlhbG9nIHdoaWxlCisgKiBoYW5kbGlu
ZyBIVFRQIGJhc2ljIGF1dGguCisgKi8KKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9k
aWFsb2dfc2Vzc2lvbl9mZWF0dXJlX2luaXQoU291cFNlc3Npb25GZWF0dXJlSW50ZXJmYWNlKiwg
Z3BvaW50ZXIpOworc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSosIFNvdXBT
ZXNzaW9uKik7CitzdGF0aWMgdm9pZCBkZXRhY2goU291cFNlc3Npb25GZWF0dXJlKiwgU291cFNl
c3Npb24qKTsKKworZW51bSB7CisgICAgQ1VSUkVOVF9UT1BMRVZFTCwKKyAgICBMQVNUX1NJR05B
TAorfTsKKworc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwIH07CisKK0df
REVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFNvdXBBdXRoRGlhbG9nLCB3ZWJraXRfc291cF9h
dXRoX2RpYWxvZywgR19UWVBFX09CSkVDVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEdfSU1Q
TEVNRU5UX0lOVEVSRkFDRShTT1VQX1RZUEVfU0VTU0lPTl9GRUFUVVJFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9zb3VwX2F1dGhfZGlhbG9n
X3Nlc3Npb25fZmVhdHVyZV9pbml0KSkKKworc3RhdGljIHZvaWQgd2Via2l0X3NvdXBfYXV0aF9k
aWFsb2dfY2xhc3NfaW5pdChXZWJLaXRTb3VwQXV0aERpYWxvZ0NsYXNzKiBrbGFzcykKK3sKKyAg
ICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0U291cEF1dGhEaWFsb2c6OmN1cnJlbnQtdG9wbGV2ZWw6Cisg
ICAgICogQGF1dGhEaWFsb2c6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQG1lc3NhZ2U6IHRoZSAjU291cE1lc3NhZ2UgYmVpbmcgdXNlZCBpbiB0aGUg
YXV0aGVudGljYXRpb24gcHJvY2VzcworICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1p
dHRlZCBieSB0aGUgQGF1dGhEaWFsb2cgd2hlbiBpdCBuZWVkcyB0byBrbm93CisgICAgICogdGhl
IGN1cnJlbnQgdG9wbGV2ZWwgd2lkZ2V0IGluIG9yZGVyIHRvIGNvcnJlY3RseSBzZXQgdGhlCisg
ICAgICogdHJhbnNpZW5jeSBmb3IgdGhlIGF1dGhlbnRpY2F0aW9uIGRpYWxvZy4KKyAgICAgKgor
ICAgICAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgY3VycmVudCB0b3BsZXZl
bCAjR3RrV2lkZ2V0IG9yICVOVUxMIGlmIHRoZXJlJ3Mgbm9uZQorICAgICAqCisgICAgICogU2lu
Y2U6IDEuMS4xCisgICAgICovCisgICAgc2lnbmFsc1tDVVJSRU5UX1RPUExFVkVMXSA9CisgICAg
ICBnX3NpZ25hbF9uZXcoImN1cnJlbnQtdG9wbGV2ZWwiLAorICAgICAgICAgICAgICAgICAgIEdf
T0JKRUNUX0NMQVNTX1RZUEUob2JqZWN0Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgIEdfU0lH
TkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRT
b3VwQXV0aERpYWxvZ0NsYXNzLCBjdXJyZW50X3RvcGxldmVsKSwKKyAgICAgICAgICAgICAgICAg
ICAwLCAwLAorICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX09CSkVDVF9fT0JKRUNU
LAorICAgICAgICAgICAgICAgICAgIEdUS19UWVBFX1dJREdFVCwgMSwKKyAgICAgICAgICAgICAg
ICAgICBTT1VQX1RZUEVfTUVTU0FHRSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9zb3VwX2F1
dGhfZGlhbG9nX2luaXQoV2ViS2l0U291cEF1dGhEaWFsb2cqKQoreworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfc291cF9hdXRoX2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lv
bkZlYXR1cmVJbnRlcmZhY2UgKmZlYXR1cmVJbnRlcmZhY2UsIGdwb2ludGVyKQoreworICAgIGZl
YXR1cmVJbnRlcmZhY2UtPmF0dGFjaCA9IGF0dGFjaDsKKyAgICBmZWF0dXJlSW50ZXJmYWNlLT5k
ZXRhY2ggPSBkZXRhY2g7Cit9CisKK3N0YXRpYyB2b2lkIHNlc3Npb25BdXRoZW50aWNhdGUoU291
cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwg
Z2Jvb2xlYW4sIFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlcikKK3sKKyAgICBHdGtBdXRoZW50
aWNhdGlvbkRpYWxvZyogYXV0aERpYWxvZzsKKyAgICBHdGtXaWRnZXQqIHRvcGxldmVsID0gMDsK
KworICAgIC8qIEdldCB0aGUgY3VycmVudCB0b3BsZXZlbCAqLworICAgIGdfc2lnbmFsX2VtaXQo
bWFuYWdlciwgc2lnbmFsc1tDVVJSRU5UX1RPUExFVkVMXSwgMCwgbWVzc2FnZSwgJnRvcGxldmVs
KTsKKworICAgIGF1dGhEaWFsb2cgPSBuZXcgR3RrQXV0aGVudGljYXRpb25EaWFsb2codG9wbGV2
ZWwgPyBHVEtfV0lORE9XKHRvcGxldmVsKSA6IDAsIHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgpOwor
ICAgIGF1dGhEaWFsb2ctPnNob3coKTsKK30KKworc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNz
aW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCit7CisgICAgZ19zaWdu
YWxfY29ubmVjdChzZXNzaW9uLCAiYXV0aGVudGljYXRlIiwgR19DQUxMQkFDSyhzZXNzaW9uQXV0
aGVudGljYXRlKSwgbWFuYWdlcik7Cit9CisKK3N0YXRpYyB2b2lkIGRldGFjaChTb3VwU2Vzc2lv
bkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhzZXNzaW9uLCByZWludGVycHJldF9jYXN0PGdw
b2ludGVyPihzZXNzaW9uQXV0aGVudGljYXRlKSwgbWFuYWdlcik7Cit9CisKKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmggYi9Tb3Vy
Y2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaAppbmRleCAwOGI3Yzlm
Li41ZTY3Y2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291
cGF1dGhkaWFsb2cuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1
dGhkaWFsb2cuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSB3ZWJraXRzb3VwYXV0aGRpYWxv
Z19oCiAKICNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KIAogR19CRUdJTl9ERUNMUwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbQppbmRleCA4YjJjMzFmLi40YzM3NGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQpA
QCAtNTI2LDYgKzUyNiw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVS
U0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9HZW9sb2NhdGlvbi9HZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0TWFu
YWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0dlb2xvY2F0aW9uL1dlYkdlb2xv
Y2F0aW9uTWFuYWdlci5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvR2VvbG9jYXRp
b24vV2ViR2VvbG9jYXRpb25NYW5hZ2VyLmggXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
Z3RrL1dlYkF1dGhEaWFsb2cuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9X
ZWJBdXRoRGlhbG9nLmggXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nl
c3NHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFp
bkd0ay5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWlu
R3RrLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViQXV0
aERpYWxvZy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJBdXRoRGlhbG9n
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mM2MzZWFiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9ndGsvV2ViQXV0aERpYWxvZy5j
cHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQXV0aERpYWxvZy5oIgorCisjaW5j
bHVkZSA8V2ViQ29yZS9HdGtBdXRoZW50aWNhdGlvbkRpYWxvZy5oPgorCit0eXBlZGVmIHN0cnVj
dCB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9IFdlYkF1dGhEaWFsb2c7CisKK3R5cGVkZWYgc3Ry
dWN0IHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50OworfSBXZWJBdXRoRGlhbG9nQ2xhc3M7CisK
K3N0YXRpYyB2b2lkIHdlYkF1dGhEaWFsb2dTZXNzaW9uRmVhdHVyZUluaXQoU291cFNlc3Npb25G
ZWF0dXJlSW50ZXJmYWNlKiwgZ3BvaW50ZXIpOworCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJBdXRoRGlhbG9nLCB3ZWJfYXV0aF9kaWFsb2csIEdfVFlQRV9PQkpFQ1QsCisgICAgICAgICAg
ICAgICAgICAgICAgICBHX0lNUExFTUVOVF9JTlRFUkZBQ0UoU09VUF9UWVBFX1NFU1NJT05fRkVB
VFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJB
dXRoRGlhbG9nU2Vzc2lvbkZlYXR1cmVJbml0KSkKKworc3RhdGljIHZvaWQgd2ViX2F1dGhfZGlh
bG9nX2NsYXNzX2luaXQoV2ViQXV0aERpYWxvZ0NsYXNzKikKK3sKK30KKworc3RhdGljIHZvaWQg
d2ViX2F1dGhfZGlhbG9nX2luaXQoV2ViQXV0aERpYWxvZyopCit7Cit9CisKK3N0YXRpYyB2b2lk
IHNlc3Npb25BdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBt
ZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4sIGdwb2ludGVyKQoreworICAgIFdlYkNv
cmU6Okd0a0F1dGhlbnRpY2F0aW9uRGlhbG9nKiBhdXRoRGlhbG9nID0gbmV3IFdlYkNvcmU6Okd0
a0F1dGhlbnRpY2F0aW9uRGlhbG9nKDAsIHNlc3Npb24sIG1lc3NhZ2UsIGF1dGgpOworICAgIGF1
dGhEaWFsb2ctPnNob3coKTsKK30KKworc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVh
dHVyZSosIFNvdXBTZXNzaW9uKiBzZXNzaW9uKQoreworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2Vz
c2lvbiwgImF1dGhlbnRpY2F0ZSIsIEdfQ0FMTEJBQ0soc2Vzc2lvbkF1dGhlbnRpY2F0ZSksIDAp
OworfQorCitzdGF0aWMgdm9pZCBkZXRhY2goU291cFNlc3Npb25GZWF0dXJlKiwgU291cFNlc3Np
b24qIHNlc3Npb24pCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5j
KHNlc3Npb24sIHJlaW50ZXJwcmV0X2Nhc3Q8Z3BvaW50ZXI+KHNlc3Npb25BdXRoZW50aWNhdGUp
LCAwKTsKK30KKworc3RhdGljIHZvaWQgd2ViQXV0aERpYWxvZ1Nlc3Npb25GZWF0dXJlSW5pdChT
b3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqIGZlYXR1cmUsIGdwb2ludGVyKQoreworICAgIGZl
YXR1cmUtPmF0dGFjaCA9IGF0dGFjaDsKKyAgICBmZWF0dXJlLT5kZXRhY2ggPSBkZXRhY2g7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJBdXRoRGlhbG9n
LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJBdXRoRGlhbG9nLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWVhZmVhMQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYkF1dGhEaWFsb2cuaApAQCAtMCwwICsx
LDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2Vi
QXV0aERpYWxvZ19oCisjZGVmaW5lIFdlYkF1dGhEaWFsb2dfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKworI2RlZmluZSBXRUJfVFlQRV9BVVRIX0RJQUxPRyAod2ViX2F1dGhfZGlhbG9n
X2dldF90eXBlKCkpCisKK0dUeXBlIHdlYl9hdXRoX2RpYWxvZ19nZXRfdHlwZSgpOworCisjZW5k
aWYgLy8gV2ViQXV0aERpYWxvZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5jcHAKaW5kZXggNjBlNTM3ZjAuLjE2NzFlMWEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZ3RrL1dlYlByb2Nlc3NNYWluR3RrLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2d0ay9XZWJQcm9jZXNzTWFpbkd0ay5j
cHAKQEAgLTI3LDcgKzI3LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJQ
cm9jZXNzTWFpbkd0ay5oIgogCisjaW5jbHVkZSAiV2ViQXV0aERpYWxvZy5oIgogI2luY2x1ZGUg
IldLQmFzZS5oIgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrQXV0aGVudGljYXRpb25EaWFsb2cuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9S
dW5Mb29wLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XZWJQcm9jZXNzLmg+CkBAIC01NiwxMiArNTgs
MTQgQEAgV0tfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpbkd0ayhpbnQgYXJnYywgY2hhciogYXJn
dltdKQogICAgIFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwogICAgIFNvdXBTZXNz
aW9uKiBzZXNzaW9uID0gV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmRlZmF1bHRTZXNzaW9uKCk7
CiAKLSAgICBTb3VwU2Vzc2lvbkZlYXR1cmUqIHNuaWZmZXIgPSBzdGF0aWNfY2FzdDxTb3VwU2Vz
c2lvbkZlYXR1cmUqPihnX29iamVjdF9uZXcoU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUiwgTlVM
TCkpOwotICAgIHNvdXBfc2Vzc2lvbl9hZGRfZmVhdHVyZShzZXNzaW9uLCBzbmlmZmVyKTsKLSAg
ICBnX29iamVjdF91bnJlZihzbmlmZmVyKTsKKyAgICBHUmVmUHRyPFNvdXBTZXNzaW9uRmVhdHVy
ZT4gc25pZmZlciA9IGFkb3B0R1JlZihzdGF0aWNfY2FzdDxTb3VwU2Vzc2lvbkZlYXR1cmUqPihn
X29iamVjdF9uZXcoU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUiwgTlVMTCkpKTsKKyAgICBzb3Vw
X3Nlc3Npb25fYWRkX2ZlYXR1cmUoc2Vzc2lvbiwgc25pZmZlci5nZXQoKSk7CiAKICAgICBzb3Vw
X3Nlc3Npb25fYWRkX2ZlYXR1cmVfYnlfdHlwZShzZXNzaW9uLCBTT1VQX1RZUEVfQ09OVEVOVF9E
RUNPREVSKTsKIAorICAgIEdSZWZQdHI8U291cFNlc3Npb25GZWF0dXJlPiBhdXRoRGlhbG9nID0g
YWRvcHRHUmVmKHN0YXRpY19jYXN0PFNvdXBTZXNzaW9uRmVhdHVyZSo+KGdfb2JqZWN0X25ldyhX
RUJfVFlQRV9BVVRIX0RJQUxPRywgTlVMTCkpKTsKKyAgICBzb3VwX3Nlc3Npb25fYWRkX2ZlYXR1
cmUoc2Vzc2lvbiwgYXV0aERpYWxvZy5nZXQoKSk7CisKICAgICBpbnQgc29ja2V0ID0gYXRvaShh
cmd2WzFdKTsKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKHNvY2tldCwgUnVu
TG9vcDo6bWFpbigpKTsKICAgICBSdW5Mb29wOjpydW4oKTsK
</data>
<flag name="review"
          id="90750"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="90751"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
      

    </bug>

</bugzilla>