<?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>43446</bug_id>
          
          <creation_ts>2010-08-03 14:38:20 -0700</creation_ts>
          <short_desc>[EFL] Exporting JavaScript objects for EFL port</short_desc>
          <delta_ts>2011-08-23 14:02:22 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jonas Gastal">jgastal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>antognolli+webkit</cc>
    
    <cc>bdilly</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>flavio.ceolin</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tkent</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>259699</commentid>
    <comment_count>0</comment_count>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-03 14:38:20 -0700</bug_when>
    <thetext>Exporting JavaScript objects for EFL port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259712</commentid>
    <comment_count>1</comment_count>
      <attachid>63381</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-03 15:01:14 -0700</bug_when>
    <thetext>Created attachment 63381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259717</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 15:04:32 -0700</bug_when>
    <thetext>Attachment 63381 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/efl/ewk/ewk_view.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 12 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>259725</commentid>
    <comment_count>3</comment_count>
      <attachid>63383</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-03 15:11:43 -0700</bug_when>
    <thetext>Created attachment 63383
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>259727</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-03 15:13:02 -0700</bug_when>
    <thetext>Attachment 63383 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/efl/EWebLauncher/main.c:86:  Extra space before last semicolon. If this should be an empty statement, use { } instead.  [whitespace/semicolon] [5]
WebKit/efl/EWebLauncher/main.c:94:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:99:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:104:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:112:  js_meta is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 1 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>265545</commentid>
    <comment_count>5</comment_count>
      <attachid>64592</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-17 07:58:06 -0700</bug_when>
    <thetext>Created attachment 64592
Adds support for exporting a JS API to EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265546</commentid>
    <comment_count>6</comment_count>
      <attachid>64593</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-17 07:59:13 -0700</bug_when>
    <thetext>Created attachment 64593
Example code for injecting JS API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265547</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-17 08:00:42 -0700</bug_when>
    <thetext>Attachment 64592 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/efl/ewk/ewk_js.cpp:23:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/efl/ewk/ewk_js.cpp:389:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 2 in 12 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>265549</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-17 08:01:18 -0700</bug_when>
    <thetext>Attachment 64593 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/efl/EWebLauncher/main.c:93:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:98:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:103:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/efl/EWebLauncher/main.c:111:  js_meta is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 2 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>267945</commentid>
    <comment_count>9</comment_count>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-08-23 09:20:39 -0700</bug_when>
    <thetext>As far as I can tell all the style complaints from check-webkit-style are false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296144</commentid>
    <comment_count>10</comment_count>
      <attachid>64592</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-19 06:33:46 -0700</bug_when>
    <thetext>Comment on attachment 64592
Adds support for exporting a JS API to EFL port.

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

&gt; WebKit/efl/ChangeLog:171
&gt;          * DefaultTheme/widget/slider/slider_v.png: Copied from WebKit/efl/DefaultTheme/widget/scrollbar/scrollbar_v.png.
&gt;  
&gt; +2010-08-03  Jonas M. Gastal  &lt;jgastal@profusion.mobi&gt;
&gt; +

This should be the first entry of the ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296169</commentid>
    <comment_count>11</comment_count>
      <attachid>71165</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-10-19 07:06:48 -0700</bug_when>
    <thetext>Created attachment 71165
Adds support for exporting a JS API to EFL port.

Fixed ChangeLog as request by kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296170</commentid>
    <comment_count>12</comment_count>
      <attachid>71166</attachid>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-10-19 07:07:44 -0700</bug_when>
    <thetext>Created attachment 71166
Example code for injecting JS API.

Fixed ChangeLog as requested by kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311346</commentid>
    <comment_count>13</comment_count>
    <who name="Jonas Gastal">jgastal</who>
    <bug_when>2010-11-19 03:41:31 -0800</bug_when>
    <thetext>Could some one please review these patches?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352820</commentid>
    <comment_count>14</comment_count>
      <attachid>71165</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-17 06:48:23 -0800</bug_when>
    <thetext>Comment on attachment 71165
Adds support for exporting a JS API to EFL port.

The patch looks not to be applied to the trunk cleanly.  Would you update it please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>352822</commentid>
    <comment_count>15</comment_count>
      <attachid>71166</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2011-02-17 06:49:03 -0800</bug_when>
    <thetext>Comment on attachment 71166
Example code for injecting JS API.

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393062</commentid>
    <comment_count>16</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-04-26 16:49:54 -0700</bug_when>
    <thetext>Hi Jonas.


When you have time, please upload a new patch. I&apos;m closing this one now, feel free to re-open it later.

Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422622</commentid>
    <comment_count>17</comment_count>
      <attachid>97602</attachid>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-06-17 07:58:15 -0700</bug_when>
    <thetext>Created attachment 97602
Patch

It&apos;s the Jonas Gastal&apos;s patch rebased with the upstream and with small fixes to be possible build with NETSCAPE_PLUGIN_API disabled.
Could some one please review this patch ?


Regards, Ceolin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422624</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-17 08:00:56 -0700</bug_when>
    <thetext>Attachment 97602 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/CMakeLists.txt&apos;, u&apos;Source/We...&quot; exit_code: 1

Source/WebKit/efl/ewk/ewk_js.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/efl/ewk/ewk_js.cpp:127:  Declaration has space between type name and * in JavaScriptObject *jso  [whitespace/declaration] [3]
Source/WebKit/efl/ewk/ewk_js.cpp:404:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebKit/efl/ewk/ewk_js.cpp:716:  Declaration has space between type name and * in Eina_Hash *ewk_js_object_properties_get  [whitespace/declaration] [3]
Source/WebKit/efl/ewk/ewk_js.cpp:718:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit/efl/ewk/ewk_js.cpp:723:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit/efl/ewk/ewk_js.cpp:734:  Declaration has space between type name and * in Ewk_JS_Object *ewk_js_object_new  [whitespace/declaration] [3]
Source/WebKit/efl/ewk/ewk_js.cpp:736:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit/efl/ewk/ewk_private.h:65:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 9 in 11 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>422638</commentid>
    <comment_count>19</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-17 08:22:25 -0700</bug_when>
    <thetext>Reopening the bug, as a new patch has been submitted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422654</commentid>
    <comment_count>20</comment_count>
      <attachid>97605</attachid>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-06-17 09:16:48 -0700</bug_when>
    <thetext>Created attachment 97605
Patch

Fixed code style errors.

Regards, Ceolin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423343</commentid>
    <comment_count>21</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-19 00:30:56 -0700</bug_when>
    <thetext>It seems to me goal of this bug is for WebOS, right ? If you mention why this patch is needed, it can be helpful to review this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423702</commentid>
    <comment_count>22</comment_count>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-06-20 09:25:42 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; It seems to me goal of this bug is for WebOS, right ? If you mention why this patch is needed, it can be helpful to review this bug.

It is not for WebOS, others ports like qt already has this functionality. The goal of this patch is the ewebkit be able to create rich webwidgets.

Regards, Ceolin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424975</commentid>
    <comment_count>23</comment_count>
      <attachid>97605</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-06-21 20:04:53 -0700</bug_when>
    <thetext>Comment on attachment 97605
Patch

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

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:21
&gt; +

You don&apos;t need to add empty line to here.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:93
&gt; +       return (Ewk_JS_Object*)np_obj;

Please adhere indentation.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:96
&gt; +        return 0;

ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:714
&gt; +#else

Personally, I don&apos;t like to make dummy functions for macro. Other ewk functions are using macro its inside for disabling macro.

const char *ewk_settings_web_database_path_get(void)
{
#if ENABLE(DATABASE)
    return _ewk_default_web_database_path;
#else
    return 0;
#endif
}

&gt; Source/WebKit/efl/ewk/ewk_private.h:1
&gt; +

Please remove empty line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425507</commentid>
    <comment_count>24</comment_count>
      <attachid>98225</attachid>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-06-22 13:05:45 -0700</bug_when>
    <thetext>Created attachment 98225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425522</commentid>
    <comment_count>25</comment_count>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-06-22 13:23:50 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 97605 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97605&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:21
&gt; &gt; +
&gt; 
&gt; You don&apos;t need to add empty line to here.

Fixed

&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:93
&gt; &gt; +       return (Ewk_JS_Object*)np_obj;
&gt; 

Fixed

&gt; Please adhere indentation.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:96
&gt; &gt; +        return 0;
&gt; 
&gt; ditto.
&gt;
I couldn&apos;t see this mistake. The indentation seems to be right.
 
&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:714
&gt; &gt; +#else
&gt; 
&gt; Personally, I don&apos;t like to make dummy functions for macro. Other ewk functions are using macro its inside for disabling macro.
&gt; 
&gt; const char *ewk_settings_web_database_path_get(void)
&gt; {
&gt; #if ENABLE(DATABASE)
&gt;     return _ewk_default_web_database_path;
&gt; #else
&gt;     return 0;
&gt; #endif
&gt; }
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_private.h:1
&gt; &gt; +
&gt; 
&gt; Please remove empty line.

Fixed

I sent a new patch fixing the mistakes. About the dummy functions, my point is 
that will be necessary too many #if without them. To my mind the dummy 
functions is better in this case (although I don&apos;t like too). If you still 
prefer the #if inside the functions I can send a new patch.

Thanks for the advices :)

Regards, Ceolin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433647</commentid>
    <comment_count>26</comment_count>
      <attachid>98225</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-07-07 12:16:04 -0700</bug_when>
    <thetext>Comment on attachment 98225
Patch

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

Informal r-.

&gt; Source/WebKit/ChangeLog:8
&gt; +2011-06-16  Jonas M. Gastal &lt;jgastal@profusion.mobi&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Exporting JavaScript objects for EFL port
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43446
&gt; +
&gt; +        * CMakeLists.txt:

Be more clear here: what is being changed in CMakeLists.txt as a whole and what specific change has been performed.

&gt; Source/WebKit/efl/ChangeLog:2
&gt; +2011-06-16  Jonas M. Gastal &lt;jgastal@profusion.mobi&gt;
&gt; +        Reviewed by NOBODY (OOPS!).

Usually, there is an empty line after the date/name/mail line.

&gt; Source/WebKit/efl/ChangeLog:7
&gt; +        Exporting JavaScript objects for EFL port
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43446
&gt; +
&gt; +        * CMakeListsEfl.txt:

A paragraph explaining in detail would be nice.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:78
&gt; +    /*NPAllocateFunctionPtr*/ 0,
&gt; +    /*NPDeallocateFunctionPtr*/ 0,
&gt; +    /*NPInvalidateFunctionPtr*/ 0,
&gt; +    /*NPHasMethodFunctionPtr*/ _ewk_js_method_has,
&gt; +    /*NPInvokeFunctionPtr*/ _ewk_js_method_invoke,
&gt; +    /*NPInvokeDefaultFunctionPtr*/ 0,
&gt; +    /*NPHasPropertyFunctionPtr*/ _ewk_js_property_has,
&gt; +    /*NPGetPropertyFunctionPtr*/ _ewk_js_property_get,
&gt; +    /*NPSetPropertyFunctionPtr*/ _ewk_js_property_set,
&gt; +    /*NPRemovePropertyFunctionPtr*/ _ewk_js_property_remove,
&gt; +    /*NPEnumerationFunctionPtr*/ _ewk_js_properties_enumerate,
&gt; +    /*NPConstructFunctionPtr*/ 0

C++ comments, please.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:92
&gt; +    if (EINA_MAGIC_CHECK((Ewk_JS_Object*)np_obj, EWK_JS_OBJECT_MAGIC)) // It already is a Ewk_JS_Object
&gt; +        return (Ewk_JS_Object*)np_obj;

Use C++ casts on .cpp files, please. Also, is that comment really needed?

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:97
&gt; +    cls = (Ewk_JS_Class*)malloc(sizeof(Ewk_JS_Class));

What happens if malloc() fails?

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:120
&gt; +    obj = (Ewk_JS_Object*)malloc(sizeof(Ewk_JS_Object));

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:130
&gt; +    if (!strncmp(&quot;Array&quot;, jso-&gt;imp-&gt;className().ascii().data(), strlen(&quot;Array&quot;)))
&gt; +        obj-&gt;type = EWK_JS_OBJECT_ARRAY;
&gt; +    else if (!strncmp(&quot;Function&quot;, jso-&gt;imp-&gt;className().ascii().data(), strlen(&quot;Function&quot;)))
&gt; +        obj-&gt;type = EWK_JS_OBJECT_FUNCTION;

Since you&apos;re comparing with string literals, there&apos;s no need to use strncmp(), since they&apos;re guaranteed to be zero-terminated.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:197
&gt; +        STRINGZ_TO_NPVARIANT(strdup(data-&gt;value.s), *result);

strdup() might return NULL. Will STRINGZ_TO_NPVARIANT be able to handle that?

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:203
&gt; +        OBJECT_TO_NPVARIANT((NPObject*)data-&gt;value.o, *result);

C++ casts.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:235
&gt; +        data-&gt;value.s = (char*)malloc(sizeof(char) * (sz + 1));

malloc() might fail. Please review all malloc() usage.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:264
&gt; +    if (!_NPN_IdentifierIsString(name)) {
&gt; +        ERR(&quot;int NPIdentifier is not supported.&quot;);
&gt; +        return fail;

Just return false here.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:267
&gt; +    if (eina_hash_find(obj-&gt;properties, prop_name)) // should search methods too?

This comment should include a FIXME: and be proper sentences (begin with uppercase letters, etc).

Also, this if can be ditched:

char* prop...;
bool fail = eina_hash_find(...);
free(prop_name);
return fail;

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:291
&gt; +    if (prop &amp;&amp; prop-&gt;get) { // class has property and property has getter

Proper sentences must be used on comments.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:619
&gt; +    bool fail = EINA_FALSE;

Please do not mix &apos;bool&apos; and &apos;Eina_Bool&apos; types. Not harmful, but not pretty either.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:694
&gt; +    int i;
&gt; +    for (i = 0; i &lt; count; i++) {

for (int i = 0; ...)

&gt; Source/WebKit/efl/ewk/ewk_private.h:59
&gt; +    Eina_Hash *properties; // key=name, value=current value of property

Is this comment really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>447378</commentid>
    <comment_count>27</comment_count>
      <attachid>103098</attachid>
    <who name="Flavio Ceolin">flavio.ceolin</who>
    <bug_when>2011-08-05 13:06:31 -0700</bug_when>
    <thetext>Created attachment 103098
Patch

New patch with the suggested fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453807</commentid>
    <comment_count>28</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-08-19 07:24:04 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; Created an attachment (id=103098) [details]
&gt; Patch
&gt; 
&gt; New patch with the suggested fixes.

It&apos;s a very big patch and hard to review, but I think the major flaws were covered on this last patch.

Informal r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454634</commentid>
    <comment_count>29</comment_count>
      <attachid>103098</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-22 09:40:52 -0700</bug_when>
    <thetext>Comment on attachment 103098
Patch

Rejecting attachment 103098 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=ec2-cq-01&apos;, &apos;--port...&quot; exit_code: 2

Last 500 characters of output:
/efl/ewk/ewk_view.cpp
Hunk #3 succeeded at 3395 (offset 17 lines).
Hunk #4 succeeded at 3556 (offset 19 lines).
patching file Source/WebKit/efl/ewk/ewk_view.h
Hunk #1 succeeded at 85 (offset 62 lines).
Hunk #2 FAILED at 87.
Hunk #3 succeeded at 2176 with fuzz 1 (offset 491 lines).
1 out of 3 hunks FAILED -- saving rejects to file Source/WebKit/efl/ewk/ewk_view.h.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Antonio Gomes&apos;, u&apos;--fo...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9462838</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455217</commentid>
    <comment_count>30</comment_count>
    <who name="Grzegorz Czajkowski">g.czajkowski</who>
    <bug_when>2011-08-22 23:58:49 -0700</bug_when>
    <thetext>Recently there were a lot of patches which move API documentation of WebKit-EFL to the header files. Could you please adjust your patch to these changes and add short description of ewk_js.h (@brief command)?

Additionally I think we do not need dots in descriptions of parameters and return value (see EFL&apos;s or ewk documetations).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455690</commentid>
    <comment_count>31</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-08-23 14:02:22 -0700</bug_when>
    <thetext>Committed r93637: &lt;http://trac.webkit.org/changeset/93637&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63381</attachid>
            <date>2010-08-03 15:01:14 -0700</date>
            <delta_ts>2010-08-17 07:58:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43446-20100803190128.patch</filename>
            <type>text/plain</type>
            <size>31951</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9DTWFrZUxpc3RzLnR4dCBiL1dlYktpdC9DTWFrZUxpc3RzLnR4
dAppbmRleCAzZmVlMmM2M2FjMmY3ZDNmNTY0OTgyYjliZjhhNzMyMDIwZWZiNzdmLi45ZTg1ZmI5
NWI4NTNlYTczNTViZjZkZjU4NGYzMmQ5NzM4MzZhMWU3IDEwMDY0NAotLS0gYS9XZWJLaXQvQ01h
a2VMaXN0cy50eHQKKysrIGIvV2ViS2l0L0NNYWtlTGlzdHMudHh0CkBAIC00LDYgKzQsNyBAQCBT
RVQoV2ViS2l0X0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGlu
Z3MvanMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzIgogICAgICIke1dFQkNPUkVfRElS
fS9icmlkZ2UiCisgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9jIgogICAgICIke1dFQkNPUkVf
RElSfS9icmlkZ2UvanNjIgogICAgICIke1dFQkNPUkVfRElSfS9jc3MiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2RvbSIKZGlmZiAtLWdpdCBhL1dlYktpdC9DaGFuZ2VMb2cgYi9XZWJLaXQvQ2hhbmdl
TG9nCmluZGV4IDc1MTgxZTZhNWE0MGYxOTk1YzAzOTRmNDNhY2MwNGVjNjM0MTUyOWQuLmMxYjIx
ZWZkMzUxYjFmYThmM2E4Y2NhOWI4NmZiZTAxZmZkMDVhODIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9D
aGFuZ2VMb2cKKysrIGIvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEwLTA4
LTAzICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9ydGluZyBKYXZhU2Ny
aXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MzQ0NgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisKIDIw
MTAtMDctMzEgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICA8
aHR0cDovL3dlYmtpdC5vcmcvYi80MzMwNz4gTWFrZSBzdXJlIGFsbCBwcml2YXRlIGhlYWRlcnMg
YXJlIGNvcGllZCB0byBQcml2YXRlSGVhZGVycyBkaXJlY3RvcnkKZGlmZiAtLWdpdCBhL1dlYktp
dC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgYi9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0Cmlu
ZGV4IGY2Yjk2ZmQzN2JmNGQyZjE1M2I3Zjc1ODQ0MDc0YjlkYzNhODQ4NDYuLmVmOWJlNmZiMjZm
MmM1YzQ1MjRmM2ZkMzgyMjdiNWQ2NzdlNDZhMTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwvQ01h
a2VMaXN0c0VmbC50eHQKKysrIGIvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dApAQCAtMzks
NiArMzksNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGVmbC9ld2svZXdrX3Zp
ZXcuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwogICAgIGVmbC9ld2svZXdrX3dp
bmRvd19mZWF0dXJlcy5jcHAKKyAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKIAogTElTVChBUFBF
TkQgV2ViS2l0X0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9X
ZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCAwNjMyZmYxMTI2N2Q4MTczNDUxY2I4N2I4MGM3NjI1
NjQ2OTFlN2Q3Li41YWM1YWE4MzRmNWFmMjY1MmI5ODI3OTQ4MWE0OGIxZGYzNWY2MzUzIDEwMDY0
NAotLS0gYS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZWZsL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQwIEBACisyMDEwLTA4LTAzICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHBy
b2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEV4cG9ydGluZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ0NgorCisgICAgICAg
ICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6
OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKiBld2svRVdl
YktpdC5oOgorICAgICAgICAqIGV3ay9ld2tfanMuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9ld2tf
anNfdmFyaWFudF90b19ucHZhcmlhbnQpOgorICAgICAgICAoX2V3a19qc19ucHZhcmlhbnRfdG9f
dmFyaWFudCk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X2hhcyk6CisgICAgICAgIChfZXdr
X2pzX3Byb3BlcnR5X2dldCk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X3NldCk6CisgICAg
ICAgIChfZXdrX2pzX3Byb3BlcnR5X3JlbW92ZSk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnRp
ZXNfZW51bWVyYXRlKToKKyAgICAgICAgKF9ld2tfanNfbWV0aG9kX2hhcyk6CisgICAgICAgIChf
ZXdrX2pzX21ldGhvZF9pbnZva2UpOgorICAgICAgICAoZXdrX2pzX2NsYXNzX25ldyk6CisgICAg
ICAgIChld2tfanNfY2xhc3NfZnJlZSk6CisgICAgICAgIChld2tfanNfb2JqZWN0X25ldyk6Cisg
ICAgICAgIChld2tfanNfb2JqZWN0X2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9wcm9w
ZXJ0aWVzX2dldCk6CisgICAgICAgIChld2tfanNfb2JqZWN0X25hbWVfZ2V0KToKKyAgICAgICAg
KGV3a19qc192YXJpYW50X2ZyZWUpOgorICAgICAgICAqIGV3ay9ld2tfanMuaDogQWRkZWQuCisg
ICAgICAgICogZXdrL2V3a19tYWluLmNwcDoKKyAgICAgICAgKGV3a19pbml0KToKKyAgICAgICAg
KiBld2svZXdrX3ByaXZhdGUuaDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAg
ICAoZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcik6CisgICAgICAgIChld2tfdmlld19q
c19vYmplY3RfYWRkKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMC0wOC0wMyAg
cnl1YW4gY2hvaSAgPHJ5dWFuLmNob2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRFZmwuY3BwCmluZGV4IDU2NDhlYzdjNjRlODVjMGVjMmVkMTc2NjdhOTUyMTE2
Y2NkZWU2ZGUuLjUwODAyYTBjZjBjZDljNzJhYTkwYTg0ZDNlZWVjYmI5ZDA4MDA3ODQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
CisrKyBiL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
CkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hE
aWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKQogCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01X
cmFwcGVyV29ybGQqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZXdrX3ZpZXdfanNf
d2luZG93X29iamVjdF9jbGVhcihtX3ZpZXcpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJikKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1dlYktpdC9l
ZmwvZXdrL0VXZWJLaXQuaAppbmRleCAxODNlOWRjZjlmMGNmNzRhMTNhNGE3Y2VjMzBmZWUxOTFl
YmNkNzgxLi5hY2IzODNiNzhiYTdlOThlNTU1ZmY5Y2NmNWU4ZmFiMGU2ZDE1MTFhIDEwMDY0NAot
LS0gYS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKKysrIGIvV2ViS2l0L2VmbC9ld2svRVdlYktp
dC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiZXdrX2VhcGkuaCIKICNpbmNsdWRlICJl
d2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5o
IgogI2luY2x1ZGUgImV3a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5j
bHVkZSAiZXdrX3ZpZXcuaCIKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAg
Yi9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3ZTU0NGI0NTM1MTZlZDg4
MDRhNmM1ZGM4ODIyOTkwMGY1YTc5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZsL2V3
ay9ld2tfanMuY3BwCkBAIC0wLDAgKzEsNTE5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAx
MCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAg
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiZXdrX2pzLmgiCisKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIm5w
cnVudGltZV9pbXBsLmgiCisKKyNkZWZpbmUgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4obywg
Li4uKSBcCisgICAgaWYgKCFFSU5BX01BR0lDX0NIRUNLKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJ
QykpIHsgXAorICAgICAgIEVJTkFfTUFHSUNfRkFJTChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMp
OyBcCisgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyBcCisgICAgfQorCitzdHJ1Y3QgX0V3a19K
U19DbGFzcyB7CisgICAgY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGE7CisgICAgRWluYV9I
YXNoKiBtZXRob2RzOyAvLyBrZXk9bmFtZSwgdmFsdWU9cG9pbnRlciB0byBtZXRhLT5tZXRob2Rz
OworICAgIEVpbmFfSGFzaCogcHJvcGVydGllczsgLy8ga2V5PW5hbWUsIHZhbHVlPXBvaW50ZXIg
dG8gbWV0YS0+cHJvcGVydGllczsKKyAgICBFd2tfSlNfRGVmYXVsdCBkZWZhdWx0X3Byb3A7Cit9
OworCitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBfb2JqLCBO
UElkZW50aWZpZXIgbmFtZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X2dldChOUE9i
amVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOworc3Rh
dGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlm
aWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogdmFsdWUpOworc3RhdGljIGJvb2wgX2V3a19qc19w
cm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpOworc3Rh
dGljIGJvb2wgX2V3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBO
UElkZW50aWZpZXIqKiB2YWx1ZSwgdWludDMyX3QqIGNvdW50KTsKK3N0YXRpYyBib29sIF9ld2tf
anNfbWV0aG9kX2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CitzdGF0
aWMgYm9vbCBfZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlm
aWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnX2NvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCk7CisKK3N0YXRpYyBOUENsYXNzIEVXS19OUENMQVNTID0geworICAgIE5Q
X0NMQVNTX1NUUlVDVF9WRVJTSU9OLAorICAgIC8qTlBBbGxvY2F0ZUZ1bmN0aW9uUHRyKi8gMCwK
KyAgICAvKk5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QSW52YWxpZGF0ZUZ1
bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QSGFzTWV0aG9kRnVuY3Rpb25QdHIqLyBfZXdrX2pzX21l
dGhvZF9oYXMsCisgICAgLypOUEludm9rZUZ1bmN0aW9uUHRyKi8gX2V3a19qc19tZXRob2RfaW52
b2tlLAorICAgIC8qTlBJbnZva2VEZWZhdWx0RnVuY3Rpb25QdHIqLyAwLAorICAgIC8qTlBIYXNQ
cm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9oYXMsCisgICAgLypOUEdldFBy
b3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X2dldCwKKyAgICAvKk5QU2V0UHJv
cGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfc2V0LAorICAgIC8qTlBSZW1vdmVQ
cm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUsCisgICAgLypOUEVu
dW1lcmF0aW9uRnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlLAorICAg
IC8qTlBDb25zdHJ1Y3RGdW5jdGlvblB0ciovIDAKK307CisKK3N0YXRpYyBib29sIF9ld2tfanNf
dmFyaWFudF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIE5QVmFyaWFu
dCogcmVzdWx0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCBm
YWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlc3VsdCwgZmFsc2Up
OworICAgIHN3aXRjaCAoZGF0YS0+dHlwZSkgeworICAgIGNhc2UgRXdrX0pTX1ZhcmlhbnRfVm9p
ZDoKKyAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRXdrX0pTX1ZhcmlhbnRfTnVsbDoKKyAgICAgICAgTlVMTF9UT19OUFZBUklBTlQo
KnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXdrX0pTX1ZhcmlhbnRfSW50MzI6
CisgICAgICAgIElOVDMyX1RPX05QVkFSSUFOVChkYXRhLT52YWx1ZS5pLCAqcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFd2tfSlNfVmFyaWFudF9Eb3VibGU6CisgICAgICAgIERP
VUJMRV9UT19OUFZBUklBTlQoZGF0YS0+dmFsdWUuZCwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXdrX0pTX1ZhcmlhbnRfU3RyaW5nOgorICAgICAgICBTVFJJTkdaX1RPX05Q
VkFSSUFOVChzdHJkdXAoZGF0YS0+dmFsdWUucyksICpyZXN1bHQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEV3a19KU19WYXJpYW50X0Jvb2w6CisgICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJ
QU5UKGRhdGEtPnZhbHVlLmIsICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV3
a19KU19WYXJpYW50X09iamVjdDoKKyAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVCgoTlBPYmpl
Y3QqKWRhdGEtPnZhbHVlLm8sICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitz
dGF0aWMgYm9vbCBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KEV3a19KU19WYXJpYW50KiBk
YXRhLCBjb25zdCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpbnQgc3o7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwocmVzdWx0LCBmYWxzZSk7CisgICAgc3dpdGNoIChyZXN1bHQtPnR5
cGUpIHsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKKyAgICAgICAgZGF0YS0+dHlwZSA9
IEV3a19KU19WYXJpYW50X1ZvaWQ7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKKyAgICAgICAgZGF0YS0+dHlw
ZSA9IEV3a19KU19WYXJpYW50X051bGw7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAgIGRhdGEt
PnR5cGUgPSBFd2tfSlNfVmFyaWFudF9JbnQzMjsKKyAgICAgICAgZGF0YS0+dmFsdWUuaSA9IE5Q
VkFSSUFOVF9UT19JTlQzMigqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZh
cmlhbnRUeXBlX0RvdWJsZToKKyAgICAgICAgZGF0YS0+dHlwZSA9IEV3a19KU19WYXJpYW50X0Rv
dWJsZTsKKyAgICAgICAgZGF0YS0+dmFsdWUuZCA9IE5QVkFSSUFOVF9UT19ET1VCTEUoKnJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6CisgICAg
ICAgIHN6ID0gTlBWQVJJQU5UX1RPX1NUUklORygqcmVzdWx0KS5VVEY4TGVuZ3RoOworICAgICAg
ICBkYXRhLT52YWx1ZS5zID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoc3ogKyAxKSk7
CisgICAgICAgIG1lbWNweShkYXRhLT52YWx1ZS5zLCBOUFZBUklBTlRfVE9fU1RSSU5HKCpyZXN1
bHQpLlVURjhDaGFyYWN0ZXJzLCBzeik7CisgICAgICAgIGRhdGEtPnZhbHVlLnNbc3pdID0gJ1ww
JzsKKyAgICAgICAgZGF0YS0+dHlwZSA9IEV3a19KU19WYXJpYW50X1N0cmluZzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIGRhdGEtPnR5cGUg
PSBFd2tfSlNfVmFyaWFudF9Cb29sOworICAgICAgICBkYXRhLT52YWx1ZS5iID0gTlBWQVJJQU5U
X1RPX0JPT0xFQU4oKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50
VHlwZV9PYmplY3Q6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFd2tfSlNfVmFyaWFudF9PYmplY3Q7
CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAoRXdrX0pTX09iamVjdCopTlBWQVJJQU5UX1RPX09C
SkVDVCgqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX2V3
a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpCit7
CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsKKyAgICBi
b29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChu
cF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNl
KTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAg
RVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVy
biBmYWlsOworICAgIH0KKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcihuYW1lKTsKKyAgICBpZiAoZWluYV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVzLCBwcm9w
X25hbWUpKSAvLyBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPworICAgICAgICBmYWlsID0gdHJ1
ZTsKKyAgICBmcmVlKHByb3BfbmFtZSk7CisKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGlj
IGJvb2wgX2V3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVy
IG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChF
d2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOworICAgIEV3
a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lD
X0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVy
SXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBz
dXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKworICAgIHZhbHVlID0g
KEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgY2hh
ciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAgcHJvcCA9
IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBw
cm9wX25hbWUpOworICAgIGlmIChwcm9wICYmIHByb3AtPmdldCkgeyAvLyBjbGFzcyBoYXMgcHJv
cGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIKKyAgICAgICAgZmFpbCA9IHByb3AtPmdldChv
YmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFmYWlsKQorICAgICAgICAgICAg
ZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAg
fSBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldCkgeyAvLyBkZWZhdWx0IGdldHRl
ciBleGlzdHMKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KG9iaiwg
cHJvcF9uYW1lLCB2YWx1ZSk7CisgICAgICAgIGlmICghZmFpbCkKKyAgICAgICAgICAgIGZhaWwg
PSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxz
ZSB7IC8vIGZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAKKyAgICAgICAgZnJlZSh2YWx1ZSk7
CisgICAgICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KillaW5hX2hhc2hfZmluZChvYmotPnBy
b3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgICAgIGZyZWUocHJvcF9uYW1lKTsKKyAgICAgICAg
aWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlh
bnQodmFsdWUsIHJlc3VsdCk7CisgICAgfQorCisgICAgZnJlZShwcm9wX25hbWUpOworICAgIGZy
ZWUodmFsdWUpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX3By
b3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBW
YXJpYW50KiBucF92YWx1ZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09i
amVjdCopbnBfb2JqOworICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsKKyAgICBFd2tfSlNfUHJv
cGVydHkqIHByb3A7CisgICAgYm9vbCBmYWlsID0gZmFsc2U7CisKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5n
KG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVk
LiIpOworICAgICAgICByZXR1cm4gZmFpbDsKKyAgICB9CisKKyAgICB2YWx1ZSA9IChFd2tfSlNf
VmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkpOworICAgIF9ld2tfanNfbnB2
YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wX3ZhbHVlKTsKKyAgICBjaGFyKiBwcm9wX25hbWUg
PSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICBwcm9wID0gKEV3a19KU19Qcm9w
ZXJ0eSopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7Cisg
ICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQorICAgICAgICBmYWlsID0gcHJvcC0+c2V0KG9iaiwg
cHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBjbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhh
cyBzZXR0ZXIKKyAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldCkKKyAgICAg
ICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9iaiwgcHJvcF9uYW1lLCB2YWx1
ZSk7IC8vIGRlZmF1bHQgZ2V0dGVyIGV4aXN0cworICAgIGVsc2UgeyAvLyBmYWxsYmFjayB0byBv
YmplY3RzIGhhc2ggbWFwCisgICAgICAgIHZvaWQqIG9sZCA9IGVpbmFfaGFzaF9zZXQob2JqLT5w
cm9wZXJ0aWVzLCBwcm9wX25hbWUsIHZhbHVlKTsKKyAgICAgICAgZnJlZShvbGQpOworICAgICAg
ICBmYWlsID0gdHJ1ZTsKKyAgICB9CisKKyAgICBmcmVlKHByb3BfbmFtZSk7CisgICAgcmV0dXJu
IGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0
KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9
IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOworICAg
IGJvb2wgZmFpbCA9IGZhbHNlOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFs
c2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAg
ICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0
dXJuIGZhaWw7CisgICAgfQorCisgICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlk
ZW50aWZpZXIobmFtZSk7CisgICAgcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9m
aW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpOworICAgIGlmIChwcm9wICYmIHBy
b3AtPmRlbCkKKyAgICAgICAgZmFpbCA9IHByb3AtPmRlbChvYmosIHByb3AtPm5hbWUpOyAvLyBj
bGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIKKyAgICBlbHNlIGlmIChv
YmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZh
dWx0X3Byb3AuZGVsKG9iaiwgcHJvcF9uYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGZhaWwgPSBl
aW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCAwKTsKKworICAgIGZyZWUo
cHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19w
cm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIqKiB2YWx1
ZSwgdWludDMyX3QqIGNvdW50KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNf
T2JqZWN0KilucF9vYmo7CisgICAgRWluYV9JdGVyYXRvciogaXQ7CisgICAgY2hhcioga2V5Owor
ICAgIGludCBpID0gMDsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9v
YmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsK
KyAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRvcl9rZXlfbmV3KG9iai0+cHJvcGVydGllcyk7CisK
KyAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPnByb3BlcnRpZXMpOworICAg
ICp2YWx1ZSA9IChOUElkZW50aWZpZXIqKW1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqICpj
b3VudCk7CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBrZXkpCisgICAgICAgICgqdmFs
dWUpW2krK10gPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoa2V5KTsKKworICAgIGVpbmFfaXRl
cmF0b3JfZnJlZShpdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ld2tf
anNfbWV0aG9kX2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSkKK3sKKyAg
ICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCopbnBfb2JqOworICAgIGJvb2wg
ZmFpbCA9IGZhbHNlOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29i
aiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwor
CisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAgICBFUlIo
ImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZh
aWw7CisgICAgfQorICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVy
KG5hbWUpOworICAgIGlmIChlaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgcHJvcF9u
YW1lKSkKKyAgICAgICAgZmFpbCA9IHRydWU7CisKKyAgICBmcmVlKHByb3BfbmFtZSk7CisgICAg
cmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfbWV0aG9kX2ludm9rZShOUE9i
amVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucF9hcmdz
LCB1aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEV3a19K
U19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX01ldGhv
ZCogbWV0aG9kOworICAgIEV3a19KU19WYXJpYW50KiBhcmdzOworICAgIEV3a19KU19WYXJpYW50
KiByZXRfdmFsOworICAgIGludCBpLCBqLCBhcmdfY291bnQgPSAwOworCisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hF
Q0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0
cmluZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBv
cnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIG1ldGhv
ZF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAgbWV0aG9kID0gKEV3
a19KU19NZXRob2QqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBtZXRob2RfbmFt
ZSk7CisgICAgaWYgKCFtZXRob2QpIHsKKyAgICAgICAgZnJlZShtZXRob2RfbmFtZSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnBfYXJnX2Nv
dW50OyBpKyspCisgICAgICAgIGlmIChucF9hcmdzW2ldLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9P
YmplY3QgfHwgbnBfYXJnc1tpXS50eXBlICE9IE5QVmFyaWFudFR5cGVfTnVsbCB8fCBucF9hcmdz
W2ldLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9Wb2lkKQorICAgICAgICAgICAgYXJnX2NvdW50Kys7
CisgICAgYXJncyA9IChFd2tfSlNfVmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFu
dCkgKiBhcmdfY291bnQpOworICAgIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbnBfYXJnX2NvdW50
OyBpKyspIHsKKyAgICAgICAgaWYgKG5wX2FyZ3NbaV0udHlwZSAhPSBOUFZhcmlhbnRUeXBlX09i
amVjdCB8fCBucF9hcmdzW2ldLnR5cGUgIT0gTlBWYXJpYW50VHlwZV9OdWxsIHx8IG5wX2FyZ3Nb
aV0udHlwZSAhPSBOUFZhcmlhbnRUeXBlX1ZvaWQpIHsKKyAgICAgICAgICAgIF9ld2tfanNfbnB2
YXJpYW50X3RvX3ZhcmlhbnQoJmFyZ3Nbal0sICZucF9hcmdzW2ldKTsKKyAgICAgICAgICAgIGor
KzsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXRfdmFsID0gbWV0aG9kLT5pbnZva2Uob2JqLCBh
cmdzLCBhcmdfY291bnQpOworICAgIF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQocmV0X3Zh
bCwgcmVzdWx0KTsKKworICAgIGV3a19qc192YXJpYW50X2ZyZWUocmV0X3ZhbCk7CisgICAgZm9y
IChpID0gMDsgaSA8IGFyZ19jb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChhcmdzW2ldLnR5cGUg
PT0gRXdrX0pTX1ZhcmlhbnRfU3RyaW5nKQorICAgICAgICAgICAgZnJlZShhcmdzW2ldLnZhbHVl
LnMpOworICAgIH0KKyAgICBmcmVlKGFyZ3MpOworICAgIGZyZWUobWV0aG9kX25hbWUpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgRXdrX0pTX0NsYXNzIHRvIGJl
IHVzZWQgaW4gQGEgZXdrX2pzX29iamVjdF9uZXcuIFRoZSBNZXRhIGNsYXNzJ3MKKyAqIG1ldGhv
ZHMgYW5kIHByb3BlcnRpZXMgYXJlIG5vdCBtb2RpZmllZCBidXQgcmVmZXJlbmNlcyB0byBpdCBh
cmUga2VwdCBhcyBsb25nCisgKiBhcyB0aGUgY2xhc3MoYW5kIG9iamVjdCBjcmVhdGVkIGZyb20g
aXQpIGxpdmVzLiBBbGwgcHJvcGVydGllcyBjcmVhdGVkIGhlcmUKKyAqIHdpbGwgYmUgYWRkZWQg
dG8gdGhlIG9iamVjdCBoYXNoIG9mIHByb3BlcnRpZXMuIFByb3BlcnRpZXMgdXNpbmcgZGVmYXVs
dF9wcm9wJ3MKKyAqIGdldC9zZXQvZGVsIG1ldGhvZHMgc2hvdWxkIGFsc28gYmUgYWRkZWQgdG8g
dGhlIG9iamVjdHMgaGFzaChzZWU6CisgKiBAYSBld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0
KS4KKyAqCisgKiBAcGFyYW0gbWV0YSBAYSBFd2tfSlNfQ2xhc3NfTWV0YSB0aGF0IGRlc2NyaWJl
cyB0aGUgY2xhc3MgdG8gYmUgY3JlYXRlZC4KKyAqCisgKiBAcmV0dXJuIFRoZSBFd2tfSlNfQ2xh
c3MgY3JlYXRlZC4KKyAqLworRXdrX0pTX0NsYXNzKiBld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3
a19KU19DbGFzc19NZXRhKiBtZXRhKQoreworICAgIEV3a19KU19DbGFzcyogY2xzOworICAgIGlu
dCBpLCBjb3VudCA9IDA7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWV0
YSwgMCk7CisKKyAgICBjbHMgPSAoRXdrX0pTX0NsYXNzKiltYWxsb2Moc2l6ZW9mKEV3a19KU19D
bGFzcykpOworICAgIGNscy0+bWV0YSA9IG1ldGE7CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBt
ZXRhLT5kZWZhdWx0X3Byb3A7CisgICAgZm9yIChpID0gMDsgbWV0YS0+bWV0aG9kcyAmJiBtZXRh
LT5tZXRob2RzW2ldLm5hbWU7IGkrKykKKyAgICAgICAgY291bnQrKzsKKyAgICAvLyBkb24ndCBm
cmVlIG1ldGhvZHMgc2luY2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNzIG1ldGhvZHMod2lsbCBi
ZSBmcmVlZCB3aGVuIG1ldGEgY2xhc3MgaXMgZnJlZWQpCisgICAgaWYgKGNvdW50IDwgMjUpCisg
ICAgICAgIGNscy0+bWV0aG9kcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KDApOworICAg
IGVsc2UKKyAgICAgICAgY2xzLT5tZXRob2RzID0gZWluYV9oYXNoX3N0cmluZ19zdXBlcmZhc3Rf
bmV3KDApOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAgICAgICBlaW5hX2hh
c2hfYWRkKGNscy0+bWV0aG9kcywgbWV0YS0+bWV0aG9kc1tpXS5uYW1lLCAmbWV0YS0+bWV0aG9k
c1tpXSk7CisKKyAgICBjb3VudCA9IDA7CisgICAgZm9yIChpID0gMDsgbWV0YS0+cHJvcGVydGll
cyAmJiBtZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykKKyAgICAgICAgY291bnQrKzsKKyAg
ICAvLyBkb24ndCBmcmVlIHByb3BlcnRpZXMgc2luY2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNz
IHByb3BlcnRpZXMod2lsbCBiZSBmcmVlZCB3aGVuIG1ldGEgY2xhc3MgaXMgZnJlZWQpCisgICAg
aWYgKGNvdW50IDwgMjUpCisgICAgICAgIGNscy0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJp
bmdfc21hbGxfbmV3KDApOworICAgIGVsc2UKKyAgICAgICAgY2xzLT5wcm9wZXJ0aWVzID0gZWlu
YV9oYXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KDApOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQorICAgICAgICBlaW5hX2hhc2hfYWRkKGNscy0+cHJvcGVydGllcywgbWV0YS0+cHJv
cGVydGllc1tpXS5uYW1lLCAmbWV0YS0+cHJvcGVydGllc1tpXSk7CisgICAgcmV0dXJuIGNsczsK
K30KKworLyoqCisgKiBSZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgY2xzLgorICoK
KyAqIEBwYXJhbSBjbHMgQGEgRXdrX0pTX0NsYXNzIHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lk
IGV3a19qc19jbGFzc19mcmVlKEV3a19KU19DbGFzcyogY2xzKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGNscyk7CisgICAgZWluYV9oYXNoX2ZyZWUoY2xzLT5tZXRob2RzKTsK
KyAgICBlaW5hX2hhc2hfZnJlZShjbHMtPnByb3BlcnRpZXMpOworICAgIGZyZWUoY2xzKTsKK30K
KworLyoqCisgKiBDcmVhdGUgYSBFd2tfSlNfT2JqZWN0IHRvIGJlIHVzZWQgaW4gQGEgZXdrX3Zp
ZXdfanNfb2JqZWN0X2FkZC4KKyAqCisgKiBAcGFyYW0gY2xzIEBhIEV3a19KU19DbGFzcyB0aGF0
IGRlc2NyaWJlcyB0aGUgb2JqZWN0IHRvIGJlIGNyZWF0ZWQuCisgKgorICogQHJldHVybiBUaGUg
RXdrX0pTX09iamVjdCBjcmVhdGVkLgorICovCitFd2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0
X25ldyhjb25zdCBFd2tfSlNfQ2xhc3MqIGNscykKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmo7
CisgICAgRWluYV9IYXNoX1R1cGxlKiB0dXBsZTsKKyAgICBpbnQgaTsKKworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjbHMsIDApOworCisgICAgb2JqID0gKEV3a19KU19PYmpl
Y3QqKW1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpOworICAgIEVJTkFfTUFHSUNfU0VUKG9i
aiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqLT5jbHMgPSBjbHM7CisgICAgb2JqLT52
aWV3ID0gMDsKKworICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPmNscy0+cHJvcGVy
dGllcykgPCAyNSkKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19z
bWFsbF9uZXcoKEVpbmFfRnJlZV9DYilld2tfanNfdmFyaWFudF9mcmVlKTsKKyAgICBlbHNlCisg
ICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldygo
RWluYV9GcmVlX0NiKWV3a19qc192YXJpYW50X2ZyZWUpOworICAgIGZvciAoaSA9IDA7IGNscy0+
bWV0YS0+cHJvcGVydGllcyAmJiBjbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7
CisgICAgICAgIEV3a19KU19Qcm9wZXJ0eSBwcm9wID0gY2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
OworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBjbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFt
ZTsKKyAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxs
b2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgICAgIGlmIChwcm9wLmdldCkKKyAgICAg
ICAgICAgIHByb3AuZ2V0KG9iaiwga2V5LCB2YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CisgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEV3a19KU19WYXJpYW50X09iamVjdDoK
KyAgICAgICAgICAgIGNhc2UgRXdrX0pTX1ZhcmlhbnRfVm9pZDoKKyAgICAgICAgICAgIGNhc2Ug
RXdrX0pTX1ZhcmlhbnRfTnVsbDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUubyA9IDA7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEV3a19KU19WYXJpYW50
X1N0cmluZzoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUucyA9IHN0cmR1cChwcm9wLnZh
bHVlLnZhbHVlLnMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
d2tfSlNfVmFyaWFudF9Cb29sOgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZS5iID0gcHJv
cC52YWx1ZS52YWx1ZS5iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBFd2tfSlNfVmFyaWFudF9JbnQzMjoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUuaSA9
IHByb3AudmFsdWUudmFsdWUuaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgRXdrX0pTX1ZhcmlhbnRfRG91YmxlOgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1
ZS5kID0gcHJvcC52YWx1ZS52YWx1ZS5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVz
LCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBvYmotPmJhc2UucmVmZXJlbmNlQ291bnQgPSAx
OworICAgIG9iai0+YmFzZS5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7CisgICAgcmV0dXJuIG9iajsK
K30KKworLyoqCisgKiBSZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgb2JqLgorICoK
KyAqIEBwYXJhbSBvYmogQGEgRXdrX0pTX09iamVjdCB0byBiZSByZWxlYXNlZC4KKyAqLwordm9p
ZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKG9iaik7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4o
b2JqKTsKKworICAgIGVpbmFfaGFzaF9mcmVlKG9iai0+cHJvcGVydGllcyk7CisgICAgZnJlZShv
YmotPm5hbWUpOworCisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFSU5BX01BR0lDX05PTkUpOwor
ICAgIGZyZWUob2JqKTsKK30KKworLyoqCisgKiBHZXRzIEVpbmFfSGFzaCB3aXRoIG9iamVjdCdz
IHByb3BlcnRpZXMuCisgKgorICogQHBhcmFtIG9iaiBPYmplY3Qgd2hvc2UgcHJvcGVydGllcyBh
cmUgd2FudGVkLgorICoKKyAqIEByZXR1cm4gb2JqZWN0J3MgcHJvcGVydGllcy4KKyAqLworRWlu
YV9IYXNoKiBld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3Qq
IG9iaikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKKyAg
ICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIDApOworICAgIHJldHVybiBvYmotPnBy
b3BlcnRpZXM7Cit9CisKKy8qKgorICogR2V0cyBuYW1lIG9mIHRoZSBvYmplY3QuCisgKgorICog
QHBhcmFtIG9iaiBPYmplY3Qgd2hvc2UgbmFtZSBpcyB3YW50ZWQuCisgKgorICogQHJldHVybiBu
YW1lIG9mIG9iamVjdC4KKyAqLworY29uc3QgY2hhciogZXdrX2pzX29iamVjdF9uYW1lX2dldChj
b25zdCBFd2tfSlNfT2JqZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG9iaiwgMCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsK
KyAgICByZXR1cm4gb2JqLT5uYW1lOworfQorCisvKioKKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFs
bG9jYXRlZCBieSBAYSB2YXIuCisgKgorICogQHBhcmFtIHZhciBAYSBFd2tfSlNfVmFyaWFudCB0
byBiZSByZWxlYXNlCisgKi8KK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFyaWFu
dCogdmFyKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZhcik7CisgICAgaWYg
KHZhci0+dHlwZSA9PSBFd2tfSlNfVmFyaWFudF9TdHJpbmcpCisgICAgICAgIGZyZWUodmFyLT52
YWx1ZS5zKTsKKyAgICBlbHNlIGlmICh2YXItPnR5cGUgPT0gRXdrX0pTX1ZhcmlhbnRfT2JqZWN0
KQorICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUodmFyLT52YWx1ZS5vKTsKKyAgICBmcmVlKHZh
cik7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaCBiL1dlYktpdC9lZmwv
ZXdrL2V3a19qcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBhOTExZjlkYWU0N2NmNTU4MmFiMDJmZjEzOGQxNjJm
ZjdhMGU3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaApAQCAt
MCwwICsxLDEwNCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a19qc19oCisjZGVmaW5lIGV3a19qc19oCisKKyNp
bmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRVdLX0pTX0NMQVNTX01FVEFfVkVSU0lP
TiAwCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfQ2xhc3MgRXdrX0pTX0NsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19KU19PYmplY3QgRXdrX0pTX09iamVjdDsKK3R5cGVkZWYgc3RydWN0IF9F
d2tfSlNfQ2xhc3NfTWV0YSBFd2tfSlNfQ2xhc3NfTWV0YTsKK3R5cGVkZWYgc3RydWN0IF9Fd2tf
SlNfVmFyaWFudCBFd2tfSlNfVmFyaWFudDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfTWV0aG9k
IEV3a19KU19NZXRob2Q7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX1Byb3BlcnR5IEV3a19KU19Q
cm9wZXJ0eTsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfRGVmYXVsdCBFd2tfSlNfRGVmYXVsdDsK
K3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX0pTX1NldF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBj
b25zdCBjaGFyICpuYW1lLCBjb25zdCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOwordHlwZWRlZiBF
aW5hX0Jvb2wgKCpFd2tfSlNfR2V0X0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIg
Km5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVpbmFfQm9vbCAo
KkV3a19KU19EZWxfQ2IpKEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7Cit0
eXBlZGVmIEV3a19KU19WYXJpYW50KiAoKkV3a19KU19JbnZva2VfQ2IpKEV3a19KU19PYmplY3Qg
Km9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdDb3VudCk7CisKK3R5cGVkZWYgZW51
bSB7CisgICAgRXdrX0pTX1ZhcmlhbnRfVm9pZCwKKyAgICBFd2tfSlNfVmFyaWFudF9OdWxsLAor
ICAgIEV3a19KU19WYXJpYW50X0Jvb2wsCisgICAgRXdrX0pTX1ZhcmlhbnRfSW50MzIsCisgICAg
RXdrX0pTX1ZhcmlhbnRfRG91YmxlLAorICAgIEV3a19KU19WYXJpYW50X1N0cmluZywKKyAgICBF
d2tfSlNfVmFyaWFudF9PYmplY3QKK30gRXdrX0pTX1ZhcmlhbnRfVHlwZTsKKworc3RydWN0IF9F
d2tfSlNfVmFyaWFudCB7CisgICAgRXdrX0pTX1ZhcmlhbnRfVHlwZSB0eXBlOworICAgIHVuaW9u
IHsKKyAgICAgICAgRWluYV9Cb29sIGI7CisgICAgICAgIGludCBpOworICAgICAgICBkb3VibGUg
ZDsKKyAgICAgICAgY2hhciAqczsKKyAgICAgICAgRXdrX0pTX09iamVjdCAqbzsKKyAgICB9IHZh
bHVlOworfTsKKworc3RydWN0IF9Fd2tfSlNfTWV0aG9kIHsKKyAgICBjb25zdCBjaGFyICpuYW1l
OworICAgIEV3a19KU19JbnZva2VfQ2IgaW52b2tlOworfTsKKworc3RydWN0IF9Fd2tfSlNfUHJv
cGVydHkgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgRXdrX0pTX1NldF9DYiBzZXQ7Cisg
ICAgRXdrX0pTX0dldF9DYiBnZXQ7CisgICAgRXdrX0pTX0RlbF9DYiBkZWw7CisgICAgRXdrX0pT
X1ZhcmlhbnQgdmFsdWU7Cit9OworCitzdHJ1Y3QgX0V3a19KU19EZWZhdWx0IHsKKyAgICBFd2tf
SlNfU2V0X0NiIHNldDsKKyAgICBFd2tfSlNfR2V0X0NiIGdldDsKKyAgICBFd2tfSlNfRGVsX0Ni
IGRlbDsKK307CisKK3N0cnVjdCBfRXdrX0pTX0NsYXNzX01ldGEgeworICAgIHVuc2lnbmVkIGlu
dCB2ZXJzaW9uOyAvLyBkZWZpbmUKKyAgICBjb25zdCBFd2tfSlNfTWV0aG9kICptZXRob2RzOyAv
LyBudWxsIHRlcm1pbmF0ZWQgYXJyYXkKKyAgICBjb25zdCBFd2tfSlNfUHJvcGVydHkgKnByb3Bl
cnRpZXM7IC8vIG51bGwgdGVybWluYXRlZCBhcnJheQorICAgIEV3a19KU19EZWZhdWx0IGRlZmF1
bHRfcHJvcDsKK307CisKK0VBUEkgRWluYV9IYXNoICpld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNf
Z2V0KGNvbnN0IEV3a19KU19PYmplY3QgKm9iaik7CitFQVBJIGNvbnN0IGNoYXIgKmV3a19qc19v
YmplY3RfbmFtZV9nZXQoY29uc3QgRXdrX0pTX09iamVjdCAqb2JqKTsKKworRUFQSSB2b2lkIGV3
a19qc192YXJpYW50X2ZyZWUoRXdrX0pTX1ZhcmlhbnQgKnZhcik7CitFQVBJIEV3a19KU19DbGFz
cyAqZXdrX2pzX2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0YSk7CitFQVBJ
IHZvaWQgZXdrX2pzX2NsYXNzX2ZyZWUoRXdrX0pTX0NsYXNzICpjbHMpOworRUFQSSBFd2tfSlNf
T2JqZWN0ICpld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3MgKmNscyk7CitFQVBJ
IHZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QgKm9iaik7CisKKyNpZmRlZiBf
X2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfanNfaApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwIGIvV2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3Bw
CmluZGV4IDU3NDI3NjZiYTVjZWE3OTM0YjhjZTU5MGIyNDE5MGI5Mzc3OTE4ZDkuLmI0MzU3Mjc3
YTJiMWE4YzNmNTU2Mjc0MjVlMzQ2OWI0MDUyMDhmMWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwv
ZXdrL2V3a19tYWluLmNwcAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKQEAgLTEy
OCw2ICsxMjgsOCBAQCBpbnQgZXdrX2luaXQodm9pZCkKICAgICB9CiAjZW5kaWYKIAorICAgIGVp
bmFfbWFnaWNfc3RyaW5nX3NldChFV0tfSlNfT0JKRUNUX01BR0lDLCAiRXdrX0pTX09iamVjdCB0
eXBlIik7CisKICAgICByZXR1cm4gKytfZXdrX2luaXRfY291bnQ7CiAKIGVycm9yX2VkamU6CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oIGIvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ByaXZhdGUuaAppbmRleCAyMDk2ZTc2ZmU5OWZiZDU2YTNlODhiMTczYjVjMDUzZjBkMDNh
NmZhLi5mMjVmMDI4YmQwNzJiMGIzNTMxNTA1YjExMjc2YWIxYmFlNzI4Mjk5IDEwMDY0NAotLS0g
YS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3a19w
cml2YXRlLmgKQEAgLTI3LDggKzI3LDEwIEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiZXdrX2pzLmgiCiAj
aW5jbHVkZSAiZXdrX2xvZ2dpbmcuaCIKICNpbmNsdWRlICJld2tfdXRpbC5oIgorI2luY2x1ZGUg
Im5wcnVudGltZS5oIgogCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgpAQCAtNDAsNiArNDIsNyBAQCBleHRlcm4gIkMiIHsKIAogLy8gSWYgZGVmaW5lZCwg
ZXdrIHdpbGwgZG8gdHlwZSBjaGVja2luZyB0byBlbnN1cmUgb2JqZWN0cyBhcmUgb2YgY29ycmVj
dCB0eXBlCiAjZGVmaW5lIEVXS19UWVBFX0NIRUNLIDEKKyNkZWZpbmUgRVdLX0pTX09CSkVDVF9N
QUdJQyAweDY5Njk2OQogCiAvLyBmb3J3YXJkIGRlY2xhcmF0aW9ucwogbmFtZXNwYWNlIFdlYkNv
cmUgewpAQCAtNDgsNiArNTEsMTUgQEAgc3RydWN0IENvbnRleHRNZW51Owogc3RydWN0IENvbnRl
eHRNZW51SXRlbTsKIH0KIAorc3RydWN0IF9Fd2tfSlNfT2JqZWN0IHsKKyAgICBOUE9iamVjdCBi
YXNlOworICAgIGNoYXIgKm5hbWU7CisgICAgY29uc3QgRXdrX0pTX0NsYXNzICpjbHM7CisgICAg
RWluYV9IYXNoICpwcm9wZXJ0aWVzOyAvLyBrZXk9bmFtZSwgdmFsdWU9Y3VycmVudCB2YWx1ZSBv
ZiBwcm9wZXJ0eQorICAgIEV2YXNfT2JqZWN0ICp2aWV3OyAvLyBld2tfdmlldzogY2hlY2sgaWYg
dGhpcyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3Cisg
ICAgRUlOQV9NQUdJQzsKK307CisKIHZvaWQgZXdrX3ZpZXdfcmVhZHkoRXZhc19PYmplY3QgKm8p
Owogdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgYWN0aXZlKTsKIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0ICpv
LCBjb25zdCBjaGFyICp0aXRsZSk7CkBAIC0xMDYsNiArMTE4LDggQEAgdm9pZCBld2tfdmlld192
aWV3cG9ydF9zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHcsIGZsb2F0IGgsIGZsb2F0IGluaXRf
c2NhbGUsIGYKIAogdm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0ICpv
LCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKIAordm9pZCBld2tfdmlld19qc193aW5kb3dfb2Jq
ZWN0X2NsZWFyKEV2YXNfT2JqZWN0ICpvKTsKKwogRXdrX0hpc3RvcnkgKmV3a19oaXN0b3J5X25l
dyhXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3QgKmhpc3RvcnkpOwogdm9pZCBld2tfaGlzdG9yeV9m
cmVlKEV3a19IaXN0b3J5ICpoaXN0b3J5KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwIGIvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IGVkNmZiNGRk
M2M5MThmMGIxNzI4ODQ2NDNmZmFiM2Q5NzQxZWU4N2EuLjViNWE2ZDgxYTk3NzMzNGZhZWE1M2Mz
NDUyNWQ1MGRlOTE0MTA4NWUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNw
cAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTIyLDYgKzIyLDggQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJld2tfdmlldy5oIgogCisjaW5jbHVkZSAiQnJp
ZGdlLmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEVm
bC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiQ29udGV4
dE1lbnVDb250cm9sbGVyLmgiCkBAIC0zOCw2ICs0MCw5IEBACiAjaW5jbHVkZSAiSFRNTElucHV0
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNs
aWVudEVmbC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgorI2luY2x1ZGUgIkpTRE9NV2lu
ZG93LmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFj
a2VyLmgiCkBAIC0yNTk0LDcgKzI1OTksNyBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5n
X2ZvbnRfc2Fuc19zZXJpZl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZm9udF9zYW5zX3NlcmlmOwogfQotICAKKwogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
Zm9udF9zYW5zX3NlcmlmX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZmFtaWx5KQog
ewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAt
MzgzOCw2ICszODQzLDE3IEBAIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09i
amVjdCogbywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKIAogLyoqCiAgKiBAaW50ZXJuYWwKKyAq
IFJlcG9ydHMgdGhlIEpTIHdpbmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCisgKgorICogQHBhcmFt
IG8gdmlldy4KKyAqLwordm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNf
T2JqZWN0ICpvKQoreworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImpz
LHdpbmRvd29iamVjdCxjbGVhciIsIDApOworfQorCisvKioKKyAqIEBpbnRlcm5hbAogICogUmVw
b3J0cyB0aGUgdmlld3BvcnQgaGFzIGNoYW5nZWQuCiAgKgogICogQHBhcmFtIG8gdmlldy4KQEAg
LTM5MDEsNyArMzkxNyw3IEBAIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfZ2V0KEV2YXNfT2JqZWN0
ICpvLCBmbG9hdCogdywgZmxvYXQqIGgsIGZsb2F0KiBpbml0X3NjYWxlCiAgKiBAcGFyYW0gbyB2
aWV3LgogICogQHBhcmFtIG1pbl9zY2FsZSBtaW5pbXVtIHZhbHVlIG9mIHpvb20gcmFuZ2UuCiAg
KiBAcGFyYW0gbWF4X3NjYWxlIG1heGltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KLSAqIAorICoK
ICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpvb20gcmFuZ2UgaXMgY2hhbmdlZCwgQGMgRUlO
QV9GQUxTRSBpZiBub3Qgb3IgZmFpbHVyZS4KICAqLwogRWluYV9Cb29sIGV3a192aWV3X3pvb21f
cmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1heF9zY2Fs
ZSkKQEAgLTM5ODAsMyArMzk5Niw0MiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJs
ZV9nZXQoRXZhc19PYmplY3QqIG8pCiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS51c2VyX3NjYWxhYmxlOwogfQorCisvKioKKyAqIENyZWF0ZXMgYSBKUyBvYmplY3QgbmFt
ZWQgQGEgb2JqX25hbWUgYXMgcHJvcGVydHkgb2YgdGhlIHdpbmRvdyBvYmplY3QuIFRoaXMgc2hv
dWxkIGJlIGNhbGxlZCBvbiBhIGNhbGxiYWNrIGNvbm5lY3RlZCB0byB0aGUKKyAqIGpzLHdpbmRv
d29iamVjdCxjbGVhciBzaWduYWwuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBv
Ymogb2JqZWN0IHRoYXQgd2lsbCBiZSBhZGRlZChzZWU6IEBhIGV3a19qc19vYmplY3RfbmV3KS4K
KyAqIEBwYXJhbSBvYmpfbmFtZSBuYW1lIG9mIHRoZSBvYmplY3QuCisgKgorICogQHJldHVybiBA
YyBFSU5BX1RSVUUgaWYgb2JqZWN0IHdhcyBhZGRlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCisg
Ki8KK0VpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0ICpvLCBFd2tf
SlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQoreworICAgIGlmIChvYmotPnZp
ZXcpIC8vIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcK
KyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgb2JqLT5uYW1lID0gc3RyZHVwKG9ial9u
YW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwor
CisgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAg
V2ViQ29yZTo6SlNET01XaW5kb3cgKndpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbl9m
cmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6QmluZGlu
Z3M6OlJvb3RPYmplY3QgKnJvb3Q7CisgICAgcm9vdCA9IHByaXYtPm1haW5fZnJhbWUtPnNjcmlw
dCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOworCisgICAgaWYgKCF3aW5kb3cpIHsKKyAgICAgICAg
RVJSKCJXYXJuaW5nOiBjb3VsZG4ndCBnZXQgd2luZG93IG9iamVjdCIpOworICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRv
dy0+Z2xvYmFsRXhlYygpOworCisgICAgb2JqLT52aWV3ID0gbzsKKyAgICBKU0M6OkpTT2JqZWN0
ICpydW50aW1lT2JqZWN0ID0gKEpTQzo6SlNPYmplY3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5j
ZTo6Y3JlYXRlKChOUE9iamVjdCopb2JqLCByb290KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVj
KTsKKyAgICBKU0M6OklkZW50aWZpZXIgaWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqX25h
bWUpOworCisgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICB3aW5kb3ctPnB1dChl
eGVjLCBpZCwgcnVudGltZU9iamVjdCwgc2xvdCk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKK30K
ZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oCmluZGV4IDE5YTM1ODgzM2IyNmRmZGI5YjI5ODc5NDAzMjU2ZTBhOWRjZGU0YTAu
LmE4OTJiMmYyNTBlN2VkN2UwNTY1YjU3YmE5YjU3ZmEwODkyY2U0YmYgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaApA
QCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2hpc3RvcnkuaCIKICNpbmNsdWRlICJl
d2tfd2luZG93X2ZlYXR1cmVzLmgiCisjaW5jbHVkZSAiZXdrX2pzLmgiCiAKICNpbmNsdWRlIDxF
dmFzLmg+CiAjaW5jbHVkZSA8Y2Fpcm8uaD4KQEAgLTg3LDYgKzg4LDcgQEAgZXh0ZXJuICJDIiB7
CiAgKiAgLSAiaWNvbixyZWNlaXZlZCIsIHZvaWQ6IG1haW4gZnJhbWUgcmVjZWl2ZWQgYW4gaWNv
bi4KICAqICAtICJ2aWV3cG9ydCxjaGFuZ2VkIiwgdm9pZDogUmVwb3J0IHRoYXQgdmlld3BvcnQg
aGFzIGNoYW5nZWQuCiAgKiAgLSAiaW5wdXRtZXRob2RzLGNoYW5nZWQiIHdpdGggYSBib29sZWFu
IGluZGljYXRpbmcgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LgorICogIC0gImpzLHdpbmRv
d29iamVjdCxjbGVhciIsIHZvaWQ6IFJlcG9ydCB0aGF0IHRoZSBKUyB3aW5kb3cgb2JqZWN0IGhh
cyBiZWVuIGNsZWFyZWQuCiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19WaWV3X1NtYXJ0X0Rh
dGEgRXdrX1ZpZXdfU21hcnRfRGF0YTsKQEAgLTQ3NCw2ICs0NzYsOCBAQCBFQVBJIGZsb2F0IGV3
a192aWV3X3pvb21fcmFuZ2VfbWF4X2dldChFdmFzX09iamVjdCogbyk7CiBFQVBJIHZvaWQgZXdr
X3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB1c2VyX3Nj
YWxhYmxlKTsKIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KEV2YXNf
T2JqZWN0KiBvKTsKIAorRUFQSSBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFz
X09iamVjdCAqbywgRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSk7CisK
ICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63383</attachid>
            <date>2010-08-03 15:11:43 -0700</date>
            <delta_ts>2010-08-17 07:59:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43446-20100803191157.patch</filename>
            <type>text/plain</type>
            <size>7853</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvRVdlYkxhdW5jaGVyL21haW4uYyBiL1dlYktpdC9lZmwv
RVdlYkxhdW5jaGVyL21haW4uYwppbmRleCBjMTk1NmEyOWU5YzM1NzJjZjhkMWI1MDc3MTE1NDhi
MTFkZjVlMTVkLi5jMjk2MTgzMDNlZDZjNTU2MDY4M2JjYTQ4YjE1ZmVjMTY3OTUyYTYxIDEwMDY0
NAotLS0gYS9XZWJLaXQvZWZsL0VXZWJMYXVuY2hlci9tYWluLmMKKysrIGIvV2ViS2l0L2VmbC9F
V2ViTGF1bmNoZXIvbWFpbi5jCkBAIC03Miw2ICs3Miw1MiBAQCBzdGF0aWMgRWluYV9MaXN0ICp3
aW5kb3dzID0gTlVMTDsKIAogc3RhdGljIGNoYXIgKnRoZW1lUGF0aCA9IE5VTEw7CiAKK3N0YXRp
YyBFd2tfSlNfVmFyaWFudCAqcHJpbnRfZnVuY3Rpb24oRXdrX0pTX09iamVjdCAqb2JqLCBFd2tf
SlNfVmFyaWFudCAqYXJncywgaW50IGFyZ19jb3VudCk7CisKK3N0YXRpYyBFd2tfSlNfQ2xhc3Mg
KmpzX2NscyA9IE5VTEw7CitzdGF0aWMgRXdrX0pTX09iamVjdCAqanNfb2JqID0gTlVMTDsKKwor
c3RhdGljIGNvbnN0IEV3a19KU19NZXRob2QgbWV0aG9kc1tdID0geworICAgIHsKKyAgICAgICAg
InByaW50IiwKKyAgICAgICAgcHJpbnRfZnVuY3Rpb24KKyAgICB9LAorICAgIHsgMCB9IC8vIHRl
cm1pbmF0b3IKK30gOworCitzdGF0aWMgY29uc3QgRXdrX0pTX1Byb3BlcnR5IHByb3BlcnRpZXNb
XSA9IHsKKyAgICB7CisgICAgICAgICJteV9wcm9wIiwKKyAgICAgICAgMCwKKyAgICAgICAgMCwK
KyAgICAgICAgMCwKKyAgICAgICAgeworICAgICAgICAgICAgRXdrX0pTX1ZhcmlhbnRfU3RyaW5n
LAorICAgICAgICAgICAgeyAucyA9ICJIZWxsbyBXb3JsZCEiIH0KKyAgICAgICAgfQorICAgIH0s
CisgICAgeworICAgICAgICAibXlfcHJvcDIiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAg
ICAgICAwLAorICAgICAgICB7CisgICAgICAgICAgICBFd2tfSlNfVmFyaWFudF9TdHJpbmcsCisg
ICAgICAgICAgICB7IC5zID0gImJsYSIgfQorICAgICAgICB9CisgICAgfSwKKyAgICB7IDAgfSAv
LyB0ZXJtaW5hdG9yCit9OworCitzdGF0aWMgY29uc3QgRXdrX0pTX0NsYXNzX01ldGEganNfbWV0
YSA9IHsKKyAgICBFV0tfSlNfQ0xBU1NfTUVUQV9WRVJTSU9OLAorICAgIG1ldGhvZHMsCisgICAg
cHJvcGVydGllcywKKyAgICAwLAorICAgIDAsCisgICAgMAorfTsKKwogdHlwZWRlZiBzdHJ1Y3Qg
X1dpbmRvd19Qcm9wZXJ0aWVzIHsKICAgICBFaW5hX0Jvb2wgdG9vbGJhcnNWaXNpYmxlOjE7CiAg
ICAgRWluYV9Cb29sIHN0YXR1c2JhclZpc2libGU6MTsKQEAgLTEwMyw2ICsxNDksOCBAQCBzdGF0
aWMgY29uc3QgRWNvcmVfR2V0b3B0IG9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgZWNvcmVfZ2V0
b3B0X2NhbGxiYWNrX2Vjb3JlX2V2YXNfbGlzdF9lbmdpbmVzLCBOVUxMKSwKICAgICAgICAgRUNP
UkVfR0VUT1BUX1NUT1JFX0RFRl9CT09MCiAgICAgICAgICAgICAoJ0YnLCAiZnVsbHNjcmVlbiIs
ICJmdWxsc2NyZWVuIG1vZGUuIiwgMCksCisgICAgICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZf
Qk9PTAorICAgICAgICAgICAgKCdKJywgImV4cG9ydC1KUy10ZXN0LW9iamVjdCIsICJleHBvcnQg
SlMgdGVzdCBvYmplY3QuIiwgMCksCiAgICAgICAgIEVDT1JFX0dFVE9QVF9DQUxMQkFDS19BUkdT
CiAgICAgICAgICAgICAoJ2cnLCAiZ2VvbWV0cnkiLCAiZ2VvbWV0cnkgdG8gdXNlIGluIHg6eTp3
OmggZm9ybS4iLCAiWDpZOlc6SCIsCiAgICAgICAgICAgICAgZWNvcmVfZ2V0b3B0X2NhbGxiYWNr
X2dlb21ldHJ5X3BhcnNlLCBOVUxMKSwKQEAgLTE0Nyw3ICsxOTUsNyBAQCB0eXBlZGVmIHN0cnVj
dCBfRUxhdW5jaGVyIHsKIAogc3RhdGljIHZvaWQgYnJvd3NlckRlc3Ryb3koRWNvcmVfRXZhcyAq
ZWUpOwogc3RhdGljIHZvaWQgY2xvc2VXaW5kb3coRWNvcmVfRXZhcyAqZWUpOwotc3RhdGljIGlu
dCBicm93c2VyQ3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0
IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9SZWN0YW5nbGUgZ2VvbWV0cnksIGNvbnN0IGNoYXIgKmVu
Z2luZSwgdW5zaWduZWQgY2hhciBpc0Z1bGxzY3JlZW4pOworc3RhdGljIGludCBicm93c2VyQ3Jl
YXRlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0IGNoYXIgKnVzZXJB
Z2VudCwgRWluYV9SZWN0YW5nbGUgZ2VvbWV0cnksIGNvbnN0IGNoYXIgKmVuZ2luZSwgdW5zaWdu
ZWQgY2hhciBpc0Z1bGxzY3JlZW4sIHVuc2lnbmVkIGNoYXIgZXhwb3J0SlNPYmplY3QpOwogCiBz
dGF0aWMgdm9pZAogcHJpbnRfaGlzdG9yeShFaW5hX0xpc3QgKmxpc3QpCkBAIC0zOTMsNyArNDQx
LDcgQEAgb25faW5wdXRtZXRob2RfY2hhbmdlZCh2b2lkKiB1c2VyX2RhdGEsIEV2YXNfT2JqZWN0
KiB3ZWJ2aWV3LCB2b2lkKiBldmVudF9pbmZvKQogICoKICAqIElmIHlvdSBkb24ndCB3YW50IHRv
IHByb2Nlc3MgdGhlIHZpZXdwb3J0IHRhZywgeW91IGNhbiBlaXRoZXIgZG8gbm90aGluZyBpbiB0
aGlzIGNhbGxiYWNrCiAgKiBvciBzaW1wbHkgaWdub3JlIHRoZSBzaWduYWwgaW4geW91ciBhcHBs
aWNhdGlvbi4KLSAqIAorICoKICAqIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjYW4gYmUg
Zm91bmQgYXQgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW0K
ICAqIGVudGF0aW9uL2FwcGxlYXBwbGljYXRpb25zL3JlZmVyZW5jZS9zYWZhcml3ZWJjb250ZW50
L3VzaW5ndGhldmlld3BvcnQvdXNpbmd0aGV2aWV3cG9ydC5odG1sCiAgKi8KQEAgLTQ1OSw2ICs1
MDcsNDkgQEAgb25fcmVzaXplZCh2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVjdCAqb2Jq
LCB2b2lkICpldmVudF9pbmZvKQogICAgIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldChv
YmosIHcsIGgpOwogfQogCitzdGF0aWMgRXdrX0pTX1ZhcmlhbnQgKgorcHJpbnRfZnVuY3Rpb24o
RXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywgaW50IGFyZ19jb3VudCkK
K3sKKyAgICBpbnQgaTsKKyAgICBFd2tfSlNfVmFyaWFudCAqcmV0ID0gKEV3a19KU19WYXJpYW50
KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgZm9yIChpID0gMDsgaSA8IGFy
Z19jb3VudDsgaSsrKSB7CisgICAgICAgIHN3aXRjaCAoYXJnc1tpXS50eXBlKSB7CisgICAgICAg
IGNhc2UgRXdrX0pTX1ZhcmlhbnRfTnVsbDoKKyAgICAgICAgY2FzZSBFd2tfSlNfVmFyaWFudF9W
b2lkOgorICAgICAgICBjYXNlIEV3a19KU19WYXJpYW50X09iamVjdDoKKyAgICAgICAgICAgIHBy
aW50ZigiV1RGLCBudWxsL3ZvaWQvb2JqIGFyZ3M/IVxuIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFd2tfSlNfVmFyaWFudF9Cb29sOgorICAgICAgICAgICAgcHJpbnRmKCJB
cmd1bWVudCAlZCBpcyBvZiB0eXBlIGJvb2wgYW5kIHZhbHVlICVzXG4iLCBpLCBhcmdzW2ldLnZh
bHVlLmIgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEV3a19KU19WYXJpYW50X0ludDMyOgorICAgICAgICAgICAgcHJpbnRmKCJBcmd1bWVudCAl
ZCBpcyBvZiB0eXBlIGludCBhbmQgdmFsdWUgJWRcbiIsIGksIGFyZ3NbaV0udmFsdWUuaSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFd2tfSlNfVmFyaWFudF9Eb3VibGU6Cisg
ICAgICAgICAgICBwcmludGYoIkFyZ3VtZW50ICVkIGlzIG9mIHR5cGUgZG91YmxlIGFuZCB2YWx1
ZSAlZlxuIiwgaSwgYXJnc1tpXS52YWx1ZS5kKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEV3a19KU19WYXJpYW50X1N0cmluZzoKKyAgICAgICAgICAgIHByaW50ZigiQXJndW1l
bnQgJWQgaXMgb2YgdHlwZSBzdHJpbmcgYW5kIHZhbHVlICVzXG4iLCBpLCBhcmdzW2ldLnZhbHVl
LnMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0LT50eXBl
ID0gRXdrX0pTX1ZhcmlhbnRfU3RyaW5nOworICAgIHJldC0+dmFsdWUucyA9IHN0cmR1cCgicHJp
bnRfZnVuY3Rpb24gZXhlY3V0ZWQgc3VjZXNzZnVsbHkhXG4iKTsKKyAgICByZXR1cm4gcmV0Owor
fQorCitzdGF0aWMgdm9pZAorb25fanNfd2luZG93b2JqZWN0X2NsZWFyKHZvaWQgKnVzZXJfZGF0
YSwgRXZhc19PYmplY3QgKmJyb3dzZXIsIHZvaWQgKmV2ZW50X2luZm8pCit7CisgICAgaWYgKCFq
c19jbHMpCisgICAgICAgIGpzX2NscyA9IGV3a19qc19jbGFzc19uZXcoJmpzX21ldGEpOworICAg
IGlmIChqc19vYmopCisgICAgICAgIGV3a19qc19vYmplY3RfZnJlZShqc19vYmopOworCisgICAg
anNfb2JqID0gZXdrX2pzX29iamVjdF9uZXcoanNfY2xzKTsKKyAgICBld2tfdmlld19qc19vYmpl
Y3RfYWRkKGJyb3dzZXIsIGpzX29iaiwgIm15X29iamVjdCIpOworfQorCiBzdGF0aWMgdm9pZAog
b25fa2V5X2Rvd24odm9pZCAqZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAq
ZXZlbnRfaW5mbykKIHsKQEAgLTU2Miw3ICs2NTMsNyBAQCBvbl9rZXlfZG93bih2b2lkICpkYXRh
LCBFdmFzICplLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQogICAgICAgICBp
bmZvKCJDcmVhdGUgbmV3IHdpbmRvdyAoRjkpIHdhcyBwcmVzc2VkLlxuIik7CiAgICAgICAgIEVp
bmFfUmVjdGFuZ2xlIGdlb21ldHJ5ID0gezAsIDAsIDAsIDB9OwogICAgICAgICBicm93c2VyQ3Jl
YXRlKCJodHRwOi8vd3d3Lmdvb2dsZS5jb20iLAotICAgICAgICAgICAgICAgICAgICAgICBhcHAt
PnRoZW1lLCBhcHAtPnVzZXJBZ2VudCwgZ2VvbWV0cnksIE5VTEwsIDApOworICAgICAgICAgICAg
ICAgICAgICAgICBhcHAtPnRoZW1lLCBhcHAtPnVzZXJBZ2VudCwgZ2VvbWV0cnksIE5VTEwsIDAs
IDApOwogICAgIH0gZWxzZSBpZiAoIXN0cmNtcChldi0+a2V5LCAiRjEwIikpIHsKICAgICAgICAg
RXZhc19Db29yZCB4LCB5LCB3LCBoOwogICAgICAgICBFdmFzX09iamVjdCAqZnJhbWUgPSBld2tf
dmlld19mcmFtZV9tYWluX2dldChvYmopOwpAQCAtNTgzLDYgKzY3NCwxMSBAQCBvbl9icm93c2Vy
X2RlbCh2b2lkICpkYXRhLCBFdmFzICpldmFzLCBFdmFzX09iamVjdCAqYnJvd3Nlciwgdm9pZCAq
ZXZlbnQpCiB7CiAgICAgRUxhdW5jaGVyICphcHAgPSAoRUxhdW5jaGVyKikgZGF0YTsKIAorICAg
IGlmIChqc19jbHMpCisgICAgICAgIGV3a19qc19jbGFzc19mcmVlKGpzX2Nscyk7CisgICAgaWYg
KGpzX29iaikKKyAgICAgICAgZXdrX2pzX29iamVjdF9mcmVlKGpzX29iaik7CisKICAgICBldmFz
X29iamVjdF9ldmVudF9jYWxsYmFja19kZWwoYXBwLT5icm93c2VyLCBFVkFTX0NBTExCQUNLX0tF
WV9ET1dOLCBvbl9rZXlfZG93bik7CiAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVs
KGFwcC0+YnJvd3NlciwgRVZBU19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbl9tb3VzZV9kb3duKTsK
ICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwoYXBwLT5icm93c2VyLCBFVkFTX0NB
TExCQUNLX0ZPQ1VTX0lOLCBvbl9mb2N1c19pbik7CkBAIC02MTQsNyArNzEwLDcgQEAgcXVpdChF
aW5hX0Jvb2wgc3VjY2VzcywgY29uc3QgY2hhciAqbXNnKQogfQogCiBzdGF0aWMgaW50Ci1icm93
c2VyQ3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0IGNoYXIg
KnVzZXJBZ2VudCwgRWluYV9SZWN0YW5nbGUgZ2VvbWV0cnksIGNvbnN0IGNoYXIgKmVuZ2luZSwg
dW5zaWduZWQgY2hhciBpc0Z1bGxzY3JlZW4pCiticm93c2VyQ3JlYXRlKGNvbnN0IGNoYXIgKnVy
bCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9SZWN0YW5n
bGUgZ2VvbWV0cnksIGNvbnN0IGNoYXIgKmVuZ2luZSwgdW5zaWduZWQgY2hhciBpc0Z1bGxzY3Jl
ZW4sIHVuc2lnbmVkIGNoYXIgZXhwb3J0SlNPYmplY3QpCiB7CiAgICAgaWYgKChnZW9tZXRyeS53
IDw9IDApICYmIChnZW9tZXRyeS5oIDw9IDApKSB7CiAgICAgICAgIGdlb21ldHJ5LncgPSBERUZB
VUxUX1dJRFRIOwpAQCAtNjc4LDYgKzc3NCwxMiBAQCBicm93c2VyQ3JlYXRlKGNvbnN0IGNoYXIg
KnVybCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9SZQog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHAtPmJyb3dzZXIsICJ0b29sdGlw
LHRleHQsc2V0Iiwgb25fdG9vbHRpcF90ZXh0X3NldCwgYXBwKTsKICAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQoYXBwLT5icm93c2VyLCAiaW5wdXRtZXRob2QsY2hhbmdlZCIsIG9u
X2lucHV0bWV0aG9kX2NoYW5nZWQsIGFwcCk7CiAKKworLyogIFRoaXMgY2FsbGJhY2sgY3JlYXRl
cyBhIEpTIG9iamVjdCBwcm9wZXJ0eSBpbiB3aW5kb3cgY2FsbGVkIG15X29iamVjdC4gVGhpcyBv
YmplY3QgaGFzIGEgcHJvcGVydHkgY2FsbGVkCisgICAgbXlfcHJvcCgiSGVsbG8gV29ybGQhIikg
YW5kIGEgZnVuY3Rpb24gY2FsbGVkIHByaW50KHByaW50cyBhbGwgYXJndW1lbnRzIHRvIGNvbnNv
bGUpLiAqLworICAgIGlmIChleHBvcnRKU09iamVjdCkKKyAgICAgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKGFwcC0+YnJvd3NlciwgImpzLHdpbmRvd29iamVjdCxjbGVhciIsIG9u
X2pzX3dpbmRvd29iamVjdF9jbGVhciwgYXBwKTsKKwogLyogICAgIGV3a19jYWxsYmFja19yZXNp
emVfcmVxdWVzdGVkX2FkZChhcHAtPmJyb3dzZXIsIG9uX3Jlc2l6ZV9yZXF1ZXN0ZWQsIGFwcC0+
ZWUpOyAqLwogCiAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGFwcC0+YnJvd3Nl
ciwgRVZBU19DQUxMQkFDS19SRVNJWkUsIG9uX3Jlc2l6ZWQsIGFwcCk7CkBAIC03ODEsMTIgKzg4
MywxNCBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgdW5zaWduZWQgY2hhciBx
dWl0T3B0aW9uID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIGlzRnVsbHNjcmVlbiA9IDA7CiAgICAg
dW5zaWduZWQgY2hhciBzdWRvV29ya2Fyb3VuZCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBleHBv
cnRKU09iamVjdCA9IDA7CiAgICAgaW50IGFyZ3M7CiAKICAgICBFY29yZV9HZXRvcHRfVmFsdWUg
dmFsdWVzW10gPSB7CiAgICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIoZW5naW5lKSwKICAg
ICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0wocXVpdE9wdGlvbiksCiAgICAgICAgIEVDT1JF
X0dFVE9QVF9WQUxVRV9CT09MKGlzRnVsbHNjcmVlbiksCisgICAgICAgIEVDT1JFX0dFVE9QVF9W
QUxVRV9CT09MKGV4cG9ydEpTT2JqZWN0KSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1BU
Ul9DQVNUKGdlb21ldHJ5KSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUih0aGVtZSks
CiAgICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIodXNlckFnZW50KSwKQEAgLTgzOSw3ICs5
NDMsNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAgICAgaWYgKHByb3h5VXJpKQog
ICAgICAgICBld2tfc2V0dGluZ3NfcHJveHlfdXJpX3NldChwcm94eVVyaSk7CiAKLSAgICBicm93
c2VyQ3JlYXRlKHVybCwgdGhlbWUsIHVzZXJBZ2VudCwgZ2VvbWV0cnksIGVuZ2luZSwgaXNGdWxs
c2NyZWVuKTsKKyAgICBicm93c2VyQ3JlYXRlKHVybCwgdGhlbWUsIHVzZXJBZ2VudCwgZ2VvbWV0
cnksIGVuZ2luZSwgaXNGdWxsc2NyZWVuLCBleHBvcnRKU09iamVjdCk7CiAgICAgZWNvcmVfZXZl
bnRfaGFuZGxlcl9hZGQoRUNPUkVfRVZFTlRfU0lHTkFMX0VYSVQsIG1haW5fc2lnbmFsX2V4aXQs
ICZ3aW5kb3dzKTsKIAogICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64592</attachid>
            <date>2010-08-17 07:58:06 -0700</date>
            <delta_ts>2010-10-19 07:06:48 -0700</delta_ts>
            <desc>Adds support for exporting a JS API to EFL port.</desc>
            <filename>0001-Adds-support-for-exporting-a-JS-API-to-EFL-port-and-.patch</filename>
            <type>text/plain</type>
            <size>37891</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">RnJvbSA3NDI3MGZmMjAzNTA4NzE5ZTMzZmMwYzIzYmIzZDk4N2E0YmI2M2Q1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb25hcyBNLiBHYXN0YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1v
Ymk+CkRhdGU6IFRodSwgNSBBdWcgMjAxMCAxNzo0OTo0OCAtMDMwMApTdWJqZWN0OiBbUEFUQ0gg
MS8yXSBBZGRzIHN1cHBvcnQgZm9yIGV4cG9ydGluZyBhIEpTIEFQSSB0byBFRkwgcG9ydCBhbmQg
aW1wbGVtZW50cyBqcyx3aW5kb3dvYmplY3QsY2xlYXIgc2lnbmFsLgoKLS0tCiBXZWJLaXQvQ01h
a2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViS2l0
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIFdl
YktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBXZWJLaXQvZWZsL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MzcgKysKIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
IHwgICAgMiArLQogV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIFdlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDY2MiArKysrKysrKysrKysrKysrKysrKwogV2ViS2l0L2VmbC9ld2svZXdr
X2pzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAzICsrKwogV2ViS2l0L2VmbC9l
d2svZXdrX21haW4uY3BwICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIFdlYktpdC9l
ZmwvZXdrL2V3a19wcml2YXRlLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxNSArCiBXZWJL
aXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjAgKyst
CiBXZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDQgKwogMTIgZmlsZXMgY2hhbmdlZCwgODk0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IFdlYktpdC9lZmwvZXdrL2V3a19qcy5oCgpkaWZmIC0tZ2l0IGEvV2ViS2l0L0NN
YWtlTGlzdHMudHh0IGIvV2ViS2l0L0NNYWtlTGlzdHMudHh0CmluZGV4IDJkMjcyOTMuLmJmM2I5
NTMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJLaXQvQ01ha2VM
aXN0cy50eHQKQEAgLTQsNiArNCw3IEBAIFNFVChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICIke1dFQkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmlu
ZGluZ3MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0v
YnJpZGdlL2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9qc2MiCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2NzcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L0NoYW5nZUxvZyBiL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjAwMzAxZS4uN2QyYTUzOSAxMDA2
NDQKLS0tIGEvV2ViS2l0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvQ2hhbmdlTG9nCkBAIC01MSw2
ICs1MSwxNSBAQAogCiAgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IEFkZCBuZXcgUXVvdGEgTWFuYWdlcnMsIHJlbW92ZSBvbGQgU2VjdXJpdHlPcmlnaW4gc3ViY2xh
c3Nlcy4KIAorMjAxMC0wOC0wMyAgSm9uYXMgTS4gR2FzdGFsICA8amdhc3RhbEBwcm9mdXNpb24u
bW9iaT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
eHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorCiAyMDEwLTA3LTMxICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5j
b20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvNDMzMDc+IE1ha2Ugc3VyZSBhbGwg
cHJpdmF0ZSBoZWFkZXJzIGFyZSBjb3BpZWQgdG8gUHJpdmF0ZUhlYWRlcnMgZGlyZWN0b3J5CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0IGIvV2ViS2l0L2VmbC9DTWFr
ZUxpc3RzRWZsLnR4dAppbmRleCBlNWZiOWVmLi5jNDdmNjA1IDEwMDY0NAotLS0gYS9XZWJLaXQv
ZWZsL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
QEAgLTM5LDYgKzM5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdr
L2V3a192aWV3LmNwcAogICAgIGVmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmMKICAgICBlZmwvZXdr
L2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCisgICAgZWZsL2V3ay9ld2tfanMuY3BwCiApCiAKIExJ
U1QoQVBQRU5EIFdlYktpdF9MSUJSQVJJRVMKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvQ2hhbmdl
TG9nIGIvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggZGU2NTg4NS4uZDI3OTQ2YSAxMDA2NDQK
LS0tIGEvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKQEAg
LTE2Nyw2ICsxNjcsNDMgQEAKICAgICAgICAgKiBEZWZhdWx0VGhlbWUvd2lkZ2V0L3NsaWRlci9z
bGlkZXJfa25vYl92LnBuZzogQ29waWVkIGZyb20gV2ViS2l0L2VmbC9EZWZhdWx0VGhlbWUvd2lk
Z2V0L3Njcm9sbGJhci9zY3JvbGxiYXJfa25vYl92LnBuZy4KICAgICAgICAgKiBEZWZhdWx0VGhl
bWUvd2lkZ2V0L3NsaWRlci9zbGlkZXJfdi5wbmc6IENvcGllZCBmcm9tIFdlYktpdC9lZmwvRGVm
YXVsdFRoZW1lL3dpZGdldC9zY3JvbGxiYXIvc2Nyb2xsYmFyX3YucG5nLgogCisyMDEwLTA4LTAz
ICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9ydGluZyBKYXZhU2NyaXB0
IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00MzQ0NgorCisgICAgICAgICogQ01ha2VMaXN0c0VmbC50eHQ6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmpl
Y3RJbldvcmxkKToKKyAgICAgICAgKiBld2svRVdlYktpdC5oOgorICAgICAgICAqIGV3ay9ld2tf
anMuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQpOgor
ICAgICAgICAoX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCk6CisgICAgICAgIChfZXdrX2pz
X3Byb3BlcnR5X2hhcyk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X2dldCk6CisgICAgICAg
IChfZXdrX2pzX3Byb3BlcnR5X3NldCk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X3JlbW92
ZSk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKToKKyAgICAgICAgKF9l
d2tfanNfbWV0aG9kX2hhcyk6CisgICAgICAgIChfZXdrX2pzX21ldGhvZF9pbnZva2UpOgorICAg
ICAgICAoZXdrX2pzX2NsYXNzX25ldyk6CisgICAgICAgIChld2tfanNfY2xhc3NfZnJlZSk6Cisg
ICAgICAgIChld2tfanNfb2JqZWN0X25ldyk6CisgICAgICAgIChld2tfanNfb2JqZWN0X2ZyZWUp
OgorICAgICAgICAoZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldCk6CisgICAgICAgIChld2tf
anNfb2JqZWN0X25hbWVfZ2V0KToKKyAgICAgICAgKGV3a19qc192YXJpYW50X2ZyZWUpOgorICAg
ICAgICAqIGV3ay9ld2tfanMuaDogQWRkZWQuCisgICAgICAgICogZXdrL2V3a19tYWluLmNwcDoK
KyAgICAgICAgKGV3a19pbml0KToKKyAgICAgICAgKiBld2svZXdrX3ByaXZhdGUuaDoKKyAgICAg
ICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdrX3ZpZXdfanNfd2luZG93X29iamVj
dF9jbGVhcik6CisgICAgICAgIChld2tfdmlld19qc19vYmplY3RfYWRkKToKKyAgICAgICAgKiBl
d2svZXdrX3ZpZXcuaDoKKwogMjAxMC0wOC0wMyAgcnl1YW4gY2hvaSAgPHJ5dWFuLmNob2lAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1dl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCmluZGV4IDQ5
OWQ2YzIuLjVmNDc2NWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRFZmwuY3BwCisrKyBiL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0yMzgsNyArMjM4LDcgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qKQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihtX3ZpZXcpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNv
bnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdr
L0VXZWJLaXQuaCBiL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaAppbmRleCAxODNlOWRjLi5hY2Iz
ODNiIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKKysrIGIvV2ViS2l0L2Vm
bC9ld2svRVdlYktpdC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiZXdrX2VhcGkuaCIK
ICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1
ZGUgImV3a19qcy5oIgogI2luY2x1ZGUgImV3a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRp
bmdzLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdr
L2V3a19qcy5jcHAgYi9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjBiODFhYTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZs
L2V3ay9ld2tfanMuY3BwCkBAIC0wLDAgKzEsNjYyIEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiZXdrX2pzLmgiCisKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
Ik5QX2pzb2JqZWN0LmgiCisjaW5jbHVkZSAibnBydW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50
aW1lX2ltcGwuaCIKKworI2RlZmluZSBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvLCAuLi4p
IFwKKyAgICBpZiAoIUVJTkFfTUFHSUNfQ0hFQ0sob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKSkg
eyBcCisgICAgICAgRUlOQV9NQUdJQ19GQUlMKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7IFwK
KyAgICAgICByZXR1cm4gX19WQV9BUkdTX187IFwKKyAgICB9CisKK3N0cnVjdCBfRXdrX0pTX0Ns
YXNzIHsKKyAgICBjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YTsKKyAgICBFaW5hX0hhc2gq
IG1ldGhvZHM7IC8vIGtleT1OUElkZW50aWZpZXIobmFtZSksIHZhbHVlPXBvaW50ZXIgdG8gbWV0
YS0+bWV0aG9kczsKKyAgICBFaW5hX0hhc2gqIHByb3BlcnRpZXM7IC8vIGtleT1OUElkZW50aWZp
ZXIobmFtZSksIHZhbHVlPXBvaW50ZXIgdG8gbWV0YS0+cHJvcGVydGllczsKKyAgICBFd2tfSlNf
RGVmYXVsdCBkZWZhdWx0X3Byb3A7Cit9OworCitzdGF0aWMgYm9vbCBfZXdrX2pzX25wdmFyaWFu
dF90b192YXJpYW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBjb25zdCBOUFZhcmlhbnQqIHJlc3Vs
dCk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3a19K
U19WYXJpYW50KiBkYXRhLCBOUFZhcmlhbnQqIHJlc3VsdCk7CitzdGF0aWMgdm9pZCBfZXdrX2pz
X3Byb3BlcnR5X2ZyZWUoRXdrX0pTX1Byb3BlcnR5ICpwcm9wKTsKKworc3RhdGljIGJvb2wgX2V3
a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpOwor
c3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJv
cGVydHlfc2V0KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZh
cmlhbnQqIHZhbHVlKTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJv
cGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUs
IHVpbnQzMl90KiBjb3VudCk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX21ldGhvZF9oYXMoTlBPYmpl
Y3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpOworc3RhdGljIGJvb2wgX2V3a19qc19tZXRo
b2RfaW52b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZh
cmlhbnQqIGFyZ3MsIHVpbnQzMl90IGFyZ19jb3VudCwgTlBWYXJpYW50KiByZXN1bHQpOworCitz
dGF0aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmpl
Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3N0YXRp
YyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9zZXQoRXdrX0pTX09iamVjdCAq
b2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChFd2tfSlNfT2JqZWN0
ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOworCitFd2tfSlNfQ2xhc3MqIF9ld2tfanNfY2xhc3Nf
bmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhICptZXRhKTsKK3ZvaWQgX2V3a19qc19jbGFzc19m
cmVlKEV3a19KU19DbGFzcyAqY2xzKTsKKworc3RhdGljIE5QQ2xhc3MgRVdLX05QQ0xBU1MgPSB7
CisgICAgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04sCisgICAgLypOUEFsbG9jYXRlRnVuY3Rpb25Q
dHIqLyAwLAorICAgIC8qTlBEZWFsbG9jYXRlRnVuY3Rpb25QdHIqLyAwLAorICAgIC8qTlBJbnZh
bGlkYXRlRnVuY3Rpb25QdHIqLyAwLAorICAgIC8qTlBIYXNNZXRob2RGdW5jdGlvblB0ciovIF9l
d2tfanNfbWV0aG9kX2hhcywKKyAgICAvKk5QSW52b2tlRnVuY3Rpb25QdHIqLyBfZXdrX2pzX21l
dGhvZF9pbnZva2UsCisgICAgLypOUEludm9rZURlZmF1bHRGdW5jdGlvblB0ciovIDAsCisgICAg
LypOUEhhc1Byb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X2hhcywKKyAgICAv
Kk5QR2V0UHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfZ2V0LAorICAgIC8q
TlBTZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9zZXQsCisgICAgLypO
UFJlbW92ZVByb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X3JlbW92ZSwKKyAg
ICAvKk5QRW51bWVyYXRpb25GdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydGllc19lbnVtZXJh
dGUsCisgICAgLypOUENvbnN0cnVjdEZ1bmN0aW9uUHRyKi8gMAorfTsKKworc3RhdGljIEV3a19K
U19PYmplY3QgKl9ld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5QT2JqZWN0ICpucF9vYmopCit7
CisgICAgaW50IGk7CisgICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7CisgICAgdWludDMyX3QgbnBf
cHJvcHNfY291bnQ7CisgICAgRXdrX0pTX0NsYXNzKiBjbHM7CisgICAgRXdrX0pTX09iamVjdCog
b2JqOworICAgIEVpbmFfSXRlcmF0b3IqIGl0OworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsK
KworICAgIGlmIChFSU5BX01BR0lDX0NIRUNLKChFd2tfSlNfT2JqZWN0KilucF9vYmosIEVXS19K
U19PQkpFQ1RfTUFHSUMpKSAvLyBJdCBhbHJlYWR5IGlzIGEgRXdrX0pTX09iamVjdAorICAgICAg
IHJldHVybiAoRXdrX0pTX09iamVjdCopbnBfb2JqOworCisgICAgaWYgKCFfTlBOX0VudW1lcmF0
ZSgwLCBucF9vYmosICZ2YWx1ZXMsICZucF9wcm9wc19jb3VudCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgY2xzID0gKEV3a19KU19DbGFzcyopbWFsbG9jKHNpemVvZihFd2tfSlNfQ2xhc3Mp
KTsKKyAgICBjbHMtPm1ldGEgPSAwOworICAgIEV3a19KU19EZWZhdWx0IGRlZiA9IHsKKyAgICAg
ICAgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9zZXQsCisgICAgICAgIF9ld2tfanNfbnBvYmpl
Y3RfcHJvcGVydHlfZ2V0LAorICAgICAgICBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbAor
ICAgIH07CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBkZWY7CisgICAgY2xzLT5tZXRob2RzID0g
ZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGNscy0+cHJvcGVydGllcyA9IGVpbmFfaGFz
aF9wb2ludGVyX25ldygoRWluYV9GcmVlX0NiKV9ld2tfanNfcHJvcGVydHlfZnJlZSk7CisgICAg
Zm9yIChpID0gMDsgaSA8IG5wX3Byb3BzX2NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKF9OUE5f
SGFzUHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0pKSB7CisgICAgICAgICAgICBOUFZhcmlh
bnQgdmFyOworICAgICAgICAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wID0gKEV3a19KU19Qcm9w
ZXJ0eSopY2FsbG9jKHNpemVvZihFd2tfSlNfUHJvcGVydHkpLCAxKTsKKyAgICAgICAgICAgIF9O
UE5fR2V0UHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0sICZ2YXIpOworICAgICAgICAgICAg
X2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgmKHByb3AtPnZhbHVlKSwgJnZhcik7CisgICAg
ICAgICAgICBwcm9wLT5uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIodmFsdWVzW2ldKTsK
KyAgICAgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5wcm9wZXJ0aWVzLCB2YWx1ZXNbaV0sIHBy
b3ApOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUodmFsdWVzKTsKKworICAgIC8vIENhbid0
IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2UgaXQgZXhwZWN0cyBjbHMtPm1ldGEg
dG8gZXhpc3QKKyAgICBvYmogPSAoRXdrX0pTX09iamVjdCopbWFsbG9jKHNpemVvZihFd2tfSlNf
T2JqZWN0KSk7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKTsK
KyAgICBvYmotPm5hbWUgPSAwOworICAgIG9iai0+Y2xzID0gY2xzOworICAgIG9iai0+dmlldyA9
IDA7CisKKyAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24oY2xzLT5wcm9wZXJ0aWVzKSA8IDI1
KQorICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldygw
KTsgLy8gY2xhc3Mgd2lsbCBmcmVlIHN0dWZmCisgICAgZWxzZQorICAgICAgICBvYmotPnByb3Bl
cnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CisKKyAgICBpdCA9IGVp
bmFfaGFzaF9pdGVyYXRvcl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOworICAgIEVJTkFfSVRF
UkFUT1JfRk9SRUFDSChpdCwgcHJvcCkgeworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9w
LT5uYW1lOworICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7Cisg
ICAgICAgIGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9
CisKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOworCisgICAgb2JqLT5iYXNlID0gKihKYXZh
U2NyaXB0T2JqZWN0KilucF9vYmo7CisKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmplY3QgKm9iaiwg
Y29uc3QgY2hhciAqbmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKQoreworICAgIE5QSWRlbnRp
ZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICBOUFZhcmlhbnQg
dmFyOworICAgIGJvb2wgZmFpbCA9IF9OUE5fR2V0UHJvcGVydHkoMCwgKE5QT2JqZWN0KilvYmos
IGlkLCAmdmFyKTsKKyAgICBpZiAoIWZhaWwpCisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFy
aWFudF90b192YXJpYW50KHZhbHVlLCAmdmFyKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0
ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSkKK3sK
KyAgICBOUElkZW50aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7Cisg
ICAgTlBWYXJpYW50IHZhcjsKKyAgICBib29sIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2
YXJpYW50KHZhbHVlLCAmdmFyKTsKKyAgICBpZiAoZmFpbCkKKyAgICAgICAgZmFpbCA9IF9OUE5f
U2V0UHJvcGVydHkoMCwgKE5QT2JqZWN0KilvYmosIGlkLCAmdmFyKTsKKyAgICByZXR1cm4gZmFp
bDsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChF
d2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgTlBJZGVudGlmaWVy
IGlkID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBfTlBOX1Jl
bW92ZVByb3BlcnR5KDAsIChOUE9iamVjdCopb2JqLCBpZCk7Cit9CisKK3N0YXRpYyBib29sIF9l
d2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIE5Q
VmFyaWFudCogcmVzdWx0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
YXRhLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlc3VsdCwg
ZmFsc2UpOworICAgIHN3aXRjaCAoZGF0YS0+dHlwZSkgeworICAgIGNhc2UgRVdLX0pTX1ZBUklB
TlRfVk9JRDoKKyAgICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfTlVMTDoKKyAgICAgICAgTlVMTF9UT19OUFZB
UklBTlQoKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRf
SU5UMzI6CisgICAgICAgIElOVDMyX1RPX05QVkFSSUFOVChkYXRhLT52YWx1ZS5pLCAqcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9ET1VCTEU6CisgICAg
ICAgIERPVUJMRV9UT19OUFZBUklBTlQoZGF0YS0+dmFsdWUuZCwgKnJlc3VsdCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfU1RSSU5HOgorICAgICAgICBTVFJJTkda
X1RPX05QVkFSSUFOVChzdHJkdXAoZGF0YS0+dmFsdWUucyksICpyZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX0JPT0w6CisgICAgICAgIEJPT0xFQU5fVE9f
TlBWQVJJQU5UKGRhdGEtPnZhbHVlLmIsICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVXS19KU19WQVJJQU5UX09CSkVDVDoKKyAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVCgo
TlBPYmplY3QqKWRhdGEtPnZhbHVlLm8sICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KEV3a19KU19WYXJp
YW50KiBkYXRhLCBjb25zdCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpbnQgc3o7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIGZhbHNlKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVzdWx0LCBmYWxzZSk7CisgICAgc3dpdGNoIChyZXN1
bHQtPnR5cGUpIHsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKKyAgICAgICAgZGF0YS0+
dHlwZSA9IEVXS19KU19WQVJJQU5UX1ZPSUQ7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKKyAgICAgICAgZGF0
YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX05VTEw7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAw
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAg
IGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9JTlQzMjsKKyAgICAgICAgZGF0YS0+dmFsdWUu
aSA9IE5QVkFSSUFOVF9UT19JTlQzMigqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBOUFZhcmlhbnRUeXBlX0RvdWJsZToKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJ
QU5UX0RPVUJMRTsKKyAgICAgICAgZGF0YS0+dmFsdWUuZCA9IE5QVkFSSUFOVF9UT19ET1VCTEUo
KnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6
CisgICAgICAgIHN6ID0gTlBWQVJJQU5UX1RPX1NUUklORygqcmVzdWx0KS5VVEY4TGVuZ3RoOwor
ICAgICAgICBkYXRhLT52YWx1ZS5zID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoc3og
KyAxKSk7CisgICAgICAgIG1lbWNweShkYXRhLT52YWx1ZS5zLCBOUFZBUklBTlRfVE9fU1RSSU5H
KCpyZXN1bHQpLlVURjhDaGFyYWN0ZXJzLCBzeik7CisgICAgICAgIGRhdGEtPnZhbHVlLnNbc3pd
ID0gJ1wwJzsKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX1NUUklORzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIGRhdGEt
PnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9CT09MOworICAgICAgICBkYXRhLT52YWx1ZS5iID0gTlBW
QVJJQU5UX1RPX0JPT0xFQU4oKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBW
YXJpYW50VHlwZV9PYmplY3Q6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9P
QkpFQ1Q7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSBfZXdrX2pzX25wb2JqZWN0X3RvX29iamVj
dChOUFZBUklBTlRfVE9fT0JKRUNUKCpyZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJ
ZGVudGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmpl
Y3QqKW5wX29iajsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09S
X1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmco
bmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKyAgICBjaGFyKiBwcm9wX25hbWUgPSBf
TlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICBpZiAoZWluYV9oYXNoX2ZpbmQob2Jq
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKSAvLyBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPwor
ICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICBmcmVlKHByb3BfbmFtZSk7CisKKyAgICByZXR1cm4g
ZmFpbDsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5w
X29iaiwgTlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEV3a19K
U19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1Zhcmlh
bnQqIHZhbHVlOworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBm
YWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNl
KTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlm
ICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJ
ZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAg
IH0KKworICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19W
YXJpYW50KSk7CisgICAgcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9maW5kKG9i
ai0+Y2xzLT5wcm9wZXJ0aWVzLCBuYW1lKTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5nZXQpIHsg
Ly8gY2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyCisgICAgICAgIGZh
aWwgPSBwcm9wLT5nZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgIGlmICghZmFp
bCkKKyAgICAgICAgICAgIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVl
LCByZXN1bHQpOworICAgIH0gZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsg
Ly8gZGVmYXVsdCBnZXR0ZXIgZXhpc3RzCisgICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVs
dF9wcm9wLmdldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFmYWlsKQor
ICAgICAgICAgICAgZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJl
c3VsdCk7CisgICAgfSBlbHNlIHsgLy8gZmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcAorICAg
ICAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAg
ICAgICAgZnJlZSh2YWx1ZSk7CisgICAgICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KillaW5h
X2hhc2hfZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgICAgIGZyZWUocHJv
cF9uYW1lKTsKKyAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIF9ld2tfanNf
dmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAgfQorCisgICAgZnJlZSh2
YWx1ZSk7CisgICAgcmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVy
dHlfc2V0KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlh
bnQqIG5wX3ZhbHVlKQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0
KilucF9vYmo7CisgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOworICAgIEV3a19KU19Qcm9wZXJ0
eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFt
ZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7
CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKworICAgIHZhbHVlID0gKEV3a19KU19WYXJp
YW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgX2V3a19qc19ucHZhcmlh
bnRfdG9fdmFyaWFudCh2YWx1ZSwgbnBfdmFsdWUpOworICAgIGNoYXIqIHByb3BfbmFtZSA9IF9O
UE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOworICAgIHByb3AgPSAoRXdrX0pTX1Byb3BlcnR5
KillaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsKKyAgICBp
ZiAocHJvcCAmJiBwcm9wLT5zZXQpCisgICAgICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqLCBwcm9w
LT5uYW1lLCB2YWx1ZSk7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNl
dHRlcgorICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KQorICAgICAgICBm
YWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQob2JqLCBwcm9wX25hbWUsIHZhbHVlKTsg
Ly8gZGVmYXVsdCBnZXR0ZXIgZXhpc3RzCisgICAgZWxzZSB7IC8vIGZhbGxiYWNrIHRvIG9iamVj
dHMgaGFzaCBtYXAKKyAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3Bl
cnRpZXMsIHByb3BfbmFtZSwgdmFsdWUpOworICAgICAgICBmcmVlKG9sZCk7CisgICAgICAgIGZh
aWwgPSB0cnVlOworICAgIH0KKworICAgIGZyZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFp
bDsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5w
X29iaiwgTlBJZGVudGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3
a19KU19PYmplY3QqKW5wX29iajsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgYm9v
bCBmYWlsID0gZmFsc2U7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBf
b2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7
CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVS
UigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4g
ZmFpbDsKKyAgICB9CisKKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRp
ZmllcihuYW1lKTsKKyAgICBwcm9wID0gKEV3a19KU19Qcm9wZXJ0eSopZWluYV9oYXNoX2ZpbmQo
b2JqLT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgaWYgKHByb3AgJiYgcHJvcC0+
ZGVsKQorICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8vIGNsYXNz
IGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlcgorICAgIGVsc2UgaWYgKG9iai0+
Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKQorICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRf
cHJvcC5kZWwob2JqLCBwcm9wX25hbWUpOworICAgIGVsc2UKKyAgICAgICAgZmFpbCA9IGVpbmFf
aGFzaF9kZWwob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOworCisgICAgZnJlZShwcm9w
X25hbWUpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3Bl
cnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1
aW50MzJfdCogY291bnQpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmpl
Y3QqKW5wX29iajsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKKyAgICBjaGFyKiBrZXk7CisgICAg
aW50IGkgPSAwOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwg
ZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAg
IGl0ID0gZWluYV9oYXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqLT5wcm9wZXJ0aWVzKTsKKworICAg
ICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+cHJvcGVydGllcyk7CisgICAgKnZh
bHVlID0gKE5QSWRlbnRpZmllciopbWFsbG9jKHNpemVvZihOUElkZW50aWZpZXIpICogKmNvdW50
KTsKKyAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXQsIGtleSkKKyAgICAgICAgKCp2YWx1ZSlb
aSsrXSA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihrZXkpOworCisgICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19t
ZXRob2RfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3
a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19D
SEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklz
U3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3Vw
cG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBlaW5h
X2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBp
ZiBmb3VuZCh0cnVlKSwgTlVMTChmYWxzZSkgb3RoZXJ3aXNlCit9CisKK3N0YXRpYyBib29sIF9l
d2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwg
Y29uc3QgTlBWYXJpYW50KiBucF9hcmdzLCB1aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFu
dCogcmVzdWx0KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0Kilu
cF9vYmo7CisgICAgRXdrX0pTX01ldGhvZCogbWV0aG9kOworICAgIEV3a19KU19WYXJpYW50KiBh
cmdzOworICAgIEV3a19KU19WYXJpYW50KiByZXRfdmFsOworICAgIGludCBpOworCisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFH
SUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90
IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIG1ldGhv
ZCA9IChFd2tfSlNfTWV0aG9kKillaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFt
ZSk7CisgICAgaWYgKCFtZXRob2QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGFyZ3Mg
PSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpICogbnBfYXJn
X2NvdW50KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnBfYXJnX2NvdW50OyBpKyspCisgICAgICAg
ICAgICBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBfYXJnc1tpXSk7
CisgICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJncywgbnBfYXJnX2NvdW50KTsK
KyAgICBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHJldF92YWwsIHJlc3VsdCk7CisKKyAg
ICBld2tfanNfdmFyaWFudF9mcmVlKHJldF92YWwpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
Ky8qKgorICogQ3JlYXRlIGEgRXdrX0pTX0NsYXNzIHRvIGJlIHVzZWQgaW4gQGEgZXdrX2pzX29i
amVjdF9uZXcuCisgKgorICogQHBhcmFtIG1ldGEgQGEgRXdrX0pTX0NsYXNzX01ldGEgdGhhdCBk
ZXNjcmliZXMgdGhlIGNsYXNzIHRvIGJlIGNyZWF0ZWQuCisgKgorICogQHJldHVybiBUaGUgRXdr
X0pTX0NsYXNzIGNyZWF0ZWQuCisgKi8KK0V3a19KU19DbGFzcyogX2V3a19qc19jbGFzc19uZXco
Y29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGEpCit7CisgICAgRXdrX0pTX0NsYXNzKiBjbHM7
CisgICAgaW50IGk7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWV0YSwg
MCk7CisKKyAgICBjbHMgPSAoRXdrX0pTX0NsYXNzKiltYWxsb2Moc2l6ZW9mKEV3a19KU19DbGFz
cykpOworICAgIGNscy0+bWV0YSA9IG1ldGE7CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBtZXRh
LT5kZWZhdWx0X3Byb3A7CisKKyAgICAvLyBkb24ndCBmcmVlIG1ldGhvZHMgc2luY2UgdGhleSBw
b2ludCB0byBtZXRhIGNsYXNzIG1ldGhvZHMod2lsbCBiZSBmcmVlZCB3aGVuIG1ldGEgY2xhc3Mg
aXMgZnJlZWQpCisgICAgY2xzLT5tZXRob2RzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOwor
ICAgIGZvciAoaSA9IDA7IG1ldGEtPm1ldGhvZHMgJiYgbWV0YS0+bWV0aG9kc1tpXS5uYW1lOyBp
KyspIHsKKyAgICAgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
KG1ldGEtPm1ldGhvZHNbaV0ubmFtZSk7CisgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5tZXRo
b2RzLCBpZCwgJm1ldGEtPm1ldGhvZHNbaV0pOworICAgIH0KKworICAgIC8vIGRvbid0IGZyZWUg
cHJvcGVydGllcyBzaW5jZSB0aGV5IHBvaW50IHRvIG1ldGEgY2xhc3MgcHJvcGVydGllcyh3aWxs
IGJlIGZyZWVkIHdoZW4gbWV0YSBjbGFzcyBpcyBmcmVlZCkKKyAgICBjbHMtPnByb3BlcnRpZXMg
PSBlaW5hX2hhc2hfcG9pbnRlcl9uZXcoMCk7CisgICAgZm9yIChpID0gMDsgbWV0YS0+cHJvcGVy
dGllcyAmJiBtZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBOUElkZW50
aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobWV0YS0+cHJvcGVydGllc1tpXS5u
YW1lKTsKKyAgICAgICAgZWluYV9oYXNoX2FkZChjbHMtPnByb3BlcnRpZXMsIGlkLCAmbWV0YS0+
cHJvcGVydGllc1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIGNsczsKK30KKworLyoqCisgKiBS
ZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgY2xzLgorICoKKyAqIEBwYXJhbSBjbHMg
QGEgRXdrX0pTX0NsYXNzIHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIF9ld2tfanNfY2xhc3Nf
ZnJlZShFd2tfSlNfQ2xhc3MqIGNscykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihjbHMpOworICAgIGVpbmFfaGFzaF9mcmVlKGNscy0+bWV0aG9kcyk7CisgICAgZWluYV9oYXNo
X2ZyZWUoY2xzLT5wcm9wZXJ0aWVzKTsKKyAgICBmcmVlKGNscyk7Cit9CisKKy8qKgorICogQ3Jl
YXRlIGEgRXdrX0pTX09iamVjdCB0byBiZSB1c2VkIGluIEBhIGV3a192aWV3X2pzX29iamVjdF9h
ZGQuIFRoZSBNZXRhIGNsYXNzJ3MKKyAqIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgYXJlIG5vdCBt
b2RpZmllZCBidXQgcmVmZXJlbmNlcyB0byBpdCBhcmUga2VwdCBhcyBsb25nCisgKiBhcyB0aGUg
b2JqZWN0IGNyZWF0ZWQgZnJvbSBpdCBsaXZlcy4gQWxsIHByb3BlcnRpZXMgY3JlYXRlZCBoZXJl
CisgKiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBvYmplY3QgaGFzaCBvZiBwcm9wZXJ0aWVzLiBQcm9w
ZXJ0aWVzIHVzaW5nIGRlZmF1bHRfcHJvcCdzCisgKiBnZXQvc2V0L2RlbCBtZXRob2RzIHNob3Vs
ZCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBvYmplY3RzIGhhc2goc2VlOgorICogQGEgZXdrX2pzX29i
amVjdF9wcm9wZXJ0aWVzX2dldCkuIE1ldGhvZHMgbXVzdCBmcmVlIHRoZSBhcmd1bWVudHMgdGhl
eSByZWNlaXZlKHNlZToKKyAqIEBhIGV3a19qc192YXJpYW5nX2FycmF5X2ZyZWUpLgorICoKKyAq
CisgKiBAcGFyYW0gY2xzIEBhIEV3a19KU19DbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgb2JqZWN0
IHRvIGJlIGNyZWF0ZWQuCisgKgorICogQHJldHVybiBUaGUgRXdrX0pTX09iamVjdCBjcmVhdGVk
LgorICovCitFd2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xh
c3NfTWV0YSogbWV0YV9jbHMpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIGludCBp
OworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGFfY2xzLCAwKTsKKwor
ICAgIG9iaiA9IChFd2tfSlNfT2JqZWN0KiltYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKTsK
KyAgICBFSU5BX01BR0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iai0+
Y2xzID0gX2V3a19qc19jbGFzc19uZXcobWV0YV9jbHMpOworICAgIG9iai0+dmlldyA9IDA7Cisg
ICAgb2JqLT5uYW1lID0gMDsKKworICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPmNs
cy0+cHJvcGVydGllcykgPCAyNSkKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNo
X3N0cmluZ19zbWFsbF9uZXcoKEVpbmFfRnJlZV9DYilld2tfanNfdmFyaWFudF9mcmVlKTsKKyAg
ICBlbHNlCisgICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc3VwZXJm
YXN0X25ldygoRWluYV9GcmVlX0NiKWV3a19qc192YXJpYW50X2ZyZWUpOworICAgIGZvciAoaSA9
IDA7IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzICYmIG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0
aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iai0+
Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldOworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmot
PmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOworICAgICAgICBFd2tfSlNfVmFyaWFudCog
dmFsdWUgPSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKTsK
KyAgICAgICAgaWYgKHByb3AuZ2V0KQorICAgICAgICAgICAgcHJvcC5nZXQob2JqLCBrZXksIHZh
bHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2YWx1ZS0+dHlwZSA9IHByb3AudmFs
dWUudHlwZTsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgRVdLX0pTX1ZBUklBTlRfVk9JRDoKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklB
TlRfTlVMTDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUubyA9IDA7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX1NUUklORzoKKyAg
ICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUucyA9IHN0cmR1cChwcm9wLnZhbHVlLnZhbHVlLnMp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFO
VF9CT09MOgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZS5iID0gcHJvcC52YWx1ZS52YWx1
ZS5iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFV0tfSlNfVkFS
SUFOVF9JTlQzMjoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUuaSA9IHByb3AudmFsdWUu
dmFsdWUuaTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pT
X1ZBUklBTlRfRE9VQkxFOgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZS5kID0gcHJvcC52
YWx1ZS52YWx1ZS5kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
V0tfSlNfVkFSSUFOVF9PQkpFQ1Q6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLm8gPSBw
cm9wLnZhbHVlLnZhbHVlLm87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3BlcnRpZXMsIGtleSwg
dmFsdWUpOworICAgIH0KKworICAgIG9iai0+YmFzZS5vYmplY3QucmVmZXJlbmNlQ291bnQgPSAx
OworICAgIG9iai0+YmFzZS5vYmplY3QuX2NsYXNzID0gJkVXS19OUENMQVNTOworICAgIHJldHVy
biBvYmo7Cit9CisKKy8qKgorICogUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBhIG9i
ai4KKyAqCisgKiBAcGFyYW0gb2JqIEBhIEV3a19KU19PYmplY3QgdG8gYmUgcmVsZWFzZWQuCisg
Ki8KK3ZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QqIG9iaikKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvYmopOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKG9iaik7CisgICAgRWluYV9Cb29sIHNjcmlwdF9vYmogPSAhb2JqLT5jbHMtPm1ldGE7
CisKKyAgICBlaW5hX2hhc2hfZnJlZShvYmotPnByb3BlcnRpZXMpOworICAgIGZyZWUob2JqLT5u
YW1lKTsKKworICAgIF9ld2tfanNfY2xhc3NfZnJlZSgoRXdrX0pTX0NsYXNzKilvYmotPmNscyk7
CisKKyAgICBFSU5BX01BR0lDX1NFVChvYmosIEVJTkFfTUFHSUNfTk9ORSk7CisKKyAgICBpZiAo
c2NyaXB0X29iaikKKyAgICAgICAgZnJlZShvYmopOworfQorCisvKioKKyAqIEdldHMgRWluYV9I
YXNoIHdpdGggb2JqZWN0J3MgcHJvcGVydGllcy4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdCB3
aG9zZSBwcm9wZXJ0aWVzIGFyZSB3YW50ZWQuCisgKgorICogQHJldHVybiBvYmplY3QncyBwcm9w
ZXJ0aWVzLgorICovCitFaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29u
c3QgRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChvYmosIDApOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgMCk7Cisg
ICAgcmV0dXJuIG9iai0+cHJvcGVydGllczsKK30KKworLyoqCisgKiBHZXRzIG5hbWUgb2YgdGhl
IG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdCB3aG9zZSBuYW1lIGlzIHdhbnRlZC4K
KyAqCisgKiBAcmV0dXJuIG5hbWUgb2Ygb2JqZWN0LgorICovCitjb25zdCBjaGFyKiBld2tfanNf
b2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9iaikKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09S
X1JFVFVSTihvYmosIDApOworICAgIHJldHVybiBvYmotPm5hbWU7Cit9CisKKy8qKgorICogQ2Fs
bHMgdGhlIGZ1bmN0aW9uIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCisgKgorICogQHBhcmFtIG9i
aiBPYmplY3QgdGhhdCByZXByZXNlbnRzIGZ1bmN0aW9uLgorICogQHBhcmFtIGFyZ3MgQXJndW1l
bnRzIHRvIGJlIHBhc3NlZCB0byBmdW5jdGlvbi4KKyAqIEBwYXJhbSBhcmdfY291bnQgTnVtYmVy
IG9mIGFyZ3VtZW50cy4KKyAqIEBwYXJhbSByZXN1bHQgUmV0dXJuIHZhbHVlIG9mIHRoZSBpbnZv
a2VkIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIGZ1bmN0aW9uIHdh
cyBleGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBpZiBmdW5jdGlvbiB3YXMgbm90IGV4ZWN1dGVkLgor
ICovCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09iamVjdCogb2JqLCBF
d2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ19jb3VudCwgRXdrX0pTX1ZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBOUFZhcmlhbnQqIG5wX2FyZ3M7CisgICAgTlBWYXJpYW50IG5wX3Jlc3VsdDsK
KyAgICBib29sIGZhaWwgPSBFSU5BX0ZBTFNFOworICAgIGludCBpOworCisgICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoYXJnX2NvdW50KQor
ICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJncywgRUlOQV9GQUxTRSk7
CisKKyAgICBucF9hcmdzID0gKE5QVmFyaWFudCopbWFsbG9jKHNpemVvZihOUFZhcmlhbnQpICog
YXJnX2NvdW50KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnX2NvdW50OyBpKyspCisgICAgICAg
IGlmICghX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudCgmYXJnc1tpXSwgJm5wX2FyZ3NbaV0p
KQorICAgICAgICAgICAgZ290byBlbmQ7CisKKyAgICBpZiAoIShmYWlsID0gX05QTl9JbnZva2VE
ZWZhdWx0KDAsIChOUE9iamVjdCopb2JqLCBucF9hcmdzLCBhcmdfY291bnQsICZucF9yZXN1bHQp
KSkKKyAgICAgICAgZ290byBlbmQ7CisgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgZmFpbCA9IF9l
d2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQocmVzdWx0LCAmbnBfcmVzdWx0KTsKKworZW5kOgor
ICAgIGZyZWUobnBfYXJncyk7CisgICAgcmV0dXJuIGZhaWw7Cit9CisKKy8qKgorICogUmVsZWFz
ZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBhIHZhci4KKyAqCisgKiBAcGFyYW0gdmFyIEBhIEV3
a19KU19WYXJpYW50IHRvIGJlIHJlbGVhc2UKKyAqLwordm9pZCBld2tfanNfdmFyaWFudF9mcmVl
KEV3a19KU19WYXJpYW50KiB2YXIpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dmFyKTsKKyAgICBpZiAodmFyLT50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklORykKKyAgICAg
ICAgZnJlZSh2YXItPnZhbHVlLnMpOworICAgIGVsc2UgaWYgKHZhci0+dHlwZSA9PSBFV0tfSlNf
VkFSSUFOVF9PQkpFQ1QpCisgICAgICAgIGV3a19qc19vYmplY3RfZnJlZSh2YXItPnZhbHVlLm8p
OworICAgIGZyZWUodmFyKTsKK30KKwordm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3
a19KU19WYXJpYW50ICp2YXIsIGludCBjb3VudCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih2YXIpOworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7CisgICAgICAgIGlmICh2YXJbaV0udHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisg
ICAgICAgICAgICBmcmVlKHZhcltpXS52YWx1ZS5zKTsKKyAgICAgICAgZWxzZSBpZiAodmFyW2ld
LnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICAgICAgZXdrX2pzX29iamVj
dF9mcmVlKHZhcltpXS52YWx1ZS5vKTsKKyAgICB9CisgICAgZnJlZSh2YXIpOworfQorCitzdGF0
aWMgdm9pZCBfZXdrX2pzX3Byb3BlcnR5X2ZyZWUoRXdrX0pTX1Byb3BlcnR5ICpwcm9wKQorewor
ICAgIGZyZWUoKHZvaWQqKXByb3AtPm5hbWUpOworICAgIGlmIChwcm9wLT52YWx1ZS50eXBlID09
IEVXS19KU19WQVJJQU5UX1NUUklORykKKyAgICAgICAgZnJlZShwcm9wLT52YWx1ZS52YWx1ZS5z
KTsKKyAgICBlbHNlIGlmIChwcm9wLT52YWx1ZS50eXBlID09IEVXS19KU19WQVJJQU5UX09CSkVD
VCkKKyAgICAgICAgZXdrX2pzX29iamVjdF9mcmVlKHByb3AtPnZhbHVlLnZhbHVlLm8pOworICAg
IGZyZWUocHJvcCk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaCBiL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjZhOTdhN2EKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaApAQCAt
MCwwICsxLDEwMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUHJvRlVTSU9OIGVtYmVk
ZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a19qc19oCisjZGVmaW5lIGV3a19qc19oCisKKyNp
bmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMK
K2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRVdLX0pTX0NMQVNTX01FVEFfVkVSU0lP
TiAwCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfT2JqZWN0IEV3a19KU19PYmplY3Q7Cit0eXBl
ZGVmIHN0cnVjdCBfRXdrX0pTX0NsYXNzX01ldGEgRXdrX0pTX0NsYXNzX01ldGE7Cit0eXBlZGVm
IHN0cnVjdCBfRXdrX0pTX1ZhcmlhbnQgRXdrX0pTX1ZhcmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
RXdrX0pTX01ldGhvZCBFd2tfSlNfTWV0aG9kOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19Qcm9w
ZXJ0eSBFd2tfSlNfUHJvcGVydHk7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX0RlZmF1bHQgRXdr
X0pTX0RlZmF1bHQ7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19TZXRfQ2IpKEV3a19KU19P
YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVl
KTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX0pTX0dldF9DYikoRXdrX0pTX09iamVjdCAqb2Jq
LCBjb25zdCBjaGFyICpuYW1lLCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOwordHlwZWRlZiBFaW5h
X0Jvb2wgKCpFd2tfSlNfRGVsX0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5h
bWUpOwordHlwZWRlZiBFd2tfSlNfVmFyaWFudCogKCpFd2tfSlNfSW52b2tlX0NiKShFd2tfSlNf
T2JqZWN0ICpvYmosIEV3a19KU19WYXJpYW50ICphcmdzLCBpbnQgYXJnQ291bnQpOworCit0eXBl
ZGVmIGVudW0geworICAgIEVXS19KU19WQVJJQU5UX1ZPSUQsCisgICAgRVdLX0pTX1ZBUklBTlRf
TlVMTCwKKyAgICBFV0tfSlNfVkFSSUFOVF9CT09MLAorICAgIEVXS19KU19WQVJJQU5UX0lOVDMy
LAorICAgIEVXS19KU19WQVJJQU5UX0RPVUJMRSwKKyAgICBFV0tfSlNfVkFSSUFOVF9TVFJJTkcs
CisgICAgRVdLX0pTX1ZBUklBTlRfT0JKRUNUCit9IEV3a19KU19WYXJpYW50X1R5cGU7CisKK3N0
cnVjdCBfRXdrX0pTX1ZhcmlhbnQgeworICAgIEV3a19KU19WYXJpYW50X1R5cGUgdHlwZTsKKyAg
ICB1bmlvbiB7CisgICAgICAgIEVpbmFfQm9vbCBiOworICAgICAgICBpbnQgaTsKKyAgICAgICAg
ZG91YmxlIGQ7CisgICAgICAgIGNoYXIgKnM7CisgICAgICAgIEV3a19KU19PYmplY3QgKm87Cisg
ICAgfSB2YWx1ZTsKK307CisKK3N0cnVjdCBfRXdrX0pTX01ldGhvZCB7CisgICAgY29uc3QgY2hh
ciAqbmFtZTsKKyAgICBFd2tfSlNfSW52b2tlX0NiIGludm9rZTsKK307CisKK3N0cnVjdCBfRXdr
X0pTX1Byb3BlcnR5IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIEV3a19KU19TZXRfQ2Ig
c2V0OworICAgIEV3a19KU19HZXRfQ2IgZ2V0OworICAgIEV3a19KU19EZWxfQ2IgZGVsOworICAg
IEV3a19KU19WYXJpYW50IHZhbHVlOworfTsKKworc3RydWN0IF9Fd2tfSlNfRGVmYXVsdCB7Cisg
ICAgRXdrX0pTX1NldF9DYiBzZXQ7CisgICAgRXdrX0pTX0dldF9DYiBnZXQ7CisgICAgRXdrX0pT
X0RlbF9DYiBkZWw7Cit9OworCitzdHJ1Y3QgX0V3a19KU19DbGFzc19NZXRhIHsKKyAgICB1bnNp
Z25lZCBpbnQgdmVyc2lvbjsgLy8gZGVmaW5lCisgICAgY29uc3QgRXdrX0pTX01ldGhvZCAqbWV0
aG9kczsgLy8gbnVsbCB0ZXJtaW5hdGVkIGFycmF5CisgICAgY29uc3QgRXdrX0pTX1Byb3BlcnR5
ICpwcm9wZXJ0aWVzOyAvLyBudWxsIHRlcm1pbmF0ZWQgYXJyYXkKKyAgICBFd2tfSlNfRGVmYXVs
dCBkZWZhdWx0X3Byb3A7Cit9OworCitFQVBJIEVpbmFfSGFzaCAqZXdrX2pzX29iamVjdF9wcm9w
ZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0ICpvYmopOworRUFQSSBjb25zdCBjaGFyICpl
d2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QgKm9iaik7CisKK0VBUEkg
dm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJpYW50ICp2YXIpOworRUFQSSB2b2lk
IGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50
KTsKK0VBUEkgRXdrX0pTX09iamVjdCAqZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0Ns
YXNzX01ldGEgKm1ldGFfY2xzKTsKK0VBUEkgdm9pZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pT
X09iamVjdCAqb2JqKTsKK0VBUEkgRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19K
U19PYmplY3QgKm9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291bnQsIEV3a19K
U19WYXJpYW50ICpyZXN1bHQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisj
ZW5kaWYgLy8gZXdrX2pzX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNw
cCBiL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcAppbmRleCA1NzQyNzY2Li5iNDM1NzI3IDEw
MDY0NAotLS0gYS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKKysrIGIvV2ViS2l0L2VmbC9l
d2svZXdrX21haW4uY3BwCkBAIC0xMjgsNiArMTI4LDggQEAgaW50IGV3a19pbml0KHZvaWQpCiAg
ICAgfQogI2VuZGlmCiAKKyAgICBlaW5hX21hZ2ljX3N0cmluZ19zZXQoRVdLX0pTX09CSkVDVF9N
QUdJQywgIkV3a19KU19PYmplY3QgdHlwZSIpOworCiAgICAgcmV0dXJuICsrX2V3a19pbml0X2Nv
dW50OwogCiBlcnJvcl9lZGplOgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZh
dGUuaCBiL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKaW5kZXggZWFhZDEzYy4uOWE0MTM2
NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaAorKysgYi9XZWJLaXQv
ZWZsL2V3ay9ld2tfcHJpdmF0ZS5oCkBAIC0yNCw5ICsyNCwxMSBAQAogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkTGlzdC5oIgogI2luY2x1ZGUgIkVXZWJLaXQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIk5QX2pzb2JqZWN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCisjaW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5j
bHVkZSAiZXdrX2xvZ2dpbmcuaCIKICNpbmNsdWRlICJld2tfdXRpbC5oIgogCkBAIC00MCw2ICs0
Miw3IEBAIGV4dGVybiAiQyIgewogCiAvLyBJZiBkZWZpbmVkLCBld2sgd2lsbCBkbyB0eXBlIGNo
ZWNraW5nIHRvIGVuc3VyZSBvYmplY3RzIGFyZSBvZiBjb3JyZWN0IHR5cGUKICNkZWZpbmUgRVdL
X1RZUEVfQ0hFQ0sgMQorI2RlZmluZSBFV0tfSlNfT0JKRUNUX01BR0lDIDB4Njk2OTY5CiAKIC8v
IGZvcndhcmQgZGVjbGFyYXRpb25zCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00OCw2ICs1MSwx
NiBAQCBzdHJ1Y3QgQ29udGV4dE1lbnU7CiBzdHJ1Y3QgQ29udGV4dE1lbnVJdGVtOwogfQogCit0
eXBlZGVmIHN0cnVjdCBfRXdrX0pTX0NsYXNzIEV3a19KU19DbGFzczsKK3N0cnVjdCBfRXdrX0pT
X09iamVjdCB7CisgICAgSmF2YVNjcmlwdE9iamVjdCBiYXNlOworICAgIGNoYXIgKm5hbWU7Cisg
ICAgY29uc3QgRXdrX0pTX0NsYXNzICpjbHM7CisgICAgRWluYV9IYXNoICpwcm9wZXJ0aWVzOyAv
LyBrZXk9bmFtZSwgdmFsdWU9Y3VycmVudCB2YWx1ZSBvZiBwcm9wZXJ0eQorICAgIEV2YXNfT2Jq
ZWN0ICp2aWV3OyAvLyBld2tfdmlldzogY2hlY2sgaWYgdGhpcyBvYmplY3QgaGFzIGFscmVhZHkg
YmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CisgICAgRUlOQV9NQUdJQzsKK307CisKIHZv
aWQgZXdrX3ZpZXdfcmVhZHkoRXZhc19PYmplY3QgKm8pOwogdm9pZCBld2tfdmlld19pbnB1dF9t
ZXRob2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKTsKIHZvaWQg
ZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp0aXRsZSk7CkBA
IC0xMDYsNiArMTE5LDggQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9zZXQoRXZhc19PYmplY3Qg
Km8sIGZsb2F0IHcsIGZsb2F0IGgsIGZsb2F0IGluaXRfc2NhbGUsIGYKIAogdm9pZCBld2tfdmll
d19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0ICpvLCBFd2tfRG93bmxvYWQgKmRvd25sb2Fk
KTsKIAordm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0ICpv
KTsKKwogRXdrX0hpc3RvcnkgKmV3a19oaXN0b3J5X25ldyhXZWJDb3JlOjpCYWNrRm9yd2FyZExp
c3QgKmhpc3RvcnkpOwogdm9pZCBld2tfaGlzdG9yeV9mcmVlKEV3a19IaXN0b3J5ICpoaXN0b3J5
KTsKIApkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDdhOThiYWMuLmQ2NmNhYzEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJld2tf
dmlldy5oIgogCisjaW5jbHVkZSAiQnJpZGdlLmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEVmbC5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50
RWZsLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC0zOCw2ICs0MCw5
IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEVmbC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGlu
Zy5oIgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiUG9wdXBNZW51Q2xpZW50Lmgi
CiAjaW5jbHVkZSAiUHJvZ3Jlc3NUcmFja2VyLmgiCkBAIC0yNTk2LDcgKzI2MDEsNyBAQCBjb25z
dCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmOwogfQotICAKKwogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3NlcmlmX3NldChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogZmFtaWx5KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtMzg1OSw2ICszODY0LDE3IEBAIHZvaWQgZXdrX3ZpZXdf
ZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogbywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkK
IAogLyoqCiAgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydHMgdGhlIEpTIHdpbmRvdyBvYmplY3Qgd2Fz
IGNsZWFyZWQuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqLwordm9pZCBld2tfdmlld19qc193
aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0ICpvKQoreworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgImpzLHdpbmRvd29iamVjdCxjbGVhciIsIDApOworfQorCisv
KioKKyAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgdmlld3BvcnQgaGFzIGNoYW5nZWQuCiAg
KgogICogQHBhcmFtIG8gdmlldy4KQEAgLTM5MjIsNyArMzkzOCw3IEBAIHZvaWQgZXdrX3ZpZXdf
dmlld3BvcnRfZ2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCogdywgZmxvYXQqIGgsIGZsb2F0KiBp
bml0X3NjYWxlCiAgKiBAcGFyYW0gbyB2aWV3LgogICogQHBhcmFtIG1pbl9zY2FsZSBtaW5pbXVt
IHZhbHVlIG9mIHpvb20gcmFuZ2UuCiAgKiBAcGFyYW0gbWF4X3NjYWxlIG1heGltdW0gdmFsdWUg
b2Ygem9vbSByYW5nZS4KLSAqIAorICoKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpvb20g
cmFuZ2UgaXMgY2hhbmdlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3IgZmFpbHVyZS4KICAqLwog
RWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCBt
aW5fc2NhbGUsIGZsb2F0IG1heF9zY2FsZSkKQEAgLTQwMjEsMyArNDAzNyw0MyBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8sIEV3
a19GcmFtZV9SZXNvdXJjZQogCiAgICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5
X2RlY2lzaW9uKHNkLCByZXF1ZXN0KTsKIH0KKworLyoqCisgKiBDcmVhdGVzIGEgSlMgb2JqZWN0
IG5hbWVkIEBhIG9ial9uYW1lIGFzIHByb3BlcnR5IG9mIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlz
IHNob3VsZCBiZSBjYWxsZWQgb24gYSBjYWxsYmFjayBjb25uZWN0ZWQgdG8gdGhlCisgKiBqcyx3
aW5kb3dvYmplY3QsY2xlYXIgc2lnbmFsLgorICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFy
YW0gb2JqIG9iamVjdCB0aGF0IHdpbGwgYmUgYWRkZWQoc2VlOiBAYSBld2tfanNfb2JqZWN0X25l
dykuCisgKiBAcGFyYW0gb2JqX25hbWUgbmFtZSBvZiB0aGUgb2JqZWN0LgorICoKKyAqIEByZXR1
cm4gQGMgRUlOQV9UUlVFIGlmIG9iamVjdCB3YXMgYWRkZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90
LgorICovCitFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCAqbywg
RXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKK3sKKyAgICBpZiAob2Jq
LT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192
aWV3CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIG9iai0+bmFtZSA9IHN0cmR1cChv
YmpfbmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKworICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgIFdlYkNvcmU6OkpTRE9NV2luZG93ICp3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1h
aW5fZnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBKU0M6OkJp
bmRpbmdzOjpSb290T2JqZWN0ICpyb290OworICAgIHJvb3QgPSBwcml2LT5tYWluX2ZyYW1lLT5z
Y3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKworICAgIGlmICghd2luZG93KSB7CisgICAg
ICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmplY3QiKTsKKyAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3
aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKworICAgIG9iai0+dmlldyA9IG87CisgICAgSlNDOjpKU09i
amVjdCAqcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRpbmdzOjpDSW5z
dGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3Qo
ZXhlYyk7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVudGlmaWVyKGV4ZWMsIG9i
al9uYW1lKTsKKworICAgIEpTQzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7CisgICAgd2luZG93LT5w
dXQoZXhlYywgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3QpOworICAgIHJldHVybiBFSU5BX1RSVUU7
Cit9CisKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlldy5oCmluZGV4IDhkZDYxNzguLmE1ODhkMDYgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmgKKysrIGIvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaApAQCAt
MjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVkZSAiZXdrX2hp
c3RvcnkuaCIKKyNpbmNsdWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfd2luZG93X2ZlYXR1
cmVzLmgiCiAKICNpbmNsdWRlIDxFdmFzLmg+CkBAIC04OCw2ICs4OSw3IEBAIGV4dGVybiAiQyIg
ewogICogIC0gImljb24scmVjZWl2ZWQiLCB2b2lkOiBtYWluIGZyYW1lIHJlY2VpdmVkIGFuIGlj
b24uCiAgKiAgLSAidmlld3BvcnQsY2hhbmdlZCIsIHZvaWQ6IFJlcG9ydCB0aGF0IHZpZXdwb3J0
IGhhcyBjaGFuZ2VkLgogICogIC0gImlucHV0bWV0aG9kcyxjaGFuZ2VkIiB3aXRoIGEgYm9vbGVh
biBpbmRpY2F0aW5nIHdoZXRoZXIgaXQncyBlbmFibGVkIG9yIG5vdC4KKyAqICAtICJqcyx3aW5k
b3dvYmplY3QsY2xlYXIiLCB2b2lkOiBSZXBvcnQgdGhhdCB0aGUgSlMgd2luZG93IG9iamVjdCBo
YXMgYmVlbiBjbGVhcmVkLgogICovCiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVmlld19TbWFydF9E
YXRhIEV3a19WaWV3X1NtYXJ0X0RhdGE7CkBAIC00ODAsNiArNDgyLDggQEAgRUFQSSBmbG9hdCBl
d2tfdmlld196b29tX3JhbmdlX21heF9nZXQoRXZhc19PYmplY3QqIG8pOwogRUFQSSB2b2lkIGV3
a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9z
Y2FsYWJsZSk7CiBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChFdmFz
X09iamVjdCogbyk7CiAKK0VBUEkgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZh
c19PYmplY3QgKm8sIEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpOwor
CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgotLSAKMS43LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64593</attachid>
            <date>2010-08-17 07:59:13 -0700</date>
            <delta_ts>2010-10-19 07:07:44 -0700</delta_ts>
            <desc>Example code for injecting JS API.</desc>
            <filename>0002-Example-code-for-injecting-JS-API.patch</filename>
            <type>text/plain</type>
            <size>9043</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">RnJvbSA2NGUwYWY0NDM2NzI2MTAzMGE1MDU0YjdhNTg1ZTA4ZjM1NTAxZDlmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb25hcyBNLiBHYXN0YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1v
Ymk+CkRhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTY6MTQ6MTggLTAzMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gRXhhbXBsZSBjb2RlIGZvciBpbmplY3RpbmcgSlMgQVBJLgoKLS0tCiBXZWJLaXQvZWZs
L0NoYW5nZUxvZyAgICAgICAgICAgfCAgIDE1ICsrKysrCiBXZWJLaXQvZWZsL0VXZWJMYXVuY2hl
ci9tYWluLmMgfCAgMTExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K
IDIgZmlsZXMgY2hhbmdlZCwgMTIxIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRl
eCBkMjc5NDZhLi44NjY1ZWMwIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMTc0LDYgKzE3NCwyMSBAQAogICAgICAgICBFeHBv
cnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAogICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKIAorICAgICAgICAqIEVXZWJMYXVu
Y2hlci9tYWluLmM6CisgICAgICAgIChwcmludF9mdW5jdGlvbik6CisgICAgICAgIChvbl9qc193
aW5kb3dvYmplY3RfY2xlYXIpOgorICAgICAgICAob25fa2V5X2Rvd24pOgorICAgICAgICAob25f
YnJvd3Nlcl9kZWwpOgorICAgICAgICAoYnJvd3NlckNyZWF0ZSk6CisgICAgICAgIChtYWluKToK
KworMjAxMC0wOC0wMyAgSm9uYXMgTS4gR2FzdGFsICA8amdhc3RhbEBwcm9mdXNpb24ubW9iaT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvcnRp
bmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKKwogICAgICAgICAqIENNYWtlTGlzdHNF
ZmwudHh0OgogICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNw
cDoKICAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENs
ZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL0VXZWJMYXVu
Y2hlci9tYWluLmMgYi9XZWJLaXQvZWZsL0VXZWJMYXVuY2hlci9tYWluLmMKaW5kZXggYzE5NTZh
Mi4uZjM1OTU2MyAxMDA2NDQKLS0tIGEvV2ViS2l0L2VmbC9FV2ViTGF1bmNoZXIvbWFpbi5jCisr
KyBiL1dlYktpdC9lZmwvRVdlYkxhdW5jaGVyL21haW4uYwpAQCAtNzIsNiArNzIsNTEgQEAgc3Rh
dGljIEVpbmFfTGlzdCAqd2luZG93cyA9IE5VTEw7CiAKIHN0YXRpYyBjaGFyICp0aGVtZVBhdGgg
PSBOVUxMOwogCitzdGF0aWMgRXdrX0pTX1ZhcmlhbnQgKnByaW50X2Z1bmN0aW9uKEV3a19KU19P
YmplY3QgKm9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291bnQpOworCitzdGF0
aWMgRXdrX0pTX09iamVjdCAqanNfb2JqID0gTlVMTDsKKworc3RhdGljIGNvbnN0IEV3a19KU19N
ZXRob2QgbWV0aG9kc1tdID0geworICAgIHsKKyAgICAgICAgInByaW50IiwKKyAgICAgICAgcHJp
bnRfZnVuY3Rpb24KKyAgICB9LAorICAgIHsgMCB9IC8vIHRlcm1pbmF0b3IKK307CisKK3N0YXRp
YyBjb25zdCBFd2tfSlNfUHJvcGVydHkgcHJvcGVydGllc1tdID0geworICAgIHsKKyAgICAgICAg
Im15X3Byb3AiLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICAwLAorICAgICAgICB7
CisgICAgICAgICAgICBFV0tfSlNfVkFSSUFOVF9TVFJJTkcsCisgICAgICAgICAgICB7IC5zID0g
IkhlbGxvIFdvcmxkISIgfQorICAgICAgICB9CisgICAgfSwKKyAgICB7CisgICAgICAgICJteV9w
cm9wMiIsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVXS19KU19WQVJJQU5UX1NUUklORywKKyAgICAgICAgICAgIHsgLnMgPSAiYmxh
IiB9CisgICAgICAgIH0KKyAgICB9LAorICAgIHsgMCB9IC8vIHRlcm1pbmF0b3IKK307CisKK3N0
YXRpYyBjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSBqc19tZXRhID0geworICAgIEVXS19KU19DTEFT
U19NRVRBX1ZFUlNJT04sCisgICAgbWV0aG9kcywKKyAgICBwcm9wZXJ0aWVzLAorICAgIDAsCisg
ICAgMCwKKyAgICAwCit9OworCiB0eXBlZGVmIHN0cnVjdCBfV2luZG93X1Byb3BlcnRpZXMgewog
ICAgIEVpbmFfQm9vbCB0b29sYmFyc1Zpc2libGU6MTsKICAgICBFaW5hX0Jvb2wgc3RhdHVzYmFy
VmlzaWJsZToxOwpAQCAtMTAzLDYgKzE0OCw4IEBAIHN0YXRpYyBjb25zdCBFY29yZV9HZXRvcHQg
b3B0aW9ucyA9IHsKICAgICAgICAgICAgICBlY29yZV9nZXRvcHRfY2FsbGJhY2tfZWNvcmVfZXZh
c19saXN0X2VuZ2luZXMsIE5VTEwpLAogICAgICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JP
T0wKICAgICAgICAgICAgICgnRicsICJmdWxsc2NyZWVuIiwgImZ1bGxzY3JlZW4gbW9kZS4iLCAw
KSwKKyAgICAgICAgRUNPUkVfR0VUT1BUX1NUT1JFX0RFRl9CT09MCisgICAgICAgICAgICAoJ0on
LCAiZXhwb3J0LUpTLXRlc3Qtb2JqZWN0IiwgImV4cG9ydCBKUyB0ZXN0IG9iamVjdC4iLCAwKSwK
ICAgICAgICAgRUNPUkVfR0VUT1BUX0NBTExCQUNLX0FSR1MKICAgICAgICAgICAgICgnZycsICJn
ZW9tZXRyeSIsICJnZW9tZXRyeSB0byB1c2UgaW4geDp5Onc6aCBmb3JtLiIsICJYOlk6VzpIIiwK
ICAgICAgICAgICAgICBlY29yZV9nZXRvcHRfY2FsbGJhY2tfZ2VvbWV0cnlfcGFyc2UsIE5VTEwp
LApAQCAtMTQ3LDcgKzE5NCw3IEBAIHR5cGVkZWYgc3RydWN0IF9FTGF1bmNoZXIgewogCiBzdGF0
aWMgdm9pZCBicm93c2VyRGVzdHJveShFY29yZV9FdmFzICplZSk7CiBzdGF0aWMgdm9pZCBjbG9z
ZVdpbmRvdyhFY29yZV9FdmFzICplZSk7Ci1zdGF0aWMgaW50IGJyb3dzZXJDcmVhdGUoY29uc3Qg
Y2hhciAqdXJsLCBjb25zdCBjaGFyICp0aGVtZSwgY29uc3QgY2hhciAqdXNlckFnZW50LCBFaW5h
X1JlY3RhbmdsZSBnZW9tZXRyeSwgY29uc3QgY2hhciAqZW5naW5lLCB1bnNpZ25lZCBjaGFyIGlz
RnVsbHNjcmVlbik7CitzdGF0aWMgaW50IGJyb3dzZXJDcmVhdGUoY29uc3QgY2hhciAqdXJsLCBj
b25zdCBjaGFyICp0aGVtZSwgY29uc3QgY2hhciAqdXNlckFnZW50LCBFaW5hX1JlY3RhbmdsZSBn
ZW9tZXRyeSwgY29uc3QgY2hhciAqZW5naW5lLCB1bnNpZ25lZCBjaGFyIGlzRnVsbHNjcmVlbiwg
dW5zaWduZWQgY2hhciBleHBvcnRKU09iamVjdCk7CiAKIHN0YXRpYyB2b2lkCiBwcmludF9oaXN0
b3J5KEVpbmFfTGlzdCAqbGlzdCkKQEAgLTM5Myw3ICs0NDAsNyBAQCBvbl9pbnB1dG1ldGhvZF9j
aGFuZ2VkKHZvaWQqIHVzZXJfZGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50
X2luZm8pCiAgKgogICogSWYgeW91IGRvbid0IHdhbnQgdG8gcHJvY2VzcyB0aGUgdmlld3BvcnQg
dGFnLCB5b3UgY2FuIGVpdGhlciBkbyBub3RoaW5nIGluIHRoaXMgY2FsbGJhY2sKICAqIG9yIHNp
bXBseSBpZ25vcmUgdGhlIHNpZ25hbCBpbiB5b3VyIGFwcGxpY2F0aW9uLgotICogCisgKgogICog
TW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vZGV2ZWxv
cGVyLmFwcGxlLmNvbS9zYWZhcmkvbGlicmFyeS9kb2N1bQogICogZW50YXRpb24vYXBwbGVhcHBs
aWNhdGlvbnMvcmVmZXJlbmNlL3NhZmFyaXdlYmNvbnRlbnQvdXNpbmd0aGV2aWV3cG9ydC91c2lu
Z3RoZXZpZXdwb3J0Lmh0bWwKICAqLwpAQCAtNDU5LDYgKzUwNiw0OSBAQCBvbl9yZXNpemVkKHZv
aWQgKmRhdGEsIEV2YXMgKmUsIEV2YXNfT2JqZWN0ICpvYmosIHZvaWQgKmV2ZW50X2luZm8pCiAg
ICAgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KG9iaiwgdywgaCk7CiB9CiAKK3N0YXRp
YyBFd2tfSlNfVmFyaWFudCAqCitwcmludF9mdW5jdGlvbihFd2tfSlNfT2JqZWN0ICpvYmosIEV3
a19KU19WYXJpYW50ICphcmdzLCBpbnQgYXJnX2NvdW50KQoreworICAgIGludCBpOworICAgIEV3
a19KU19WYXJpYW50ICpyZXQgPSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhzaXplb2YoRXdrX0pT
X1ZhcmlhbnQpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnX2NvdW50OyBpKyspIHsKKyAgICAg
ICAgc3dpdGNoIChhcmdzW2ldLnR5cGUpIHsKKyAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9O
VUxMOgorICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZPSUQ6CisgICAgICAgICAgICBwcmlu
dGYoIldURiwgbnVsbC92b2lkIGFyZ3M/IVxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q6CisgICAgICAgICAgICBwcmludGYoIm9iaiAl
cyB3aXRoICVkIHByb3BzIGFyZ1xuIiwgZXdrX2pzX29iamVjdF9uYW1lX2dldChhcmdzW2ldLnZh
bHVlLm8pLCBlaW5hX2hhc2hfcG9wdWxhdGlvbihld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0
KGFyZ3NbaV0udmFsdWUubykpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVX
S19KU19WQVJJQU5UX0JPT0w6CisgICAgICAgICAgICBwcmludGYoIkFyZ3VtZW50ICVkIGlzIG9m
IHR5cGUgYm9vbCBhbmQgdmFsdWUgJXNcbiIsIGksIGFyZ3NbaV0udmFsdWUuYiA/ICJ0cnVlIiA6
ICJmYWxzZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklB
TlRfSU5UMzI6CisgICAgICAgICAgICBwcmludGYoIkFyZ3VtZW50ICVkIGlzIG9mIHR5cGUgaW50
IGFuZCB2YWx1ZSAlZFxuIiwgaSwgYXJnc1tpXS52YWx1ZS5pKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0RPVUJMRToKKyAgICAgICAgICAgIHByaW50
ZigiQXJndW1lbnQgJWQgaXMgb2YgdHlwZSBkb3VibGUgYW5kIHZhbHVlICVmXG4iLCBpLCBhcmdz
W2ldLnZhbHVlLmQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVdLX0pTX1ZB
UklBTlRfU1RSSU5HOgorICAgICAgICAgICAgcHJpbnRmKCJBcmd1bWVudCAlZCBpcyBvZiB0eXBl
IHN0cmluZyBhbmQgdmFsdWUgJXNcbiIsIGksIGFyZ3NbaV0udmFsdWUucyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXQtPnR5cGUgPSBFV0tfSlNfVkFSSUFO
VF9TVFJJTkc7CisgICAgcmV0LT52YWx1ZS5zID0gc3RyZHVwKCJwcmludF9mdW5jdGlvbiBleGVj
dXRlZCBzdWNlc3NmdWxseSFcbiIpOworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lk
Citvbl9qc193aW5kb3dvYmplY3RfY2xlYXIodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAq
YnJvd3Nlciwgdm9pZCAqZXZlbnRfaW5mbykKK3sKKyAgICBpZiAoanNfb2JqKQorICAgICAgICBl
d2tfanNfb2JqZWN0X2ZyZWUoanNfb2JqKTsKKworICAgIGpzX29iaiA9IGV3a19qc19vYmplY3Rf
bmV3KCZqc19tZXRhKTsKKyAgICBld2tfdmlld19qc19vYmplY3RfYWRkKGJyb3dzZXIsIGpzX29i
aiwgIm15X29iamVjdCIpOworfQorCiBzdGF0aWMgdm9pZAogb25fa2V5X2Rvd24odm9pZCAqZGF0
YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKIHsKQEAgLTU2
Miw3ICs2NTIsNyBAQCBvbl9rZXlfZG93bih2b2lkICpkYXRhLCBFdmFzICplLCBFdmFzX09iamVj
dCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQogICAgICAgICBpbmZvKCJDcmVhdGUgbmV3IHdpbmRv
dyAoRjkpIHdhcyBwcmVzc2VkLlxuIik7CiAgICAgICAgIEVpbmFfUmVjdGFuZ2xlIGdlb21ldHJ5
ID0gezAsIDAsIDAsIDB9OwogICAgICAgICBicm93c2VyQ3JlYXRlKCJodHRwOi8vd3d3Lmdvb2ds
ZS5jb20iLAotICAgICAgICAgICAgICAgICAgICAgICBhcHAtPnRoZW1lLCBhcHAtPnVzZXJBZ2Vu
dCwgZ2VvbWV0cnksIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICBhcHAtPnRoZW1l
LCBhcHAtPnVzZXJBZ2VudCwgZ2VvbWV0cnksIE5VTEwsIDAsIDApOwogICAgIH0gZWxzZSBpZiAo
IXN0cmNtcChldi0+a2V5LCAiRjEwIikpIHsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBo
OwogICAgICAgICBFdmFzX09iamVjdCAqZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChv
YmopOwpAQCAtNTgzLDYgKzY3Myw5IEBAIG9uX2Jyb3dzZXJfZGVsKHZvaWQgKmRhdGEsIEV2YXMg
KmV2YXMsIEV2YXNfT2JqZWN0ICpicm93c2VyLCB2b2lkICpldmVudCkKIHsKICAgICBFTGF1bmNo
ZXIgKmFwcCA9IChFTGF1bmNoZXIqKSBkYXRhOwogCisgICAgaWYgKGpzX29iaikKKyAgICAgICAg
ZXdrX2pzX29iamVjdF9mcmVlKGpzX29iaik7CisKICAgICBldmFzX29iamVjdF9ldmVudF9jYWxs
YmFja19kZWwoYXBwLT5icm93c2VyLCBFVkFTX0NBTExCQUNLX0tFWV9ET1dOLCBvbl9rZXlfZG93
bik7CiAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfZGVsKGFwcC0+YnJvd3NlciwgRVZB
U19DQUxMQkFDS19NT1VTRV9ET1dOLCBvbl9tb3VzZV9kb3duKTsKICAgICBldmFzX29iamVjdF9l
dmVudF9jYWxsYmFja19kZWwoYXBwLT5icm93c2VyLCBFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBv
bl9mb2N1c19pbik7CkBAIC02MTQsNyArNzA3LDcgQEAgcXVpdChFaW5hX0Jvb2wgc3VjY2Vzcywg
Y29uc3QgY2hhciAqbXNnKQogfQogCiBzdGF0aWMgaW50Ci1icm93c2VyQ3JlYXRlKGNvbnN0IGNo
YXIgKnVybCwgY29uc3QgY2hhciAqdGhlbWUsIGNvbnN0IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9S
ZWN0YW5nbGUgZ2VvbWV0cnksIGNvbnN0IGNoYXIgKmVuZ2luZSwgdW5zaWduZWQgY2hhciBpc0Z1
bGxzY3JlZW4pCiticm93c2VyQ3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAqdGhl
bWUsIGNvbnN0IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9SZWN0YW5nbGUgZ2VvbWV0cnksIGNvbnN0
IGNoYXIgKmVuZ2luZSwgdW5zaWduZWQgY2hhciBpc0Z1bGxzY3JlZW4sIHVuc2lnbmVkIGNoYXIg
ZXhwb3J0SlNPYmplY3QpCiB7CiAgICAgaWYgKChnZW9tZXRyeS53IDw9IDApICYmIChnZW9tZXRy
eS5oIDw9IDApKSB7CiAgICAgICAgIGdlb21ldHJ5LncgPSBERUZBVUxUX1dJRFRIOwpAQCAtNjc4
LDYgKzc3MSwxMiBAQCBicm93c2VyQ3JlYXRlKGNvbnN0IGNoYXIgKnVybCwgY29uc3QgY2hhciAq
dGhlbWUsIGNvbnN0IGNoYXIgKnVzZXJBZ2VudCwgRWluYV9SZQogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZChhcHAtPmJyb3dzZXIsICJ0b29sdGlwLHRleHQsc2V0Iiwgb25fdG9v
bHRpcF90ZXh0X3NldCwgYXBwKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQo
YXBwLT5icm93c2VyLCAiaW5wdXRtZXRob2QsY2hhbmdlZCIsIG9uX2lucHV0bWV0aG9kX2NoYW5n
ZWQsIGFwcCk7CiAKKworLyogIFRoaXMgY2FsbGJhY2sgY3JlYXRlcyBhIEpTIG9iamVjdCBwcm9w
ZXJ0eSBpbiB3aW5kb3cgY2FsbGVkIG15X29iamVjdC4gVGhpcyBvYmplY3QgaGFzIGEgcHJvcGVy
dHkgY2FsbGVkCisgICAgbXlfcHJvcCgiSGVsbG8gV29ybGQhIikgYW5kIGEgZnVuY3Rpb24gY2Fs
bGVkIHByaW50KHByaW50cyBhbGwgYXJndW1lbnRzIHRvIGNvbnNvbGUpLiAqLworICAgIGlmIChl
eHBvcnRKU09iamVjdCkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKGFw
cC0+YnJvd3NlciwgImpzLHdpbmRvd29iamVjdCxjbGVhciIsIG9uX2pzX3dpbmRvd29iamVjdF9j
bGVhciwgYXBwKTsKKwogLyogICAgIGV3a19jYWxsYmFja19yZXNpemVfcmVxdWVzdGVkX2FkZChh
cHAtPmJyb3dzZXIsIG9uX3Jlc2l6ZV9yZXF1ZXN0ZWQsIGFwcC0+ZWUpOyAqLwogCiAgICAgZXZh
c19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkKGFwcC0+YnJvd3NlciwgRVZBU19DQUxMQkFDS19S
RVNJWkUsIG9uX3Jlc2l6ZWQsIGFwcCk7CkBAIC03ODEsMTIgKzg4MCwxNCBAQCBtYWluKGludCBh
cmdjLCBjaGFyICphcmd2W10pCiAgICAgdW5zaWduZWQgY2hhciBxdWl0T3B0aW9uID0gMDsKICAg
ICB1bnNpZ25lZCBjaGFyIGlzRnVsbHNjcmVlbiA9IDA7CiAgICAgdW5zaWduZWQgY2hhciBzdWRv
V29ya2Fyb3VuZCA9IDA7CisgICAgdW5zaWduZWQgY2hhciBleHBvcnRKU09iamVjdCA9IDA7CiAg
ICAgaW50IGFyZ3M7CiAKICAgICBFY29yZV9HZXRvcHRfVmFsdWUgdmFsdWVzW10gPSB7CiAgICAg
ICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9TVFIoZW5naW5lKSwKICAgICAgICAgRUNPUkVfR0VUT1BU
X1ZBTFVFX0JPT0wocXVpdE9wdGlvbiksCiAgICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09M
KGlzRnVsbHNjcmVlbiksCisgICAgICAgIEVDT1JFX0dFVE9QVF9WQUxVRV9CT09MKGV4cG9ydEpT
T2JqZWN0KSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1BUUl9DQVNUKGdlb21ldHJ5KSwK
ICAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX1NUUih0aGVtZSksCiAgICAgICAgIEVDT1JFX0dF
VE9QVF9WQUxVRV9TVFIodXNlckFnZW50KSwKQEAgLTgzOSw3ICs5NDAsNyBAQCBtYWluKGludCBh
cmdjLCBjaGFyICphcmd2W10pCiAgICAgaWYgKHByb3h5VXJpKQogICAgICAgICBld2tfc2V0dGlu
Z3NfcHJveHlfdXJpX3NldChwcm94eVVyaSk7CiAKLSAgICBicm93c2VyQ3JlYXRlKHVybCwgdGhl
bWUsIHVzZXJBZ2VudCwgZ2VvbWV0cnksIGVuZ2luZSwgaXNGdWxsc2NyZWVuKTsKKyAgICBicm93
c2VyQ3JlYXRlKHVybCwgdGhlbWUsIHVzZXJBZ2VudCwgZ2VvbWV0cnksIGVuZ2luZSwgaXNGdWxs
c2NyZWVuLCBleHBvcnRKU09iamVjdCk7CiAgICAgZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQoRUNP
UkVfRVZFTlRfU0lHTkFMX0VYSVQsIG1haW5fc2lnbmFsX2V4aXQsICZ3aW5kb3dzKTsKIAogICAg
IGVjb3JlX21haW5fbG9vcF9iZWdpbigpOwotLSAKMS43LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71165</attachid>
            <date>2010-10-19 07:06:48 -0700</date>
            <delta_ts>2011-06-17 08:21:14 -0700</delta_ts>
            <desc>Adds support for exporting a JS API to EFL port.</desc>
            <filename>0001-Adds-support-for-exporting-a-JS-API-to-EFL-port-and-.patch</filename>
            <type>text/plain</type>
            <size>37257</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">RnJvbSBkZTkwMzk5MWExOWQyOWRjZTE5NmM3MDQ1ZDUyMTZkNTZhODM1NjMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb25hcyBNLiBHYXN0YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1v
Ymk+CkRhdGU6IFRodSwgNSBBdWcgMjAxMCAxNzo0OTo0OCAtMDMwMApTdWJqZWN0OiBbUEFUQ0gg
MS8yXSBBZGRzIHN1cHBvcnQgZm9yIGV4cG9ydGluZyBhIEpTIEFQSSB0byBFRkwgcG9ydCBhbmQg
aW1wbGVtZW50cyBqcyx3aW5kb3dvYmplY3QsY2xlYXIgc2lnbmFsLgoKLS0tCiBXZWJLaXQvQ01h
a2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogV2ViS2l0
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA5ICsKIFdl
YktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSAr
CiBXZWJLaXQvZWZsL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MzcgKysKIFdlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3Bw
IHwgICAgMiArLQogV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICAxICsKIFdlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDY2MiArKysrKysrKysrKysrKysrKysrKwogV2ViS2l0L2VmbC9ld2svZXdr
X2pzLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTAzICsrKwogV2ViS2l0L2VmbC9l
d2svZXdrX3ByaXZhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE1ICsKIFdlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2MCArKy0KIFdl
YktpdC9lZmwvZXdrL2V3a192aWV3LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCAr
CiAxMSBmaWxlcyBjaGFuZ2VkLCA4OTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwCiBjcmVhdGUgbW9kZSAx
MDA2NDQgV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgKCmRpZmYgLS1naXQgYS9XZWJLaXQvQ01ha2VM
aXN0cy50eHQgYi9XZWJLaXQvQ01ha2VMaXN0cy50eHQKaW5kZXggNmJjNTEwMC4uNDI5NTUzMSAx
MDA2NDQKLS0tIGEvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1dlYktpdC9DTWFrZUxpc3Rz
LnR4dApAQCAtNCw2ICs0LDcgQEAgU0VUKFdlYktpdF9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdzL2pzIgogICAgICIke1dFQkNPUkVfRElSfS9iaW5kaW5n
cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdlIgorICAgICIke1dFQkNPUkVfRElSfS9icmlk
Z2UvYyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdlL2pzYyIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vY3NzIgogICAgICIke1dFQkNPUkVfRElSfS9kb20iCmRpZmYgLS1naXQgYS9XZWJLaXQvQ2hh
bmdlTG9nIGIvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA4OThmYzhkLi4zYzRmYWY1IDEwMDY0NAot
LS0gYS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTk2LDYgKzk2
LDE1IEBACiAKICAgICAgICAgKiBXZWJLaXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRk
IG5ldyBRdW90YSBNYW5hZ2VycywgcmVtb3ZlIG9sZCBTZWN1cml0eU9yaWdpbiBzdWJjbGFzc2Vz
LgogCisyMDEwLTA4LTAzICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHByb2Z1c2lvbi5tb2Jp
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9y
dGluZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ0NgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisKIDIwMTAtMDctMzEgIERhdmlkIEtpbHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4K
IAogICAgICAgICA8aHR0cDovL3dlYmtpdC5vcmcvYi80MzMwNz4gTWFrZSBzdXJlIGFsbCBwcml2
YXRlIGhlYWRlcnMgYXJlIGNvcGllZCB0byBQcml2YXRlSGVhZGVycyBkaXJlY3RvcnkKZGlmZiAt
LWdpdCBhL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgYi9XZWJLaXQvZWZsL0NNYWtlTGlz
dHNFZmwudHh0CmluZGV4IDdiNTg2NWIuLjRkNGZiZDMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9lZmwv
Q01ha2VMaXN0c0VmbC50eHQKKysrIGIvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dApAQCAt
NTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXRfU09VUkNFUwogICAgIGVmbC9ld2svZXdr
X3ZpZXcuY3BwCiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwogICAgIGVmbC9ld2svZXdr
X3dpbmRvd19mZWF0dXJlcy5jcHAKKyAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKIAogTElTVChB
UFBFTkQgV2ViS2l0X0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9DaGFuZ2VMb2cg
Yi9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCAzZjliYjU0Li5jMWFhMWIyIDEwMDY0NAotLS0g
YS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQwIEBACisyMDEwLTA4LTMxICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHByb2Z1c2lv
bi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEV4cG9ydGluZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ0NgorCisgICAgICAgICogQ01h
a2VMaXN0c0VmbC50eHQ6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3Bh
dGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKToKKyAgICAgICAgKiBld2svRVdlYktpdC5o
OgorICAgICAgICAqIGV3ay9ld2tfanMuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9ld2tfanNfdmFy
aWFudF90b19ucHZhcmlhbnQpOgorICAgICAgICAoX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFu
dCk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X2hhcyk6CisgICAgICAgIChfZXdrX2pzX3By
b3BlcnR5X2dldCk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnR5X3NldCk6CisgICAgICAgIChf
ZXdrX2pzX3Byb3BlcnR5X3JlbW92ZSk6CisgICAgICAgIChfZXdrX2pzX3Byb3BlcnRpZXNfZW51
bWVyYXRlKToKKyAgICAgICAgKF9ld2tfanNfbWV0aG9kX2hhcyk6CisgICAgICAgIChfZXdrX2pz
X21ldGhvZF9pbnZva2UpOgorICAgICAgICAoZXdrX2pzX2NsYXNzX25ldyk6CisgICAgICAgIChl
d2tfanNfY2xhc3NfZnJlZSk6CisgICAgICAgIChld2tfanNfb2JqZWN0X25ldyk6CisgICAgICAg
IChld2tfanNfb2JqZWN0X2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVz
X2dldCk6CisgICAgICAgIChld2tfanNfb2JqZWN0X25hbWVfZ2V0KToKKyAgICAgICAgKGV3a19q
c192YXJpYW50X2ZyZWUpOgorICAgICAgICAqIGV3ay9ld2tfanMuaDogQWRkZWQuCisgICAgICAg
ICogZXdrL2V3a19tYWluLmNwcDoKKyAgICAgICAgKGV3a19pbml0KToKKyAgICAgICAgKiBld2sv
ZXdrX3ByaXZhdGUuaDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuY3BwOgorICAgICAgICAoZXdr
X3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcik6CisgICAgICAgIChld2tfdmlld19qc19vYmpl
Y3RfYWRkKToKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKKwogMjAxMC0wOC0zMSAgR3l1eW91
bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQg
YnVpbGQgZml4LgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEVmbC5jcHAgYi9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50RWZsLmNwcAppbmRleCA0OTlkNmMyLi41ZjQ3NjVjIDEwMDY0NAotLS0gYS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAorKysgYi9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcApAQCAtMjM4LDcgKzIz
OCw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQWRkQmFja0Zvcndh
cmRJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKikK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3Rf
Y2xlYXIobV92aWV3KTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hE
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCmRpZmYg
LS1naXQgYS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmggYi9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0
LmgKaW5kZXggMTgzZTlkYy4uYWNiMzgzYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2VmbC9ld2svRVdl
YktpdC5oCisrKyBiL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaApAQCAtMjcsNiArMjcsNyBAQAog
I2luY2x1ZGUgImV3a19lYXBpLmgiCiAjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVkZSAi
ZXdrX2hpc3RvcnkuaCIKKyNpbmNsdWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfbWFpbi5o
IgogI2luY2x1ZGUgImV3a19zZXR0aW5ncy5oIgogI2luY2x1ZGUgImV3a192aWV3LmgiCmRpZmYg
LS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvV2ViS2l0L2VmbC9ld2svZXdrX2pz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjgxYWEzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcApAQCAtMCwwICsxLDY2MiBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19qcy5oIgorCisjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisKKyNkZWZpbmUgRUlOQV9NQUdJQ19D
SEVDS19PUl9SRVRVUk4obywgLi4uKSBcCisgICAgaWYgKCFFSU5BX01BR0lDX0NIRUNLKG9iaiwg
RVdLX0pTX09CSkVDVF9NQUdJQykpIHsgXAorICAgICAgIEVJTkFfTUFHSUNfRkFJTChvYmosIEVX
S19KU19PQkpFQ1RfTUFHSUMpOyBcCisgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyBcCisgICAg
fQorCitzdHJ1Y3QgX0V3a19KU19DbGFzcyB7CisgICAgY29uc3QgRXdrX0pTX0NsYXNzX01ldGEq
IG1ldGE7CisgICAgRWluYV9IYXNoKiBtZXRob2RzOyAvLyBrZXk9TlBJZGVudGlmaWVyKG5hbWUp
LCB2YWx1ZT1wb2ludGVyIHRvIG1ldGEtPm1ldGhvZHM7CisgICAgRWluYV9IYXNoKiBwcm9wZXJ0
aWVzOyAvLyBrZXk9TlBJZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVyIHRvIG1ldGEtPnBy
b3BlcnRpZXM7CisgICAgRXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9wOworfTsKKworc3RhdGlj
IGJvb2wgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwg
Y29uc3QgTlBWYXJpYW50KiByZXN1bHQpOworc3RhdGljIGJvb2wgX2V3a19qc192YXJpYW50X3Rv
X25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYW50KiByZXN1bHQp
Oworc3RhdGljIHZvaWQgX2V3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19KU19Qcm9wZXJ0eSAqcHJv
cCk7CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmos
IE5QSWRlbnRpZmllciBuYW1lKTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfZ2V0KE5Q
T2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7Citz
dGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiB2YWx1ZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pz
X3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7Citz
dGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucF9vYmos
IE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291bnQpOworc3RhdGljIGJvb2wgX2V3
a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKTsKK3N0
YXRpYyBib29sIF9ld2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdfY291bnQsIE5Q
VmFyaWFudCogcmVzdWx0KTsKKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3By
b3BlcnR5X2dldChFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIEV3a19KU19W
YXJpYW50ICp2YWx1ZSk7CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVy
dHlfc2V0KEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pT
X1ZhcmlhbnQgKnZhbHVlKTsKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9w
ZXJ0eV9kZWwoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKTsKKworRXdrX0pT
X0NsYXNzKiBfZXdrX2pzX2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0YSk7
Cit2b2lkIF9ld2tfanNfY2xhc3NfZnJlZShFd2tfSlNfQ2xhc3MgKmNscyk7CisKK3N0YXRpYyBO
UENsYXNzIEVXS19OUENMQVNTID0geworICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OLAorICAg
IC8qTlBBbGxvY2F0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QRGVhbGxvY2F0ZUZ1bmN0aW9u
UHRyKi8gMCwKKyAgICAvKk5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QSGFz
TWV0aG9kRnVuY3Rpb25QdHIqLyBfZXdrX2pzX21ldGhvZF9oYXMsCisgICAgLypOUEludm9rZUZ1
bmN0aW9uUHRyKi8gX2V3a19qc19tZXRob2RfaW52b2tlLAorICAgIC8qTlBJbnZva2VEZWZhdWx0
RnVuY3Rpb25QdHIqLyAwLAorICAgIC8qTlBIYXNQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19q
c19wcm9wZXJ0eV9oYXMsCisgICAgLypOUEdldFByb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pz
X3Byb3BlcnR5X2dldCwKKyAgICAvKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNf
cHJvcGVydHlfc2V0LAorICAgIC8qTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19q
c19wcm9wZXJ0eV9yZW1vdmUsCisgICAgLypOUEVudW1lcmF0aW9uRnVuY3Rpb25QdHIqLyBfZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlLAorICAgIC8qTlBDb25zdHJ1Y3RGdW5jdGlvblB0ciov
IDAKK307CisKK3N0YXRpYyBFd2tfSlNfT2JqZWN0ICpfZXdrX2pzX25wb2JqZWN0X3RvX29iamVj
dChOUE9iamVjdCAqbnBfb2JqKQoreworICAgIGludCBpOworICAgIE5QSWRlbnRpZmllciogdmFs
dWVzOworICAgIHVpbnQzMl90IG5wX3Byb3BzX2NvdW50OworICAgIEV3a19KU19DbGFzcyogY2xz
OworICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKKyAgICBF
d2tfSlNfUHJvcGVydHkqIHByb3A7CisKKyAgICBpZiAoRUlOQV9NQUdJQ19DSEVDSygoRXdrX0pT
X09iamVjdCopbnBfb2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKSkgLy8gSXQgYWxyZWFkeSBpcyBh
IEV3a19KU19PYmplY3QKKyAgICAgICByZXR1cm4gKEV3a19KU19PYmplY3QqKW5wX29iajsKKwor
ICAgIGlmICghX05QTl9FbnVtZXJhdGUoMCwgbnBfb2JqLCAmdmFsdWVzLCAmbnBfcHJvcHNfY291
bnQpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNscyA9IChFd2tfSlNfQ2xhc3MqKW1hbGxv
YyhzaXplb2YoRXdrX0pTX0NsYXNzKSk7CisgICAgY2xzLT5tZXRhID0gMDsKKyAgICBFd2tfSlNf
RGVmYXVsdCBkZWYgPSB7CisgICAgICAgIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfc2V0LAor
ICAgICAgICBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dldCwKKyAgICAgICAgX2V3a19qc19u
cG9iamVjdF9wcm9wZXJ0eV9kZWwKKyAgICB9OworICAgIGNscy0+ZGVmYXVsdF9wcm9wID0gZGVm
OworICAgIGNscy0+bWV0aG9kcyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygwKTsKKyAgICBjbHMt
PnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfcG9pbnRlcl9uZXcoKEVpbmFfRnJlZV9DYilfZXdrX2pz
X3Byb3BlcnR5X2ZyZWUpOworICAgIGZvciAoaSA9IDA7IGkgPCBucF9wcm9wc19jb3VudDsgaSsr
KSB7CisgICAgICAgIGlmIChfTlBOX0hhc1Byb3BlcnR5KDAsIG5wX29iaiwgdmFsdWVzW2ldKSkg
eworICAgICAgICAgICAgTlBWYXJpYW50IHZhcjsKKyAgICAgICAgICAgIEV3a19KU19Qcm9wZXJ0
eSogcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWNhbGxvYyhzaXplb2YoRXdrX0pTX1Byb3BlcnR5
KSwgMSk7CisgICAgICAgICAgICBfTlBOX0dldFByb3BlcnR5KDAsIG5wX29iaiwgdmFsdWVzW2ld
LCAmdmFyKTsKKyAgICAgICAgICAgIF9ld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoJihwcm9w
LT52YWx1ZSksICZ2YXIpOworICAgICAgICAgICAgcHJvcC0+bmFtZSA9IF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKHZhbHVlc1tpXSk7CisgICAgICAgICAgICBlaW5hX2hhc2hfYWRkKGNscy0+cHJv
cGVydGllcywgdmFsdWVzW2ldLCBwcm9wKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlKHZh
bHVlcyk7CisKKyAgICAvLyBDYW4ndCB1c2UgZXdrX2pzX29iamVjdF9uZXcoY2xzKSBiZWNhdXNl
IGl0IGV4cGVjdHMgY2xzLT5tZXRhIHRvIGV4aXN0CisgICAgb2JqID0gKEV3a19KU19PYmplY3Qq
KW1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpOworICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwg
RVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqLT5uYW1lID0gMDsKKyAgICBvYmotPmNscyA9
IGNsczsKKyAgICBvYmotPnZpZXcgPSAwOworCisgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9u
KGNscy0+cHJvcGVydGllcykgPCAyNSkKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9o
YXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7IC8vIGNsYXNzIHdpbGwgZnJlZSBzdHVmZgorICAgIGVs
c2UKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zdXBlcmZhc3Rf
bmV3KDApOworCisgICAgaXQgPSBlaW5hX2hhc2hfaXRlcmF0b3JfZGF0YV9uZXcoY2xzLT5wcm9w
ZXJ0aWVzKTsKKyAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXQsIHByb3ApIHsKKyAgICAgICAg
Y29uc3QgY2hhcioga2V5ID0gcHJvcC0+bmFtZTsKKyAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZh
bHVlID0gJnByb3AtPnZhbHVlOworICAgICAgICBlaW5hX2hhc2hfYWRkKG9iai0+cHJvcGVydGll
cywga2V5LCB2YWx1ZSk7CisgICAgfQorCisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0KTsKKwor
ICAgIG9iai0+YmFzZSA9ICooSmF2YVNjcmlwdE9iamVjdCopbnBfb2JqOworCisgICAgcmV0dXJu
IG9iajsKK30KKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dl
dChFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIEV3a19KU19WYXJpYW50ICp2
YWx1ZSkKK3sKKyAgICBOUElkZW50aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIo
bmFtZSk7CisgICAgTlBWYXJpYW50IHZhcjsKKyAgICBib29sIGZhaWwgPSBfTlBOX0dldFByb3Bl
cnR5KDAsIChOUE9iamVjdCopb2JqLCBpZCwgJnZhcik7CisgICAgaWYgKCFmYWlsKQorICAgICAg
ICBmYWlsID0gX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwgJnZhcik7CisgICAg
cmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9w
ZXJ0eV9zZXQoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBFd2tf
SlNfVmFyaWFudCAqdmFsdWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUpOworICAgIE5QVmFyaWFudCB2YXI7CisgICAgYm9vbCBmYWlsID0g
X2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgJnZhcik7CisgICAgaWYgKGZhaWwp
CisgICAgICAgIGZhaWwgPSBfTlBOX1NldFByb3BlcnR5KDAsIChOUE9iamVjdCopb2JqLCBpZCwg
JnZhcik7CisgICAgcmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19u
cG9iamVjdF9wcm9wZXJ0eV9kZWwoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1l
KQoreworICAgIE5QSWRlbnRpZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1l
KTsKKyAgICByZXR1cm4gX05QTl9SZW1vdmVQcm9wZXJ0eSgwLCAoTlBPYmplY3QqKW9iaiwgaWQp
OworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3
a19KU19WYXJpYW50KiBkYXRhLCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChyZXN1bHQsIGZhbHNlKTsKKyAgICBzd2l0Y2ggKGRhdGEtPnR5cGUpIHsK
KyAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZPSUQ6CisgICAgICAgIFZPSURfVE9fTlBWQVJJQU5U
KCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6
CisgICAgICAgIE5VTExfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEVXS19KU19WQVJJQU5UX0lOVDMyOgorICAgICAgICBJTlQzMl9UT19OUFZBUklBTlQo
ZGF0YS0+dmFsdWUuaSwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pT
X1ZBUklBTlRfRE9VQkxFOgorICAgICAgICBET1VCTEVfVE9fTlBWQVJJQU5UKGRhdGEtPnZhbHVl
LmQsICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX1NU
UklORzoKKyAgICAgICAgU1RSSU5HWl9UT19OUFZBUklBTlQoc3RyZHVwKGRhdGEtPnZhbHVlLnMp
LCAqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9CT09M
OgorICAgICAgICBCT09MRUFOX1RPX05QVkFSSUFOVChkYXRhLT52YWx1ZS5iLCAqcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q6CisgICAgICAg
IE9CSkVDVF9UT19OUFZBUklBTlQoKE5QT2JqZWN0KilkYXRhLT52YWx1ZS5vLCAqcmVzdWx0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19ucHZhcmlhbnRf
dG9fdmFyaWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJpYW50KiByZXN1bHQp
Cit7CisgICAgaW50IHN6OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRh
LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlc3VsdCwgZmFs
c2UpOworICAgIHN3aXRjaCAocmVzdWx0LT50eXBlKSB7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBl
X1ZvaWQ6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9WT0lEOworICAgICAg
ICBkYXRhLT52YWx1ZS5vID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRU
eXBlX051bGw6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9OVUxMOworICAg
ICAgICBkYXRhLT52YWx1ZS5vID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlh
bnRUeXBlX0ludDMyOgorICAgICAgICBkYXRhLT50eXBlID0gRVdLX0pTX1ZBUklBTlRfSU5UMzI7
CisgICAgICAgIGRhdGEtPnZhbHVlLmkgPSBOUFZBUklBTlRfVE9fSU5UMzIoKnJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3VibGU6CisgICAgICAgIGRh
dGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9ET1VCTEU7CisgICAgICAgIGRhdGEtPnZhbHVlLmQg
PSBOUFZBUklBTlRfVE9fRE9VQkxFKCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IE5QVmFyaWFudFR5cGVfU3RyaW5nOgorICAgICAgICBzeiA9IE5QVkFSSUFOVF9UT19TVFJJTkco
KnJlc3VsdCkuVVRGOExlbmd0aDsKKyAgICAgICAgZGF0YS0+dmFsdWUucyA9IChjaGFyKiltYWxs
b2Moc2l6ZW9mKGNoYXIpICogKHN6ICsgMSkpOworICAgICAgICBtZW1jcHkoZGF0YS0+dmFsdWUu
cywgTlBWQVJJQU5UX1RPX1NUUklORygqcmVzdWx0KS5VVEY4Q2hhcmFjdGVycywgc3opOworICAg
ICAgICBkYXRhLT52YWx1ZS5zW3N6XSA9ICdcMCc7CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tf
SlNfVkFSSUFOVF9TVFJJTkc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlw
ZV9Cb29sOgorICAgICAgICBkYXRhLT50eXBlID0gRVdLX0pTX1ZBUklBTlRfQk9PTDsKKyAgICAg
ICAgZGF0YS0+dmFsdWUuYiA9IE5QVkFSSUFOVF9UT19CT09MRUFOKCpyZXN1bHQpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfT2JqZWN0OgorICAgICAgICBkYXRhLT50
eXBlID0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUOworICAgICAgICBkYXRhLT52YWx1ZS5vID0gX2V3
a19qc19ucG9iamVjdF90b19vYmplY3QoTlBWQVJJQU5UX1RPX09CSkVDVCgqcmVzdWx0KSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfaGFz
KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3a19KU19PYmpl
Y3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgYm9vbCBmYWlsID0gZmFsc2U7
CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7Cisg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9O
UE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRp
ZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFpbDsKKyAgICB9Cisg
ICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAg
aWYgKGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lKSkgLy8gc2hvdWxk
IHNlYXJjaCBtZXRob2RzIHRvbz8KKyAgICAgICAgZmFpbCA9IHRydWU7CisgICAgZnJlZShwcm9w
X25hbWUpOworCisgICAgcmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJv
cGVydHlfZ2V0KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCopbnBf
b2JqOworICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHBy
b3A7CisgICAgYm9vbCBmYWlsID0gZmFsc2U7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4o
b2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7
CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAg
ICAgICByZXR1cm4gZmFpbDsKKyAgICB9CisKKyAgICB2YWx1ZSA9IChFd2tfSlNfVmFyaWFudCop
bWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkpOworICAgIHByb3AgPSAoRXdrX0pTX1Byb3Bl
cnR5KillaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGllcywgbmFtZSk7CisgICAgaWYg
KHByb3AgJiYgcHJvcC0+Z2V0KSB7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkg
aGFzIGdldHRlcgorICAgICAgICBmYWlsID0gcHJvcC0+Z2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFs
dWUpOworICAgICAgICBpZiAoIWZhaWwpCisgICAgICAgICAgICBmYWlsID0gX2V3a19qc192YXJp
YW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKKyAgICB9IGVsc2UgaWYgKG9iai0+Y2xz
LT5kZWZhdWx0X3Byb3AuZ2V0KSB7IC8vIGRlZmF1bHQgZ2V0dGVyIGV4aXN0cworICAgICAgICBm
YWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7
CisgICAgICAgIGlmICghZmFpbCkKKyAgICAgICAgICAgIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRf
dG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxzZSB7IC8vIGZhbGxiYWNrIHRv
IG9iamVjdHMgaGFzaCBtYXAKKyAgICAgICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJv
bUlkZW50aWZpZXIobmFtZSk7CisgICAgICAgIGZyZWUodmFsdWUpOworICAgICAgICB2YWx1ZSA9
IChFd2tfSlNfVmFyaWFudCopZWluYV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25h
bWUpOworICAgICAgICBmcmVlKHByb3BfbmFtZSk7CisgICAgICAgIGlmICh2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQp
OworICAgIH0KKworICAgIGZyZWUodmFsdWUpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0
aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZp
ZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucF92YWx1ZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0
KiBvYmogPSAoRXdrX0pTX09iamVjdCopbnBfb2JqOworICAgIEV3a19KU19WYXJpYW50KiB2YWx1
ZTsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgYm9vbCBmYWlsID0gZmFsc2U7CisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAg
RUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5f
SWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmll
ciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFpbDsKKyAgICB9CisKKyAg
ICB2YWx1ZSA9IChFd2tfSlNfVmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkp
OworICAgIF9ld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wX3ZhbHVlKTsKKyAg
ICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICBw
cm9wID0gKEV3a19KU19Qcm9wZXJ0eSopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3BlcnRp
ZXMsIHByb3BfbmFtZSk7CisgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQorICAgICAgICBmYWls
ID0gcHJvcC0+c2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBjbGFzcyBoYXMgcHJvcGVy
dHkgYW5kIHByb3BlcnR5IGhhcyBzZXR0ZXIKKyAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVs
dF9wcm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9i
aiwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIGRlZmF1bHQgZ2V0dGVyIGV4aXN0cworICAgIGVsc2Ug
eyAvLyBmYWxsYmFjayB0byBvYmplY3RzIGhhc2ggbWFwCisgICAgICAgIHZvaWQqIG9sZCA9IGVp
bmFfaGFzaF9zZXQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIHZhbHVlKTsKKyAgICAgICAg
ZnJlZShvbGQpOworICAgICAgICBmYWlsID0gdHJ1ZTsKKyAgICB9CisKKyAgICBmcmVlKHByb3Bf
bmFtZSk7CisgICAgcmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVy
dHlfcmVtb3ZlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3
a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1By
b3BlcnR5KiBwcm9wOworICAgIGJvb2wgZmFpbCA9IGZhbHNlOworCisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tf
T1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmlu
ZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhaWw7CisgICAgfQorCisgICAgY2hhciogcHJvcF9uYW1l
ID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAgcHJvcCA9IChFd2tfSlNfUHJv
cGVydHkqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpOwor
ICAgIGlmIChwcm9wICYmIHByb3AtPmRlbCkKKyAgICAgICAgZmFpbCA9IHByb3AtPmRlbChvYmos
IHByb3AtPm5hbWUpOyAvLyBjbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0
ZXIKKyAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFp
bCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKG9iaiwgcHJvcF9uYW1lKTsKKyAgICBlbHNl
CisgICAgICAgIGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1l
LCAwKTsKKworICAgIGZyZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIGJvb2wgX2V3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBO
UElkZW50aWZpZXIqKiB2YWx1ZSwgdWludDMyX3QqIGNvdW50KQoreworICAgIEV3a19KU19PYmpl
Y3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRWluYV9JdGVyYXRvciogaXQ7
CisgICAgY2hhcioga2V5OworICAgIGludCBpID0gMDsKKworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIGZhbHNlKTsKKyAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRvcl9rZXlfbmV3KG9i
ai0+cHJvcGVydGllcyk7CisKKyAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmot
PnByb3BlcnRpZXMpOworICAgICp2YWx1ZSA9IChOUElkZW50aWZpZXIqKW1hbGxvYyhzaXplb2Yo
TlBJZGVudGlmaWVyKSAqICpjb3VudCk7CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBr
ZXkpCisgICAgICAgICgqdmFsdWUpW2krK10gPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIoa2V5
KTsKKworICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBib29sIF9ld2tfanNfbWV0aG9kX2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCop
bnBfb2JqOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFs
c2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAg
aWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBO
UElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUp
OyAvLyBSZXR1cm5zIHBvaW50ZXIgaWYgZm91bmQodHJ1ZSksIE5VTEwoZmFsc2UpIG90aGVyd2lz
ZQorfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29i
aiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBfYXJncywgdWludDMyX3Qg
bnBfYXJnX2NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBv
YmogPSAoRXdrX0pTX09iamVjdCopbnBfb2JqOworICAgIEV3a19KU19NZXRob2QqIG1ldGhvZDsK
KyAgICBFd2tfSlNfVmFyaWFudCogYXJnczsKKyAgICBFd2tfSlNfVmFyaWFudCogcmV0X3ZhbDsK
KyAgICBpbnQgaTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmos
IGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKwor
ICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJp
bnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBtZXRob2QgPSAoRXdrX0pTX01ldGhvZCopZWluYV9oYXNoX2ZpbmQo
b2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOworICAgIGlmICghbWV0aG9kKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhcmdzID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3
a19KU19WYXJpYW50KSAqIG5wX2FyZ19jb3VudCk7CisgICAgZm9yIChpID0gMDsgaSA8IG5wX2Fy
Z19jb3VudDsgaSsrKQorICAgICAgICAgICAgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgm
YXJnc1tpXSwgJm5wX2FyZ3NbaV0pOworICAgIHJldF92YWwgPSBtZXRob2QtPmludm9rZShvYmos
IGFyZ3MsIG5wX2FyZ19jb3VudCk7CisgICAgX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudChy
ZXRfdmFsLCByZXN1bHQpOworCisgICAgZXdrX2pzX3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCisvKioKKyAqIENyZWF0ZSBhIEV3a19KU19DbGFzcyB0byBi
ZSB1c2VkIGluIEBhIGV3a19qc19vYmplY3RfbmV3LgorICoKKyAqIEBwYXJhbSBtZXRhIEBhIEV3
a19KU19DbGFzc19NZXRhIHRoYXQgZGVzY3JpYmVzIHRoZSBjbGFzcyB0byBiZSBjcmVhdGVkLgor
ICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19DbGFzcyBjcmVhdGVkLgorICovCitFd2tfSlNfQ2xh
c3MqIF9ld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhKQorewor
ICAgIEV3a19KU19DbGFzcyogY2xzOworICAgIGludCBpOworCisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKG1ldGEsIDApOworCisgICAgY2xzID0gKEV3a19KU19DbGFzcyopbWFs
bG9jKHNpemVvZihFd2tfSlNfQ2xhc3MpKTsKKyAgICBjbHMtPm1ldGEgPSBtZXRhOworICAgIGNs
cy0+ZGVmYXVsdF9wcm9wID0gbWV0YS0+ZGVmYXVsdF9wcm9wOworCisgICAgLy8gZG9uJ3QgZnJl
ZSBtZXRob2RzIHNpbmNlIHRoZXkgcG9pbnQgdG8gbWV0YSBjbGFzcyBtZXRob2RzKHdpbGwgYmUg
ZnJlZWQgd2hlbiBtZXRhIGNsYXNzIGlzIGZyZWVkKQorICAgIGNscy0+bWV0aG9kcyA9IGVpbmFf
aGFzaF9wb2ludGVyX25ldygwKTsKKyAgICBmb3IgKGkgPSAwOyBtZXRhLT5tZXRob2RzICYmIG1l
dGEtPm1ldGhvZHNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAgIE5QSWRlbnRpZmllciBpZCA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcihtZXRhLT5tZXRob2RzW2ldLm5hbWUpOworICAgICAgICBl
aW5hX2hhc2hfYWRkKGNscy0+bWV0aG9kcywgaWQsICZtZXRhLT5tZXRob2RzW2ldKTsKKyAgICB9
CisKKyAgICAvLyBkb24ndCBmcmVlIHByb3BlcnRpZXMgc2luY2UgdGhleSBwb2ludCB0byBtZXRh
IGNsYXNzIHByb3BlcnRpZXMod2lsbCBiZSBmcmVlZCB3aGVuIG1ldGEgY2xhc3MgaXMgZnJlZWQp
CisgICAgY2xzLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGZv
ciAoaSA9IDA7IG1ldGEtPnByb3BlcnRpZXMgJiYgbWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBp
KyspIHsKKyAgICAgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVy
KG1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZSk7CisgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5w
cm9wZXJ0aWVzLCBpZCwgJm1ldGEtPnByb3BlcnRpZXNbaV0pOworICAgIH0KKworICAgIHJldHVy
biBjbHM7Cit9CisKKy8qKgorICogUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBhIGNs
cy4KKyAqCisgKiBAcGFyYW0gY2xzIEBhIEV3a19KU19DbGFzcyB0byBiZSByZWxlYXNlZC4KKyAq
Lwordm9pZCBfZXdrX2pzX2NsYXNzX2ZyZWUoRXdrX0pTX0NsYXNzKiBjbHMpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2xzKTsKKyAgICBlaW5hX2hhc2hfZnJlZShjbHMtPm1l
dGhvZHMpOworICAgIGVpbmFfaGFzaF9mcmVlKGNscy0+cHJvcGVydGllcyk7CisgICAgZnJlZShj
bHMpOworfQorCisvKioKKyAqIENyZWF0ZSBhIEV3a19KU19PYmplY3QgdG8gYmUgdXNlZCBpbiBA
YSBld2tfdmlld19qc19vYmplY3RfYWRkLiBUaGUgTWV0YSBjbGFzcydzCisgKiBtZXRob2RzIGFu
ZCBwcm9wZXJ0aWVzIGFyZSBub3QgbW9kaWZpZWQgYnV0IHJlZmVyZW5jZXMgdG8gaXQgYXJlIGtl
cHQgYXMgbG9uZworICogYXMgdGhlIG9iamVjdCBjcmVhdGVkIGZyb20gaXQgbGl2ZXMuIEFsbCBw
cm9wZXJ0aWVzIGNyZWF0ZWQgaGVyZQorICogd2lsbCBiZSBhZGRlZCB0byB0aGUgb2JqZWN0IGhh
c2ggb2YgcHJvcGVydGllcy4gUHJvcGVydGllcyB1c2luZyBkZWZhdWx0X3Byb3AncworICogZ2V0
L3NldC9kZWwgbWV0aG9kcyBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB0aGUgb2JqZWN0cyBoYXNo
KHNlZToKKyAqIEBhIGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQpLiBNZXRob2RzIG11c3Qg
ZnJlZSB0aGUgYXJndW1lbnRzIHRoZXkgcmVjZWl2ZShzZWU6CisgKiBAYSBld2tfanNfdmFyaWFu
Z19hcnJheV9mcmVlKS4KKyAqCisgKgorICogQHBhcmFtIGNscyBAYSBFd2tfSlNfQ2xhc3MgdGhh
dCBkZXNjcmliZXMgdGhlIG9iamVjdCB0byBiZSBjcmVhdGVkLgorICoKKyAqIEByZXR1cm4gVGhl
IEV3a19KU19PYmplY3QgY3JlYXRlZC4KKyAqLworRXdrX0pTX09iamVjdCogZXdrX2pzX29iamVj
dF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGFfY2xzKQoreworICAgIEV3a19KU19P
YmplY3QqIG9iajsKKyAgICBpbnQgaTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChtZXRhX2NscywgMCk7CisKKyAgICBvYmogPSAoRXdrX0pTX09iamVjdCopbWFsbG9jKHNp
emVvZihFd2tfSlNfT2JqZWN0KSk7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JK
RUNUX01BR0lDKTsKKyAgICBvYmotPmNscyA9IF9ld2tfanNfY2xhc3NfbmV3KG1ldGFfY2xzKTsK
KyAgICBvYmotPnZpZXcgPSAwOworICAgIG9iai0+bmFtZSA9IDA7CisKKyAgICBpZiAoZWluYV9o
YXNoX3BvcHVsYXRpb24ob2JqLT5jbHMtPnByb3BlcnRpZXMpIDwgMjUpCisgICAgICAgIG9iai0+
cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KChFaW5hX0ZyZWVfQ2IpZXdr
X2pzX3ZhcmlhbnRfZnJlZSk7CisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBl
aW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoKEVpbmFfRnJlZV9DYilld2tfanNfdmFyaWFu
dF9mcmVlKTsKKyAgICBmb3IgKGkgPSAwOyBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllcyAmJiBv
YmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAgRXdrX0pT
X1Byb3BlcnR5IHByb3AgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXTsKKyAgICAgICAg
Y29uc3QgY2hhcioga2V5ID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsKKyAg
ICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6
ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgICAgIGlmIChwcm9wLmdldCkKKyAgICAgICAgICAg
IHByb3AuZ2V0KG9iaiwga2V5LCB2YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
dmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVl
LT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZPSUQ6CisgICAgICAg
ICAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZh
bHVlLm8gPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFV0tf
SlNfVkFSSUFOVF9TVFJJTkc6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLnMgPSBzdHJk
dXAocHJvcC52YWx1ZS52YWx1ZS5zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfQk9PTDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFs
dWUuYiA9IHByb3AudmFsdWUudmFsdWUuYjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfSU5UMzI6CisgICAgICAgICAgICAgICAgdmFsdWUt
PnZhbHVlLmkgPSBwcm9wLnZhbHVlLnZhbHVlLmk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0RPVUJMRToKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+dmFsdWUuZCA9IHByb3AudmFsdWUudmFsdWUuZDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfT0JKRUNUOgorICAgICAgICAgICAg
ICAgIHZhbHVlLT52YWx1ZS5vID0gcHJvcC52YWx1ZS52YWx1ZS5vOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVpbmFfaGFzaF9hZGQo
b2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBvYmotPmJhc2Uub2Jq
ZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmotPmJhc2Uub2JqZWN0Ll9jbGFzcyA9ICZF
V0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqOworfQorCisvKioKKyAqIFJlbGVhc2UgcmVzb3Vy
Y2VzIGFsbG9jYXRlZCBieSBAYSBvYmouCisgKgorICogQHBhcmFtIG9iaiBAYSBFd2tfSlNfT2Jq
ZWN0IHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIGV3a19qc19vYmplY3RfZnJlZShFd2tfSlNf
T2JqZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKKyAg
ICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmopOworICAgIEVpbmFfQm9vbCBzY3JpcHRf
b2JqID0gIW9iai0+Y2xzLT5tZXRhOworCisgICAgZWluYV9oYXNoX2ZyZWUob2JqLT5wcm9wZXJ0
aWVzKTsKKyAgICBmcmVlKG9iai0+bmFtZSk7CisKKyAgICBfZXdrX2pzX2NsYXNzX2ZyZWUoKEV3
a19KU19DbGFzcyopb2JqLT5jbHMpOworCisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFSU5BX01B
R0lDX05PTkUpOworCisgICAgaWYgKHNjcmlwdF9vYmopCisgICAgICAgIGZyZWUob2JqKTsKK30K
KworLyoqCisgKiBHZXRzIEVpbmFfSGFzaCB3aXRoIG9iamVjdCdzIHByb3BlcnRpZXMuCisgKgor
ICogQHBhcmFtIG9iaiBPYmplY3Qgd2hvc2UgcHJvcGVydGllcyBhcmUgd2FudGVkLgorICoKKyAq
IEByZXR1cm4gb2JqZWN0J3MgcHJvcGVydGllcy4KKyAqLworRWluYV9IYXNoKiBld2tfanNfb2Jq
ZWN0X3Byb3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9iaikKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmosIDApOworICAgIHJldHVybiBvYmotPnByb3BlcnRpZXM7Cit9CisKKy8q
KgorICogR2V0cyBuYW1lIG9mIHRoZSBvYmplY3QuCisgKgorICogQHBhcmFtIG9iaiBPYmplY3Qg
d2hvc2UgbmFtZSBpcyB3YW50ZWQuCisgKgorICogQHJldHVybiBuYW1lIG9mIG9iamVjdC4KKyAq
LworY29uc3QgY2hhciogZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0
KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgMCk7Cisg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsKKyAgICByZXR1cm4gb2JqLT5u
YW1lOworfQorCisvKioKKyAqIENhbGxzIHRoZSBmdW5jdGlvbiB0aGlzIG9iamVjdCByZXByZXNl
bnRzLgorICoKKyAqIEBwYXJhbSBvYmogT2JqZWN0IHRoYXQgcmVwcmVzZW50cyBmdW5jdGlvbi4K
KyAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gZnVuY3Rpb24uCisgKiBA
cGFyYW0gYXJnX2NvdW50IE51bWJlciBvZiBhcmd1bWVudHMuCisgKiBAcGFyYW0gcmVzdWx0IFJl
dHVybiB2YWx1ZSBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi4KKyAqCisgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBpZiBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJTkFfRkFMU0UgaWYgZnVuY3Rp
b24gd2FzIG5vdCBleGVjdXRlZC4KKyAqLworRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tl
KEV3a19KU19PYmplY3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBhcmdfY291bnQs
IEV3a19KU19WYXJpYW50KiByZXN1bHQpCit7CisgICAgTlBWYXJpYW50KiBucF9hcmdzOworICAg
IE5QVmFyaWFudCBucF9yZXN1bHQ7CisgICAgYm9vbCBmYWlsID0gRUlOQV9GQUxTRTsKKyAgICBp
bnQgaTsKKworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgRUlOQV9GQUxTRSk7
CisgICAgaWYgKGFyZ19jb3VudCkKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGFyZ3MsIEVJTkFfRkFMU0UpOworCisgICAgbnBfYXJncyA9IChOUFZhcmlhbnQqKW1hbGxv
YyhzaXplb2YoTlBWYXJpYW50KSAqIGFyZ19jb3VudCk7CisgICAgZm9yIChpID0gMDsgaSA8IGFy
Z19jb3VudDsgaSsrKQorICAgICAgICBpZiAoIV9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQo
JmFyZ3NbaV0sICZucF9hcmdzW2ldKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYg
KCEoZmFpbCA9IF9OUE5fSW52b2tlRGVmYXVsdCgwLCAoTlBPYmplY3QqKW9iaiwgbnBfYXJncywg
YXJnX2NvdW50LCAmbnBfcmVzdWx0KSkpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChyZXN1
bHQpCisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHJlc3VsdCwg
Jm5wX3Jlc3VsdCk7CisKK2VuZDoKKyAgICBmcmVlKG5wX2FyZ3MpOworICAgIHJldHVybiBmYWls
OworfQorCisvKioKKyAqIFJlbGVhc2UgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBAYSB2YXIuCisg
KgorICogQHBhcmFtIHZhciBAYSBFd2tfSlNfVmFyaWFudCB0byBiZSByZWxlYXNlCisgKi8KK3Zv
aWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCogdmFyKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHZhcik7CisgICAgaWYgKHZhci0+dHlwZSA9PSBFV0tfSlNf
VkFSSUFOVF9TVFJJTkcpCisgICAgICAgIGZyZWUodmFyLT52YWx1ZS5zKTsKKyAgICBlbHNlIGlm
ICh2YXItPnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICBld2tfanNfb2Jq
ZWN0X2ZyZWUodmFyLT52YWx1ZS5vKTsKKyAgICBmcmVlKHZhcik7Cit9CisKK3ZvaWQgZXdrX2pz
X3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tfSlNfVmFyaWFudCAqdmFyLCBpbnQgY291bnQpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odmFyKTsKKyAgICBpbnQgaTsKKyAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICBpZiAodmFyW2ldLnR5cGUgPT0gRVdL
X0pTX1ZBUklBTlRfU1RSSU5HKQorICAgICAgICAgICAgZnJlZSh2YXJbaV0udmFsdWUucyk7Cisg
ICAgICAgIGVsc2UgaWYgKHZhcltpXS50eXBlID09IEVXS19KU19WQVJJQU5UX09CSkVDVCkKKyAg
ICAgICAgICAgIGV3a19qc19vYmplY3RfZnJlZSh2YXJbaV0udmFsdWUubyk7CisgICAgfQorICAg
IGZyZWUodmFyKTsKK30KKworc3RhdGljIHZvaWQgX2V3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19K
U19Qcm9wZXJ0eSAqcHJvcCkKK3sKKyAgICBmcmVlKCh2b2lkKilwcm9wLT5uYW1lKTsKKyAgICBp
ZiAocHJvcC0+dmFsdWUudHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisgICAgICAgIGZy
ZWUocHJvcC0+dmFsdWUudmFsdWUucyk7CisgICAgZWxzZSBpZiAocHJvcC0+dmFsdWUudHlwZSA9
PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCisgICAgICAgIGV3a19qc19vYmplY3RfZnJlZShwcm9w
LT52YWx1ZS52YWx1ZS5vKTsKKyAgICBmcmVlKHByb3ApOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2VmbC9ld2svZXdrX2pzLmggYi9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTk3YTdhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2VmbC9ld2svZXdrX2pzLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDEwIFByb0ZVU0lPTiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBld2tfanNfaAor
I2RlZmluZSBld2tfanNfaAorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMuaD4K
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIEVX
S19KU19DTEFTU19NRVRBX1ZFUlNJT04gMAorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX09iamVj
dCBFd2tfSlNfT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19DbGFzc19NZXRhIEV3a19K
U19DbGFzc19NZXRhOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19WYXJpYW50IEV3a19KU19WYXJp
YW50OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19NZXRob2QgRXdrX0pTX01ldGhvZDsKK3R5cGVk
ZWYgc3RydWN0IF9Fd2tfSlNfUHJvcGVydHkgRXdrX0pTX1Byb3BlcnR5OwordHlwZWRlZiBzdHJ1
Y3QgX0V3a19KU19EZWZhdWx0IEV3a19KU19EZWZhdWx0OwordHlwZWRlZiBFaW5hX0Jvb2wgKCpF
d2tfSlNfU2V0X0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IEV3a19KU19WYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19HZXRf
Q2IpKEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgRXdrX0pTX1ZhcmlhbnQg
KnZhbHVlKTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX0pTX0RlbF9DYikoRXdrX0pTX09iamVj
dCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKTsKK3R5cGVkZWYgRXdrX0pTX1ZhcmlhbnQqICgqRXdr
X0pTX0ludm9rZV9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywg
aW50IGFyZ0NvdW50KTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBFV0tfSlNfVkFSSUFOVF9WT0lE
LAorICAgIEVXS19KU19WQVJJQU5UX05VTEwsCisgICAgRVdLX0pTX1ZBUklBTlRfQk9PTCwKKyAg
ICBFV0tfSlNfVkFSSUFOVF9JTlQzMiwKKyAgICBFV0tfSlNfVkFSSUFOVF9ET1VCTEUsCisgICAg
RVdLX0pTX1ZBUklBTlRfU1RSSU5HLAorICAgIEVXS19KU19WQVJJQU5UX09CSkVDVAorfSBFd2tf
SlNfVmFyaWFudF9UeXBlOworCitzdHJ1Y3QgX0V3a19KU19WYXJpYW50IHsKKyAgICBFd2tfSlNf
VmFyaWFudF9UeXBlIHR5cGU7CisgICAgdW5pb24geworICAgICAgICBFaW5hX0Jvb2wgYjsKKyAg
ICAgICAgaW50IGk7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICBjaGFyICpzOworICAgICAg
ICBFd2tfSlNfT2JqZWN0ICpvOworICAgIH0gdmFsdWU7Cit9OworCitzdHJ1Y3QgX0V3a19KU19N
ZXRob2QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgRXdrX0pTX0ludm9rZV9DYiBpbnZv
a2U7Cit9OworCitzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSB7CisgICAgY29uc3QgY2hhciAqbmFt
ZTsKKyAgICBFd2tfSlNfU2V0X0NiIHNldDsKKyAgICBFd2tfSlNfR2V0X0NiIGdldDsKKyAgICBF
d2tfSlNfRGVsX0NiIGRlbDsKKyAgICBFd2tfSlNfVmFyaWFudCB2YWx1ZTsKK307CisKK3N0cnVj
dCBfRXdrX0pTX0RlZmF1bHQgeworICAgIEV3a19KU19TZXRfQ2Igc2V0OworICAgIEV3a19KU19H
ZXRfQ2IgZ2V0OworICAgIEV3a19KU19EZWxfQ2IgZGVsOworfTsKKworc3RydWN0IF9Fd2tfSlNf
Q2xhc3NfTWV0YSB7CisgICAgdW5zaWduZWQgaW50IHZlcnNpb247IC8vIGRlZmluZQorICAgIGNv
bnN0IEV3a19KU19NZXRob2QgKm1ldGhvZHM7IC8vIG51bGwgdGVybWluYXRlZCBhcnJheQorICAg
IGNvbnN0IEV3a19KU19Qcm9wZXJ0eSAqcHJvcGVydGllczsgLy8gbnVsbCB0ZXJtaW5hdGVkIGFy
cmF5CisgICAgRXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9wOworfTsKKworRUFQSSBFaW5hX0hh
c2ggKmV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29uc3QgRXdrX0pTX09iamVjdCAqb2Jq
KTsKK0VBUEkgY29uc3QgY2hhciAqZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNf
T2JqZWN0ICpvYmopOworCitFQVBJIHZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFy
aWFudCAqdmFyKTsKK0VBUEkgdm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3a19KU19W
YXJpYW50ICp2YXIsIGludCBjb3VudCk7CitFQVBJIEV3a19KU19PYmplY3QgKmV3a19qc19vYmpl
Y3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhICptZXRhX2Nscyk7CitFQVBJIHZvaWQgZXdr
X2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QgKm9iaik7CitFQVBJIEVpbmFfQm9vbCBld2tf
anNfb2JqZWN0X2ludm9rZShFd2tfSlNfT2JqZWN0ICpvYmosIEV3a19KU19WYXJpYW50ICphcmdz
LCBpbnQgYXJnX2NvdW50LCBFd2tfSlNfVmFyaWFudCAqcmVzdWx0KTsKKworI2lmZGVmIF9fY3Bs
dXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a19qc19oCmRpZmYgLS1naXQgYS9XZWJL
aXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oIGIvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaApp
bmRleCBlYWFkMTNjLi45YTQxMzY0IDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJp
dmF0ZS5oCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKQEAgLTI0LDkgKzI0LDEx
IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiRVdlYktpdC5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJQ
YWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNs
dWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfbG9nZ2luZy5oIgogI2luY2x1ZGUgImV3a191
dGlsLmgiCiAKQEAgLTQwLDYgKzQyLDcgQEAgZXh0ZXJuICJDIiB7CiAKIC8vIElmIGRlZmluZWQs
IGV3ayB3aWxsIGRvIHR5cGUgY2hlY2tpbmcgdG8gZW5zdXJlIG9iamVjdHMgYXJlIG9mIGNvcnJl
Y3QgdHlwZQogI2RlZmluZSBFV0tfVFlQRV9DSEVDSyAxCisjZGVmaW5lIEVXS19KU19PQkpFQ1Rf
TUFHSUMgMHg2OTY5NjkKIAogLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKQEAgLTQ4LDYgKzUxLDE2IEBAIHN0cnVjdCBDb250ZXh0TWVudTsKIHN0cnVjdCBDb250
ZXh0TWVudUl0ZW07CiB9CiAKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfQ2xhc3MgRXdrX0pTX0Ns
YXNzOworc3RydWN0IF9Fd2tfSlNfT2JqZWN0IHsKKyAgICBKYXZhU2NyaXB0T2JqZWN0IGJhc2U7
CisgICAgY2hhciAqbmFtZTsKKyAgICBjb25zdCBFd2tfSlNfQ2xhc3MgKmNsczsKKyAgICBFaW5h
X0hhc2ggKnByb3BlcnRpZXM7IC8vIGtleT1uYW1lLCB2YWx1ZT1jdXJyZW50IHZhbHVlIG9mIHBy
b3BlcnR5CisgICAgRXZhc19PYmplY3QgKnZpZXc7IC8vIGV3a192aWV3OiBjaGVjayBpZiB0aGlz
IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKKyAgICBF
SU5BX01BR0lDOworfTsKKwogdm9pZCBld2tfdmlld19yZWFkeShFdmFzX09iamVjdCAqbyk7CiB2
b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCBhY3RpdmUpOwogdm9pZCBld2tfdmlld190aXRsZV9zZXQoRXZhc19PYmplY3QgKm8sIGNv
bnN0IGNoYXIgKnRpdGxlKTsKQEAgLTEwNiw2ICsxMTksOCBAQCB2b2lkIGV3a192aWV3X3ZpZXdw
b3J0X3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgdywgZmxvYXQgaCwgZmxvYXQgaW5pdF9zY2Fs
ZSwgZgogCiB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QgKm8sIEV3
a19Eb3dubG9hZCAqZG93bmxvYWQpOwogCit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3Rf
Y2xlYXIoRXZhc19PYmplY3QgKm8pOworCiBFd2tfSGlzdG9yeSAqZXdrX2hpc3RvcnlfbmV3KFdl
YkNvcmU6OkJhY2tGb3J3YXJkTGlzdCAqaGlzdG9yeSk7CiB2b2lkIGV3a19oaXN0b3J5X2ZyZWUo
RXdrX0hpc3RvcnkgKmhpc3RvcnkpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlldy5jcHAgYi9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggNzA5MmQ4Yy4uOTZl
NmRmZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgImV3a192
aWV3LmgiCiAKICNpbmNsdWRlICJhcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgor
I2luY2x1ZGUgIkJyaWRnZS5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIKICNpbmNsdWRlICJD
aHJvbWVDbGllbnRFZmwuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEVmbC5oIgogI2lu
Y2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgpAQCAtMzksNiArNDEsOSBAQAogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJJbnNwZWN0b3JDbGllbnRFZmwuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNs
dWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUg
IlByb2dyZXNzVHJhY2tlci5oIgpAQCAtMjY4Myw3ICsyNjg4LDcgQEAgY29uc3QgY2hhciogZXdr
X3ZpZXdfc2V0dGluZ19mb250X3NhbnNfc2VyaWZfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZjsKIH0KLSAgCisKIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIGZhbWlseSkKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKQEAgLTM5NzcsNiArMzk4MiwxNyBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3Jl
cXVlc3QoRXZhc19PYmplY3QqIG8sIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAKIC8qKgogICog
QGludGVybmFsCisgKiBSZXBvcnRzIHRoZSBKUyB3aW5kb3cgb2JqZWN0IHdhcyBjbGVhcmVkLgor
ICoKKyAqIEBwYXJhbSBvIHZpZXcuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVj
dF9jbGVhcihFdmFzX09iamVjdCAqbykKK3sKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8sICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCAwKTsKK30KKworLyoqCisgKiBAaW50
ZXJuYWwKICAqIFJlcG9ydHMgdGhlIHZpZXdwb3J0IGhhcyBjaGFuZ2VkLgogICoKICAqIEBwYXJh
bSBvIHZpZXcuCkBAIC00MDQwLDcgKzQwNTYsNyBAQCB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2dl
dChFdmFzX09iamVjdCAqbywgZmxvYXQqIHcsIGZsb2F0KiBoLCBmbG9hdCogaW5pdF9zY2FsZQog
ICogQHBhcmFtIG8gdmlldy4KICAqIEBwYXJhbSBtaW5fc2NhbGUgbWluaW11bSB2YWx1ZSBvZiB6
b29tIHJhbmdlLgogICogQHBhcmFtIG1heF9zY2FsZSBtYXhpbXVtIHZhbHVlIG9mIHpvb20gcmFu
Z2UuCi0gKiAKKyAqCiAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB6b29tIHJhbmdlIGlzIGNo
YW5nZWQsIEBjIEVJTkFfRkFMU0UgaWYgbm90IG9yIGZhaWx1cmUuCiAgKi8KIEVpbmFfQm9vbCBl
d2tfdmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCogbywgZmxvYXQgbWluX3NjYWxlLCBm
bG9hdCBtYXhfc2NhbGUpCkBAIC00MTM5LDMgKzQxNTUsNDMgQEAgRWluYV9Cb29sIGV3a192aWV3
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVz
b3VyY2UKIAogICAgIHJldHVybiBzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihz
ZCwgcmVxdWVzdCk7CiB9CisKKy8qKgorICogQ3JlYXRlcyBhIEpTIG9iamVjdCBuYW1lZCBAYSBv
YmpfbmFtZSBhcyBwcm9wZXJ0eSBvZiB0aGUgd2luZG93IG9iamVjdC4gVGhpcyBzaG91bGQgYmUg
Y2FsbGVkIG9uIGEgY2FsbGJhY2sgY29ubmVjdGVkIHRvIHRoZQorICoganMsd2luZG93b2JqZWN0
LGNsZWFyIHNpZ25hbC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFtIG9iaiBvYmpl
Y3QgdGhhdCB3aWxsIGJlIGFkZGVkKHNlZTogQGEgZXdrX2pzX29iamVjdF9uZXcpLgorICogQHBh
cmFtIG9ial9uYW1lIG5hbWUgb2YgdGhlIG9iamVjdC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBpZiBvYmplY3Qgd2FzIGFkZGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KKyAqLworRWlu
YV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QgKm8sIEV3a19KU19PYmpl
Y3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpCit7CisgICAgaWYgKG9iai0+dmlldykgLy8g
b2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tfdmlldworICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICBvYmotPm5hbWUgPSBzdHJkdXAob2JqX25hbWUpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisKKyAgICBK
U0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBXZWJDb3Jl
OjpKU0RPTVdpbmRvdyAqd2luZG93ID0gdG9KU0RPTVdpbmRvdyhwcml2LT5tYWluX2ZyYW1lLCBX
ZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpCaW5kaW5nczo6Um9v
dE9iamVjdCAqcm9vdDsKKyAgICByb290ID0gcHJpdi0+bWFpbl9mcmFtZS0+c2NyaXB0KCktPmJp
bmRpbmdSb290T2JqZWN0KCk7CisKKyAgICBpZiAoIXdpbmRvdykgeworICAgICAgICBFUlIoIldh
cm5pbmc6IGNvdWxkbid0IGdldCB3aW5kb3cgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOworICAgIH0KKworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9i
YWxFeGVjKCk7CisKKyAgICBvYmotPnZpZXcgPSBvOworICAgIEpTQzo6SlNPYmplY3QgKnJ1bnRp
bWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVh
dGUoKE5QT2JqZWN0KilvYmosIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAg
IEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmpfbmFtZSk7CisK
KyAgICBKU0M6OlB1dFByb3BlcnR5U2xvdCBzbG90OworICAgIHdpbmRvdy0+cHV0KGV4ZWMsIGlk
LCBydW50aW1lT2JqZWN0LCBzbG90KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCmRpZmYg
LS1naXQgYS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaAppbmRleCBjNWQyZDQ1Li44N2EwOWJiIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oCisrKyBiL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKQEAgLTIzLDYgKzIzLDcg
QEAKIAogI2luY2x1ZGUgImV3a19mcmFtZS5oIgogI2luY2x1ZGUgImV3a19oaXN0b3J5LmgiCisj
aW5jbHVkZSAiZXdrX2pzLmgiCiAjaW5jbHVkZSAiZXdrX3dpbmRvd19mZWF0dXJlcy5oIgogCiAj
aW5jbHVkZSA8RXZhcy5oPgpAQCAtODksNiArOTAsNyBAQCBleHRlcm4gIkMiIHsKICAqICAtICJ2
aWV3cG9ydCxjaGFuZ2VkIiwgdm9pZDogUmVwb3J0IHRoYXQgdmlld3BvcnQgaGFzIGNoYW5nZWQu
CiAgKiAgLSAiaW5wdXRtZXRob2RzLGNoYW5nZWQiIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcg
d2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90LgogICogIC0gInZpZXcscmVzaXplZCIsIHZvaWQ6
IHZpZXcgb2JqZWN0J3Mgc2l6ZSBoYXMgY2hhbmdlZC4KKyAqICAtICJqcyx3aW5kb3dvYmplY3Qs
Y2xlYXIiLCB2b2lkOiBSZXBvcnQgdGhhdCB0aGUgSlMgd2luZG93IG9iamVjdCBoYXMgYmVlbiBj
bGVhcmVkLgogICovCiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVmlld19TbWFydF9EYXRhIEV3a19W
aWV3X1NtYXJ0X0RhdGE7CkBAIC00OTEsNiArNDkzLDggQEAgRUFQSSBmbG9hdCBld2tfdmlld196
b29tX3JhbmdlX21heF9nZXQoRXZhc19PYmplY3QqIG8pOwogRUFQSSB2b2lkIGV3a192aWV3X3Vz
ZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJsZSk7
CiBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChFdmFzX09iamVjdCog
byk7CiAKK0VBUEkgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3Qg
Km8sIEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpOworCiAjaWZkZWYg
X19jcGx1c3BsdXMKIH0KICNlbmRpZgotLSAKMS43LjMuMQoK
</data>
<flag name="review"
          id="61154"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71166</attachid>
            <date>2010-10-19 07:07:44 -0700</date>
            <delta_ts>2011-06-17 08:21:18 -0700</delta_ts>
            <desc>Example code for injecting JS API.</desc>
            <filename>0002-Example-code-for-injecting-JS-API.patch</filename>
            <type>text/plain</type>
            <size>9041</size>
            <attacher name="Jonas Gastal">jgastal</attacher>
            
              <data encoding="base64">RnJvbSA4MWFmNTdiZjQ2MGU5ZmE4ZGE4NmNjNjI1ZWJhMzFhMzFjNmEyZWQxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBKb25hcyBNLiBHYXN0YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1v
Ymk+CkRhdGU6IEZyaSwgMzAgSnVsIDIwMTAgMTY6MTQ6MTggLTAzMDAKU3ViamVjdDogW1BBVENI
IDIvMl0gRXhhbXBsZSBjb2RlIGZvciBpbmplY3RpbmcgSlMgQVBJLgoKLS0tCiBXZWJLaXQvZWZs
L0NoYW5nZUxvZyAgICAgICAgICAgfCAgIDE1ICsrKysrCiBXZWJLaXQvZWZsL0VXZWJMYXVuY2hl
ci9tYWluLmMgfCAgMTExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0K
IDIgZmlsZXMgY2hhbmdlZCwgMTIxIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2VmbC9DaGFuZ2VMb2cgYi9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRl
eCBjMWFhMWIyLi5kZjVkNjYyIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZWZsL0NoYW5nZUxvZwpAQCAtNSw2ICs1LDIxIEBACiAgICAgICAgIEV4cG9ydGlu
ZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ0NgogCisgICAgICAgICogRVdlYkxhdW5jaGVy
L21haW4uYzoKKyAgICAgICAgKHByaW50X2Z1bmN0aW9uKToKKyAgICAgICAgKG9uX2pzX3dpbmRv
d29iamVjdF9jbGVhcik6CisgICAgICAgIChvbl9rZXlfZG93bik6CisgICAgICAgIChvbl9icm93
c2VyX2RlbCk6CisgICAgICAgIChicm93c2VyQ3JlYXRlKToKKyAgICAgICAgKG1haW4pOgorCisy
MDEwLTA4LTMxICBKb25hcyBNLiBHYXN0YWwgIDxqZ2FzdGFsQHByb2Z1c2lvbi5tb2JpPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9ydGluZyBK
YXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MzQ0NgorCiAgICAgICAgICogQ01ha2VMaXN0c0VmbC50
eHQ6CiAgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwOgog
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2xlYXJX
aW5kb3dPYmplY3RJbldvcmxkKToKZGlmZiAtLWdpdCBhL1dlYktpdC9lZmwvRVdlYkxhdW5jaGVy
L21haW4uYyBiL1dlYktpdC9lZmwvRVdlYkxhdW5jaGVyL21haW4uYwppbmRleCBjMTk1NmEyLi5m
MzU5NTYzIDEwMDY0NAotLS0gYS9XZWJLaXQvZWZsL0VXZWJMYXVuY2hlci9tYWluLmMKKysrIGIv
V2ViS2l0L2VmbC9FV2ViTGF1bmNoZXIvbWFpbi5jCkBAIC03Miw2ICs3Miw1MSBAQCBzdGF0aWMg
RWluYV9MaXN0ICp3aW5kb3dzID0gTlVMTDsKIAogc3RhdGljIGNoYXIgKnRoZW1lUGF0aCA9IE5V
TEw7CiAKK3N0YXRpYyBFd2tfSlNfVmFyaWFudCAqcHJpbnRfZnVuY3Rpb24oRXdrX0pTX09iamVj
dCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywgaW50IGFyZ19jb3VudCk7CisKK3N0YXRpYyBF
d2tfSlNfT2JqZWN0ICpqc19vYmogPSBOVUxMOworCitzdGF0aWMgY29uc3QgRXdrX0pTX01ldGhv
ZCBtZXRob2RzW10gPSB7CisgICAgeworICAgICAgICAicHJpbnQiLAorICAgICAgICBwcmludF9m
dW5jdGlvbgorICAgIH0sCisgICAgeyAwIH0gLy8gdGVybWluYXRvcgorfTsKKworc3RhdGljIGNv
bnN0IEV3a19KU19Qcm9wZXJ0eSBwcm9wZXJ0aWVzW10gPSB7CisgICAgeworICAgICAgICAibXlf
cHJvcCIsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIDAsCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEVXS19KU19WQVJJQU5UX1NUUklORywKKyAgICAgICAgICAgIHsgLnMgPSAiSGVs
bG8gV29ybGQhIiB9CisgICAgICAgIH0KKyAgICB9LAorICAgIHsKKyAgICAgICAgIm15X3Byb3Ay
IiwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgMCwKKyAgICAgICAgeworICAgICAg
ICAgICAgRVdLX0pTX1ZBUklBTlRfU1RSSU5HLAorICAgICAgICAgICAgeyAucyA9ICJibGEiIH0K
KyAgICAgICAgfQorICAgIH0sCisgICAgeyAwIH0gLy8gdGVybWluYXRvcgorfTsKKworc3RhdGlj
IGNvbnN0IEV3a19KU19DbGFzc19NZXRhIGpzX21ldGEgPSB7CisgICAgRVdLX0pTX0NMQVNTX01F
VEFfVkVSU0lPTiwKKyAgICBtZXRob2RzLAorICAgIHByb3BlcnRpZXMsCisgICAgMCwKKyAgICAw
LAorICAgIDAKK307CisKIHR5cGVkZWYgc3RydWN0IF9XaW5kb3dfUHJvcGVydGllcyB7CiAgICAg
RWluYV9Cb29sIHRvb2xiYXJzVmlzaWJsZToxOwogICAgIEVpbmFfQm9vbCBzdGF0dXNiYXJWaXNp
YmxlOjE7CkBAIC0xMDMsNiArMTQ4LDggQEAgc3RhdGljIGNvbnN0IEVjb3JlX0dldG9wdCBvcHRp
b25zID0gewogICAgICAgICAgICAgIGVjb3JlX2dldG9wdF9jYWxsYmFja19lY29yZV9ldmFzX2xp
c3RfZW5naW5lcywgTlVMTCksCiAgICAgICAgIEVDT1JFX0dFVE9QVF9TVE9SRV9ERUZfQk9PTAog
ICAgICAgICAgICAgKCdGJywgImZ1bGxzY3JlZW4iLCAiZnVsbHNjcmVlbiBtb2RlLiIsIDApLAor
ICAgICAgICBFQ09SRV9HRVRPUFRfU1RPUkVfREVGX0JPT0wKKyAgICAgICAgICAgICgnSicsICJl
eHBvcnQtSlMtdGVzdC1vYmplY3QiLCAiZXhwb3J0IEpTIHRlc3Qgb2JqZWN0LiIsIDApLAogICAg
ICAgICBFQ09SRV9HRVRPUFRfQ0FMTEJBQ0tfQVJHUwogICAgICAgICAgICAgKCdnJywgImdlb21l
dHJ5IiwgImdlb21ldHJ5IHRvIHVzZSBpbiB4Onk6dzpoIGZvcm0uIiwgIlg6WTpXOkgiLAogICAg
ICAgICAgICAgIGVjb3JlX2dldG9wdF9jYWxsYmFja19nZW9tZXRyeV9wYXJzZSwgTlVMTCksCkBA
IC0xNDcsNyArMTk0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0VMYXVuY2hlciB7CiAKIHN0YXRpYyB2
b2lkIGJyb3dzZXJEZXN0cm95KEVjb3JlX0V2YXMgKmVlKTsKIHN0YXRpYyB2b2lkIGNsb3NlV2lu
ZG93KEVjb3JlX0V2YXMgKmVlKTsKLXN0YXRpYyBpbnQgYnJvd3NlckNyZWF0ZShjb25zdCBjaGFy
ICp1cmwsIGNvbnN0IGNoYXIgKnRoZW1lLCBjb25zdCBjaGFyICp1c2VyQWdlbnQsIEVpbmFfUmVj
dGFuZ2xlIGdlb21ldHJ5LCBjb25zdCBjaGFyICplbmdpbmUsIHVuc2lnbmVkIGNoYXIgaXNGdWxs
c2NyZWVuKTsKK3N0YXRpYyBpbnQgYnJvd3NlckNyZWF0ZShjb25zdCBjaGFyICp1cmwsIGNvbnN0
IGNoYXIgKnRoZW1lLCBjb25zdCBjaGFyICp1c2VyQWdlbnQsIEVpbmFfUmVjdGFuZ2xlIGdlb21l
dHJ5LCBjb25zdCBjaGFyICplbmdpbmUsIHVuc2lnbmVkIGNoYXIgaXNGdWxsc2NyZWVuLCB1bnNp
Z25lZCBjaGFyIGV4cG9ydEpTT2JqZWN0KTsKIAogc3RhdGljIHZvaWQKIHByaW50X2hpc3Rvcnko
RWluYV9MaXN0ICpsaXN0KQpAQCAtMzkzLDcgKzQ0MCw3IEBAIG9uX2lucHV0bWV0aG9kX2NoYW5n
ZWQodm9pZCogdXNlcl9kYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRfaW5m
bykKICAqCiAgKiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBwcm9jZXNzIHRoZSB2aWV3cG9ydCB0YWcs
IHlvdSBjYW4gZWl0aGVyIGRvIG5vdGhpbmcgaW4gdGhpcyBjYWxsYmFjawogICogb3Igc2ltcGx5
IGlnbm9yZSB0aGUgc2lnbmFsIGluIHlvdXIgYXBwbGljYXRpb24uCi0gKiAKKyAqCiAgKiBNb3Jl
IGluZm9ybWF0aW9uIGFib3V0IHRoaXMgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9kZXZlbG9wZXIu
YXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtCiAgKiBlbnRhdGlvbi9hcHBsZWFwcGxpY2F0
aW9ucy9yZWZlcmVuY2Uvc2FmYXJpd2ViY29udGVudC91c2luZ3RoZXZpZXdwb3J0L3VzaW5ndGhl
dmlld3BvcnQuaHRtbAogICovCkBAIC00NTksNiArNTA2LDQ5IEBAIG9uX3Jlc2l6ZWQodm9pZCAq
ZGF0YSwgRXZhcyAqZSwgRXZhc19PYmplY3QgKm9iaiwgdm9pZCAqZXZlbnRfaW5mbykKICAgICBl
d2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQob2JqLCB3LCBoKTsKIH0KIAorc3RhdGljIEV3
a19KU19WYXJpYW50ICoKK3ByaW50X2Z1bmN0aW9uKEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pT
X1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291bnQpCit7CisgICAgaW50IGk7CisgICAgRXdrX0pT
X1ZhcmlhbnQgKnJldCA9IChFd2tfSlNfVmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFy
aWFudCkpOworICAgIGZvciAoaSA9IDA7IGkgPCBhcmdfY291bnQ7IGkrKykgeworICAgICAgICBz
d2l0Y2ggKGFyZ3NbaV0udHlwZSkgeworICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6
CisgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfVk9JRDoKKyAgICAgICAgICAgIHByaW50Zigi
V1RGLCBudWxsL3ZvaWQgYXJncz8hXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVXS19KU19WQVJJQU5UX09CSkVDVDoKKyAgICAgICAgICAgIHByaW50Zigib2JqICVzIHdp
dGggJWQgcHJvcHMgYXJnXG4iLCBld2tfanNfb2JqZWN0X25hbWVfZ2V0KGFyZ3NbaV0udmFsdWUu
byksIGVpbmFfaGFzaF9wb3B1bGF0aW9uKGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoYXJn
c1tpXS52YWx1ZS5vKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVdLX0pT
X1ZBUklBTlRfQk9PTDoKKyAgICAgICAgICAgIHByaW50ZigiQXJndW1lbnQgJWQgaXMgb2YgdHlw
ZSBib29sIGFuZCB2YWx1ZSAlc1xuIiwgaSwgYXJnc1tpXS52YWx1ZS5iID8gInRydWUiIDogImZh
bHNlIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9J
TlQzMjoKKyAgICAgICAgICAgIHByaW50ZigiQXJndW1lbnQgJWQgaXMgb2YgdHlwZSBpbnQgYW5k
IHZhbHVlICVkXG4iLCBpLCBhcmdzW2ldLnZhbHVlLmkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfRE9VQkxFOgorICAgICAgICAgICAgcHJpbnRmKCJB
cmd1bWVudCAlZCBpcyBvZiB0eXBlIGRvdWJsZSBhbmQgdmFsdWUgJWZcbiIsIGksIGFyZ3NbaV0u
dmFsdWUuZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFO
VF9TVFJJTkc6CisgICAgICAgICAgICBwcmludGYoIkFyZ3VtZW50ICVkIGlzIG9mIHR5cGUgc3Ry
aW5nIGFuZCB2YWx1ZSAlc1xuIiwgaSwgYXJnc1tpXS52YWx1ZS5zKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldC0+dHlwZSA9IEVXS19KU19WQVJJQU5UX1NU
UklORzsKKyAgICByZXQtPnZhbHVlLnMgPSBzdHJkdXAoInByaW50X2Z1bmN0aW9uIGV4ZWN1dGVk
IHN1Y2Vzc2Z1bGx5IVxuIik7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQKK29u
X2pzX3dpbmRvd29iamVjdF9jbGVhcih2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpicm93
c2VyLCB2b2lkICpldmVudF9pbmZvKQoreworICAgIGlmIChqc19vYmopCisgICAgICAgIGV3a19q
c19vYmplY3RfZnJlZShqc19vYmopOworCisgICAganNfb2JqID0gZXdrX2pzX29iamVjdF9uZXco
JmpzX21ldGEpOworICAgIGV3a192aWV3X2pzX29iamVjdF9hZGQoYnJvd3NlciwganNfb2JqLCAi
bXlfb2JqZWN0Iik7Cit9CisKIHN0YXRpYyB2b2lkCiBvbl9rZXlfZG93bih2b2lkICpkYXRhLCBF
dmFzICplLCBFdmFzX09iamVjdCAqb2JqLCB2b2lkICpldmVudF9pbmZvKQogewpAQCAtNTYyLDcg
KzY1Miw3IEBAIG9uX2tleV9kb3duKHZvaWQgKmRhdGEsIEV2YXMgKmUsIEV2YXNfT2JqZWN0ICpv
YmosIHZvaWQgKmV2ZW50X2luZm8pCiAgICAgICAgIGluZm8oIkNyZWF0ZSBuZXcgd2luZG93IChG
OSkgd2FzIHByZXNzZWQuXG4iKTsKICAgICAgICAgRWluYV9SZWN0YW5nbGUgZ2VvbWV0cnkgPSB7
MCwgMCwgMCwgMH07CiAgICAgICAgIGJyb3dzZXJDcmVhdGUoImh0dHA6Ly93d3cuZ29vZ2xlLmNv
bSIsCi0gICAgICAgICAgICAgICAgICAgICAgIGFwcC0+dGhlbWUsIGFwcC0+dXNlckFnZW50LCBn
ZW9tZXRyeSwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgIGFwcC0+dGhlbWUsIGFw
cC0+dXNlckFnZW50LCBnZW9tZXRyeSwgTlVMTCwgMCwgMCk7CiAgICAgfSBlbHNlIGlmICghc3Ry
Y21wKGV2LT5rZXksICJGMTAiKSkgewogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CiAg
ICAgICAgIEV2YXNfT2JqZWN0ICpmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG9iaik7
CkBAIC01ODMsNiArNjczLDkgQEAgb25fYnJvd3Nlcl9kZWwodm9pZCAqZGF0YSwgRXZhcyAqZXZh
cywgRXZhc19PYmplY3QgKmJyb3dzZXIsIHZvaWQgKmV2ZW50KQogewogICAgIEVMYXVuY2hlciAq
YXBwID0gKEVMYXVuY2hlciopIGRhdGE7CiAKKyAgICBpZiAoanNfb2JqKQorICAgICAgICBld2tf
anNfb2JqZWN0X2ZyZWUoanNfb2JqKTsKKwogICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNr
X2RlbChhcHAtPmJyb3dzZXIsIEVWQVNfQ0FMTEJBQ0tfS0VZX0RPV04sIG9uX2tleV9kb3duKTsK
ICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19kZWwoYXBwLT5icm93c2VyLCBFVkFTX0NB
TExCQUNLX01PVVNFX0RPV04sIG9uX21vdXNlX2Rvd24pOwogICAgIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2RlbChhcHAtPmJyb3dzZXIsIEVWQVNfQ0FMTEJBQ0tfRk9DVVNfSU4sIG9uX2Zv
Y3VzX2luKTsKQEAgLTYxNCw3ICs3MDcsNyBAQCBxdWl0KEVpbmFfQm9vbCBzdWNjZXNzLCBjb25z
dCBjaGFyICptc2cpCiB9CiAKIHN0YXRpYyBpbnQKLWJyb3dzZXJDcmVhdGUoY29uc3QgY2hhciAq
dXJsLCBjb25zdCBjaGFyICp0aGVtZSwgY29uc3QgY2hhciAqdXNlckFnZW50LCBFaW5hX1JlY3Rh
bmdsZSBnZW9tZXRyeSwgY29uc3QgY2hhciAqZW5naW5lLCB1bnNpZ25lZCBjaGFyIGlzRnVsbHNj
cmVlbikKK2Jyb3dzZXJDcmVhdGUoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICp0aGVtZSwg
Y29uc3QgY2hhciAqdXNlckFnZW50LCBFaW5hX1JlY3RhbmdsZSBnZW9tZXRyeSwgY29uc3QgY2hh
ciAqZW5naW5lLCB1bnNpZ25lZCBjaGFyIGlzRnVsbHNjcmVlbiwgdW5zaWduZWQgY2hhciBleHBv
cnRKU09iamVjdCkKIHsKICAgICBpZiAoKGdlb21ldHJ5LncgPD0gMCkgJiYgKGdlb21ldHJ5Lmgg
PD0gMCkpIHsKICAgICAgICAgZ2VvbWV0cnkudyA9IERFRkFVTFRfV0lEVEg7CkBAIC02NzgsNiAr
NzcxLDEyIEBAIGJyb3dzZXJDcmVhdGUoY29uc3QgY2hhciAqdXJsLCBjb25zdCBjaGFyICp0aGVt
ZSwgY29uc3QgY2hhciAqdXNlckFnZW50LCBFaW5hX1JlCiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKGFwcC0+YnJvd3NlciwgInRvb2x0aXAsdGV4dCxzZXQiLCBvbl90b29sdGlw
X3RleHRfc2V0LCBhcHApOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZChhcHAt
PmJyb3dzZXIsICJpbnB1dG1ldGhvZCxjaGFuZ2VkIiwgb25faW5wdXRtZXRob2RfY2hhbmdlZCwg
YXBwKTsKIAorCisvKiAgVGhpcyBjYWxsYmFjayBjcmVhdGVzIGEgSlMgb2JqZWN0IHByb3BlcnR5
IGluIHdpbmRvdyBjYWxsZWQgbXlfb2JqZWN0LiBUaGlzIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBj
YWxsZWQKKyAgICBteV9wcm9wKCJIZWxsbyBXb3JsZCEiKSBhbmQgYSBmdW5jdGlvbiBjYWxsZWQg
cHJpbnQocHJpbnRzIGFsbCBhcmd1bWVudHMgdG8gY29uc29sZSkuICovCisgICAgaWYgKGV4cG9y
dEpTT2JqZWN0KQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQoYXBwLT5i
cm93c2VyLCAianMsd2luZG93b2JqZWN0LGNsZWFyIiwgb25fanNfd2luZG93b2JqZWN0X2NsZWFy
LCBhcHApOworCiAvKiAgICAgZXdrX2NhbGxiYWNrX3Jlc2l6ZV9yZXF1ZXN0ZWRfYWRkKGFwcC0+
YnJvd3Nlciwgb25fcmVzaXplX3JlcXVlc3RlZCwgYXBwLT5lZSk7ICovCiAKICAgICBldmFzX29i
amVjdF9ldmVudF9jYWxsYmFja19hZGQoYXBwLT5icm93c2VyLCBFVkFTX0NBTExCQUNLX1JFU0la
RSwgb25fcmVzaXplZCwgYXBwKTsKQEAgLTc4MSwxMiArODgwLDE0IEBAIG1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKICAgICB1bnNpZ25lZCBjaGFyIHF1aXRPcHRpb24gPSAwOwogICAgIHVu
c2lnbmVkIGNoYXIgaXNGdWxsc2NyZWVuID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHN1ZG9Xb3Jr
YXJvdW5kID0gMDsKKyAgICB1bnNpZ25lZCBjaGFyIGV4cG9ydEpTT2JqZWN0ID0gMDsKICAgICBp
bnQgYXJnczsKIAogICAgIEVjb3JlX0dldG9wdF9WYWx1ZSB2YWx1ZXNbXSA9IHsKICAgICAgICAg
RUNPUkVfR0VUT1BUX1ZBTFVFX1NUUihlbmdpbmUpLAogICAgICAgICBFQ09SRV9HRVRPUFRfVkFM
VUVfQk9PTChxdWl0T3B0aW9uKSwKICAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woaXNG
dWxsc2NyZWVuKSwKKyAgICAgICAgRUNPUkVfR0VUT1BUX1ZBTFVFX0JPT0woZXhwb3J0SlNPYmpl
Y3QpLAogICAgICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfUFRSX0NBU1QoZ2VvbWV0cnkpLAogICAg
ICAgICBFQ09SRV9HRVRPUFRfVkFMVUVfU1RSKHRoZW1lKSwKICAgICAgICAgRUNPUkVfR0VUT1BU
X1ZBTFVFX1NUUih1c2VyQWdlbnQpLApAQCAtODM5LDcgKzk0MCw3IEBAIG1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKICAgICBpZiAocHJveHlVcmkpCiAgICAgICAgIGV3a19zZXR0aW5nc19w
cm94eV91cmlfc2V0KHByb3h5VXJpKTsKIAotICAgIGJyb3dzZXJDcmVhdGUodXJsLCB0aGVtZSwg
dXNlckFnZW50LCBnZW9tZXRyeSwgZW5naW5lLCBpc0Z1bGxzY3JlZW4pOworICAgIGJyb3dzZXJD
cmVhdGUodXJsLCB0aGVtZSwgdXNlckFnZW50LCBnZW9tZXRyeSwgZW5naW5lLCBpc0Z1bGxzY3Jl
ZW4sIGV4cG9ydEpTT2JqZWN0KTsKICAgICBlY29yZV9ldmVudF9oYW5kbGVyX2FkZChFQ09SRV9F
VkVOVF9TSUdOQUxfRVhJVCwgbWFpbl9zaWduYWxfZXhpdCwgJndpbmRvd3MpOwogCiAgICAgZWNv
cmVfbWFpbl9sb29wX2JlZ2luKCk7Ci0tIAoxLjcuMy4xCgo=
</data>
<flag name="review"
          id="61152"
          type_id="1"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97602</attachid>
            <date>2011-06-17 07:58:15 -0700</date>
            <delta_ts>2011-06-17 09:16:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-EFL-Exporting-JavaScript-objects-for-EFL-port.patch</filename>
            <type>text/plain</type>
            <size>40531</size>
            <attacher name="Flavio Ceolin">flavio.ceolin</attacher>
            
              <data encoding="base64">RnJvbSA1Nzc2MmU3NTZlYmYyODEwNDVmYjM3NzA2MjA4ZWVhNTgwMTlmMmMzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGbGF2aW8gQ2VvbGluIDxmbGF2aW8uY2VvbGluQHByb2Z1c2lv
bi5tb2JpPgpEYXRlOiBUaHUsIDE2IEp1biAyMDExIDEzOjQ1OjE3IC0wMzAwClN1YmplY3Q6IFtQ
QVRDSF0gW0VGTF0gICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydCAg
ICAgICAgCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKCi0t
LQogU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAxICsKIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOSArCiBTb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDM2ICsKIC4uLi9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuY3BwICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCAg
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMu
Y3BwICAgICAgICAgICAgICAgICAgIHwgIDc1NyArKysrKysrKysrKysrKysrKysrKwogU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5oICAgICAgICAgICAgICAgICAgICAgfCAgMTEyICsrKwog
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmggICAgICAgICAgICAgICAgfCAgIDIy
ICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgICAgICAgICAgICAgICAgIHwg
ICA2NSArKy0KIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDA5IGluc2VydGlvbnMoKyksIDMgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19q
cy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAppbmRleCBjZWU5NDU2Li5iNjVkMWJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQKQEAgLTUsNiArNSw3IEBAIFNFVChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdl
L2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9qc2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2NzcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDFlMmM3Li4wNmY5
YjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA2LTE2ICBKb25hcyBNLiBHYXN0
YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0aW5nIEphdmFTY3JpcHQgb2JqZWN0cyBmb3IgRUZM
IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
NDQ2CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwogMjAxMS0wNi0xNSAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzYyNzQ1PiBDb252ZXJ0IFdlYk5TRmlsZU1hbmFnZXJFeHRyYXMubSB0byBPYmplY3RpdmUtQysr
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IDU1ZWZiNjAuLmQ2OWM3YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CkBAIC03MCw2ICs3MCw3IEBAIExJU1QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwogICAgIGVm
bC9ld2svZXdrX3ZpZXdfdGlsZWQuYwogICAgIGVmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5j
cHAKKyAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViS2l0X0xJQlJB
UklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDFlZTE0NTMuLjg0MTI5ZWMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0wNi0xNiAgSm9uYXMgTS4gR2FzdGFsIDxqZ2FzdGFs
QHByb2Z1c2lvbi5tb2JpPgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKKworICAgICAg
ICAqIENNYWtlTGlzdHNFZmwudHh0OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgICogZXdrL0VX
ZWJLaXQuaDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDogQWRkZWQuCisgICAgICAgIChfZXdr
X2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KToKKyAgICAgICAgKF9ld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9oYXMpOgorICAgICAgICAoX2V3
a19qc19wcm9wZXJ0eV9nZXQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9zZXQpOgorICAg
ICAgICAoX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0
aWVzX2VudW1lcmF0ZSk6CisgICAgICAgIChfZXdrX2pzX21ldGhvZF9oYXMpOgorICAgICAgICAo
X2V3a19qc19tZXRob2RfaW52b2tlKToKKyAgICAgICAgKGV3a19qc19jbGFzc19uZXcpOgorICAg
ICAgICAoZXdrX2pzX2NsYXNzX2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uZXcpOgor
ICAgICAgICAoZXdrX2pzX29iamVjdF9mcmVlKToKKyAgICAgICAgKGV3a19qc19vYmplY3RfcHJv
cGVydGllc19nZXQpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uYW1lX2dldCk6CisgICAgICAg
IChld2tfanNfdmFyaWFudF9mcmVlKToKKyAgICAgICAgKiBld2svZXdrX2pzLmg6IEFkZGVkLgor
ICAgICAgICAqIGV3ay9ld2tfbWFpbi5jcHA6CisgICAgICAgIChld2tfaW5pdCk6CisgICAgICAg
ICogZXdrL2V3a19wcml2YXRlLmg6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAg
ICAgKGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIpOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIwMTEtMDYtMTUg
IEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAppbmRleCA0MWFh
NDQwLi4zOTc1NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0xOTQsNyArMTk0LDkgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qKQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZXdr
X3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihtX3ZpZXcsIG1fZnJhbWUpOworI2VuZGlmCiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgK
aW5kZXggZDk3MjQ1NC4uZDhiZGRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L0VXZWJLaXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUu
aCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1
ZGUgImV3a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdr
X3ZpZXcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZGQ4YTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfanMuY3BwCkBAIC0wLDAgKzEsNzU3IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImV3a19qcy5oIgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorCisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4o
bywgLi4uKSBcCisgICAgaWYgKCFFSU5BX01BR0lDX0NIRUNLKG9iaiwgRVdLX0pTX09CSkVDVF9N
QUdJQykpIHsgXAorICAgICAgIEVJTkFfTUFHSUNfRkFJTChvYmosIEVXS19KU19PQkpFQ1RfTUFH
SUMpOyBcCisgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyBcCisgICAgfQorCitzdHJ1Y3QgX0V3
a19KU19DbGFzcyB7CisgICAgY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGE7CisgICAgRWlu
YV9IYXNoKiBtZXRob2RzOyAvLyBrZXk9TlBJZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVy
IHRvIG1ldGEtPm1ldGhvZHM7CisgICAgRWluYV9IYXNoKiBwcm9wZXJ0aWVzOyAvLyBrZXk9TlBJ
ZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVyIHRvIG1ldGEtPnByb3BlcnRpZXM7CisgICAg
RXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9wOworfTsKKworc3RhdGljIGJvb2wgX2V3a19qc19u
cHZhcmlhbnRfdG9fdmFyaWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJpYW50
KiByZXN1bHQpOworc3RhdGljIGJvb2wgX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25z
dCBFd2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYW50KiByZXN1bHQpOworc3RhdGljIHZvaWQg
X2V3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19KU19Qcm9wZXJ0eSAqcHJvcCk7CisKK3N0YXRpYyBi
b29sIF9ld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lKTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucF9vYmos
IE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7CitzdGF0aWMgYm9vbCBfZXdr
X2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29u
c3QgTlBWYXJpYW50KiB2YWx1ZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X3JlbW92
ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CitzdGF0aWMgYm9vbCBfZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioq
IHZhbHVlLCB1aW50MzJfdCogY291bnQpOworc3RhdGljIGJvb2wgX2V3a19qc19tZXRob2RfaGFz
KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKTsKK3N0YXRpYyBib29sIF9ld2tf
anNfbWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29u
c3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0
KTsKKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tf
SlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIEV3a19KU19WYXJpYW50ICp2YWx1ZSk7
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfc2V0KEV3a19KU19P
YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVl
KTsKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9kZWwoRXdrX0pT
X09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKTsKKworRXdrX0pTX0NsYXNzKiBfZXdrX2pz
X2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0YSk7Cit2b2lkIF9ld2tfanNf
Y2xhc3NfZnJlZShFd2tfSlNfQ2xhc3MgKmNscyk7CisKK3N0YXRpYyBOUENsYXNzIEVXS19OUENM
QVNTID0geworICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OLAorICAgIC8qTlBBbGxvY2F0ZUZ1
bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAv
Kk5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QSGFzTWV0aG9kRnVuY3Rpb25Q
dHIqLyBfZXdrX2pzX21ldGhvZF9oYXMsCisgICAgLypOUEludm9rZUZ1bmN0aW9uUHRyKi8gX2V3
a19qc19tZXRob2RfaW52b2tlLAorICAgIC8qTlBJbnZva2VEZWZhdWx0RnVuY3Rpb25QdHIqLyAw
LAorICAgIC8qTlBIYXNQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9oYXMs
CisgICAgLypOUEdldFByb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X2dldCwK
KyAgICAvKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfc2V0LAor
ICAgIC8qTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9yZW1v
dmUsCisgICAgLypOUEVudW1lcmF0aW9uRnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnRpZXNf
ZW51bWVyYXRlLAorICAgIC8qTlBDb25zdHJ1Y3RGdW5jdGlvblB0ciovIDAKK307CisKK3N0YXRp
YyBFd2tfSlNfT2JqZWN0ICpfZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCAqbnBf
b2JqKQoreworICAgIHVpbnQzMl90IGk7CisgICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7CisgICAg
dWludDMyX3QgbnBfcHJvcHNfY291bnQ7CisgICAgRXdrX0pTX0NsYXNzKiBjbHM7CisgICAgRXdr
X0pTX09iamVjdCogb2JqOworICAgIEVpbmFfSXRlcmF0b3IqIGl0OworICAgIEV3a19KU19Qcm9w
ZXJ0eSogcHJvcDsKKworICAgIGlmIChFSU5BX01BR0lDX0NIRUNLKChFd2tfSlNfT2JqZWN0Kilu
cF9vYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpKSAvLyBJdCBhbHJlYWR5IGlzIGEgRXdrX0pTX09i
amVjdAorICAgICAgIHJldHVybiAoRXdrX0pTX09iamVjdCopbnBfb2JqOworCisgICAgaWYgKCFf
TlBOX0VudW1lcmF0ZSgwLCBucF9vYmosICZ2YWx1ZXMsICZucF9wcm9wc19jb3VudCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgY2xzID0gKEV3a19KU19DbGFzcyopbWFsbG9jKHNpemVvZihF
d2tfSlNfQ2xhc3MpKTsKKyAgICBjbHMtPm1ldGEgPSAwOworICAgIEV3a19KU19EZWZhdWx0IGRl
ZiA9IHsKKyAgICAgICAgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9zZXQsCisgICAgICAgIF9l
d2tfanNfbnBvYmplY3RfcHJvcGVydHlfZ2V0LAorICAgICAgICBfZXdrX2pzX25wb2JqZWN0X3By
b3BlcnR5X2RlbAorICAgIH07CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBkZWY7CisgICAgY2xz
LT5tZXRob2RzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGNscy0+cHJvcGVydGll
cyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygoRWluYV9GcmVlX0NiKV9ld2tfanNfcHJvcGVydHlf
ZnJlZSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5wX3Byb3BzX2NvdW50OyBpKyspIHsKKyAgICAg
ICAgaWYgKF9OUE5fSGFzUHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0pKSB7CisgICAgICAg
ICAgICBOUFZhcmlhbnQgdmFyOworICAgICAgICAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wID0g
KEV3a19KU19Qcm9wZXJ0eSopY2FsbG9jKHNpemVvZihFd2tfSlNfUHJvcGVydHkpLCAxKTsKKyAg
ICAgICAgICAgIF9OUE5fR2V0UHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0sICZ2YXIpOwor
ICAgICAgICAgICAgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgmKHByb3AtPnZhbHVlKSwg
JnZhcik7CisgICAgICAgICAgICBwcm9wLT5uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIo
dmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5wcm9wZXJ0aWVzLCB2
YWx1ZXNbaV0sIHByb3ApOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUodmFsdWVzKTsKKwor
ICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2UgaXQgZXhwZWN0
cyBjbHMtPm1ldGEgdG8gZXhpc3QKKyAgICBvYmogPSAoRXdrX0pTX09iamVjdCopbWFsbG9jKHNp
emVvZihFd2tfSlNfT2JqZWN0KSk7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JK
RUNUX01BR0lDKTsKKyAgICBvYmotPm5hbWUgPSAwOworICAgIG9iai0+Y2xzID0gY2xzOworICAg
IG9iai0+dmlldyA9IDA7CisKKyAgICBKYXZhU2NyaXB0T2JqZWN0ICpqc28gPSAoSmF2YVNjcmlw
dE9iamVjdCopbnBfb2JqOworICAgIGlmICghc3RybmNtcCgiQXJyYXkiLCBqc28tPmltcC0+Y2xh
c3NOYW1lKCkuYXNjaWkoKS5kYXRhKCksIHN0cmxlbigiQXJyYXkiKSkpCisgICAgICAgIG9iai0+
dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAgZWxzZSBpZiAoIXN0cm5jbXAoIkZ1bmN0
aW9uIiwganNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBzdHJsZW4oIkZ1bmN0
aW9uIikpKQorICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOworICAg
IGVsc2UKKyAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisKKyAgICBp
ZiAoZWluYV9oYXNoX3BvcHVsYXRpb24oY2xzLT5wcm9wZXJ0aWVzKSA8IDI1KQorICAgICAgICBv
YmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldygwKTsgLy8gY2xhc3Mg
d2lsbCBmcmVlIHN0dWZmCisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5h
X2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CisKKyAgICBpdCA9IGVpbmFfaGFzaF9pdGVy
YXRvcl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFD
SChpdCwgcHJvcCkgeworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1lOworICAg
ICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7CisgICAgICAgIGVpbmFf
aGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBlaW5h
X2l0ZXJhdG9yX2ZyZWUoaXQpOworCisgICAgb2JqLT5iYXNlID0gKihKYXZhU2NyaXB0T2JqZWN0
KilucF9vYmo7CisKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
anNfbnBvYmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAq
bmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKQoreworICAgIE5QSWRlbnRpZmllciBpZCA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICBOUFZhcmlhbnQgdmFyOworICAgIGJv
b2wgZmFpbCA9IF9OUE5fR2V0UHJvcGVydHkoMCwgKE5QT2JqZWN0KilvYmosIGlkLCAmdmFyKTsK
KyAgICBpZiAoIWZhaWwpCisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFyaWFudF90b192YXJp
YW50KHZhbHVlLCAmdmFyKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGljIEVpbmFfQm9v
bCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSkKK3sKKyAgICBOUElkZW50
aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgTlBWYXJpYW50
IHZhcjsKKyAgICBib29sIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVl
LCAmdmFyKTsKKyAgICBpZiAoZmFpbCkKKyAgICAgICAgZmFpbCA9IF9OUE5fU2V0UHJvcGVydHko
MCwgKE5QT2JqZWN0KilvYmosIGlkLCAmdmFyKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChFd2tfSlNfT2JqZWN0
ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBfTlBOX1JlbW92ZVByb3BlcnR5
KDAsIChOUE9iamVjdCopb2JqLCBpZCk7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfdmFyaWFu
dF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIE5QVmFyaWFudCogcmVz
dWx0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCBmYWxzZSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlc3VsdCwgZmFsc2UpOworICAg
IHN3aXRjaCAoZGF0YS0+dHlwZSkgeworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfVk9JRDoKKyAg
ICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRVdLX0pTX1ZBUklBTlRfTlVMTDoKKyAgICAgICAgTlVMTF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfSU5UMzI6CisgICAg
ICAgIElOVDMyX1RPX05QVkFSSUFOVChkYXRhLT52YWx1ZS5pLCAqcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9ET1VCTEU6CisgICAgICAgIERPVUJMRV9U
T19OUFZBUklBTlQoZGF0YS0+dmFsdWUuZCwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRVdLX0pTX1ZBUklBTlRfU1RSSU5HOgorICAgICAgICBTVFJJTkdaX1RPX05QVkFSSUFO
VChzdHJkdXAoZGF0YS0+dmFsdWUucyksICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVXS19KU19WQVJJQU5UX0JPT0w6CisgICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKGRh
dGEtPnZhbHVlLmIsICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19KU19W
QVJJQU5UX09CSkVDVDoKKyAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVCgoTlBPYmplY3QqKWRh
dGEtPnZhbHVlLm8sICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Ym9vbCBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBj
b25zdCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpbnQgc3o7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocmVzdWx0LCBmYWxzZSk7CisgICAgc3dpdGNoIChyZXN1bHQtPnR5cGUpIHsK
KyAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19K
U19WQVJJQU5UX1ZPSUQ7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVX
S19KU19WQVJJQU5UX05VTEw7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAgIGRhdGEtPnR5cGUg
PSBFV0tfSlNfVkFSSUFOVF9JTlQzMjsKKyAgICAgICAgZGF0YS0+dmFsdWUuaSA9IE5QVkFSSUFO
VF9UT19JTlQzMigqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRU
eXBlX0RvdWJsZToKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX0RPVUJMRTsK
KyAgICAgICAgZGF0YS0+dmFsdWUuZCA9IE5QVkFSSUFOVF9UT19ET1VCTEUoKnJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6CisgICAgICAgIHN6
ID0gTlBWQVJJQU5UX1RPX1NUUklORygqcmVzdWx0KS5VVEY4TGVuZ3RoOworICAgICAgICBkYXRh
LT52YWx1ZS5zID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoc3ogKyAxKSk7CisgICAg
ICAgIG1lbWNweShkYXRhLT52YWx1ZS5zLCBOUFZBUklBTlRfVE9fU1RSSU5HKCpyZXN1bHQpLlVU
RjhDaGFyYWN0ZXJzLCBzeik7CisgICAgICAgIGRhdGEtPnZhbHVlLnNbc3pdID0gJ1wwJzsKKyAg
ICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX1NUUklORzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tf
SlNfVkFSSUFOVF9CT09MOworICAgICAgICBkYXRhLT52YWx1ZS5iID0gTlBWQVJJQU5UX1RPX0JP
T0xFQU4oKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9P
YmplY3Q6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q7CisgICAg
ICAgIGRhdGEtPnZhbHVlLm8gPSBfZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUFZBUklBTlRf
VE9fT0JKRUNUKCpyZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv
b2wgX2V3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5h
bWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsK
KyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmos
IGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAg
ICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAg
IHJldHVybiBmYWlsOworICAgIH0KKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9t
SWRlbnRpZmllcihuYW1lKTsKKyAgICBpZiAoZWluYV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVz
LCBwcm9wX25hbWUpKSAvLyBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPworICAgICAgICBmYWls
ID0gdHJ1ZTsKKyAgICBmcmVlKHByb3BfbmFtZSk7CisKKyAgICByZXR1cm4gZmFpbDsKK30KKwor
c3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEV3a19KU19PYmplY3QqIG9i
aiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOwor
ICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVu
dGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlz
IG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKworICAgIHZh
bHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7Cisg
ICAgcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9w
ZXJ0aWVzLCBuYW1lKTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5nZXQpIHsgLy8gY2xhc3MgaGFz
IHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyCisgICAgICAgIGZhaWwgPSBwcm9wLT5n
ZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgIGlmICghZmFpbCkKKyAgICAgICAg
ICAgIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwor
ICAgIH0gZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8gZGVmYXVsdCBn
ZXR0ZXIgZXhpc3RzCisgICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChv
YmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFmYWlsKQorICAgICAgICAgICAg
ZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAg
fSBlbHNlIHsgLy8gZmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcAorICAgICAgICBjaGFyKiBw
cm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICAgICAgZnJlZSh2
YWx1ZSk7CisgICAgICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KillaW5hX2hhc2hfZmluZChv
YmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgICAgIGZyZWUocHJvcF9uYW1lKTsKKyAg
ICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIF9ld2tfanNfdmFyaWFudF90b19u
cHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAgfQorCisgICAgZnJlZSh2YWx1ZSk7CisgICAg
cmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfc2V0KE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIG5wX3ZhbHVl
KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7Cisg
ICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAg
ICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZh
bHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAg
ICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJl
dHVybiBmYWlsOworICAgIH0KKworICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Mo
c2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFu
dCh2YWx1ZSwgbnBfdmFsdWUpOworICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKG5hbWUpOworICAgIHByb3AgPSAoRXdrX0pTX1Byb3BlcnR5KillaW5hX2hhc2hf
ZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsKKyAgICBpZiAocHJvcCAmJiBw
cm9wLT5zZXQpCisgICAgICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1
ZSk7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlcgorICAgIGVs
c2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KQorICAgICAgICBmYWlsID0gb2JqLT5j
bHMtPmRlZmF1bHRfcHJvcC5zZXQob2JqLCBwcm9wX25hbWUsIHZhbHVlKTsgLy8gZGVmYXVsdCBn
ZXR0ZXIgZXhpc3RzCisgICAgZWxzZSB7IC8vIGZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAK
KyAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3Bf
bmFtZSwgdmFsdWUpOworICAgICAgICBmcmVlKG9sZCk7CisgICAgICAgIGZhaWwgPSB0cnVlOwor
ICAgIH0KKworICAgIGZyZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3Qq
KW5wX29iajsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgYm9vbCBmYWlsID0gZmFs
c2U7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7
CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAo
IV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRl
bnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFpbDsKKyAgICB9
CisKKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsK
KyAgICBwcm9wID0gKEV3a19KU19Qcm9wZXJ0eSopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnBy
b3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgaWYgKHByb3AgJiYgcHJvcC0+ZGVsKQorICAgICAg
ICBmYWlsID0gcHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0
eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlcgorICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0
X3Byb3AuZGVsKQorICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwob2Jq
LCBwcm9wX25hbWUpOworICAgIGVsc2UKKyAgICAgICAgZmFpbCA9IGVpbmFfaGFzaF9kZWwob2Jq
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOworCisgICAgZnJlZShwcm9wX25hbWUpOworICAg
IHJldHVybiBmYWlsOworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVy
YXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291
bnQpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsK
KyAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKKyAgICBjaGFyKiBrZXk7CisgICAgaW50IGkgPSAwOwor
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIGl0ID0gZWluYV9o
YXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqLT5wcm9wZXJ0aWVzKTsKKworICAgICpjb3VudCA9IGVp
bmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+cHJvcGVydGllcyk7CisgICAgKnZhbHVlID0gKE5QSWRl
bnRpZmllciopbWFsbG9jKHNpemVvZihOUElkZW50aWZpZXIpICogKmNvdW50KTsKKyAgICBFSU5B
X0lURVJBVE9SX0ZPUkVBQ0goaXQsIGtleSkKKyAgICAgICAgKCp2YWx1ZSlbaSsrXSA9IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcihrZXkpOworCisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19tZXRob2RfaGFzKE5Q
T2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRV
Uk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUp
KSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBlaW5hX2hhc2hfZmluZChv
YmotPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3VuZCh0cnVl
KSwgTlVMTChmYWxzZSkgb3RoZXJ3aXNlCit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfbWV0aG9k
X2ludm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJp
YW50KiBucF9hcmdzLCB1aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0KQor
eworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAg
RXdrX0pTX01ldGhvZCogbWV0aG9kOworICAgIEV3a19KU19WYXJpYW50KiBhcmdzOworICAgIEV3
a19KU19WYXJpYW50KiByZXRfdmFsOworICAgIHVpbnQzMl90IGk7CisKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVD
S19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9y
dGVkLiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWV0aG9kID0gKEV3
a19KU19NZXRob2QqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKTsKKyAg
ICBpZiAoIW1ldGhvZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXJncyA9IChFd2tf
SlNfVmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkgKiBucF9hcmdfY291bnQp
OworICAgIGZvciAoaSA9IDA7IGkgPCBucF9hcmdfY291bnQ7IGkrKykKKyAgICAgICAgX2V3a19q
c19ucHZhcmlhbnRfdG9fdmFyaWFudCgmYXJnc1tpXSwgJm5wX2FyZ3NbaV0pOworICAgIHJldF92
YWwgPSBtZXRob2QtPmludm9rZShvYmosIGFyZ3MsIG5wX2FyZ19jb3VudCk7CisgICAgX2V3a19q
c192YXJpYW50X3RvX25wdmFyaWFudChyZXRfdmFsLCByZXN1bHQpOworCisgICAgZXdrX2pzX3Zh
cmlhbnRfZnJlZShyZXRfdmFsKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvKioKKyAqIENy
ZWF0ZSBhIEV3a19KU19DbGFzcyB0byBiZSB1c2VkIGluIEBhIGV3a19qc19vYmplY3RfbmV3Lgor
ICoKKyAqIEBwYXJhbSBtZXRhIEBhIEV3a19KU19DbGFzc19NZXRhIHRoYXQgZGVzY3JpYmVzIHRo
ZSBjbGFzcyB0byBiZSBjcmVhdGVkLgorICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19DbGFzcyBj
cmVhdGVkLgorICovCitFd2tfSlNfQ2xhc3MqIF9ld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19K
U19DbGFzc19NZXRhKiBtZXRhKQoreworICAgIEV3a19KU19DbGFzcyogY2xzOworICAgIGludCBp
OworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGEsIDApOworCisgICAg
Y2xzID0gKEV3a19KU19DbGFzcyopbWFsbG9jKHNpemVvZihFd2tfSlNfQ2xhc3MpKTsKKyAgICBj
bHMtPm1ldGEgPSBtZXRhOworICAgIGNscy0+ZGVmYXVsdF9wcm9wID0gbWV0YS0+ZGVmYXVsdF9w
cm9wOworCisgICAgLy8gZG9uJ3QgZnJlZSBtZXRob2RzIHNpbmNlIHRoZXkgcG9pbnQgdG8gbWV0
YSBjbGFzcyBtZXRob2RzKHdpbGwgYmUgZnJlZWQgd2hlbiBtZXRhIGNsYXNzIGlzIGZyZWVkKQor
ICAgIGNscy0+bWV0aG9kcyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygwKTsKKyAgICBmb3IgKGkg
PSAwOyBtZXRhLT5tZXRob2RzICYmIG1ldGEtPm1ldGhvZHNbaV0ubmFtZTsgaSsrKSB7CisgICAg
ICAgIE5QSWRlbnRpZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihtZXRhLT5tZXRo
b2RzW2ldLm5hbWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKGNscy0+bWV0aG9kcywgaWQsICZt
ZXRhLT5tZXRob2RzW2ldKTsKKyAgICB9CisKKyAgICAvLyBkb24ndCBmcmVlIHByb3BlcnRpZXMg
c2luY2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNzIHByb3BlcnRpZXMod2lsbCBiZSBmcmVlZCB3
aGVuIG1ldGEgY2xhc3MgaXMgZnJlZWQpCisgICAgY2xzLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNo
X3BvaW50ZXJfbmV3KDApOworICAgIGZvciAoaSA9IDA7IG1ldGEtPnByb3BlcnRpZXMgJiYgbWV0
YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAgTlBJZGVudGlmaWVyIGlkID0g
X05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZSk7CisgICAg
ICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5wcm9wZXJ0aWVzLCBpZCwgJm1ldGEtPnByb3BlcnRpZXNb
aV0pOworICAgIH0KKworICAgIHJldHVybiBjbHM7Cit9CisKKy8qKgorICogUmVsZWFzZSByZXNv
dXJjZXMgYWxsb2NhdGVkIGJ5IEBhIGNscy4KKyAqCisgKiBAcGFyYW0gY2xzIEBhIEV3a19KU19D
bGFzcyB0byBiZSByZWxlYXNlZC4KKyAqLwordm9pZCBfZXdrX2pzX2NsYXNzX2ZyZWUoRXdrX0pT
X0NsYXNzKiBjbHMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2xzKTsKKyAg
ICBlaW5hX2hhc2hfZnJlZShjbHMtPm1ldGhvZHMpOworICAgIGVpbmFfaGFzaF9mcmVlKGNscy0+
cHJvcGVydGllcyk7CisgICAgZnJlZShjbHMpOworfQorCisvKioKKyAqIENyZWF0ZSBhIEV3a19K
U19PYmplY3QgdG8gYmUgdXNlZCBpbiBAYSBld2tfdmlld19qc19vYmplY3RfYWRkLiBUaGUgTWV0
YSBjbGFzcydzCisgKiBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZSBub3QgbW9kaWZpZWQgYnV0
IHJlZmVyZW5jZXMgdG8gaXQgYXJlIGtlcHQgYXMgbG9uZworICogYXMgdGhlIG9iamVjdCBjcmVh
dGVkIGZyb20gaXQgbGl2ZXMuIEFsbCBwcm9wZXJ0aWVzIGNyZWF0ZWQgaGVyZQorICogd2lsbCBi
ZSBhZGRlZCB0byB0aGUgb2JqZWN0IGhhc2ggb2YgcHJvcGVydGllcy4gUHJvcGVydGllcyB1c2lu
ZyBkZWZhdWx0X3Byb3AncworICogZ2V0L3NldC9kZWwgbWV0aG9kcyBzaG91bGQgYWxzbyBiZSBh
ZGRlZCB0byB0aGUgb2JqZWN0cyBoYXNoKHNlZToKKyAqIEBhIGV3a19qc19vYmplY3RfcHJvcGVy
dGllc19nZXQpLiBNZXRob2RzIG11c3QgZnJlZSB0aGUgYXJndW1lbnRzIHRoZXkgcmVjZWl2ZShz
ZWU6CisgKiBAYSBld2tfanNfdmFyaWFuZ19hcnJheV9mcmVlKS4KKyAqCisgKgorICogQHBhcmFt
IGNscyBAYSBFd2tfSlNfQ2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIG9iamVjdCB0byBiZSBjcmVh
dGVkLgorICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19PYmplY3QgY3JlYXRlZC4KKyAqLworRXdr
X0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1l
dGFfY2xzKQoreworICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBpbnQgaTsKKworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhX2NscywgMCk7CisKKyAgICBvYmogPSAo
RXdrX0pTX09iamVjdCopbWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSk7CisgICAgRUlOQV9N
QUdJQ19TRVQob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmotPmNscyA9IF9ld2tf
anNfY2xhc3NfbmV3KG1ldGFfY2xzKTsKKyAgICBvYmotPnZpZXcgPSAwOworICAgIG9iai0+bmFt
ZSA9IDA7CisgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisKKyAgICBpZiAo
ZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqLT5jbHMtPnByb3BlcnRpZXMpIDwgMjUpCisgICAgICAg
IG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KChFaW5hX0ZyZWVf
Q2IpZXdrX2pzX3ZhcmlhbnRfZnJlZSk7CisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRp
ZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoKEVpbmFfRnJlZV9DYilld2tfanNf
dmFyaWFudF9mcmVlKTsKKyAgICBmb3IgKGkgPSAwOyBvYmotPmNscy0+bWV0YS0+cHJvcGVydGll
cyAmJiBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAg
RXdrX0pTX1Byb3BlcnR5IHByb3AgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXTsKKyAg
ICAgICAgY29uc3QgY2hhcioga2V5ID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFt
ZTsKKyAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxs
b2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgICAgIGlmIChwcm9wLmdldCkKKyAgICAg
ICAgICAgIHByb3AuZ2V0KG9iaiwga2V5LCB2YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CisgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZPSUQ6Cisg
ICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6CisgICAgICAgICAgICAgICAgdmFs
dWUtPnZhbHVlLm8gPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBFV0tfSlNfVkFSSUFOVF9TVFJJTkc6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLnMg
PSBzdHJkdXAocHJvcC52YWx1ZS52YWx1ZS5zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfQk9PTDoKKyAgICAgICAgICAgICAgICB2YWx1
ZS0+dmFsdWUuYiA9IHByb3AudmFsdWUudmFsdWUuYjsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfSU5UMzI6CisgICAgICAgICAgICAgICAg
dmFsdWUtPnZhbHVlLmkgPSBwcm9wLnZhbHVlLnZhbHVlLmk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0RPVUJMRToKKyAgICAgICAgICAg
ICAgICB2YWx1ZS0+dmFsdWUuZCA9IHByb3AudmFsdWUudmFsdWUuZDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfT0JKRUNUOgorICAgICAg
ICAgICAgICAgIHZhbHVlLT52YWx1ZS5vID0gcHJvcC52YWx1ZS52YWx1ZS5vOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVpbmFfaGFz
aF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBvYmotPmJh
c2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmotPmJhc2Uub2JqZWN0Ll9jbGFz
cyA9ICZFV0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqOworfQorCisvKioKKyAqIFJlbGVhc2Ug
cmVzb3VyY2VzIGFsbG9jYXRlZCBieSBAYSBvYmouCisgKgorICogQHBhcmFtIG9iaiBAYSBFd2tf
SlNfT2JqZWN0IHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIGV3a19qc19vYmplY3RfZnJlZShF
d2tfSlNfT2JqZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2Jq
KTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmopOworICAgIEVpbmFfQm9vbCBz
Y3JpcHRfb2JqID0gIW9iai0+Y2xzLT5tZXRhOworCisgICAgZWluYV9oYXNoX2ZyZWUob2JqLT5w
cm9wZXJ0aWVzKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChvYmotPm5hbWUpOworCisgICAg
X2V3a19qc19jbGFzc19mcmVlKChFd2tfSlNfQ2xhc3MqKW9iai0+Y2xzKTsKKworICAgIEVJTkFf
TUFHSUNfU0VUKG9iaiwgRUlOQV9NQUdJQ19OT05FKTsKKworICAgIGlmIChzY3JpcHRfb2JqKQor
ICAgICAgICBmcmVlKG9iaik7Cit9CisKKy8qKgorICogR2V0cyBFaW5hX0hhc2ggd2l0aCBvYmpl
Y3QncyBwcm9wZXJ0aWVzLgorICoKKyAqIEBwYXJhbSBvYmogT2JqZWN0IHdob3NlIHByb3BlcnRp
ZXMgYXJlIHdhbnRlZC4KKyAqCisgKiBAcmV0dXJuIG9iamVjdCdzIHByb3BlcnRpZXMuCisgKi8K
K0VpbmFfSGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2Jq
ZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgMCk7
CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsKKyAgICByZXR1cm4gb2Jq
LT5wcm9wZXJ0aWVzOworfQorCisvKioKKyAqIEdldHMgbmFtZSBvZiB0aGUgb2JqZWN0LgorICoK
KyAqIEBwYXJhbSBvYmogT2JqZWN0IHdob3NlIG5hbWUgaXMgd2FudGVkLgorICoKKyAqIEByZXR1
cm4gbmFtZSBvZiBvYmplY3QuCisgKi8KK2NvbnN0IGNoYXIqIGV3a19qc19vYmplY3RfbmFtZV9n
ZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChvYmosIDApOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwg
MCk7CisgICAgcmV0dXJuIG9iai0+bmFtZTsKK30KKworLyoqCisgKiBDYWxscyB0aGUgZnVuY3Rp
b24gdGhpcyBvYmplY3QgcmVwcmVzZW50cy4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdCB0aGF0
IHJlcHJlc2VudHMgZnVuY3Rpb24uCisgKiBAcGFyYW0gYXJncyBBcmd1bWVudHMgdG8gYmUgcGFz
c2VkIHRvIGZ1bmN0aW9uLgorICogQHBhcmFtIGFyZ19jb3VudCBOdW1iZXIgb2YgYXJndW1lbnRz
LgorICogQHBhcmFtIHJlc3VsdCBSZXR1cm4gdmFsdWUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24u
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLCBA
YyBFSU5BX0ZBTFNFIGlmIGZ1bmN0aW9uIHdhcyBub3QgZXhlY3V0ZWQuCisgKi8KK0VpbmFfQm9v
bCBld2tfanNfb2JqZWN0X2ludm9rZShFd2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19WYXJpYW50
KiBhcmdzLCBpbnQgYXJnX2NvdW50LCBFd2tfSlNfVmFyaWFudCogcmVzdWx0KQoreworICAgIE5Q
VmFyaWFudCogbnBfYXJnczsKKyAgICBOUFZhcmlhbnQgbnBfcmVzdWx0OworICAgIGJvb2wgZmFp
bCA9IEVJTkFfRkFMU0U7CisgICAgaW50IGk7CisKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIEVJTkFfRkFMU0UpOworICAgIGlmIChld2tfanNfb2JqZWN0X3R5cGVfZ2V0KG9i
aikgIT0gRVdLX0pTX09CSkVDVF9GVU5DVElPTikKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CisgICAgaWYgKGFyZ19jb3VudCkKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGFyZ3MsIEVJTkFfRkFMU0UpOworCisgICAgbnBfYXJncyA9IChOUFZhcmlhbnQqKW1hbGxv
YyhzaXplb2YoTlBWYXJpYW50KSAqIGFyZ19jb3VudCk7CisgICAgZm9yIChpID0gMDsgaSA8IGFy
Z19jb3VudDsgaSsrKQorICAgICAgICBpZiAoIV9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQo
JmFyZ3NbaV0sICZucF9hcmdzW2ldKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYg
KCEoZmFpbCA9IF9OUE5fSW52b2tlRGVmYXVsdCgwLCAoTlBPYmplY3QqKW9iaiwgbnBfYXJncywg
YXJnX2NvdW50LCAmbnBfcmVzdWx0KSkpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChyZXN1
bHQpCisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHJlc3VsdCwg
Jm5wX3Jlc3VsdCk7CisKK2VuZDoKKyAgICBmcmVlKG5wX2FyZ3MpOworICAgIHJldHVybiBmYWls
OworfQorCisvKioKKyAqIFJldHVybnMgdGhlIHR5cGUgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4K
KyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdAorICoKKyAqIEByZXR1cm4gQGMgRVdLX0pTX09CSkVD
VCBpZiBpdCBpcyBhbiBvYmplY3QsIEBjIEVXS19KU19BUlJBWSBpZiBpdCBpcyBhbiBhcnJheSBh
bmQKKyAqIEBjIEVXS19KU19GVU5DVElPTiBpZiBpdCBpcyBhIGZ1bmN0aW9uLgorICovCitFd2tf
SlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0ICpvYmop
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgRVdLX0pTX09CSkVD
VF9PQkpFQ1QpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgRVdLX0pTX09C
SkVDVF9PQkpFQ1QpOworCisgICAgcmV0dXJuIG9iai0+dHlwZTsKK30KKworLyoqCisgKiBSZXR1
cm5zIHRoZSB0eXBlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCisgKgorICogQHBhcmFtIG9iaiBP
YmplY3QKKyAqCisgKiBAcmV0dXJuIEBjIEVXS19KU19PQkpFQ1QgaWYgaXQgaXMgYW4gb2JqZWN0
LCBAYyBFV0tfSlNfQVJSQVkgaWYgaXQgaXMgYW4gYXJyYXkgYW5kCisgKiBAYyBFV0tfSlNfRlVO
Q1RJT04gaWYgaXQgaXMgYSBmdW5jdGlvbi4KKyAqLwordm9pZCBld2tfanNfb2JqZWN0X3R5cGVf
c2V0KEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09S
X1JFVFVSTihvYmopOworCisgICAgb2JqLT50eXBlID0gdHlwZTsKK30KKworLyoqCisgKiBSZWxl
YXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgdmFyLgorICoKKyAqIEBwYXJhbSB2YXIgQGEg
RXdrX0pTX1ZhcmlhbnQgdG8gYmUgcmVsZWFzZQorICovCit2b2lkIGV3a19qc192YXJpYW50X2Zy
ZWUoRXdrX0pTX1ZhcmlhbnQqIHZhcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih2YXIpOworICAgIGlmICh2YXItPnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAg
ICAgICBmcmVlKHZhci0+dmFsdWUucyk7CisgICAgZWxzZSBpZiAodmFyLT50eXBlID09IEVXS19K
U19WQVJJQU5UX09CSkVDVCkKKyAgICAgICAgZXdrX2pzX29iamVjdF9mcmVlKHZhci0+dmFsdWUu
byk7CisgICAgZnJlZSh2YXIpOworfQorCit2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUo
RXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHZhcik7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKKyAgICAgICAgaWYgKHZhcltpXS50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklORykK
KyAgICAgICAgICAgIGZyZWUodmFyW2ldLnZhbHVlLnMpOworICAgICAgICBlbHNlIGlmICh2YXJb
aV0udHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCisgICAgICAgICAgICBld2tfanNfb2Jq
ZWN0X2ZyZWUodmFyW2ldLnZhbHVlLm8pOworICAgIH0KKyAgICBmcmVlKHZhcik7Cit9CisKK3N0
YXRpYyB2b2lkIF9ld2tfanNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJvcGVydHkgKnByb3ApCit7
CisgICAgZnJlZSgodm9pZCopcHJvcC0+bmFtZSk7CisgICAgaWYgKHByb3AtPnZhbHVlLnR5cGUg
PT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAgICAgICBmcmVlKHByb3AtPnZhbHVlLnZhbHVl
LnMpOworICAgIGVsc2UgaWYgKHByb3AtPnZhbHVlLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JK
RUNUKQorICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUocHJvcC0+dmFsdWUudmFsdWUubyk7Cisg
ICAgZnJlZShwcm9wKTsKK30KKworI2Vsc2UKKworRWluYV9IYXNoICpld2tfanNfb2JqZWN0X3By
b3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QgKm9iaikKK3sKKyAgICByZXR1cm4gTlVM
TDsKK30KKworY29uc3QgY2hhciAqZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNf
T2JqZWN0ICpvYmopCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZXdrX2pzX3Zhcmlh
bnRfZnJlZShFd2tfSlNfVmFyaWFudCAqdmFyKQoreworfQorCit2b2lkIGV3a19qc192YXJpYW50
X2FycmF5X2ZyZWUoRXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50KQoreworfQorCitFd2tf
SlNfT2JqZWN0ICpld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0
YV9jbHMpCit7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQgZXdrX2pzX29iamVjdF9mcmVl
KEV3a19KU19PYmplY3QgKm9iaikKK3sKK30KKworRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52
b2tlKEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291
bnQsIEV3a19KU19WYXJpYW50ICpyZXN1bHQpCit7CisgICAgcmV0dXJuIEVJTkFfRkFMU0U7Cit9
CisKK0V3a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmpl
Y3QgKm9iaikKK3sKKyAgICByZXR1cm4gRVdLX0pTX09CSkVDVF9JTlZBTElEOworfQorCit2b2lk
IGV3a19qc19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfT2JqZWN0
X1R5cGUgdHlwZSkKK3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJ
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5oIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjEwYzk5Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pz
LmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lP
TiBlbWJlZGRlZCBzeXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBld2tfanNfaAorI2RlZmluZSBld2tfanNf
aAorCisjaW5jbHVkZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIEVXS19KU19DTEFTU19NRVRB
X1ZFUlNJT04gMAorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX09iamVjdCBFd2tfSlNfT2JqZWN0
OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19DbGFzc19NZXRhIEV3a19KU19DbGFzc19NZXRhOwor
dHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19WYXJpYW50IEV3a19KU19WYXJpYW50OwordHlwZWRlZiBz
dHJ1Y3QgX0V3a19KU19NZXRob2QgRXdrX0pTX01ldGhvZDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tf
SlNfUHJvcGVydHkgRXdrX0pTX1Byb3BlcnR5OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19EZWZh
dWx0IEV3a19KU19EZWZhdWx0OwordHlwZWRlZiBFaW5hX0Jvb2wgKCpFd2tfSlNfU2V0X0NiKShF
d2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50
ICp2YWx1ZSk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19HZXRfQ2IpKEV3a19KU19PYmpl
Y3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3R5cGVk
ZWYgRWluYV9Cb29sICgqRXdrX0pTX0RlbF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBj
aGFyICpuYW1lKTsKK3R5cGVkZWYgRXdrX0pTX1ZhcmlhbnQqICgqRXdrX0pTX0ludm9rZV9DYiko
RXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywgaW50IGFyZ0NvdW50KTsK
KwordHlwZWRlZiBlbnVtIHsKKyAgICBFV0tfSlNfVkFSSUFOVF9WT0lELAorICAgIEVXS19KU19W
QVJJQU5UX05VTEwsCisgICAgRVdLX0pTX1ZBUklBTlRfQk9PTCwKKyAgICBFV0tfSlNfVkFSSUFO
VF9JTlQzMiwKKyAgICBFV0tfSlNfVkFSSUFOVF9ET1VCTEUsCisgICAgRVdLX0pTX1ZBUklBTlRf
U1RSSU5HLAorICAgIEVXS19KU19WQVJJQU5UX09CSkVDVAorfSBFd2tfSlNfVmFyaWFudF9UeXBl
OworCit0eXBlZGVmIGVudW0geworICAgIEVXS19KU19PQkpFQ1RfT0JKRUNULAorICAgIEVXS19K
U19PQkpFQ1RfQVJSQVksCisgICAgRVdLX0pTX09CSkVDVF9GVU5DVElPTiwKKyAgICBFV0tfSlNf
T0JKRUNUX0lOVkFMSUQKK30gRXdrX0pTX09iamVjdF9UeXBlOworCitzdHJ1Y3QgX0V3a19KU19W
YXJpYW50IHsKKyAgICBFd2tfSlNfVmFyaWFudF9UeXBlIHR5cGU7CisgICAgdW5pb24geworICAg
ICAgICBFaW5hX0Jvb2wgYjsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGRvdWJsZSBkOworICAg
ICAgICBjaGFyICpzOworICAgICAgICBFd2tfSlNfT2JqZWN0ICpvOworICAgIH0gdmFsdWU7Cit9
OworCitzdHJ1Y3QgX0V3a19KU19NZXRob2QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAg
RXdrX0pTX0ludm9rZV9DYiBpbnZva2U7Cit9OworCitzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSB7
CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBFd2tfSlNfU2V0X0NiIHNldDsKKyAgICBFd2tf
SlNfR2V0X0NiIGdldDsKKyAgICBFd2tfSlNfRGVsX0NiIGRlbDsKKyAgICBFd2tfSlNfVmFyaWFu
dCB2YWx1ZTsKK307CisKK3N0cnVjdCBfRXdrX0pTX0RlZmF1bHQgeworICAgIEV3a19KU19TZXRf
Q2Igc2V0OworICAgIEV3a19KU19HZXRfQ2IgZ2V0OworICAgIEV3a19KU19EZWxfQ2IgZGVsOwor
fTsKKworc3RydWN0IF9Fd2tfSlNfQ2xhc3NfTWV0YSB7CisgICAgdW5zaWduZWQgaW50IHZlcnNp
b247IC8vIGRlZmluZQorICAgIGNvbnN0IEV3a19KU19NZXRob2QgKm1ldGhvZHM7IC8vIG51bGwg
dGVybWluYXRlZCBhcnJheQorICAgIGNvbnN0IEV3a19KU19Qcm9wZXJ0eSAqcHJvcGVydGllczsg
Ly8gbnVsbCB0ZXJtaW5hdGVkIGFycmF5CisgICAgRXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9w
OworfTsKKworRUFQSSBFaW5hX0hhc2ggKmV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29u
c3QgRXdrX0pTX09iamVjdCAqb2JqKTsKK0VBUEkgY29uc3QgY2hhciAqZXdrX2pzX29iamVjdF9u
YW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0ICpvYmopOworCitFQVBJIHZvaWQgZXdrX2pzX3Zh
cmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCAqdmFyKTsKK0VBUEkgdm9pZCBld2tfanNfdmFyaWFu
dF9hcnJheV9mcmVlKEV3a19KU19WYXJpYW50ICp2YXIsIGludCBjb3VudCk7CitFQVBJIEV3a19K
U19PYmplY3QgKmV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhICptZXRh
X2Nscyk7CitFQVBJIHZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QgKm9iaik7
CitFQVBJIEVpbmFfQm9vbCBld2tfanNfb2JqZWN0X2ludm9rZShFd2tfSlNfT2JqZWN0ICpvYmos
IEV3a19KU19WYXJpYW50ICphcmdzLCBpbnQgYXJnX2NvdW50LCBFd2tfSlNfVmFyaWFudCAqcmVz
dWx0KTsKK0VBUEkgRXdrX0pTX09iamVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdr
X0pTX09iamVjdCAqb2JqKTsKK0VBUEkgdm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0KEV3a19K
U19PYmplY3QgKm9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpOworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX2pzX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19wcml2YXRlLmgKaW5kZXggMTFmMGQ2Mi4uOTM1MWVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19wcml2YXRlLmgKQEAgLTEsMyArMSw0IEBACisKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5
LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKICAgICBDb3B5cmlnaHQgKEMpIDIwMDkt
MjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzCkBAIC0yOSw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkJh
Y2tGb3J3YXJkTGlzdEltcGwuaCIKICNpbmNsdWRlICJFV2ViS2l0LmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgImV3a19qcy5o
IgogI2luY2x1ZGUgImV3a19sb2dnaW5nLmgiCiAjaW5jbHVkZSAiZXdrX3V0aWwuaCIKIApAQCAt
NDYsNiArNDksMjEgQEAgZXh0ZXJuICJDIiB7CiAvLyBJZiBkZWZpbmVkLCBld2sgd2lsbCBkbyB0
eXBlIGNoZWNraW5nIHRvIGVuc3VyZSBvYmplY3RzIGFyZSBvZiBjb3JyZWN0IHR5cGUKICNkZWZp
bmUgRVdLX1RZUEVfQ0hFQ0sgMQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisj
ZGVmaW5lIEVXS19KU19PQkpFQ1RfTUFHSUMgMHg2OTY5NjkKKwordHlwZWRlZiBzdHJ1Y3QgX0V3
a19KU19DbGFzcyBFd2tfSlNfQ2xhc3M7CitzdHJ1Y3QgX0V3a19KU19PYmplY3QgeworICAgIEph
dmFTY3JpcHRPYmplY3QgYmFzZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IEV3
a19KU19DbGFzcyAqY2xzOworICAgIEVpbmFfSGFzaCAqcHJvcGVydGllczsgLy8ga2V5PW5hbWUs
IHZhbHVlPWN1cnJlbnQgdmFsdWUgb2YgcHJvcGVydHkKKyAgICBFdmFzX09iamVjdCAqdmlldzsg
Ly8gZXdrX3ZpZXc6IGNoZWNrIGlmIHRoaXMgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQg
dG8gYW5vdGhlciBld2tfdmlldworICAgIEV3a19KU19PYmplY3RfVHlwZSB0eXBlOworICAgIEVJ
TkFfTUFHSUM7Cit9OworI2VuZGlmICAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwog
Ly8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBQb3B1
cE1lbnVDbGllbnQ7CkBAIC0xMTEsNiArMTI5LDEwIEBAIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRf
YXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJn
CiAKIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCAqbywgRXdrX0Rv
d25sb2FkICpkb3dubG9hZCk7CiAKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3Zv
aWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCAqbywgRXZhc19P
YmplY3QgKmZyYW1lKTsKKyNlbmRpZgorCiBpbnQgZXdrX3V0aWxfZHBpX2dldCh2b2lkKTsKIAog
I2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRl
eCBiZGVhODRkLi5kZDU2Y2I0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTIz
LDYgKzIzLDggQEAKICNpbmNsdWRlICJld2tfdmlldy5oIgogCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRMaXN0SW1wbC5oIgorI2luY2x1ZGUgIkJyaWRnZS5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2Uu
aCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRFZmwuaCIKICNp
bmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKQEAgLTQwLDYgKzQyLDkgQEAKICNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRFZmwuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNE
T01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJQcm9ncmVz
c1RyYWNrZXIuaCIKQEAgLTI4NjIsNyArMjg2Nyw3IEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3Nl
dHRpbmdfZm9udF9zYW5zX3NlcmlmX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5mb250X3NhbnNfc2VyaWY7CiB9Ci0gIAorCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19mb250X3NhbnNfc2VyaWZfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBmYW1p
bHkpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CkBAIC00MjI2LDYgKzQyMzEsMTcgQEAgdm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2
YXNfT2JqZWN0KiBvLCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQogCiAvKioKICAqIEBpbnRlcm5h
bAorICogUmVwb3J0cyB0aGUgSlMgd2luZG93IG9iamVjdCB3YXMgY2xlYXJlZC4KKyAqCisgKiBA
cGFyYW0gbyB2aWV3LgorICovCit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIo
RXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICpmcmFtZSkKK3sKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCBmcmFtZSk7Cit9
CisKKy8qKgorICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSB2aWV3cG9ydCBoYXMgY2hhbmdl
ZC4KICAqCiAgKiBAcGFyYW0gYXJndW1lbnRzIHZpZXdwb3J0IGFyZ3VtZW50LgpAQCAtNDI3OSw3
ICs0Mjk1LDcgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChFdmFzX09i
amVjdCAqbywgZmxvYXQqIHcsIGZsb2F0KiBoLCBmbG9hdCoKICAqIEBwYXJhbSBvIHZpZXcuCiAg
KiBAcGFyYW0gbWluX3NjYWxlIG1pbmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KICAqIEBwYXJh
bSBtYXhfc2NhbGUgbWF4aW11bSB2YWx1ZSBvZiB6b29tIHJhbmdlLgotICogCisgKgogICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgaWYgem9vbSByYW5nZSBpcyBjaGFuZ2VkLCBAYyBFSU5BX0ZBTFNF
IGlmIG5vdCBvciBmYWlsdXJlLgogICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9z
ZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKQpAQCAt
NDQzMSw2ICs0NDQ3LDUxIEBAIEVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbihFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlCiAgICAgcmV0dXJuIHNk
LT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKHNkLCByZXF1ZXN0KTsKIH0KIAorCisv
KioKKyAqIENyZWF0ZXMgYSBKUyBvYmplY3QgbmFtZWQgQGEgb2JqX25hbWUgYXMgcHJvcGVydHkg
b2YgdGhlIHdpbmRvdyBvYmplY3QuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbiBhIGNhbGxiYWNr
IGNvbm5lY3RlZHRvIHRoZQorICoganMsd2luZG93b2JqZWN0LGNsZWFyIHNpZ25hbC4KKyAqCisg
KiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFtIG9iaiBvYmplY3QgdGhhdCB3aWxsIGJlIGFkZGVk
KHNlZTogQGEgZXdrX2pzX29iamVjdF9uZXcpLgorICogQHBhcmFtIG9ial9uYW1lIG5hbWUgb2Yg
dGhlIG9iamVjdC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBvYmplY3Qgd2FzIGFk
ZGVkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdC4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X2pzX29i
amVjdF9hZGQoRXZhc19PYmplY3QgKm8sIEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAq
b2JqX25hbWUpCit7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYgKG9i
ai0+dmlldykgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tf
dmlldworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAgICBvYmotPm5hbWUgPSBlaW5hX3N0
cmluZ3NoYXJlX2FkZChvYmpfbmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKworICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOworICAgIFdlYkNvcmU6OkpTRE9NV2luZG93ICp3aW5kb3cgPSB0b0pTRE9N
V2luZG93KHByaXYtPm1haW5fZnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKKyAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0ICpyb290OworICAgIHJvb3QgPSBwcml2
LT5tYWluX2ZyYW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKworICAgIGlmICgh
d2luZG93KSB7CisgICAgICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmpl
Y3QiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgSlNDOjpFeGVj
U3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKworICAgIG9iai0+dmlldyA9IG87
CisgICAgSlNDOjpKU09iamVjdCAqcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0
ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVu
dGlmaWVyKGV4ZWMsIG9ial9uYW1lKTsKKworICAgIEpTQzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7
CisgICAgd2luZG93LT5wdXQoZXhlYywgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3QpOworICAgIHJl
dHVybiBFSU5BX1RSVUU7CisjZWxzZQorICAgIHJldHVybiBFSU5BX0ZBTFNFOworI2VuZGlmIC8v
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorfQorCisKIC8qKgogICogQGludGVybmFsCiAg
KiBSZXBvcnRzIHRoYXQgdGhlIGNvbnRlbnRzIGhhdmUgcmVzaXplZC4gVGhlIGV3a192aWV3IGNh
bGxzIGNvbnRlbnRzX3Jlc2l6ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggMDM2MGZl
ZS4uNDcxMmU5ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0yMyw2ICsyMyw3IEBA
CiAKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2lu
Y2x1ZGUgImV3a19qcy5oIgogI2luY2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKIAogI2lu
Y2x1ZGUgPEV2YXMuaD4KQEAgLTg1LDYgKzg2LDcgQEAgZXh0ZXJuICJDIiB7CiAgKiAgLSAiaW5w
dXRtZXRob2QsY2hhbmdlZCIsIEVpbmFfQm9vbDogcmVwb3J0cyB0aGF0IGlucHV0IG1ldGhvZCB3
YXMgY2hhbmdlZCBhbmQKICAqICAgIGl0IGdpdmVzIGEgYm9vbGVhbiB2YWx1ZSB3aGV0aGVyIGl0
J3MgZW5hYmxlZCBvciBub3QgYXMgYW4gYXJndW1lbnQuCiAgKiAgLSAidmlldyxyZXNpemVkIiwg
dm9pZDogdmlldyBvYmplY3QncyBzaXplIHdhcyBjaGFuZ2VkLgorICogIC0gImpzLHdpbmRvd29i
amVjdCxjbGVhciIsIHZvaWQ6IFJlcG9ydCB0aGF0IHRoZSBKUyB3aW5kb3cgb2JqZWN0IGhhcyBi
ZWVuIGNsZWFyZWQuCiAgKiAgLSAibG9hZCxuZXd3aW5kb3csc2hvdyIsIHZvaWQ6IHJlcG9ydHMg
dGhhdCBhIG5ldyB3aW5kb3cgd2FzIGNyZWF0ZWQgYW5kIGNhbiBiZSBzaG93bi4KICAqICAtICJy
ZXN0b3JlIiwgRXZhc19PYmplY3QgKjogcmVwb3J0cyB0aGF0IHZpZXcgc2hvdWxkIGJlIHJlc3Rv
cmVkIHRvIGRlZmF1bHQgY29uZGl0aW9ucwogICogICAgYW5kIGl0IGdpdmVzIGEgZnJhbWUgdGhh
dCBvcmlnaW5hdGVkIHJlc3RvcmUgYXMgYW4gYXJndW1lbnQuCkBAIC01NDUsNiArNTQ3LDggQEAg
RUFQSSB2b2lkIGV3a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5h
X0Jvb2wgdXNlcl9zY2FsYWJsZSk7CiBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxh
YmxlX2dldChFdmFzX09iamVjdCogbyk7CiBFQVBJIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhl
bF9yYXRpb19nZXQoRXZhc19PYmplY3QqIG8pOwogCitFQVBJIEVpbmFfQm9vbCBld2tfdmlld19q
c19vYmplY3RfYWRkKEV2YXNfT2JqZWN0ICpvLCBFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNo
YXIgKm9ial9uYW1lKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLS0gCjEuNy41
LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97605</attachid>
            <date>2011-06-17 09:16:48 -0700</date>
            <delta_ts>2011-06-22 13:05:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-EFL-Exporting-JavaScript-objects-for-EFL-port.patch</filename>
            <type>text/plain</type>
            <size>40567</size>
            <attacher name="Flavio Ceolin">flavio.ceolin</attacher>
            
              <data encoding="base64">RnJvbSAwMGY0Yjg4MTE4ZjI1N2RhNDFlMWI4YTg3ODNmYzhlZjNhZTgxZDgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGbGF2aW8gQ2VvbGluIDxmbGF2aW8uY2VvbGluQHByb2Z1c2lv
bi5tb2JpPgpEYXRlOiBGcmksIDE3IEp1biAyMDExIDEzOjExOjU5IC0wMzAwClN1YmplY3Q6IFtQ
QVRDSF0gW0VGTF0gICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydCAg
ICAgICAgCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKCi0t
LQogU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAxICsKIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOSArCiBTb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDM2ICsKIC4uLi9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuY3BwICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCAg
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMu
Y3BwICAgICAgICAgICAgICAgICAgIHwgIDc1NyArKysrKysrKysrKysrKysrKysrKwogU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5oICAgICAgICAgICAgICAgICAgICAgfCAgMTEyICsrKwog
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmggICAgICAgICAgICAgICAgfCAgIDIy
ICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgICAgICAgICAgICAgICAgIHwg
ICA2NSArKy0KIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDA5IGluc2VydGlvbnMoKyksIDMgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19q
cy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAppbmRleCBjZWU5NDU2Li5iNjVkMWJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQKQEAgLTUsNiArNSw3IEBAIFNFVChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdl
L2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9qc2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2NzcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDFlMmM3Li4wNmY5
YjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA2LTE2ICBKb25hcyBNLiBHYXN0
YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0aW5nIEphdmFTY3JpcHQgb2JqZWN0cyBmb3IgRUZM
IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
NDQ2CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwogMjAxMS0wNi0xNSAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzYyNzQ1PiBDb252ZXJ0IFdlYk5TRmlsZU1hbmFnZXJFeHRyYXMubSB0byBPYmplY3RpdmUtQysr
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IDU1ZWZiNjAuLmQ2OWM3YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CkBAIC03MCw2ICs3MCw3IEBAIExJU1QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwogICAgIGVm
bC9ld2svZXdrX3ZpZXdfdGlsZWQuYwogICAgIGVmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5j
cHAKKyAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViS2l0X0xJQlJB
UklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDFlZTE0NTMuLjg0MTI5ZWMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0wNi0xNiAgSm9uYXMgTS4gR2FzdGFsIDxqZ2FzdGFs
QHByb2Z1c2lvbi5tb2JpPgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKKworICAgICAg
ICAqIENNYWtlTGlzdHNFZmwudHh0OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgICogZXdrL0VX
ZWJLaXQuaDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDogQWRkZWQuCisgICAgICAgIChfZXdr
X2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KToKKyAgICAgICAgKF9ld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9oYXMpOgorICAgICAgICAoX2V3
a19qc19wcm9wZXJ0eV9nZXQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9zZXQpOgorICAg
ICAgICAoX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0
aWVzX2VudW1lcmF0ZSk6CisgICAgICAgIChfZXdrX2pzX21ldGhvZF9oYXMpOgorICAgICAgICAo
X2V3a19qc19tZXRob2RfaW52b2tlKToKKyAgICAgICAgKGV3a19qc19jbGFzc19uZXcpOgorICAg
ICAgICAoZXdrX2pzX2NsYXNzX2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uZXcpOgor
ICAgICAgICAoZXdrX2pzX29iamVjdF9mcmVlKToKKyAgICAgICAgKGV3a19qc19vYmplY3RfcHJv
cGVydGllc19nZXQpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uYW1lX2dldCk6CisgICAgICAg
IChld2tfanNfdmFyaWFudF9mcmVlKToKKyAgICAgICAgKiBld2svZXdrX2pzLmg6IEFkZGVkLgor
ICAgICAgICAqIGV3ay9ld2tfbWFpbi5jcHA6CisgICAgICAgIChld2tfaW5pdCk6CisgICAgICAg
ICogZXdrL2V3a19wcml2YXRlLmg6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAg
ICAgKGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIpOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIwMTEtMDYtMTUg
IEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAppbmRleCA0MWFh
NDQwLi4zOTc1NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0xOTQsNyArMTk0LDkgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qKQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZXdr
X3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihtX3ZpZXcsIG1fZnJhbWUpOworI2VuZGlmCiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgK
aW5kZXggZDk3MjQ1NC4uZDhiZGRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L0VXZWJLaXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUu
aCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1
ZGUgImV3a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdr
X3ZpZXcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYzk1OGY5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfanMuY3BwCkBAIC0wLDAgKzEsNzU3IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgImV3a19qcy5oIgorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
CisKKyNpbmNsdWRlICJOUF9qc29iamVjdC5oIgorCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIK
KyNpbmNsdWRlICJucHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJucHJ1bnRpbWVfaW1wbC5oIgorCisj
aW5jbHVkZSA8c3RyaW5nLmg+CisKKyNkZWZpbmUgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4o
bywgLi4uKSBcCisgICAgaWYgKCFFSU5BX01BR0lDX0NIRUNLKG9iaiwgRVdLX0pTX09CSkVDVF9N
QUdJQykpIHsgXAorICAgICAgIEVJTkFfTUFHSUNfRkFJTChvYmosIEVXS19KU19PQkpFQ1RfTUFH
SUMpOyBcCisgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyBcCisgICAgfQorCitzdHJ1Y3QgX0V3
a19KU19DbGFzcyB7CisgICAgY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGE7CisgICAgRWlu
YV9IYXNoKiBtZXRob2RzOyAvLyBrZXk9TlBJZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVy
IHRvIG1ldGEtPm1ldGhvZHM7CisgICAgRWluYV9IYXNoKiBwcm9wZXJ0aWVzOyAvLyBrZXk9TlBJ
ZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVyIHRvIG1ldGEtPnByb3BlcnRpZXM7CisgICAg
RXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9wOworfTsKKworc3RhdGljIGJvb2wgX2V3a19qc19u
cHZhcmlhbnRfdG9fdmFyaWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJpYW50
KiByZXN1bHQpOworc3RhdGljIGJvb2wgX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25z
dCBFd2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYW50KiByZXN1bHQpOworc3RhdGljIHZvaWQg
X2V3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19KU19Qcm9wZXJ0eSAqcHJvcCk7CisKK3N0YXRpYyBi
b29sIF9ld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lKTsKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucF9vYmos
IE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCk7CitzdGF0aWMgYm9vbCBfZXdr
X2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29u
c3QgTlBWYXJpYW50KiB2YWx1ZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X3JlbW92
ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CitzdGF0aWMgYm9vbCBfZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioq
IHZhbHVlLCB1aW50MzJfdCogY291bnQpOworc3RhdGljIGJvb2wgX2V3a19qc19tZXRob2RfaGFz
KE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKTsKK3N0YXRpYyBib29sIF9ld2tf
anNfbWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29u
c3QgTlBWYXJpYW50KiBhcmdzLCB1aW50MzJfdCBhcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0
KTsKKworc3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tf
SlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIEV3a19KU19WYXJpYW50ICp2YWx1ZSk7
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfc2V0KEV3a19KU19P
YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVl
KTsKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9kZWwoRXdrX0pT
X09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKTsKKworRXdrX0pTX0NsYXNzKiBfZXdrX2pz
X2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0YSk7Cit2b2lkIF9ld2tfanNf
Y2xhc3NfZnJlZShFd2tfSlNfQ2xhc3MgKmNscyk7CisKK3N0YXRpYyBOUENsYXNzIEVXS19OUENM
QVNTID0geworICAgIE5QX0NMQVNTX1NUUlVDVF9WRVJTSU9OLAorICAgIC8qTlBBbGxvY2F0ZUZ1
bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QRGVhbGxvY2F0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAv
Kk5QSW52YWxpZGF0ZUZ1bmN0aW9uUHRyKi8gMCwKKyAgICAvKk5QSGFzTWV0aG9kRnVuY3Rpb25Q
dHIqLyBfZXdrX2pzX21ldGhvZF9oYXMsCisgICAgLypOUEludm9rZUZ1bmN0aW9uUHRyKi8gX2V3
a19qc19tZXRob2RfaW52b2tlLAorICAgIC8qTlBJbnZva2VEZWZhdWx0RnVuY3Rpb25QdHIqLyAw
LAorICAgIC8qTlBIYXNQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9oYXMs
CisgICAgLypOUEdldFByb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X2dldCwK
KyAgICAvKk5QU2V0UHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfc2V0LAor
ICAgIC8qTlBSZW1vdmVQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9yZW1v
dmUsCisgICAgLypOUEVudW1lcmF0aW9uRnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnRpZXNf
ZW51bWVyYXRlLAorICAgIC8qTlBDb25zdHJ1Y3RGdW5jdGlvblB0ciovIDAKK307CisKK3N0YXRp
YyBFd2tfSlNfT2JqZWN0ICpfZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCAqbnBf
b2JqKQoreworICAgIHVpbnQzMl90IGk7CisgICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7CisgICAg
dWludDMyX3QgbnBfcHJvcHNfY291bnQ7CisgICAgRXdrX0pTX0NsYXNzKiBjbHM7CisgICAgRXdr
X0pTX09iamVjdCogb2JqOworICAgIEVpbmFfSXRlcmF0b3IqIGl0OworICAgIEV3a19KU19Qcm9w
ZXJ0eSogcHJvcDsKKworICAgIGlmIChFSU5BX01BR0lDX0NIRUNLKChFd2tfSlNfT2JqZWN0Kilu
cF9vYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpKSAvLyBJdCBhbHJlYWR5IGlzIGEgRXdrX0pTX09i
amVjdAorICAgICAgIHJldHVybiAoRXdrX0pTX09iamVjdCopbnBfb2JqOworCisgICAgaWYgKCFf
TlBOX0VudW1lcmF0ZSgwLCBucF9vYmosICZ2YWx1ZXMsICZucF9wcm9wc19jb3VudCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgY2xzID0gKEV3a19KU19DbGFzcyopbWFsbG9jKHNpemVvZihF
d2tfSlNfQ2xhc3MpKTsKKyAgICBjbHMtPm1ldGEgPSAwOworICAgIEV3a19KU19EZWZhdWx0IGRl
ZiA9IHsKKyAgICAgICAgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9zZXQsCisgICAgICAgIF9l
d2tfanNfbnBvYmplY3RfcHJvcGVydHlfZ2V0LAorICAgICAgICBfZXdrX2pzX25wb2JqZWN0X3By
b3BlcnR5X2RlbAorICAgIH07CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBkZWY7CisgICAgY2xz
LT5tZXRob2RzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGNscy0+cHJvcGVydGll
cyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygoRWluYV9GcmVlX0NiKV9ld2tfanNfcHJvcGVydHlf
ZnJlZSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5wX3Byb3BzX2NvdW50OyBpKyspIHsKKyAgICAg
ICAgaWYgKF9OUE5fSGFzUHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0pKSB7CisgICAgICAg
ICAgICBOUFZhcmlhbnQgdmFyOworICAgICAgICAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wID0g
KEV3a19KU19Qcm9wZXJ0eSopY2FsbG9jKHNpemVvZihFd2tfSlNfUHJvcGVydHkpLCAxKTsKKyAg
ICAgICAgICAgIF9OUE5fR2V0UHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0sICZ2YXIpOwor
ICAgICAgICAgICAgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgmKHByb3AtPnZhbHVlKSwg
JnZhcik7CisgICAgICAgICAgICBwcm9wLT5uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIo
dmFsdWVzW2ldKTsKKyAgICAgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5wcm9wZXJ0aWVzLCB2
YWx1ZXNbaV0sIHByb3ApOworICAgICAgICB9CisgICAgfQorICAgIGZyZWUodmFsdWVzKTsKKwor
ICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2UgaXQgZXhwZWN0
cyBjbHMtPm1ldGEgdG8gZXhpc3QKKyAgICBvYmogPSAoRXdrX0pTX09iamVjdCopbWFsbG9jKHNp
emVvZihFd2tfSlNfT2JqZWN0KSk7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JK
RUNUX01BR0lDKTsKKyAgICBvYmotPm5hbWUgPSAwOworICAgIG9iai0+Y2xzID0gY2xzOworICAg
IG9iai0+dmlldyA9IDA7CisKKyAgICBKYXZhU2NyaXB0T2JqZWN0KiBqc28gPSAoSmF2YVNjcmlw
dE9iamVjdCopbnBfb2JqOworICAgIGlmICghc3RybmNtcCgiQXJyYXkiLCBqc28tPmltcC0+Y2xh
c3NOYW1lKCkuYXNjaWkoKS5kYXRhKCksIHN0cmxlbigiQXJyYXkiKSkpCisgICAgICAgIG9iai0+
dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAgZWxzZSBpZiAoIXN0cm5jbXAoIkZ1bmN0
aW9uIiwganNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpLCBzdHJsZW4oIkZ1bmN0
aW9uIikpKQorICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOworICAg
IGVsc2UKKyAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisKKyAgICBp
ZiAoZWluYV9oYXNoX3BvcHVsYXRpb24oY2xzLT5wcm9wZXJ0aWVzKSA8IDI1KQorICAgICAgICBv
YmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldygwKTsgLy8gY2xhc3Mg
d2lsbCBmcmVlIHN0dWZmCisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5h
X2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CisKKyAgICBpdCA9IGVpbmFfaGFzaF9pdGVy
YXRvcl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFD
SChpdCwgcHJvcCkgeworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1lOworICAg
ICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7CisgICAgICAgIGVpbmFf
aGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBlaW5h
X2l0ZXJhdG9yX2ZyZWUoaXQpOworCisgICAgb2JqLT5iYXNlID0gKihKYXZhU2NyaXB0T2JqZWN0
KilucF9vYmo7CisKKyAgICByZXR1cm4gb2JqOworfQorCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
anNfbnBvYmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAq
bmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKQoreworICAgIE5QSWRlbnRpZmllciBpZCA9IF9O
UE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICBOUFZhcmlhbnQgdmFyOworICAgIGJv
b2wgZmFpbCA9IF9OUE5fR2V0UHJvcGVydHkoMCwgKE5QT2JqZWN0KilvYmosIGlkLCAmdmFyKTsK
KyAgICBpZiAoIWZhaWwpCisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFyaWFudF90b192YXJp
YW50KHZhbHVlLCAmdmFyKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGljIEVpbmFfQm9v
bCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSkKK3sKKyAgICBOUElkZW50
aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgTlBWYXJpYW50
IHZhcjsKKyAgICBib29sIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVl
LCAmdmFyKTsKKyAgICBpZiAoZmFpbCkKKyAgICAgICAgZmFpbCA9IF9OUE5fU2V0UHJvcGVydHko
MCwgKE5QT2JqZWN0KilvYmosIGlkLCAmdmFyKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChFd2tfSlNfT2JqZWN0
ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIHJldHVybiBfTlBOX1JlbW92ZVByb3BlcnR5
KDAsIChOUE9iamVjdCopb2JqLCBpZCk7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfdmFyaWFu
dF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIE5QVmFyaWFudCogcmVz
dWx0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCBmYWxzZSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlc3VsdCwgZmFsc2UpOworICAg
IHN3aXRjaCAoZGF0YS0+dHlwZSkgeworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfVk9JRDoKKyAg
ICAgICAgVk9JRF9UT19OUFZBUklBTlQoKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRVdLX0pTX1ZBUklBTlRfTlVMTDoKKyAgICAgICAgTlVMTF9UT19OUFZBUklBTlQoKnJlc3Vs
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfSU5UMzI6CisgICAg
ICAgIElOVDMyX1RPX05QVkFSSUFOVChkYXRhLT52YWx1ZS5pLCAqcmVzdWx0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9ET1VCTEU6CisgICAgICAgIERPVUJMRV9U
T19OUFZBUklBTlQoZGF0YS0+dmFsdWUuZCwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRVdLX0pTX1ZBUklBTlRfU1RSSU5HOgorICAgICAgICBTVFJJTkdaX1RPX05QVkFSSUFO
VChzdHJkdXAoZGF0YS0+dmFsdWUucyksICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEVXS19KU19WQVJJQU5UX0JPT0w6CisgICAgICAgIEJPT0xFQU5fVE9fTlBWQVJJQU5UKGRh
dGEtPnZhbHVlLmIsICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19KU19W
QVJJQU5UX09CSkVDVDoKKyAgICAgICAgT0JKRUNUX1RPX05QVkFSSUFOVCgoTlBPYmplY3QqKWRh
dGEtPnZhbHVlLm8sICpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
Ym9vbCBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBj
b25zdCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBpbnQgc3o7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocmVzdWx0LCBmYWxzZSk7CisgICAgc3dpdGNoIChyZXN1bHQtPnR5cGUpIHsK
KyAgICBjYXNlIE5QVmFyaWFudFR5cGVfVm9pZDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19K
U19WQVJJQU5UX1ZPSUQ7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfTnVsbDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVX
S19KU19WQVJJQU5UX05VTEw7CisgICAgICAgIGRhdGEtPnZhbHVlLm8gPSAwOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5cGVfSW50MzI6CisgICAgICAgIGRhdGEtPnR5cGUg
PSBFV0tfSlNfVkFSSUFOVF9JTlQzMjsKKyAgICAgICAgZGF0YS0+dmFsdWUuaSA9IE5QVkFSSUFO
VF9UT19JTlQzMigqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRU
eXBlX0RvdWJsZToKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX0RPVUJMRTsK
KyAgICAgICAgZGF0YS0+dmFsdWUuZCA9IE5QVkFSSUFOVF9UT19ET1VCTEUoKnJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9TdHJpbmc6CisgICAgICAgIHN6
ID0gTlBWQVJJQU5UX1RPX1NUUklORygqcmVzdWx0KS5VVEY4TGVuZ3RoOworICAgICAgICBkYXRh
LT52YWx1ZS5zID0gKGNoYXIqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoc3ogKyAxKSk7CisgICAg
ICAgIG1lbWNweShkYXRhLT52YWx1ZS5zLCBOUFZBUklBTlRfVE9fU1RSSU5HKCpyZXN1bHQpLlVU
RjhDaGFyYWN0ZXJzLCBzeik7CisgICAgICAgIGRhdGEtPnZhbHVlLnNbc3pdID0gJ1wwJzsKKyAg
ICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX1NUUklORzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tf
SlNfVkFSSUFOVF9CT09MOworICAgICAgICBkYXRhLT52YWx1ZS5iID0gTlBWQVJJQU5UX1RPX0JP
T0xFQU4oKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9P
YmplY3Q6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q7CisgICAg
ICAgIGRhdGEtPnZhbHVlLm8gPSBfZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUFZBUklBTlRf
VE9fT0JKRUNUKCpyZXN1bHQpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJv
b2wgX2V3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5h
bWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsK
KyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmos
IGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAg
ICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAg
IHJldHVybiBmYWlsOworICAgIH0KKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9t
SWRlbnRpZmllcihuYW1lKTsKKyAgICBpZiAoZWluYV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVz
LCBwcm9wX25hbWUpKSAvLyBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPworICAgICAgICBmYWls
ID0gdHJ1ZTsKKyAgICBmcmVlKHByb3BfbmFtZSk7CisKKyAgICByZXR1cm4gZmFpbDsKK30KKwor
c3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEV3a19KU19PYmplY3QqIG9i
aiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOwor
ICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVu
dGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlz
IG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKworICAgIHZh
bHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSk7Cisg
ICAgcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9w
ZXJ0aWVzLCBuYW1lKTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5nZXQpIHsgLy8gY2xhc3MgaGFz
IHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyCisgICAgICAgIGZhaWwgPSBwcm9wLT5n
ZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgIGlmICghZmFpbCkKKyAgICAgICAg
ICAgIGZhaWwgPSBfZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwor
ICAgIH0gZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8gZGVmYXVsdCBn
ZXR0ZXIgZXhpc3RzCisgICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChv
YmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFmYWlsKQorICAgICAgICAgICAg
ZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAg
fSBlbHNlIHsgLy8gZmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcAorICAgICAgICBjaGFyKiBw
cm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICAgICAgZnJlZSh2
YWx1ZSk7CisgICAgICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KillaW5hX2hhc2hfZmluZChv
YmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgICAgIGZyZWUocHJvcF9uYW1lKTsKKyAg
ICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIF9ld2tfanNfdmFyaWFudF90b19u
cHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAgfQorCisgICAgZnJlZSh2YWx1ZSk7CisgICAg
cmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydHlfc2V0KE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIG5wX3ZhbHVl
KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7Cisg
ICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAg
ICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZh
bHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAg
ICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJl
dHVybiBmYWlsOworICAgIH0KKworICAgIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Mo
c2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgX2V3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFu
dCh2YWx1ZSwgbnBfdmFsdWUpOworICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKG5hbWUpOworICAgIHByb3AgPSAoRXdrX0pTX1Byb3BlcnR5KillaW5hX2hhc2hf
ZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsKKyAgICBpZiAocHJvcCAmJiBw
cm9wLT5zZXQpCisgICAgICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1
ZSk7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlcgorICAgIGVs
c2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KQorICAgICAgICBmYWlsID0gb2JqLT5j
bHMtPmRlZmF1bHRfcHJvcC5zZXQob2JqLCBwcm9wX25hbWUsIHZhbHVlKTsgLy8gZGVmYXVsdCBn
ZXR0ZXIgZXhpc3RzCisgICAgZWxzZSB7IC8vIGZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAK
KyAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3Bf
bmFtZSwgdmFsdWUpOworICAgICAgICBmcmVlKG9sZCk7CisgICAgICAgIGZhaWwgPSB0cnVlOwor
ICAgIH0KKworICAgIGZyZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3Rh
dGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3Qq
KW5wX29iajsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgYm9vbCBmYWlsID0gZmFs
c2U7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7
CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAo
IV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRl
bnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFpbDsKKyAgICB9
CisKKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsK
KyAgICBwcm9wID0gKEV3a19KU19Qcm9wZXJ0eSopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnBy
b3BlcnRpZXMsIHByb3BfbmFtZSk7CisgICAgaWYgKHByb3AgJiYgcHJvcC0+ZGVsKQorICAgICAg
ICBmYWlsID0gcHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8vIGNsYXNzIGhhcyBwcm9wZXJ0
eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlcgorICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0
X3Byb3AuZGVsKQorICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwob2Jq
LCBwcm9wX25hbWUpOworICAgIGVsc2UKKyAgICAgICAgZmFpbCA9IGVpbmFfaGFzaF9kZWwob2Jq
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOworCisgICAgZnJlZShwcm9wX25hbWUpOworICAg
IHJldHVybiBmYWlsOworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVy
YXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291
bnQpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsK
KyAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKKyAgICBjaGFyKiBrZXk7CisgICAgaW50IGkgPSAwOwor
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIGl0ID0gZWluYV9o
YXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqLT5wcm9wZXJ0aWVzKTsKKworICAgICpjb3VudCA9IGVp
bmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+cHJvcGVydGllcyk7CisgICAgKnZhbHVlID0gKE5QSWRl
bnRpZmllciopbWFsbG9jKHNpemVvZihOUElkZW50aWZpZXIpICogKmNvdW50KTsKKyAgICBFSU5B
X0lURVJBVE9SX0ZPUkVBQ0goaXQsIGtleSkKKyAgICAgICAgKCp2YWx1ZSlbaSsrXSA9IF9OUE5f
R2V0U3RyaW5nSWRlbnRpZmllcihrZXkpOworCisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0KTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19tZXRob2RfaGFzKE5Q
T2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQoreworICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRV
Uk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUp
KSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBlaW5hX2hhc2hfZmluZChv
YmotPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3VuZCh0cnVl
KSwgMChmYWxzZSkgb3RoZXJ3aXNlCit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfbWV0aG9kX2lu
dm9rZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50
KiBucF9hcmdzLCB1aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0KQorewor
ICAgIEV3a19KU19PYmplY3QqIG9iaiA9IChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisgICAgRXdr
X0pTX01ldGhvZCogbWV0aG9kOworICAgIEV3a19KU19WYXJpYW50KiBhcmdzOworICAgIEV3a19K
U19WYXJpYW50KiByZXRfdmFsOworICAgIHVpbnQzMl90IGk7CisKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4ob2JqLCBmYWxzZSk7CisKKyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5n
KG5hbWUpKSB7CisgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVk
LiIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgbWV0aG9kID0gKEV3a19K
U19NZXRob2QqKWVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKTsKKyAgICBp
ZiAoIW1ldGhvZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXJncyA9IChFd2tfSlNf
VmFyaWFudCopbWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkgKiBucF9hcmdfY291bnQpOwor
ICAgIGZvciAoaSA9IDA7IGkgPCBucF9hcmdfY291bnQ7IGkrKykKKyAgICAgICAgX2V3a19qc19u
cHZhcmlhbnRfdG9fdmFyaWFudCgmYXJnc1tpXSwgJm5wX2FyZ3NbaV0pOworICAgIHJldF92YWwg
PSBtZXRob2QtPmludm9rZShvYmosIGFyZ3MsIG5wX2FyZ19jb3VudCk7CisgICAgX2V3a19qc192
YXJpYW50X3RvX25wdmFyaWFudChyZXRfdmFsLCByZXN1bHQpOworCisgICAgZXdrX2pzX3Zhcmlh
bnRfZnJlZShyZXRfdmFsKTsKKworICAgIHJldHVybiB0cnVlOworfQorCisvKioKKyAqIENyZWF0
ZSBhIEV3a19KU19DbGFzcyB0byBiZSB1c2VkIGluIEBhIGV3a19qc19vYmplY3RfbmV3LgorICoK
KyAqIEBwYXJhbSBtZXRhIEBhIEV3a19KU19DbGFzc19NZXRhIHRoYXQgZGVzY3JpYmVzIHRoZSBj
bGFzcyB0byBiZSBjcmVhdGVkLgorICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19DbGFzcyBjcmVh
dGVkLgorICovCitFd2tfSlNfQ2xhc3MqIF9ld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19D
bGFzc19NZXRhKiBtZXRhKQoreworICAgIEV3a19KU19DbGFzcyogY2xzOworICAgIGludCBpOwor
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGEsIDApOworCisgICAgY2xz
ID0gKEV3a19KU19DbGFzcyopbWFsbG9jKHNpemVvZihFd2tfSlNfQ2xhc3MpKTsKKyAgICBjbHMt
Pm1ldGEgPSBtZXRhOworICAgIGNscy0+ZGVmYXVsdF9wcm9wID0gbWV0YS0+ZGVmYXVsdF9wcm9w
OworCisgICAgLy8gZG9uJ3QgZnJlZSBtZXRob2RzIHNpbmNlIHRoZXkgcG9pbnQgdG8gbWV0YSBj
bGFzcyBtZXRob2RzKHdpbGwgYmUgZnJlZWQgd2hlbiBtZXRhIGNsYXNzIGlzIGZyZWVkKQorICAg
IGNscy0+bWV0aG9kcyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygwKTsKKyAgICBmb3IgKGkgPSAw
OyBtZXRhLT5tZXRob2RzICYmIG1ldGEtPm1ldGhvZHNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAg
IE5QSWRlbnRpZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihtZXRhLT5tZXRob2Rz
W2ldLm5hbWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKGNscy0+bWV0aG9kcywgaWQsICZtZXRh
LT5tZXRob2RzW2ldKTsKKyAgICB9CisKKyAgICAvLyBkb24ndCBmcmVlIHByb3BlcnRpZXMgc2lu
Y2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNzIHByb3BlcnRpZXMod2lsbCBiZSBmcmVlZCB3aGVu
IG1ldGEgY2xhc3MgaXMgZnJlZWQpCisgICAgY2xzLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3Bv
aW50ZXJfbmV3KDApOworICAgIGZvciAoaSA9IDA7IG1ldGEtPnByb3BlcnRpZXMgJiYgbWV0YS0+
cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAgTlBJZGVudGlmaWVyIGlkID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKG1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZSk7CisgICAgICAg
IGVpbmFfaGFzaF9hZGQoY2xzLT5wcm9wZXJ0aWVzLCBpZCwgJm1ldGEtPnByb3BlcnRpZXNbaV0p
OworICAgIH0KKworICAgIHJldHVybiBjbHM7Cit9CisKKy8qKgorICogUmVsZWFzZSByZXNvdXJj
ZXMgYWxsb2NhdGVkIGJ5IEBhIGNscy4KKyAqCisgKiBAcGFyYW0gY2xzIEBhIEV3a19KU19DbGFz
cyB0byBiZSByZWxlYXNlZC4KKyAqLwordm9pZCBfZXdrX2pzX2NsYXNzX2ZyZWUoRXdrX0pTX0Ns
YXNzKiBjbHMpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2xzKTsKKyAgICBl
aW5hX2hhc2hfZnJlZShjbHMtPm1ldGhvZHMpOworICAgIGVpbmFfaGFzaF9mcmVlKGNscy0+cHJv
cGVydGllcyk7CisgICAgZnJlZShjbHMpOworfQorCisvKioKKyAqIENyZWF0ZSBhIEV3a19KU19P
YmplY3QgdG8gYmUgdXNlZCBpbiBAYSBld2tfdmlld19qc19vYmplY3RfYWRkLiBUaGUgTWV0YSBj
bGFzcydzCisgKiBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzIGFyZSBub3QgbW9kaWZpZWQgYnV0IHJl
ZmVyZW5jZXMgdG8gaXQgYXJlIGtlcHQgYXMgbG9uZworICogYXMgdGhlIG9iamVjdCBjcmVhdGVk
IGZyb20gaXQgbGl2ZXMuIEFsbCBwcm9wZXJ0aWVzIGNyZWF0ZWQgaGVyZQorICogd2lsbCBiZSBh
ZGRlZCB0byB0aGUgb2JqZWN0IGhhc2ggb2YgcHJvcGVydGllcy4gUHJvcGVydGllcyB1c2luZyBk
ZWZhdWx0X3Byb3AncworICogZ2V0L3NldC9kZWwgbWV0aG9kcyBzaG91bGQgYWxzbyBiZSBhZGRl
ZCB0byB0aGUgb2JqZWN0cyBoYXNoKHNlZToKKyAqIEBhIGV3a19qc19vYmplY3RfcHJvcGVydGll
c19nZXQpLiBNZXRob2RzIG11c3QgZnJlZSB0aGUgYXJndW1lbnRzIHRoZXkgcmVjZWl2ZShzZWU6
CisgKiBAYSBld2tfanNfdmFyaWFuZ19hcnJheV9mcmVlKS4KKyAqCisgKgorICogQHBhcmFtIGNs
cyBAYSBFd2tfSlNfQ2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIG9iamVjdCB0byBiZSBjcmVhdGVk
LgorICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19PYmplY3QgY3JlYXRlZC4KKyAqLworRXdrX0pT
X09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGFf
Y2xzKQoreworICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBpbnQgaTsKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhX2NscywgMCk7CisKKyAgICBvYmogPSAoRXdr
X0pTX09iamVjdCopbWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSk7CisgICAgRUlOQV9NQUdJ
Q19TRVQob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmotPmNscyA9IF9ld2tfanNf
Y2xhc3NfbmV3KG1ldGFfY2xzKTsKKyAgICBvYmotPnZpZXcgPSAwOworICAgIG9iai0+bmFtZSA9
IDA7CisgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisKKyAgICBpZiAoZWlu
YV9oYXNoX3BvcHVsYXRpb24ob2JqLT5jbHMtPnByb3BlcnRpZXMpIDwgMjUpCisgICAgICAgIG9i
ai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KChFaW5hX0ZyZWVfQ2Ip
ZXdrX2pzX3ZhcmlhbnRfZnJlZSk7CisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRpZXMg
PSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoKEVpbmFfRnJlZV9DYilld2tfanNfdmFy
aWFudF9mcmVlKTsKKyAgICBmb3IgKGkgPSAwOyBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllcyAm
JiBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAgRXdr
X0pTX1Byb3BlcnR5IHByb3AgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXTsKKyAgICAg
ICAgY29uc3QgY2hhcioga2V5ID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsK
KyAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gKEV3a19KU19WYXJpYW50KiltYWxsb2Mo
c2l6ZW9mKEV3a19KU19WYXJpYW50KSk7CisgICAgICAgIGlmIChwcm9wLmdldCkKKyAgICAgICAg
ICAgIHByb3AuZ2V0KG9iaiwga2V5LCB2YWx1ZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CisgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT50eXBlKSB7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZPSUQ6CisgICAg
ICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6CisgICAgICAgICAgICAgICAgdmFsdWUt
PnZhbHVlLm8gPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
V0tfSlNfVkFSSUFOVF9TVFJJTkc6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLnMgPSBz
dHJkdXAocHJvcC52YWx1ZS52YWx1ZS5zKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfQk9PTDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+
dmFsdWUuYiA9IHByb3AudmFsdWUudmFsdWUuYjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfSU5UMzI6CisgICAgICAgICAgICAgICAgdmFs
dWUtPnZhbHVlLmkgPSBwcm9wLnZhbHVlLnZhbHVlLmk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0RPVUJMRToKKyAgICAgICAgICAgICAg
ICB2YWx1ZS0+dmFsdWUuZCA9IHByb3AudmFsdWUudmFsdWUuZDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfT0JKRUNUOgorICAgICAgICAg
ICAgICAgIHZhbHVlLT52YWx1ZS5vID0gcHJvcC52YWx1ZS52YWx1ZS5vOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVpbmFfaGFzaF9h
ZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAgICBvYmotPmJhc2Uu
b2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmotPmJhc2Uub2JqZWN0Ll9jbGFzcyA9
ICZFV0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqOworfQorCisvKioKKyAqIFJlbGVhc2UgcmVz
b3VyY2VzIGFsbG9jYXRlZCBieSBAYSBvYmouCisgKgorICogQHBhcmFtIG9iaiBAYSBFd2tfSlNf
T2JqZWN0IHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIGV3a19qc19vYmplY3RfZnJlZShFd2tf
SlNfT2JqZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsK
KyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmopOworICAgIEVpbmFfQm9vbCBzY3Jp
cHRfb2JqID0gIW9iai0+Y2xzLT5tZXRhOworCisgICAgZWluYV9oYXNoX2ZyZWUob2JqLT5wcm9w
ZXJ0aWVzKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChvYmotPm5hbWUpOworCisgICAgX2V3
a19qc19jbGFzc19mcmVlKChFd2tfSlNfQ2xhc3MqKW9iai0+Y2xzKTsKKworICAgIEVJTkFfTUFH
SUNfU0VUKG9iaiwgRUlOQV9NQUdJQ19OT05FKTsKKworICAgIGlmIChzY3JpcHRfb2JqKQorICAg
ICAgICBmcmVlKG9iaik7Cit9CisKKy8qKgorICogR2V0cyBFaW5hX0hhc2ggd2l0aCBvYmplY3Qn
cyBwcm9wZXJ0aWVzLgorICoKKyAqIEBwYXJhbSBvYmogT2JqZWN0IHdob3NlIHByb3BlcnRpZXMg
YXJlIHdhbnRlZC4KKyAqCisgKiBAcmV0dXJuIG9iamVjdCdzIHByb3BlcnRpZXMuCisgKi8KK0Vp
bmFfSGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0
KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgMCk7Cisg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsKKyAgICByZXR1cm4gb2JqLT5w
cm9wZXJ0aWVzOworfQorCisvKioKKyAqIEdldHMgbmFtZSBvZiB0aGUgb2JqZWN0LgorICoKKyAq
IEBwYXJhbSBvYmogT2JqZWN0IHdob3NlIG5hbWUgaXMgd2FudGVkLgorICoKKyAqIEByZXR1cm4g
bmFtZSBvZiBvYmplY3QuCisgKi8KK2NvbnN0IGNoYXIqIGV3a19qc19vYmplY3RfbmFtZV9nZXQo
Y29uc3QgRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChvYmosIDApOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgMCk7
CisgICAgcmV0dXJuIG9iai0+bmFtZTsKK30KKworLyoqCisgKiBDYWxscyB0aGUgZnVuY3Rpb24g
dGhpcyBvYmplY3QgcmVwcmVzZW50cy4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdCB0aGF0IHJl
cHJlc2VudHMgZnVuY3Rpb24uCisgKiBAcGFyYW0gYXJncyBBcmd1bWVudHMgdG8gYmUgcGFzc2Vk
IHRvIGZ1bmN0aW9uLgorICogQHBhcmFtIGFyZ19jb3VudCBOdW1iZXIgb2YgYXJndW1lbnRzLgor
ICogQHBhcmFtIHJlc3VsdCBSZXR1cm4gdmFsdWUgb2YgdGhlIGludm9rZWQgZnVuY3Rpb24uCisg
KgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgZnVuY3Rpb24gd2FzIGV4ZWN1dGVkLCBAYyBF
SU5BX0ZBTFNFIGlmIGZ1bmN0aW9uIHdhcyBub3QgZXhlY3V0ZWQuCisgKi8KK0VpbmFfQm9vbCBl
d2tfanNfb2JqZWN0X2ludm9rZShFd2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19WYXJpYW50KiBh
cmdzLCBpbnQgYXJnX2NvdW50LCBFd2tfSlNfVmFyaWFudCogcmVzdWx0KQoreworICAgIE5QVmFy
aWFudCogbnBfYXJnczsKKyAgICBOUFZhcmlhbnQgbnBfcmVzdWx0OworICAgIGJvb2wgZmFpbCA9
IEVJTkFfRkFMU0U7CisgICAgaW50IGk7CisKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVS
TihvYmosIEVJTkFfRkFMU0UpOworICAgIGlmIChld2tfanNfb2JqZWN0X3R5cGVfZ2V0KG9iaikg
IT0gRVdLX0pTX09CSkVDVF9GVU5DVElPTikKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Cisg
ICAgaWYgKGFyZ19jb3VudCkKKyAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGFyZ3MsIEVJTkFfRkFMU0UpOworCisgICAgbnBfYXJncyA9IChOUFZhcmlhbnQqKW1hbGxvYyhz
aXplb2YoTlBWYXJpYW50KSAqIGFyZ19jb3VudCk7CisgICAgZm9yIChpID0gMDsgaSA8IGFyZ19j
b3VudDsgaSsrKQorICAgICAgICBpZiAoIV9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoJmFy
Z3NbaV0sICZucF9hcmdzW2ldKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKCEo
ZmFpbCA9IF9OUE5fSW52b2tlRGVmYXVsdCgwLCAoTlBPYmplY3QqKW9iaiwgbnBfYXJncywgYXJn
X2NvdW50LCAmbnBfcmVzdWx0KSkpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChyZXN1bHQp
CisgICAgICAgIGZhaWwgPSBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHJlc3VsdCwgJm5w
X3Jlc3VsdCk7CisKK2VuZDoKKyAgICBmcmVlKG5wX2FyZ3MpOworICAgIHJldHVybiBmYWlsOwor
fQorCisvKioKKyAqIFJldHVybnMgdGhlIHR5cGUgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4KKyAq
CisgKiBAcGFyYW0gb2JqIE9iamVjdAorICoKKyAqIEByZXR1cm4gQGMgRVdLX0pTX09CSkVDVCBp
ZiBpdCBpcyBhbiBvYmplY3QsIEBjIEVXS19KU19BUlJBWSBpZiBpdCBpcyBhbiBhcnJheSBhbmQK
KyAqIEBjIEVXS19KU19GVU5DVElPTiBpZiBpdCBpcyBhIGZ1bmN0aW9uLgorICovCitFd2tfSlNf
T2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0ICpvYmopCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgRVdLX0pTX09CSkVDVF9P
QkpFQ1QpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgRVdLX0pTX09CSkVD
VF9PQkpFQ1QpOworCisgICAgcmV0dXJuIG9iai0+dHlwZTsKK30KKworLyoqCisgKiBSZXR1cm5z
IHRoZSB0eXBlIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMuCisgKgorICogQHBhcmFtIG9iaiBPYmpl
Y3QKKyAqCisgKiBAcmV0dXJuIEBjIEVXS19KU19PQkpFQ1QgaWYgaXQgaXMgYW4gb2JqZWN0LCBA
YyBFV0tfSlNfQVJSQVkgaWYgaXQgaXMgYW4gYXJyYXkgYW5kCisgKiBAYyBFV0tfSlNfRlVOQ1RJ
T04gaWYgaXQgaXMgYSBmdW5jdGlvbi4KKyAqLwordm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0
KEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCit7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmopOworCisgICAgb2JqLT50eXBlID0gdHlwZTsKK30KKworLyoqCisgKiBSZWxlYXNl
IHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgdmFyLgorICoKKyAqIEBwYXJhbSB2YXIgQGEgRXdr
X0pTX1ZhcmlhbnQgdG8gYmUgcmVsZWFzZQorICovCit2b2lkIGV3a19qc192YXJpYW50X2ZyZWUo
RXdrX0pTX1ZhcmlhbnQqIHZhcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2
YXIpOworICAgIGlmICh2YXItPnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAgICAg
ICBmcmVlKHZhci0+dmFsdWUucyk7CisgICAgZWxzZSBpZiAodmFyLT50eXBlID09IEVXS19KU19W
QVJJQU5UX09CSkVDVCkKKyAgICAgICAgZXdrX2pzX29iamVjdF9mcmVlKHZhci0+dmFsdWUubyk7
CisgICAgZnJlZSh2YXIpOworfQorCit2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdr
X0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHZhcik7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKysp
IHsKKyAgICAgICAgaWYgKHZhcltpXS50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklORykKKyAg
ICAgICAgICAgIGZyZWUodmFyW2ldLnZhbHVlLnMpOworICAgICAgICBlbHNlIGlmICh2YXJbaV0u
dHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCisgICAgICAgICAgICBld2tfanNfb2JqZWN0
X2ZyZWUodmFyW2ldLnZhbHVlLm8pOworICAgIH0KKyAgICBmcmVlKHZhcik7Cit9CisKK3N0YXRp
YyB2b2lkIF9ld2tfanNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJvcGVydHkgKnByb3ApCit7Cisg
ICAgZnJlZSgodm9pZCopcHJvcC0+bmFtZSk7CisgICAgaWYgKHByb3AtPnZhbHVlLnR5cGUgPT0g
RVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAgICAgICBmcmVlKHByb3AtPnZhbHVlLnZhbHVlLnMp
OworICAgIGVsc2UgaWYgKHByb3AtPnZhbHVlLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNU
KQorICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUocHJvcC0+dmFsdWUudmFsdWUubyk7CisgICAg
ZnJlZShwcm9wKTsKK30KKworI2Vsc2UKKworRWluYV9IYXNoKiBld2tfanNfb2JqZWN0X3Byb3Bl
cnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QgKm9iaikKK3sKKyAgICByZXR1cm4gMDsKK30K
KworY29uc3QgY2hhciAqZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0
ICpvYmopCit7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShF
d2tfSlNfVmFyaWFudCAqdmFyKQoreworfQorCit2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2Zy
ZWUoRXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50KQoreworfQorCitFd2tfSlNfT2JqZWN0
KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSAqbWV0YV9jbHMpCit7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmpl
Y3QgKm9iaikKK3sKK30KKworRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19KU19P
YmplY3QgKm9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291bnQsIEV3a19KU19W
YXJpYW50ICpyZXN1bHQpCit7CisgICAgcmV0dXJuIEVJTkFfRkFMU0U7Cit9CisKK0V3a19KU19P
YmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QgKm9iaikKK3sK
KyAgICByZXR1cm4gRVdLX0pTX09CSkVDVF9JTlZBTElEOworfQorCit2b2lkIGV3a19qc19vYmpl
Y3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSkK
K3sKK30KKworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19qcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYzk5Y2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgKQEAgLTAsMCAr
MSwxMTIgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIFByb0ZVU0lPTiBlbWJlZGRlZCBz
eXN0ZW1zCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBld2tfanNfaAorI2RlZmluZSBld2tfanNfaAorCisjaW5jbHVk
ZSA8RWluYS5oPgorI2luY2x1ZGUgPEV2YXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRl
cm4gIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIEVXS19KU19DTEFTU19NRVRBX1ZFUlNJT04gMAor
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX09iamVjdCBFd2tfSlNfT2JqZWN0OwordHlwZWRlZiBz
dHJ1Y3QgX0V3a19KU19DbGFzc19NZXRhIEV3a19KU19DbGFzc19NZXRhOwordHlwZWRlZiBzdHJ1
Y3QgX0V3a19KU19WYXJpYW50IEV3a19KU19WYXJpYW50OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19K
U19NZXRob2QgRXdrX0pTX01ldGhvZDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfUHJvcGVydHkg
RXdrX0pTX1Byb3BlcnR5OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19EZWZhdWx0IEV3a19KU19E
ZWZhdWx0OwordHlwZWRlZiBFaW5hX0Jvb2wgKCpFd2tfSlNfU2V0X0NiKShFd2tfSlNfT2JqZWN0
ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSk7Cit0
eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19HZXRfQ2IpKEV3a19KU19PYmplY3QgKm9iaiwgY29u
c3QgY2hhciAqbmFtZSwgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgRWluYV9Cb29s
ICgqRXdrX0pTX0RlbF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lKTsK
K3R5cGVkZWYgRXdrX0pTX1ZhcmlhbnQqICgqRXdrX0pTX0ludm9rZV9DYikoRXdrX0pTX09iamVj
dCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywgaW50IGFyZ0NvdW50KTsKKwordHlwZWRlZiBl
bnVtIHsKKyAgICBFV0tfSlNfVkFSSUFOVF9WT0lELAorICAgIEVXS19KU19WQVJJQU5UX05VTEws
CisgICAgRVdLX0pTX1ZBUklBTlRfQk9PTCwKKyAgICBFV0tfSlNfVkFSSUFOVF9JTlQzMiwKKyAg
ICBFV0tfSlNfVkFSSUFOVF9ET1VCTEUsCisgICAgRVdLX0pTX1ZBUklBTlRfU1RSSU5HLAorICAg
IEVXS19KU19WQVJJQU5UX09CSkVDVAorfSBFd2tfSlNfVmFyaWFudF9UeXBlOworCit0eXBlZGVm
IGVudW0geworICAgIEVXS19KU19PQkpFQ1RfT0JKRUNULAorICAgIEVXS19KU19PQkpFQ1RfQVJS
QVksCisgICAgRVdLX0pTX09CSkVDVF9GVU5DVElPTiwKKyAgICBFV0tfSlNfT0JKRUNUX0lOVkFM
SUQKK30gRXdrX0pTX09iamVjdF9UeXBlOworCitzdHJ1Y3QgX0V3a19KU19WYXJpYW50IHsKKyAg
ICBFd2tfSlNfVmFyaWFudF9UeXBlIHR5cGU7CisgICAgdW5pb24geworICAgICAgICBFaW5hX0Jv
b2wgYjsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGRvdWJsZSBkOworICAgICAgICBjaGFyICpz
OworICAgICAgICBFd2tfSlNfT2JqZWN0ICpvOworICAgIH0gdmFsdWU7Cit9OworCitzdHJ1Y3Qg
X0V3a19KU19NZXRob2QgeworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgRXdrX0pTX0ludm9r
ZV9DYiBpbnZva2U7Cit9OworCitzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSB7CisgICAgY29uc3Qg
Y2hhciAqbmFtZTsKKyAgICBFd2tfSlNfU2V0X0NiIHNldDsKKyAgICBFd2tfSlNfR2V0X0NiIGdl
dDsKKyAgICBFd2tfSlNfRGVsX0NiIGRlbDsKKyAgICBFd2tfSlNfVmFyaWFudCB2YWx1ZTsKK307
CisKK3N0cnVjdCBfRXdrX0pTX0RlZmF1bHQgeworICAgIEV3a19KU19TZXRfQ2Igc2V0OworICAg
IEV3a19KU19HZXRfQ2IgZ2V0OworICAgIEV3a19KU19EZWxfQ2IgZGVsOworfTsKKworc3RydWN0
IF9Fd2tfSlNfQ2xhc3NfTWV0YSB7CisgICAgdW5zaWduZWQgaW50IHZlcnNpb247IC8vIGRlZmlu
ZQorICAgIGNvbnN0IEV3a19KU19NZXRob2QgKm1ldGhvZHM7IC8vIG51bGwgdGVybWluYXRlZCBh
cnJheQorICAgIGNvbnN0IEV3a19KU19Qcm9wZXJ0eSAqcHJvcGVydGllczsgLy8gbnVsbCB0ZXJt
aW5hdGVkIGFycmF5CisgICAgRXdrX0pTX0RlZmF1bHQgZGVmYXVsdF9wcm9wOworfTsKKworRUFQ
SSBFaW5hX0hhc2ggKmV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29uc3QgRXdrX0pTX09i
amVjdCAqb2JqKTsKK0VBUEkgY29uc3QgY2hhciAqZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25z
dCBFd2tfSlNfT2JqZWN0ICpvYmopOworCitFQVBJIHZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShF
d2tfSlNfVmFyaWFudCAqdmFyKTsKK0VBUEkgdm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVl
KEV3a19KU19WYXJpYW50ICp2YXIsIGludCBjb3VudCk7CitFQVBJIEV3a19KU19PYmplY3QgKmV3
a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhICptZXRhX2Nscyk7CitFQVBJ
IHZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QgKm9iaik7CitFQVBJIEVpbmFf
Qm9vbCBld2tfanNfb2JqZWN0X2ludm9rZShFd2tfSlNfT2JqZWN0ICpvYmosIEV3a19KU19WYXJp
YW50ICphcmdzLCBpbnQgYXJnX2NvdW50LCBFd2tfSlNfVmFyaWFudCAqcmVzdWx0KTsKK0VBUEkg
RXdrX0pTX09iamVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVjdCAq
b2JqKTsKK0VBUEkgdm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0KEV3a19KU19PYmplY3QgKm9i
aiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNl
bmRpZgorCisjZW5kaWYgLy8gZXdrX2pzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgK
aW5kZXggMTFmMGQ2Mi4uMDBkODI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmgK
QEAgLTEsMyArMSw0IEBACisKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVT
SU9OIGVtYmVkZGVkIHN5c3RlbXMKICAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5n
IEVsZWN0cm9uaWNzCkBAIC0yOSw5ICszMCwxMSBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlz
dEltcGwuaCIKICNpbmNsdWRlICJFV2ViS2l0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJOUF9qc29iamVjdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgIldpZGdldC5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1ZGUg
ImV3a19sb2dnaW5nLmgiCiAjaW5jbHVkZSAiZXdrX3V0aWwuaCIKIApAQCAtNDYsNiArNDksMjEg
QEAgZXh0ZXJuICJDIiB7CiAvLyBJZiBkZWZpbmVkLCBld2sgd2lsbCBkbyB0eXBlIGNoZWNraW5n
IHRvIGVuc3VyZSBvYmplY3RzIGFyZSBvZiBjb3JyZWN0IHR5cGUKICNkZWZpbmUgRVdLX1RZUEVf
Q0hFQ0sgMQogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisjZGVmaW5lIEVXS19K
U19PQkpFQ1RfTUFHSUMgMHg2OTY5NjkKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19DbGFzcyBF
d2tfSlNfQ2xhc3M7CitzdHJ1Y3QgX0V3a19KU19PYmplY3QgeworICAgIEphdmFTY3JpcHRPYmpl
Y3QgYmFzZTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IEV3a19KU19DbGFzcyAq
Y2xzOworICAgIEVpbmFfSGFzaCAqcHJvcGVydGllczsgLy8ga2V5PW5hbWUsIHZhbHVlPWN1cnJl
bnQgdmFsdWUgb2YgcHJvcGVydHkKKyAgICBFdmFzX09iamVjdCAqdmlldzsgLy8gZXdrX3ZpZXc6
IGNoZWNrIGlmIHRoaXMgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBl
d2tfdmlldworICAgIEV3a19KU19PYmplY3RfVHlwZSB0eXBlOworICAgIEVJTkFfTUFHSUM7Cit9
OworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCiAvLyBmb3J3YXJkIGRl
Y2xhcmF0aW9ucwogbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFBvcHVwTWVudUNsaWVudDsK
QEAgLTExMSw2ICsxMjksMTAgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3Nl
dChFdmFzX09iamVjdCAqbywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmcKIAogdm9pZCBld2tf
dmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0ICpvLCBFd2tfRG93bmxvYWQgKmRvd25s
b2FkKTsKIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQordm9pZCBld2tfdmlld19q
c193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqZnJhbWUp
OworI2VuZGlmCisKIGludCBld2tfdXRpbF9kcGlfZ2V0KHZvaWQpOwogCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IGJkZWE4NGQuLmM2
OTZhOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMjMsNiArMjMsNyBAQAog
I2luY2x1ZGUgImV3a192aWV3LmgiCiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgi
CisjaW5jbHVkZSAiQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hy
b21lQ2xpZW50RWZsLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCkBAIC00
MCw5ICs0MSwxMyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJKU0RPTUJpbmRp
bmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkpTTG9jay5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlBvcHVwTWVudUNsaWVudC5o
IgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgorI2luY2x1ZGUgImNfaW5zdGFuY2UuaCIK
ICNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgogCiAjaW5jbHVkZSA8RWNvcmUuaD4KQEAgLTI4NjIs
NyArMjg2Nyw3IEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3Nlcmlm
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2Vy
aWY7CiB9Ci0gIAorCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X3NhbnNfc2VyaWZf
c2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBmYW1pbHkpCiB7CiAgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CkBAIC00MjI2LDYgKzQyMzEsMTcg
QEAgdm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRG93
bmxvYWQqIGRvd25sb2FkKQogCiAvKioKICAqIEBpbnRlcm5hbAorICogUmVwb3J0cyB0aGUgSlMg
d2luZG93IG9iamVjdCB3YXMgY2xlYXJlZC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICovCit2
b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QgKm8sIEV2YXNf
T2JqZWN0ICpmcmFtZSkKK3sKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCBmcmFtZSk7Cit9CisKKy8qKgorICogQGludGVybmFs
CiAgKiBSZXBvcnRzIHRoZSB2aWV3cG9ydCBoYXMgY2hhbmdlZC4KICAqCiAgKiBAcGFyYW0gYXJn
dW1lbnRzIHZpZXdwb3J0IGFyZ3VtZW50LgpAQCAtNDI3OSw3ICs0Mjk1LDcgQEAgdm9pZCBld2tf
dmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChFdmFzX09iamVjdCAqbywgZmxvYXQqIHcsIGZs
b2F0KiBoLCBmbG9hdCoKICAqIEBwYXJhbSBvIHZpZXcuCiAgKiBAcGFyYW0gbWluX3NjYWxlIG1p
bmltdW0gdmFsdWUgb2Ygem9vbSByYW5nZS4KICAqIEBwYXJhbSBtYXhfc2NhbGUgbWF4aW11bSB2
YWx1ZSBvZiB6b29tIHJhbmdlLgotICogCisgKgogICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYg
em9vbSByYW5nZSBpcyBjaGFuZ2VkLCBAYyBFSU5BX0ZBTFNFIGlmIG5vdCBvciBmYWlsdXJlLgog
ICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8sIGZs
b2F0IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKQpAQCAtNDQzMSw2ICs0NDQ3LDUxIEBAIEVp
bmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCog
bywgRXdrX0ZyYW1lX1Jlc291cmNlCiAgICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uKHNkLCByZXF1ZXN0KTsKIH0KIAorCisvKioKKyAqIENyZWF0ZXMgYSBKUyBv
YmplY3QgbmFtZWQgQGEgb2JqX25hbWUgYXMgcHJvcGVydHkgb2YgdGhlIHdpbmRvdyBvYmplY3Qu
IFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbiBhIGNhbGxiYWNrIGNvbm5lY3RlZHRvIHRoZQorICog
anMsd2luZG93b2JqZWN0LGNsZWFyIHNpZ25hbC4KKyAqCisgKiBAcGFyYW0gbyB2aWV3LgorICog
QHBhcmFtIG9iaiBvYmplY3QgdGhhdCB3aWxsIGJlIGFkZGVkKHNlZTogQGEgZXdrX2pzX29iamVj
dF9uZXcpLgorICogQHBhcmFtIG9ial9uYW1lIG5hbWUgb2YgdGhlIG9iamVjdC4KKyAqCisgKiBA
cmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBvYmplY3Qgd2FzIGFkZGVkLCBAYyBFSU5BX0ZBTFNFIGlm
IG5vdC4KKyAqLworRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3Qg
Km8sIEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqb2JqX25hbWUpCit7CisjaWYgRU5B
QkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgaWYgKG9iai0+dmlldykgLy8gb2JqZWN0IGhh
cyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tfdmlldworICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKKyAgICBvYmotPm5hbWUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChvYmpfbmFt
ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKwor
ICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIFdl
YkNvcmU6OkpTRE9NV2luZG93ICp3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5fZnJh
bWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBKU0M6OkJpbmRpbmdz
OjpSb290T2JqZWN0ICpyb290OworICAgIHJvb3QgPSBwcml2LT5tYWluX2ZyYW1lLT5zY3JpcHQo
KS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKworICAgIGlmICghd2luZG93KSB7CisgICAgICAgIEVS
UigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmplY3QiKTsKKyAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CisgICAgfQorCisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ct
Pmdsb2JhbEV4ZWMoKTsKKworICAgIG9iai0+dmlldyA9IG87CisgICAgSlNDOjpKU09iamVjdCAq
cnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6
OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7
CisgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVudGlmaWVyKGV4ZWMsIG9ial9uYW1l
KTsKKworICAgIEpTQzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7CisgICAgd2luZG93LT5wdXQoZXhl
YywgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3QpOworICAgIHJldHVybiBFSU5BX1RSVUU7CisjZWxz
ZQorICAgIHJldHVybiBFSU5BX0ZBTFNFOworI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQorfQorCisKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgdGhlIGNv
bnRlbnRzIGhhdmUgcmVzaXplZC4gVGhlIGV3a192aWV3IGNhbGxzIGNvbnRlbnRzX3Jlc2l6ZSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmgKaW5kZXggMDM2MGZlZS4uNDcxMmU5ZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlldy5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJld2tfZnJh
bWUuaCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2lu
Y2x1ZGUgImV3a193aW5kb3dfZmVhdHVyZXMuaCIKIAogI2luY2x1ZGUgPEV2YXMuaD4KQEAgLTg1
LDYgKzg2LDcgQEAgZXh0ZXJuICJDIiB7CiAgKiAgLSAiaW5wdXRtZXRob2QsY2hhbmdlZCIsIEVp
bmFfQm9vbDogcmVwb3J0cyB0aGF0IGlucHV0IG1ldGhvZCB3YXMgY2hhbmdlZCBhbmQKICAqICAg
IGl0IGdpdmVzIGEgYm9vbGVhbiB2YWx1ZSB3aGV0aGVyIGl0J3MgZW5hYmxlZCBvciBub3QgYXMg
YW4gYXJndW1lbnQuCiAgKiAgLSAidmlldyxyZXNpemVkIiwgdm9pZDogdmlldyBvYmplY3QncyBz
aXplIHdhcyBjaGFuZ2VkLgorICogIC0gImpzLHdpbmRvd29iamVjdCxjbGVhciIsIHZvaWQ6IFJl
cG9ydCB0aGF0IHRoZSBKUyB3aW5kb3cgb2JqZWN0IGhhcyBiZWVuIGNsZWFyZWQuCiAgKiAgLSAi
bG9hZCxuZXd3aW5kb3csc2hvdyIsIHZvaWQ6IHJlcG9ydHMgdGhhdCBhIG5ldyB3aW5kb3cgd2Fz
IGNyZWF0ZWQgYW5kIGNhbiBiZSBzaG93bi4KICAqICAtICJyZXN0b3JlIiwgRXZhc19PYmplY3Qg
KjogcmVwb3J0cyB0aGF0IHZpZXcgc2hvdWxkIGJlIHJlc3RvcmVkIHRvIGRlZmF1bHQgY29uZGl0
aW9ucwogICogICAgYW5kIGl0IGdpdmVzIGEgZnJhbWUgdGhhdCBvcmlnaW5hdGVkIHJlc3RvcmUg
YXMgYW4gYXJndW1lbnQuCkBAIC01NDUsNiArNTQ3LDggQEAgRUFQSSB2b2lkIGV3a192aWV3X3Vz
ZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJsZSk7
CiBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChFdmFzX09iamVjdCog
byk7CiBFQVBJIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQoRXZhc19PYmpl
Y3QqIG8pOwogCitFQVBJIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2Jq
ZWN0ICpvLCBFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKTsKKwogI2lm
ZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLS0gCjEuNy41LjIKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98225</attachid>
            <date>2011-06-22 13:05:45 -0700</date>
            <delta_ts>2011-08-05 13:06:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-EFL-Exporting-JavaScript-objects-for-EFL-port.patch</filename>
            <type>text/plain</type>
            <size>40439</size>
            <attacher name="Flavio Ceolin">flavio.ceolin</attacher>
            
              <data encoding="base64">RnJvbSA1MWY1N2VmMzQwZThkYjMwZjVjOWFjNTFiYWM0ODRmYTNmNmYyM2Y3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGbGF2aW8gQ2VvbGluIDxmbGF2aW8uY2VvbGluQHByb2Z1c2lv
bi5tb2JpPgpEYXRlOiBGcmksIDE3IEp1biAyMDExIDEzOjExOjU5IC0wMzAwClN1YmplY3Q6IFtQ
QVRDSF0gW0VGTF0gICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydCAg
ICAgICAgCiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKCi0t
LQogU291cmNlL1dlYktpdC9DTWFrZUxpc3RzLnR4dCAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAxICsKIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgOSArCiBTb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDM2ICsKIC4uLi9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRFZmwuY3BwICAgIHwgICAgNCArLQogU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaCAg
ICAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMu
Y3BwICAgICAgICAgICAgICAgICAgIHwgIDc1NiArKysrKysrKysrKysrKysrKysrKwogU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5oICAgICAgICAgICAgICAgICAgICAgfCAgMTEyICsrKwog
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmggICAgICAgICAgICAgICAgfCAgIDIx
ICsKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgICAgICAgICAgICAgICAgIHwg
ICA2NSArKy0KIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oICAgICAgICAgICAgICAg
ICAgIHwgICAgNCArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDA3IGluc2VydGlvbnMoKyksIDMgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19q
cy5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktp
dC9DTWFrZUxpc3RzLnR4dAppbmRleCBjZWU5NDU2Li5iNjVkMWJkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50
eHQKQEAgLTUsNiArNSw3IEBAIFNFVChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIk
e1dFQkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdl
L2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9qc2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9
L2NzcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzMDFlMmM3Li4wNmY5
YjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDExLTA2LTE2ICBKb25hcyBNLiBHYXN0
YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRXhwb3J0aW5nIEphdmFTY3JpcHQgb2JqZWN0cyBmb3IgRUZM
IHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQz
NDQ2CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKwogMjAxMS0wNi0xNSAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzYyNzQ1PiBDb252ZXJ0IFdlYk5TRmlsZU1hbmFnZXJFeHRyYXMubSB0byBPYmplY3RpdmUtQysr
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DTWFrZUxpc3RzRWZsLnR4dCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CmluZGV4IDU1ZWZiNjAuLmQ2OWM3YWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwudHh0CkBAIC03MCw2ICs3MCw3IEBAIExJU1QoQVBQ
RU5EIFdlYktpdF9TT1VSQ0VTCiAgICAgZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuYwogICAgIGVm
bC9ld2svZXdrX3ZpZXdfdGlsZWQuYwogICAgIGVmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5j
cHAKKyAgICBlZmwvZXdrL2V3a19qcy5jcHAKICkKIAogTElTVChBUFBFTkQgV2ViS2l0X0xJQlJB
UklFUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9lZmwvQ2hhbmdlTG9nCmluZGV4IDFlZTE0NTMuLjg0MTI5ZWMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0wNi0xNiAgSm9uYXMgTS4gR2FzdGFsIDxqZ2FzdGFs
QHByb2Z1c2lvbi5tb2JpPgorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHBvcnRpbmcgSmF2YVNjcmlwdCBvYmplY3RzIGZvciBFRkwgcG9ydAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM0NDYKKworICAgICAg
ICAqIENNYWtlTGlzdHNFZmwudHh0OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9h
ZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6CisgICAgICAgICogZXdrL0VX
ZWJLaXQuaDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDogQWRkZWQuCisgICAgICAgIChfZXdr
X2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KToKKyAgICAgICAgKF9ld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9oYXMpOgorICAgICAgICAoX2V3
a19qc19wcm9wZXJ0eV9nZXQpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0eV9zZXQpOgorICAg
ICAgICAoX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUpOgorICAgICAgICAoX2V3a19qc19wcm9wZXJ0
aWVzX2VudW1lcmF0ZSk6CisgICAgICAgIChfZXdrX2pzX21ldGhvZF9oYXMpOgorICAgICAgICAo
X2V3a19qc19tZXRob2RfaW52b2tlKToKKyAgICAgICAgKGV3a19qc19jbGFzc19uZXcpOgorICAg
ICAgICAoZXdrX2pzX2NsYXNzX2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uZXcpOgor
ICAgICAgICAoZXdrX2pzX29iamVjdF9mcmVlKToKKyAgICAgICAgKGV3a19qc19vYmplY3RfcHJv
cGVydGllc19nZXQpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uYW1lX2dldCk6CisgICAgICAg
IChld2tfanNfdmFyaWFudF9mcmVlKToKKyAgICAgICAgKiBld2svZXdrX2pzLmg6IEFkZGVkLgor
ICAgICAgICAqIGV3ay9ld2tfbWFpbi5jcHA6CisgICAgICAgIChld2tfaW5pdCk6CisgICAgICAg
ICogZXdrL2V3a19wcml2YXRlLmg6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAg
ICAgKGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIpOgorICAgICAgICAoZXdrX3ZpZXdf
anNfb2JqZWN0X2FkZCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIwMTEtMDYtMTUg
IEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAppbmRleCA0MWFh
NDQwLi4zOTc1NTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0xOTQsNyArMTk0LDkgQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qKQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRj
aERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZXdr
X3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihtX3ZpZXcsIG1fZnJhbWUpOworI2VuZGlmCiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmll
ciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL0VXZWJLaXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgK
aW5kZXggZDk3MjQ1NC4uZDhiZGRlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L0VXZWJLaXQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUu
aCIKICNpbmNsdWRlICJld2tfaGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1
ZGUgImV3a19tYWluLmgiCiAjaW5jbHVkZSAiZXdrX3NldHRpbmdzLmgiCiAjaW5jbHVkZSAiZXdr
X3ZpZXcuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNmIwY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfanMuY3BwCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAg
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfanMuaCIKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQor
CisjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKKworI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisj
aW5jbHVkZSAibnBydW50aW1lLmgiCisjaW5jbHVkZSAibnBydW50aW1lX2ltcGwuaCIKKworI2lu
Y2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG8s
IC4uLikgXAorICAgIGlmICghRUlOQV9NQUdJQ19DSEVDSyhvYmosIEVXS19KU19PQkpFQ1RfTUFH
SUMpKSB7IFwKKyAgICAgICBFSU5BX01BR0lDX0ZBSUwob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lD
KTsgXAorICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgXAorICAgIH0KKworc3RydWN0IF9Fd2tf
SlNfQ2xhc3MgeworICAgIGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhOworICAgIEVpbmFf
SGFzaCogbWV0aG9kczsgLy8ga2V5PU5QSWRlbnRpZmllcihuYW1lKSwgdmFsdWU9cG9pbnRlciB0
byBtZXRhLT5tZXRob2RzOworICAgIEVpbmFfSGFzaCogcHJvcGVydGllczsgLy8ga2V5PU5QSWRl
bnRpZmllcihuYW1lKSwgdmFsdWU9cG9pbnRlciB0byBtZXRhLT5wcm9wZXJ0aWVzOworICAgIEV3
a19KU19EZWZhdWx0IGRlZmF1bHRfcHJvcDsKK307CisKK3N0YXRpYyBib29sIF9ld2tfanNfbnB2
YXJpYW50X3RvX3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWFudCog
cmVzdWx0KTsKK3N0YXRpYyBib29sIF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoY29uc3Qg
RXdrX0pTX1ZhcmlhbnQqIGRhdGEsIE5QVmFyaWFudCogcmVzdWx0KTsKK3N0YXRpYyB2b2lkIF9l
d2tfanNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJvcGVydHkgKnByb3ApOworCitzdGF0aWMgYm9v
bCBfZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFt
ZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBfb2JqLCBO
UElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpOworc3RhdGljIGJvb2wgX2V3a19q
c19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0
IE5QVmFyaWFudCogdmFsdWUpOworc3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9yZW1vdmUo
TlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpOworc3RhdGljIGJvb2wgX2V3a19q
c19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIqKiB2
YWx1ZSwgdWludDMyX3QqIGNvdW50KTsKK3N0YXRpYyBib29sIF9ld2tfanNfbWV0aG9kX2hhcyhO
UE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSk7CitzdGF0aWMgYm9vbCBfZXdrX2pz
X21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0
IE5QVmFyaWFudCogYXJncywgdWludDMyX3QgYXJnX2NvdW50LCBOUFZhcmlhbnQqIHJlc3VsdCk7
CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9nZXQoRXdrX0pT
X09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOwor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2Jq
ZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSk7
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfZGVsKEV3a19KU19P
YmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSk7CisKK0V3a19KU19DbGFzcyogX2V3a19qc19j
bGFzc19uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEgKm1ldGEpOwordm9pZCBfZXdrX2pzX2Ns
YXNzX2ZyZWUoRXdrX0pTX0NsYXNzICpjbHMpOworCitzdGF0aWMgTlBDbGFzcyBFV0tfTlBDTEFT
UyA9IHsKKyAgICBOUF9DTEFTU19TVFJVQ1RfVkVSU0lPTiwKKyAgICAvKk5QQWxsb2NhdGVGdW5j
dGlvblB0ciovIDAsCisgICAgLypOUERlYWxsb2NhdGVGdW5jdGlvblB0ciovIDAsCisgICAgLypO
UEludmFsaWRhdGVGdW5jdGlvblB0ciovIDAsCisgICAgLypOUEhhc01ldGhvZEZ1bmN0aW9uUHRy
Ki8gX2V3a19qc19tZXRob2RfaGFzLAorICAgIC8qTlBJbnZva2VGdW5jdGlvblB0ciovIF9ld2tf
anNfbWV0aG9kX2ludm9rZSwKKyAgICAvKk5QSW52b2tlRGVmYXVsdEZ1bmN0aW9uUHRyKi8gMCwK
KyAgICAvKk5QSGFzUHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfaGFzLAor
ICAgIC8qTlBHZXRQcm9wZXJ0eUZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0eV9nZXQsCisg
ICAgLypOUFNldFByb3BlcnR5RnVuY3Rpb25QdHIqLyBfZXdrX2pzX3Byb3BlcnR5X3NldCwKKyAg
ICAvKk5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0ciovIF9ld2tfanNfcHJvcGVydHlfcmVtb3Zl
LAorICAgIC8qTlBFbnVtZXJhdGlvbkZ1bmN0aW9uUHRyKi8gX2V3a19qc19wcm9wZXJ0aWVzX2Vu
dW1lcmF0ZSwKKyAgICAvKk5QQ29uc3RydWN0RnVuY3Rpb25QdHIqLyAwCit9OworCitzdGF0aWMg
RXdrX0pTX09iamVjdCAqX2V3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QgKm5wX29i
aikKK3sKKyAgICB1aW50MzJfdCBpOworICAgIE5QSWRlbnRpZmllciogdmFsdWVzOworICAgIHVp
bnQzMl90IG5wX3Byb3BzX2NvdW50OworICAgIEV3a19KU19DbGFzcyogY2xzOworICAgIEV3a19K
U19PYmplY3QqIG9iajsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKKyAgICBFd2tfSlNfUHJvcGVy
dHkqIHByb3A7CisKKyAgICBpZiAoRUlOQV9NQUdJQ19DSEVDSygoRXdrX0pTX09iamVjdCopbnBf
b2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKSkgLy8gSXQgYWxyZWFkeSBpcyBhIEV3a19KU19PYmpl
Y3QKKyAgICAgICAgcmV0dXJuIChFd2tfSlNfT2JqZWN0KilucF9vYmo7CisKKyAgICBpZiAoIV9O
UE5fRW51bWVyYXRlKDAsIG5wX29iaiwgJnZhbHVlcywgJm5wX3Byb3BzX2NvdW50KSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBjbHMgPSAoRXdrX0pTX0NsYXNzKiltYWxsb2Moc2l6ZW9mKEV3
a19KU19DbGFzcykpOworICAgIGNscy0+bWV0YSA9IDA7CisgICAgRXdrX0pTX0RlZmF1bHQgZGVm
ID0geworICAgICAgICBfZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldCwKKyAgICAgICAgX2V3
a19qc19ucG9iamVjdF9wcm9wZXJ0eV9nZXQsCisgICAgICAgIF9ld2tfanNfbnBvYmplY3RfcHJv
cGVydHlfZGVsCisgICAgfTsKKyAgICBjbHMtPmRlZmF1bHRfcHJvcCA9IGRlZjsKKyAgICBjbHMt
Pm1ldGhvZHMgPSBlaW5hX2hhc2hfcG9pbnRlcl9uZXcoMCk7CisgICAgY2xzLT5wcm9wZXJ0aWVz
ID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KChFaW5hX0ZyZWVfQ2IpX2V3a19qc19wcm9wZXJ0eV9m
cmVlKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnBfcHJvcHNfY291bnQ7IGkrKykgeworICAgICAg
ICBpZiAoX05QTl9IYXNQcm9wZXJ0eSgwLCBucF9vYmosIHZhbHVlc1tpXSkpIHsKKyAgICAgICAg
ICAgIE5QVmFyaWFudCB2YXI7CisgICAgICAgICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3AgPSAo
RXdrX0pTX1Byb3BlcnR5KiljYWxsb2Moc2l6ZW9mKEV3a19KU19Qcm9wZXJ0eSksIDEpOworICAg
ICAgICAgICAgX05QTl9HZXRQcm9wZXJ0eSgwLCBucF9vYmosIHZhbHVlc1tpXSwgJnZhcik7Cisg
ICAgICAgICAgICBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KCYocHJvcC0+dmFsdWUpLCAm
dmFyKTsKKyAgICAgICAgICAgIHByb3AtPm5hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcih2
YWx1ZXNbaV0pOworICAgICAgICAgICAgZWluYV9oYXNoX2FkZChjbHMtPnByb3BlcnRpZXMsIHZh
bHVlc1tpXSwgcHJvcCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZSh2YWx1ZXMpOworCisg
ICAgLy8gQ2FuJ3QgdXNlIGV3a19qc19vYmplY3RfbmV3KGNscykgYmVjYXVzZSBpdCBleHBlY3Rz
IGNscy0+bWV0YSB0byBleGlzdAorICAgIG9iaiA9IChFd2tfSlNfT2JqZWN0KiltYWxsb2Moc2l6
ZW9mKEV3a19KU19PYmplY3QpKTsKKyAgICBFSU5BX01BR0lDX1NFVChvYmosIEVXS19KU19PQkpF
Q1RfTUFHSUMpOworICAgIG9iai0+bmFtZSA9IDA7CisgICAgb2JqLT5jbHMgPSBjbHM7CisgICAg
b2JqLT52aWV3ID0gMDsKKworICAgIEphdmFTY3JpcHRPYmplY3QqIGpzbyA9IChKYXZhU2NyaXB0
T2JqZWN0KilucF9vYmo7CisgICAgaWYgKCFzdHJuY21wKCJBcnJheSIsIGpzby0+aW1wLT5jbGFz
c05hbWUoKS5hc2NpaSgpLmRhdGEoKSwgc3RybGVuKCJBcnJheSIpKSkKKyAgICAgICAgb2JqLT50
eXBlID0gRVdLX0pTX09CSkVDVF9BUlJBWTsKKyAgICBlbHNlIGlmICghc3RybmNtcCgiRnVuY3Rp
b24iLCBqc28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCksIHN0cmxlbigiRnVuY3Rp
b24iKSkpCisgICAgICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfRlVOQ1RJT047CisgICAg
ZWxzZQorICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKKworICAgIGlm
IChlaW5hX2hhc2hfcG9wdWxhdGlvbihjbHMtPnByb3BlcnRpZXMpIDwgMjUpCisgICAgICAgIG9i
ai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KDApOyAvLyBjbGFzcyB3
aWxsIGZyZWUgc3R1ZmYKKyAgICBlbHNlCisgICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFf
aGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldygwKTsKKworICAgIGl0ID0gZWluYV9oYXNoX2l0ZXJh
dG9yX2RhdGFfbmV3KGNscy0+cHJvcGVydGllcyk7CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNI
KGl0LCBwcm9wKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IHByb3AtPm5hbWU7CisgICAg
ICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZSA9ICZwcm9wLT52YWx1ZTsKKyAgICAgICAgZWluYV9o
YXNoX2FkZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOworICAgIH0KKworICAgIGVpbmFf
aXRlcmF0b3JfZnJlZShpdCk7CisKKyAgICBvYmotPmJhc2UgPSAqKEphdmFTY3JpcHRPYmplY3Qq
KW5wX29iajsKKworICAgIHJldHVybiBvYmo7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19q
c19ucG9iamVjdF9wcm9wZXJ0eV9nZXQoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpu
YW1lLCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOworICAgIE5QVmFyaWFudCB2YXI7CisgICAgYm9v
bCBmYWlsID0gX05QTl9HZXRQcm9wZXJ0eSgwLCAoTlBPYmplY3QqKW9iaiwgaWQsICZ2YXIpOwor
ICAgIGlmICghZmFpbCkKKyAgICAgICAgZmFpbCA9IF9ld2tfanNfbnB2YXJpYW50X3RvX3Zhcmlh
bnQodmFsdWUsICZ2YXIpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0aWMgRWluYV9Cb29s
IF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfc2V0KEV3a19KU19PYmplY3QgKm9iaiwgY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKQoreworICAgIE5QSWRlbnRp
ZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICBOUFZhcmlhbnQg
dmFyOworICAgIGJvb2wgZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUs
ICZ2YXIpOworICAgIGlmIChmYWlsKQorICAgICAgICBmYWlsID0gX05QTl9TZXRQcm9wZXJ0eSgw
LCAoTlBPYmplY3QqKW9iaiwgaWQsICZ2YXIpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfanNfbnBvYmplY3RfcHJvcGVydHlfZGVsKEV3a19KU19PYmplY3Qg
Km9iaiwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBOUElkZW50aWZpZXIgaWQgPSBfTlBOX0dl
dFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgcmV0dXJuIF9OUE5fUmVtb3ZlUHJvcGVydHko
MCwgKE5QT2JqZWN0KilvYmosIGlkKTsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc192YXJpYW50
X3RvX25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIGZhbHNlKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVzdWx0LCBmYWxzZSk7CisgICAg
c3dpdGNoIChkYXRhLT50eXBlKSB7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9WT0lEOgorICAg
ICAgICBWT0lEX1RPX05QVkFSSUFOVCgqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFV0tfSlNfVkFSSUFOVF9OVUxMOgorICAgICAgICBOVUxMX1RPX05QVkFSSUFOVCgqcmVzdWx0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9JTlQzMjoKKyAgICAg
ICAgSU5UMzJfVE9fTlBWQVJJQU5UKGRhdGEtPnZhbHVlLmksICpyZXN1bHQpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX0RPVUJMRToKKyAgICAgICAgRE9VQkxFX1RP
X05QVkFSSUFOVChkYXRhLT52YWx1ZS5kLCAqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBFV0tfSlNfVkFSSUFOVF9TVFJJTkc6CisgICAgICAgIFNUUklOR1pfVE9fTlBWQVJJQU5U
KHN0cmR1cChkYXRhLT52YWx1ZS5zKSwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRVdLX0pTX1ZBUklBTlRfQk9PTDoKKyAgICAgICAgQk9PTEVBTl9UT19OUFZBUklBTlQoZGF0
YS0+dmFsdWUuYiwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZB
UklBTlRfT0JKRUNUOgorICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKChOUE9iamVjdCopZGF0
YS0+dmFsdWUubywgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi
b29sIF9ld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNv
bnN0IE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIGludCBzejsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChyZXN1bHQsIGZhbHNlKTsKKyAgICBzd2l0Y2ggKHJlc3VsdC0+dHlwZSkgewor
ICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Wb2lkOgorICAgICAgICBkYXRhLT50eXBlID0gRVdLX0pT
X1ZBUklBTlRfVk9JRDsKKyAgICAgICAgZGF0YS0+dmFsdWUubyA9IDA7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9OdWxsOgorICAgICAgICBkYXRhLT50eXBlID0gRVdL
X0pTX1ZBUklBTlRfTlVMTDsKKyAgICAgICAgZGF0YS0+dmFsdWUubyA9IDA7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9JbnQzMjoKKyAgICAgICAgZGF0YS0+dHlwZSA9
IEVXS19KU19WQVJJQU5UX0lOVDMyOworICAgICAgICBkYXRhLT52YWx1ZS5pID0gTlBWQVJJQU5U
X1RPX0lOVDMyKCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5QVmFyaWFudFR5
cGVfRG91YmxlOgorICAgICAgICBkYXRhLT50eXBlID0gRVdLX0pTX1ZBUklBTlRfRE9VQkxFOwor
ICAgICAgICBkYXRhLT52YWx1ZS5kID0gTlBWQVJJQU5UX1RPX0RPVUJMRSgqcmVzdWx0KTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX1N0cmluZzoKKyAgICAgICAgc3og
PSBOUFZBUklBTlRfVE9fU1RSSU5HKCpyZXN1bHQpLlVURjhMZW5ndGg7CisgICAgICAgIGRhdGEt
PnZhbHVlLnMgPSAoY2hhciopbWFsbG9jKHNpemVvZihjaGFyKSAqIChzeiArIDEpKTsKKyAgICAg
ICAgbWVtY3B5KGRhdGEtPnZhbHVlLnMsIE5QVkFSSUFOVF9UT19TVFJJTkcoKnJlc3VsdCkuVVRG
OENoYXJhY3RlcnMsIHN6KTsKKyAgICAgICAgZGF0YS0+dmFsdWUuc1tzel0gPSAnXDAnOworICAg
ICAgICBkYXRhLT50eXBlID0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIE5QVmFyaWFudFR5cGVfQm9vbDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19K
U19WQVJJQU5UX0JPT0w7CisgICAgICAgIGRhdGEtPnZhbHVlLmIgPSBOUFZBUklBTlRfVE9fQk9P
TEVBTigqcmVzdWx0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlhbnRUeXBlX09i
amVjdDoKKyAgICAgICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX09CSkVDVDsKKyAgICAg
ICAgZGF0YS0+dmFsdWUubyA9IF9ld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5QVkFSSUFOVF9U
T19PQkpFQ1QoKnJlc3VsdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9v
bCBfZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFt
ZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCopbnBfb2JqOwor
ICAgIGJvb2wgZmFpbCA9IGZhbHNlOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwg
ZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAg
ICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAg
cmV0dXJuIGZhaWw7CisgICAgfQorICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKG5hbWUpOworICAgIGlmIChlaW5hX2hhc2hfZmluZChvYmotPnByb3BlcnRpZXMs
IHByb3BfbmFtZSkpIC8vIHNob3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/CisgICAgICAgIGZhaWwg
PSB0cnVlOworICAgIGZyZWUocHJvcF9uYW1lKTsKKworICAgIHJldHVybiBmYWlsOworfQorCitz
dGF0aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCit7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ID0gKEV3a19KU19PYmplY3QqKW5wX29iajsKKyAgICBFd2tfSlNfVmFyaWFudCogdmFsdWU7Cisg
ICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOworICAgIGJvb2wgZmFpbCA9IGZhbHNlOworCisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50
aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMg
bm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhaWw7CisgICAgfQorCisgICAgdmFs
dWUgPSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKTsKKyAg
ICBwcm9wID0gKEV3a19KU19Qcm9wZXJ0eSopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3Bl
cnRpZXMsIG5hbWUpOworICAgIGlmIChwcm9wICYmIHByb3AtPmdldCkgeyAvLyBjbGFzcyBoYXMg
cHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIKKyAgICAgICAgZmFpbCA9IHByb3AtPmdl
dChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgaWYgKCFmYWlsKQorICAgICAgICAg
ICAgZmFpbCA9IF9ld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7Cisg
ICAgfSBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldCkgeyAvLyBkZWZhdWx0IGdl
dHRlciBleGlzdHMKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KG9i
aiwgcHJvcC0+bmFtZSwgdmFsdWUpOworICAgICAgICBpZiAoIWZhaWwpCisgICAgICAgICAgICBm
YWlsID0gX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKKyAgICB9
IGVsc2UgeyAvLyBmYWxsYmFjayB0byBvYmplY3RzIGhhc2ggbWFwCisgICAgICAgIGNoYXIqIHBy
b3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOworICAgICAgICBmcmVlKHZh
bHVlKTsKKyAgICAgICAgdmFsdWUgPSAoRXdrX0pTX1ZhcmlhbnQqKWVpbmFfaGFzaF9maW5kKG9i
ai0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsKKyAgICAgICAgZnJlZShwcm9wX25hbWUpOworICAg
ICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gX2V3a19qc192YXJpYW50X3RvX25w
dmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBmcmVlKHZhbHVlKTsKKyAgICBy
ZXR1cm4gZmFpbDsKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmpl
Y3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBfdmFsdWUp
Cit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsKKyAg
ICBFd2tfSlNfVmFyaWFudCogdmFsdWU7CisgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOworICAg
IGJvb2wgZmFpbCA9IGZhbHNlOworCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFs
c2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgeworICAgICAg
ICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKKyAgICAgICAgcmV0
dXJuIGZhaWw7CisgICAgfQorCisgICAgdmFsdWUgPSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhz
aXplb2YoRXdrX0pTX1ZhcmlhbnQpKTsKKyAgICBfZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50
KHZhbHVlLCBucF92YWx1ZSk7CisgICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlk
ZW50aWZpZXIobmFtZSk7CisgICAgcHJvcCA9IChFd2tfSlNfUHJvcGVydHkqKWVpbmFfaGFzaF9m
aW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpOworICAgIGlmIChwcm9wICYmIHBy
b3AtPnNldCkKKyAgICAgICAgZmFpbCA9IHByb3AtPnNldChvYmosIHByb3AtPm5hbWUsIHZhbHVl
KTsgLy8gY2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgc2V0dGVyCisgICAgZWxz
ZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQpCisgICAgICAgIGZhaWwgPSBvYmotPmNs
cy0+ZGVmYXVsdF9wcm9wLnNldChvYmosIHByb3BfbmFtZSwgdmFsdWUpOyAvLyBkZWZhdWx0IGdl
dHRlciBleGlzdHMKKyAgICBlbHNlIHsgLy8gZmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcAor
ICAgICAgICB2b2lkKiBvbGQgPSBlaW5hX2hhc2hfc2V0KG9iai0+cHJvcGVydGllcywgcHJvcF9u
YW1lLCB2YWx1ZSk7CisgICAgICAgIGZyZWUob2xkKTsKKyAgICAgICAgZmFpbCA9IHRydWU7Cisg
ICAgfQorCisgICAgZnJlZShwcm9wX25hbWUpOworICAgIHJldHVybiBmYWlsOworfQorCitzdGF0
aWMgYm9vbCBfZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCop
bnBfb2JqOworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxz
ZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsK
KyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICgh
X05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVu
dGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0K
KworICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwor
ICAgIHByb3AgPSAoRXdrX0pTX1Byb3BlcnR5KillaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJv
cGVydGllcywgcHJvcF9uYW1lKTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5kZWwpCisgICAgICAg
IGZhaWwgPSBwcm9wLT5kZWwob2JqLCBwcm9wLT5uYW1lKTsgLy8gY2xhc3MgaGFzIHByb3BlcnR5
IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyCisgICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRf
cHJvcC5kZWwpCisgICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbChvYmos
IHByb3BfbmFtZSk7CisgICAgZWxzZQorICAgICAgICBmYWlsID0gZWluYV9oYXNoX2RlbChvYmot
PnByb3BlcnRpZXMsIHByb3BfbmFtZSwgMCk7CisKKyAgICBmcmVlKHByb3BfbmFtZSk7CisgICAg
cmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBib29sIF9ld2tfanNfcHJvcGVydGllc19lbnVtZXJh
dGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUsIHVpbnQzMl90KiBjb3Vu
dCkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSAoRXdrX0pTX09iamVjdCopbnBfb2JqOwor
ICAgIEVpbmFfSXRlcmF0b3IqIGl0OworICAgIGNoYXIqIGtleTsKKyAgICBpbnQgaSA9IDA7CisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAg
RUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgaXQgPSBlaW5hX2hh
c2hfaXRlcmF0b3Jfa2V5X25ldyhvYmotPnByb3BlcnRpZXMpOworCisgICAgKmNvdW50ID0gZWlu
YV9oYXNoX3BvcHVsYXRpb24ob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqdmFsdWUgPSAoTlBJZGVu
dGlmaWVyKiltYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiAqY291bnQpOworICAgIEVJTkFf
SVRFUkFUT1JfRk9SRUFDSChpdCwga2V5KQorICAgICAgICAoKnZhbHVlKVtpKytdID0gX05QTl9H
ZXRTdHJpbmdJZGVudGlmaWVyKGtleSk7CisKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBfZXdrX2pzX21ldGhvZF9oYXMoTlBP
YmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCog
b2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVS
TihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkp
IHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGVpbmFfaGFzaF9maW5kKG9i
ai0+Y2xzLT5tZXRob2RzLCBuYW1lKTsgLy8gUmV0dXJucyBwb2ludGVyIGlmIGZvdW5kKHRydWUp
LCAwKGZhbHNlKSBvdGhlcndpc2UKK30KKworc3RhdGljIGJvb2wgX2V3a19qc19tZXRob2RfaW52
b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQq
IG5wX2FyZ3MsIHVpbnQzMl90IG5wX2FyZ19jb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCit7Cisg
ICAgRXdrX0pTX09iamVjdCogb2JqID0gKEV3a19KU19PYmplY3QqKW5wX29iajsKKyAgICBFd2tf
SlNfTWV0aG9kKiBtZXRob2Q7CisgICAgRXdrX0pTX1ZhcmlhbnQqIGFyZ3M7CisgICAgRXdrX0pT
X1ZhcmlhbnQqIHJldF92YWw7CisgICAgdWludDMyX3QgaTsKKworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09S
X1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmco
bmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQu
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtZXRob2QgPSAoRXdrX0pT
X01ldGhvZCopZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOworICAgIGlm
ICghbWV0aG9kKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhcmdzID0gKEV3a19KU19W
YXJpYW50KiltYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSAqIG5wX2FyZ19jb3VudCk7Cisg
ICAgZm9yIChpID0gMDsgaSA8IG5wX2FyZ19jb3VudDsgaSsrKQorICAgICAgICBfZXdrX2pzX25w
dmFyaWFudF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBfYXJnc1tpXSk7CisgICAgcmV0X3ZhbCA9
IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJncywgbnBfYXJnX2NvdW50KTsKKyAgICBfZXdrX2pzX3Zh
cmlhbnRfdG9fbnB2YXJpYW50KHJldF92YWwsIHJlc3VsdCk7CisKKyAgICBld2tfanNfdmFyaWFu
dF9mcmVlKHJldF92YWwpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQ3JlYXRl
IGEgRXdrX0pTX0NsYXNzIHRvIGJlIHVzZWQgaW4gQGEgZXdrX2pzX29iamVjdF9uZXcuCisgKgor
ICogQHBhcmFtIG1ldGEgQGEgRXdrX0pTX0NsYXNzX01ldGEgdGhhdCBkZXNjcmliZXMgdGhlIGNs
YXNzIHRvIGJlIGNyZWF0ZWQuCisgKgorICogQHJldHVybiBUaGUgRXdrX0pTX0NsYXNzIGNyZWF0
ZWQuCisgKi8KK0V3a19KU19DbGFzcyogX2V3a19qc19jbGFzc19uZXcoY29uc3QgRXdrX0pTX0Ns
YXNzX01ldGEqIG1ldGEpCit7CisgICAgRXdrX0pTX0NsYXNzKiBjbHM7CisgICAgaW50IGk7CisK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWV0YSwgMCk7CisKKyAgICBjbHMg
PSAoRXdrX0pTX0NsYXNzKiltYWxsb2Moc2l6ZW9mKEV3a19KU19DbGFzcykpOworICAgIGNscy0+
bWV0YSA9IG1ldGE7CisgICAgY2xzLT5kZWZhdWx0X3Byb3AgPSBtZXRhLT5kZWZhdWx0X3Byb3A7
CisKKyAgICAvLyBkb24ndCBmcmVlIG1ldGhvZHMgc2luY2UgdGhleSBwb2ludCB0byBtZXRhIGNs
YXNzIG1ldGhvZHMod2lsbCBiZSBmcmVlZCB3aGVuIG1ldGEgY2xhc3MgaXMgZnJlZWQpCisgICAg
Y2xzLT5tZXRob2RzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGZvciAoaSA9IDA7
IG1ldGEtPm1ldGhvZHMgJiYgbWV0YS0+bWV0aG9kc1tpXS5uYW1lOyBpKyspIHsKKyAgICAgICAg
TlBJZGVudGlmaWVyIGlkID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG1ldGEtPm1ldGhvZHNb
aV0ubmFtZSk7CisgICAgICAgIGVpbmFfaGFzaF9hZGQoY2xzLT5tZXRob2RzLCBpZCwgJm1ldGEt
Pm1ldGhvZHNbaV0pOworICAgIH0KKworICAgIC8vIGRvbid0IGZyZWUgcHJvcGVydGllcyBzaW5j
ZSB0aGV5IHBvaW50IHRvIG1ldGEgY2xhc3MgcHJvcGVydGllcyh3aWxsIGJlIGZyZWVkIHdoZW4g
bWV0YSBjbGFzcyBpcyBmcmVlZCkKKyAgICBjbHMtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfcG9p
bnRlcl9uZXcoMCk7CisgICAgZm9yIChpID0gMDsgbWV0YS0+cHJvcGVydGllcyAmJiBtZXRhLT5w
cm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBOUElkZW50aWZpZXIgaWQgPSBfTlBO
X0dldFN0cmluZ0lkZW50aWZpZXIobWV0YS0+cHJvcGVydGllc1tpXS5uYW1lKTsKKyAgICAgICAg
ZWluYV9oYXNoX2FkZChjbHMtPnByb3BlcnRpZXMsIGlkLCAmbWV0YS0+cHJvcGVydGllc1tpXSk7
CisgICAgfQorCisgICAgcmV0dXJuIGNsczsKK30KKworLyoqCisgKiBSZWxlYXNlIHJlc291cmNl
cyBhbGxvY2F0ZWQgYnkgQGEgY2xzLgorICoKKyAqIEBwYXJhbSBjbHMgQGEgRXdrX0pTX0NsYXNz
IHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIF9ld2tfanNfY2xhc3NfZnJlZShFd2tfSlNfQ2xh
c3MqIGNscykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjbHMpOworICAgIGVp
bmFfaGFzaF9mcmVlKGNscy0+bWV0aG9kcyk7CisgICAgZWluYV9oYXNoX2ZyZWUoY2xzLT5wcm9w
ZXJ0aWVzKTsKKyAgICBmcmVlKGNscyk7Cit9CisKKy8qKgorICogQ3JlYXRlIGEgRXdrX0pTX09i
amVjdCB0byBiZSB1c2VkIGluIEBhIGV3a192aWV3X2pzX29iamVjdF9hZGQuIFRoZSBNZXRhIGNs
YXNzJ3MKKyAqIG1ldGhvZHMgYW5kIHByb3BlcnRpZXMgYXJlIG5vdCBtb2RpZmllZCBidXQgcmVm
ZXJlbmNlcyB0byBpdCBhcmUga2VwdCBhcyBsb25nCisgKiBhcyB0aGUgb2JqZWN0IGNyZWF0ZWQg
ZnJvbSBpdCBsaXZlcy4gQWxsIHByb3BlcnRpZXMgY3JlYXRlZCBoZXJlCisgKiB3aWxsIGJlIGFk
ZGVkIHRvIHRoZSBvYmplY3QgaGFzaCBvZiBwcm9wZXJ0aWVzLiBQcm9wZXJ0aWVzIHVzaW5nIGRl
ZmF1bHRfcHJvcCdzCisgKiBnZXQvc2V0L2RlbCBtZXRob2RzIHNob3VsZCBhbHNvIGJlIGFkZGVk
IHRvIHRoZSBvYmplY3RzIGhhc2goc2VlOgorICogQGEgZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVz
X2dldCkuIE1ldGhvZHMgbXVzdCBmcmVlIHRoZSBhcmd1bWVudHMgdGhleSByZWNlaXZlKHNlZToK
KyAqIEBhIGV3a19qc192YXJpYW5nX2FycmF5X2ZyZWUpLgorICoKKyAqCisgKiBAcGFyYW0gY2xz
IEBhIEV3a19KU19DbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgb2JqZWN0IHRvIGJlIGNyZWF0ZWQu
CisgKgorICogQHJldHVybiBUaGUgRXdrX0pTX09iamVjdCBjcmVhdGVkLgorICovCitFd2tfSlNf
T2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YV9j
bHMpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIGludCBpOworCisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGFfY2xzLCAwKTsKKworICAgIG9iaiA9IChFd2tf
SlNfT2JqZWN0KiltYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKTsKKyAgICBFSU5BX01BR0lD
X1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iai0+Y2xzID0gX2V3a19qc19j
bGFzc19uZXcobWV0YV9jbHMpOworICAgIG9iai0+dmlldyA9IDA7CisgICAgb2JqLT5uYW1lID0g
MDsKKyAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKKworICAgIGlmIChlaW5h
X2hhc2hfcG9wdWxhdGlvbihvYmotPmNscy0+cHJvcGVydGllcykgPCAyNSkKKyAgICAgICAgb2Jq
LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoKEVpbmFfRnJlZV9DYill
d2tfanNfdmFyaWFudF9mcmVlKTsKKyAgICBlbHNlCisgICAgICAgIG9iai0+cHJvcGVydGllcyA9
IGVpbmFfaGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldygoRWluYV9GcmVlX0NiKWV3a19qc192YXJp
YW50X2ZyZWUpOworICAgIGZvciAoaSA9IDA7IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzICYm
IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBFd2tf
SlNfUHJvcGVydHkgcHJvcCA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldOworICAgICAg
ICBjb25zdCBjaGFyKiBrZXkgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOwor
ICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAoRXdrX0pTX1ZhcmlhbnQqKW1hbGxvYyhz
aXplb2YoRXdrX0pTX1ZhcmlhbnQpKTsKKyAgICAgICAgaWYgKHByb3AuZ2V0KQorICAgICAgICAg
ICAgcHJvcC5nZXQob2JqLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICB2YWx1ZS0+dHlwZSA9IHByb3AudmFsdWUudHlwZTsKKyAgICAgICAgICAgIHN3aXRjaCAodmFs
dWUtPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfVk9JRDoKKyAgICAg
ICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfTlVMTDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+
dmFsdWUubyA9IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVX
S19KU19WQVJJQU5UX1NUUklORzoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUucyA9IHN0
cmR1cChwcm9wLnZhbHVlLnZhbHVlLnMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9CT09MOgorICAgICAgICAgICAgICAgIHZhbHVlLT52
YWx1ZS5iID0gcHJvcC52YWx1ZS52YWx1ZS5iOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9JTlQzMjoKKyAgICAgICAgICAgICAgICB2YWx1
ZS0+dmFsdWUuaSA9IHByb3AudmFsdWUudmFsdWUuaTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfRE9VQkxFOgorICAgICAgICAgICAgICAg
IHZhbHVlLT52YWx1ZS5kID0gcHJvcC52YWx1ZS52YWx1ZS5kOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q6CisgICAgICAgICAg
ICAgICAgdmFsdWUtPnZhbHVlLm8gPSBwcm9wLnZhbHVlLnZhbHVlLm87CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWluYV9oYXNoX2Fk
ZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOworICAgIH0KKworICAgIG9iai0+YmFzZS5v
YmplY3QucmVmZXJlbmNlQ291bnQgPSAxOworICAgIG9iai0+YmFzZS5vYmplY3QuX2NsYXNzID0g
JkVXS19OUENMQVNTOworICAgIHJldHVybiBvYmo7Cit9CisKKy8qKgorICogUmVsZWFzZSByZXNv
dXJjZXMgYWxsb2NhdGVkIGJ5IEBhIG9iai4KKyAqCisgKiBAcGFyYW0gb2JqIEBhIEV3a19KU19P
YmplY3QgdG8gYmUgcmVsZWFzZWQuCisgKi8KK3ZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19K
U19PYmplY3QqIG9iaikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvYmopOwor
ICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaik7CisgICAgRWluYV9Cb29sIHNjcmlw
dF9vYmogPSAhb2JqLT5jbHMtPm1ldGE7CisKKyAgICBlaW5hX2hhc2hfZnJlZShvYmotPnByb3Bl
cnRpZXMpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKG9iai0+bmFtZSk7CisKKyAgICBfZXdr
X2pzX2NsYXNzX2ZyZWUoKEV3a19KU19DbGFzcyopb2JqLT5jbHMpOworCisgICAgRUlOQV9NQUdJ
Q19TRVQob2JqLCBFSU5BX01BR0lDX05PTkUpOworCisgICAgaWYgKHNjcmlwdF9vYmopCisgICAg
ICAgIGZyZWUob2JqKTsKK30KKworLyoqCisgKiBHZXRzIEVpbmFfSGFzaCB3aXRoIG9iamVjdCdz
IHByb3BlcnRpZXMuCisgKgorICogQHBhcmFtIG9iaiBPYmplY3Qgd2hvc2UgcHJvcGVydGllcyBh
cmUgd2FudGVkLgorICoKKyAqIEByZXR1cm4gb2JqZWN0J3MgcHJvcGVydGllcy4KKyAqLworRWlu
YV9IYXNoKiBld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3Qq
IG9iaikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKKyAg
ICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIDApOworICAgIHJldHVybiBvYmotPnBy
b3BlcnRpZXM7Cit9CisKKy8qKgorICogR2V0cyBuYW1lIG9mIHRoZSBvYmplY3QuCisgKgorICog
QHBhcmFtIG9iaiBPYmplY3Qgd2hvc2UgbmFtZSBpcyB3YW50ZWQuCisgKgorICogQHJldHVybiBu
YW1lIG9mIG9iamVjdC4KKyAqLworY29uc3QgY2hhciogZXdrX2pzX29iamVjdF9uYW1lX2dldChj
b25zdCBFd2tfSlNfT2JqZWN0KiBvYmopCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG9iaiwgMCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsK
KyAgICByZXR1cm4gb2JqLT5uYW1lOworfQorCisvKioKKyAqIENhbGxzIHRoZSBmdW5jdGlvbiB0
aGlzIG9iamVjdCByZXByZXNlbnRzLgorICoKKyAqIEBwYXJhbSBvYmogT2JqZWN0IHRoYXQgcmVw
cmVzZW50cyBmdW5jdGlvbi4KKyAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBiZSBwYXNzZWQg
dG8gZnVuY3Rpb24uCisgKiBAcGFyYW0gYXJnX2NvdW50IE51bWJlciBvZiBhcmd1bWVudHMuCisg
KiBAcGFyYW0gcmVzdWx0IFJldHVybiB2YWx1ZSBvZiB0aGUgaW52b2tlZCBmdW5jdGlvbi4KKyAq
CisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBmdW5jdGlvbiB3YXMgZXhlY3V0ZWQsIEBjIEVJ
TkFfRkFMU0UgaWYgZnVuY3Rpb24gd2FzIG5vdCBleGVjdXRlZC4KKyAqLworRWluYV9Cb29sIGV3
a19qc19vYmplY3RfaW52b2tlKEV3a19KU19PYmplY3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFy
Z3MsIGludCBhcmdfY291bnQsIEV3a19KU19WYXJpYW50KiByZXN1bHQpCit7CisgICAgTlBWYXJp
YW50KiBucF9hcmdzOworICAgIE5QVmFyaWFudCBucF9yZXN1bHQ7CisgICAgYm9vbCBmYWlsID0g
RUlOQV9GQUxTRTsKKyAgICBpbnQgaTsKKworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJO
KG9iaiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGV3a19qc19vYmplY3RfdHlwZV9nZXQob2JqKSAh
PSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OKQorICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAg
ICBpZiAoYXJnX2NvdW50KQorICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
YXJncywgRUlOQV9GQUxTRSk7CisKKyAgICBucF9hcmdzID0gKE5QVmFyaWFudCopbWFsbG9jKHNp
emVvZihOUFZhcmlhbnQpICogYXJnX2NvdW50KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXJnX2Nv
dW50OyBpKyspCisgICAgICAgIGlmICghX2V3a19qc192YXJpYW50X3RvX25wdmFyaWFudCgmYXJn
c1tpXSwgJm5wX2FyZ3NbaV0pKQorICAgICAgICAgICAgZ290byBlbmQ7CisKKyAgICBpZiAoIShm
YWlsID0gX05QTl9JbnZva2VEZWZhdWx0KDAsIChOUE9iamVjdCopb2JqLCBucF9hcmdzLCBhcmdf
Y291bnQsICZucF9yZXN1bHQpKSkKKyAgICAgICAgZ290byBlbmQ7CisgICAgaWYgKHJlc3VsdCkK
KyAgICAgICAgZmFpbCA9IF9ld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQocmVzdWx0LCAmbnBf
cmVzdWx0KTsKKworZW5kOgorICAgIGZyZWUobnBfYXJncyk7CisgICAgcmV0dXJuIGZhaWw7Cit9
CisKKy8qKgorICogUmV0dXJucyB0aGUgdHlwZSB0aGlzIG9iamVjdCByZXByZXNlbnRzLgorICoK
KyAqIEBwYXJhbSBvYmogT2JqZWN0CisgKgorICogQHJldHVybiBAYyBFV0tfSlNfT0JKRUNUIGlm
IGl0IGlzIGFuIG9iamVjdCwgQGMgRVdLX0pTX0FSUkFZIGlmIGl0IGlzIGFuIGFycmF5IGFuZAor
ICogQGMgRVdLX0pTX0ZVTkNUSU9OIGlmIGl0IGlzIGEgZnVuY3Rpb24uCisgKi8KK0V3a19KU19P
YmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QgKm9iaikKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCBFV0tfSlNfT0JKRUNUX09C
SkVDVCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBFV0tfSlNfT0JKRUNU
X09CSkVDVCk7CisKKyAgICByZXR1cm4gb2JqLT50eXBlOworfQorCisvKioKKyAqIFJldHVybnMg
dGhlIHR5cGUgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVj
dAorICoKKyAqIEByZXR1cm4gQGMgRVdLX0pTX09CSkVDVCBpZiBpdCBpcyBhbiBvYmplY3QsIEBj
IEVXS19KU19BUlJBWSBpZiBpdCBpcyBhbiBhcnJheSBhbmQKKyAqIEBjIEVXS19KU19GVU5DVElP
TiBpZiBpdCBpcyBhIGZ1bmN0aW9uLgorICovCit2b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQo
RXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihvYmopOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVU
VVJOKG9iaik7CisKKyAgICBvYmotPnR5cGUgPSB0eXBlOworfQorCisvKioKKyAqIFJlbGVhc2Ug
cmVzb3VyY2VzIGFsbG9jYXRlZCBieSBAYSB2YXIuCisgKgorICogQHBhcmFtIHZhciBAYSBFd2tf
SlNfVmFyaWFudCB0byBiZSByZWxlYXNlCisgKi8KK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShF
d2tfSlNfVmFyaWFudCogdmFyKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHZh
cik7CisgICAgaWYgKHZhci0+dHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisgICAgICAg
IGZyZWUodmFyLT52YWx1ZS5zKTsKKyAgICBlbHNlIGlmICh2YXItPnR5cGUgPT0gRVdLX0pTX1ZB
UklBTlRfT0JKRUNUKQorICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUodmFyLT52YWx1ZS5vKTsK
KyAgICBmcmVlKHZhcik7Cit9CisKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tf
SlNfVmFyaWFudCAqdmFyLCBpbnQgY291bnQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4odmFyKTsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykg
eworICAgICAgICBpZiAodmFyW2ldLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAg
ICAgICAgICAgZnJlZSh2YXJbaV0udmFsdWUucyk7CisgICAgICAgIGVsc2UgaWYgKHZhcltpXS50
eXBlID09IEVXS19KU19WQVJJQU5UX09CSkVDVCkKKyAgICAgICAgICAgIGV3a19qc19vYmplY3Rf
ZnJlZSh2YXJbaV0udmFsdWUubyk7CisgICAgfQorICAgIGZyZWUodmFyKTsKK30KKworc3RhdGlj
IHZvaWQgX2V3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19KU19Qcm9wZXJ0eSAqcHJvcCkKK3sKKyAg
ICBmcmVlKCh2b2lkKilwcm9wLT5uYW1lKTsKKyAgICBpZiAocHJvcC0+dmFsdWUudHlwZSA9PSBF
V0tfSlNfVkFSSUFOVF9TVFJJTkcpCisgICAgICAgIGZyZWUocHJvcC0+dmFsdWUudmFsdWUucyk7
CisgICAgZWxzZSBpZiAocHJvcC0+dmFsdWUudHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Qp
CisgICAgICAgIGV3a19qc19vYmplY3RfZnJlZShwcm9wLT52YWx1ZS52YWx1ZS5vKTsKKyAgICBm
cmVlKHByb3ApOworfQorCisjZWxzZQorCitFaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVy
dGllc19nZXQoY29uc3QgRXdrX0pTX09iamVjdCAqb2JqKQoreworICAgIHJldHVybiAwOworfQor
Citjb25zdCBjaGFyICpld2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3Qg
Km9iaikKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3
a19KU19WYXJpYW50ICp2YXIpCit7Cit9CisKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJl
ZShFd2tfSlNfVmFyaWFudCAqdmFyLCBpbnQgY291bnQpCit7Cit9CisKK0V3a19KU19PYmplY3Qq
IGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhICptZXRhX2NscykKK3sK
KyAgICByZXR1cm4gMDsKK30KKwordm9pZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09iamVj
dCAqb2JqKQoreworfQorCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09i
amVjdCAqb2JqLCBFd2tfSlNfVmFyaWFudCAqYXJncywgaW50IGFyZ19jb3VudCwgRXdrX0pTX1Zh
cmlhbnQgKnJlc3VsdCkKK3sKKyAgICByZXR1cm4gRUlOQV9GQUxTRTsKK30KKworRXdrX0pTX09i
amVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVjdCAqb2JqKQorewor
ICAgIHJldHVybiBFV0tfSlNfT0JKRUNUX0lOVkFMSUQ7Cit9CisKK3ZvaWQgZXdrX2pzX29iamVj
dF90eXBlX3NldChFd2tfSlNfT2JqZWN0ICpvYmosIEV3a19KU19PYmplY3RfVHlwZSB0eXBlKQor
eworfQorCisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2pzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjOTljYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaApAQCAtMCwwICsx
LDExMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5
c3RlbXMKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisqLworCisjaWZuZGVmIGV3a19qc19oCisjZGVmaW5lIGV3a19qc19oCisKKyNpbmNsdWRl
IDxFaW5hLmg+CisjaW5jbHVkZSA8RXZhcy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKyNkZWZpbmUgRVdLX0pTX0NMQVNTX01FVEFfVkVSU0lPTiAwCisK
K3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfT2JqZWN0IEV3a19KU19PYmplY3Q7Cit0eXBlZGVmIHN0
cnVjdCBfRXdrX0pTX0NsYXNzX01ldGEgRXdrX0pTX0NsYXNzX01ldGE7Cit0eXBlZGVmIHN0cnVj
dCBfRXdrX0pTX1ZhcmlhbnQgRXdrX0pTX1ZhcmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pT
X01ldGhvZCBFd2tfSlNfTWV0aG9kOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSBF
d2tfSlNfUHJvcGVydHk7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX0RlZmF1bHQgRXdrX0pTX0Rl
ZmF1bHQ7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19TZXRfQ2IpKEV3a19KU19PYmplY3Qg
Km9iaiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3R5
cGVkZWYgRWluYV9Cb29sICgqRXdrX0pTX0dldF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBjb25z
dCBjaGFyICpuYW1lLCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOwordHlwZWRlZiBFaW5hX0Jvb2wg
KCpFd2tfSlNfRGVsX0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOwor
dHlwZWRlZiBFd2tfSlNfVmFyaWFudCogKCpFd2tfSlNfSW52b2tlX0NiKShFd2tfSlNfT2JqZWN0
ICpvYmosIEV3a19KU19WYXJpYW50ICphcmdzLCBpbnQgYXJnQ291bnQpOworCit0eXBlZGVmIGVu
dW0geworICAgIEVXS19KU19WQVJJQU5UX1ZPSUQsCisgICAgRVdLX0pTX1ZBUklBTlRfTlVMTCwK
KyAgICBFV0tfSlNfVkFSSUFOVF9CT09MLAorICAgIEVXS19KU19WQVJJQU5UX0lOVDMyLAorICAg
IEVXS19KU19WQVJJQU5UX0RPVUJMRSwKKyAgICBFV0tfSlNfVkFSSUFOVF9TVFJJTkcsCisgICAg
RVdLX0pTX1ZBUklBTlRfT0JKRUNUCit9IEV3a19KU19WYXJpYW50X1R5cGU7CisKK3R5cGVkZWYg
ZW51bSB7CisgICAgRVdLX0pTX09CSkVDVF9PQkpFQ1QsCisgICAgRVdLX0pTX09CSkVDVF9BUlJB
WSwKKyAgICBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OLAorICAgIEVXS19KU19PQkpFQ1RfSU5WQUxJ
RAorfSBFd2tfSlNfT2JqZWN0X1R5cGU7CisKK3N0cnVjdCBfRXdrX0pTX1ZhcmlhbnQgeworICAg
IEV3a19KU19WYXJpYW50X1R5cGUgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIEVpbmFfQm9v
bCBiOworICAgICAgICBpbnQgaTsKKyAgICAgICAgZG91YmxlIGQ7CisgICAgICAgIGNoYXIgKnM7
CisgICAgICAgIEV3a19KU19PYmplY3QgKm87CisgICAgfSB2YWx1ZTsKK307CisKK3N0cnVjdCBf
RXdrX0pTX01ldGhvZCB7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBFd2tfSlNfSW52b2tl
X0NiIGludm9rZTsKK307CisKK3N0cnVjdCBfRXdrX0pTX1Byb3BlcnR5IHsKKyAgICBjb25zdCBj
aGFyICpuYW1lOworICAgIEV3a19KU19TZXRfQ2Igc2V0OworICAgIEV3a19KU19HZXRfQ2IgZ2V0
OworICAgIEV3a19KU19EZWxfQ2IgZGVsOworICAgIEV3a19KU19WYXJpYW50IHZhbHVlOworfTsK
Kworc3RydWN0IF9Fd2tfSlNfRGVmYXVsdCB7CisgICAgRXdrX0pTX1NldF9DYiBzZXQ7CisgICAg
RXdrX0pTX0dldF9DYiBnZXQ7CisgICAgRXdrX0pTX0RlbF9DYiBkZWw7Cit9OworCitzdHJ1Y3Qg
X0V3a19KU19DbGFzc19NZXRhIHsKKyAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsgLy8gZGVmaW5l
CisgICAgY29uc3QgRXdrX0pTX01ldGhvZCAqbWV0aG9kczsgLy8gbnVsbCB0ZXJtaW5hdGVkIGFy
cmF5CisgICAgY29uc3QgRXdrX0pTX1Byb3BlcnR5ICpwcm9wZXJ0aWVzOyAvLyBudWxsIHRlcm1p
bmF0ZWQgYXJyYXkKKyAgICBFd2tfSlNfRGVmYXVsdCBkZWZhdWx0X3Byb3A7Cit9OworCitFQVBJ
IEVpbmFfSGFzaCAqZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2Jq
ZWN0ICpvYmopOworRUFQSSBjb25zdCBjaGFyICpld2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0
IEV3a19KU19PYmplY3QgKm9iaik7CisKK0VBUEkgdm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3
a19KU19WYXJpYW50ICp2YXIpOworRUFQSSB2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUo
RXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50IGNvdW50KTsKK0VBUEkgRXdrX0pTX09iamVjdCAqZXdr
X2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEgKm1ldGFfY2xzKTsKK0VBUEkg
dm9pZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09iamVjdCAqb2JqKTsKK0VBUEkgRWluYV9C
b29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pTX1Zhcmlh
bnQgKmFyZ3MsIGludCBhcmdfY291bnQsIEV3a19KU19WYXJpYW50ICpyZXN1bHQpOworRUFQSSBF
d2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0ICpv
YmopOworRUFQSSB2b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCAqb2Jq
LCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2Vu
ZGlmCisKKyNlbmRpZiAvLyBld2tfanNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaApp
bmRleCAxMWYwZDYyLi44MmU1MjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaApA
QCAtMjksOSArMjksMTEgQEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCiAjaW5j
bHVkZSAiRVdlYktpdC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTlBfanNvYmpl
Y3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJXaWRnZXQuaCIKKyNpbmNsdWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfbG9nZ2luZy5o
IgogI2luY2x1ZGUgImV3a191dGlsLmgiCiAKQEAgLTQ2LDYgKzQ4LDIxIEBAIGV4dGVybiAiQyIg
ewogLy8gSWYgZGVmaW5lZCwgZXdrIHdpbGwgZG8gdHlwZSBjaGVja2luZyB0byBlbnN1cmUgb2Jq
ZWN0cyBhcmUgb2YgY29ycmVjdCB0eXBlCiAjZGVmaW5lIEVXS19UWVBFX0NIRUNLIDEKIAorI2lm
IEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorI2RlZmluZSBFV0tfSlNfT0JKRUNUX01BR0lD
IDB4Njk2OTY5CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNfQ2xhc3MgRXdrX0pTX0NsYXNzOwor
c3RydWN0IF9Fd2tfSlNfT2JqZWN0IHsKKyAgICBKYXZhU2NyaXB0T2JqZWN0IGJhc2U7CisgICAg
Y29uc3QgY2hhciAqbmFtZTsKKyAgICBjb25zdCBFd2tfSlNfQ2xhc3MgKmNsczsKKyAgICBFaW5h
X0hhc2ggKnByb3BlcnRpZXM7IC8vIGtleT1uYW1lLCB2YWx1ZT1jdXJyZW50IHZhbHVlIG9mIHBy
b3BlcnR5CisgICAgRXZhc19PYmplY3QgKnZpZXc7IC8vIGV3a192aWV3OiBjaGVjayBpZiB0aGlz
IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKKyAgICBF
d2tfSlNfT2JqZWN0X1R5cGUgdHlwZTsKKyAgICBFSU5BX01BR0lDOworfTsKKyNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKwogLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBQb3B1cE1lbnVDbGllbnQ7CkBAIC0xMTEsNiArMTI4
LDEwIEBAIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19zZXQoRXZhc19PYmplY3Qg
Km8sIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJnCiAKIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRf
cmVxdWVzdChFdmFzX09iamVjdCAqbywgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CiAKKyNpZiBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK3ZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVj
dF9jbGVhcihFdmFzX09iamVjdCAqbywgRXZhc19PYmplY3QgKmZyYW1lKTsKKyNlbmRpZgorCiBp
bnQgZXdrX3V0aWxfZHBpX2dldCh2b2lkKTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCBiZGVhODRkLi5jNjk2YTlhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlICJld2tf
dmlldy5oIgogCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0SW1wbC5oIgorI2luY2x1ZGUgIkJy
aWRnZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEVmbC5o
IgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgpAQCAtNDAsOSArNDEsMTMgQEAK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRFZmwuaCIK
ICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCisjaW5jbHVk
ZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlICJKU0xvY2suaCIKICNpbmNsdWRlICJQbGF0Zm9y
bU1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJQ
cm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJjX2luc3RhbmNlLmgiCiAjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKIAogI2luY2x1ZGUgPEVjb3JlLmg+CkBAIC0yODYyLDcgKzI4NjcsNyBAQCBj
b25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2ZvbnRfc2Fuc19zZXJpZl9nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmOwogfQotICAKKwog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9zYW5zX3NlcmlmX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogZmFtaWx5KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOwpAQCAtNDIyNiw2ICs0MjMxLDE3IEBAIHZvaWQgZXdrX3Zp
ZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogbywgRXdrX0Rvd25sb2FkKiBkb3dubG9h
ZCkKIAogLyoqCiAgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydHMgdGhlIEpTIHdpbmRvdyBvYmplY3Qg
d2FzIGNsZWFyZWQuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqLwordm9pZCBld2tfdmlld19q
c193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqZnJhbWUp
Cit7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAianMsd2luZG93b2Jq
ZWN0LGNsZWFyIiwgZnJhbWUpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0
aGUgdmlld3BvcnQgaGFzIGNoYW5nZWQuCiAgKgogICogQHBhcmFtIGFyZ3VtZW50cyB2aWV3cG9y
dCBhcmd1bWVudC4KQEAgLTQyNzksNyArNDI5NSw3IEBAIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRf
YXR0cmlidXRlc19nZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0KiB3LCBmbG9hdCogaCwgZmxvYXQq
CiAgKiBAcGFyYW0gbyB2aWV3LgogICogQHBhcmFtIG1pbl9zY2FsZSBtaW5pbXVtIHZhbHVlIG9m
IHpvb20gcmFuZ2UuCiAgKiBAcGFyYW0gbWF4X3NjYWxlIG1heGltdW0gdmFsdWUgb2Ygem9vbSBy
YW5nZS4KLSAqIAorICoKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHpvb20gcmFuZ2UgaXMg
Y2hhbmdlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3Qgb3IgZmFpbHVyZS4KICAqLwogRWluYV9Cb29s
IGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCBtaW5fc2NhbGUs
IGZsb2F0IG1heF9zY2FsZSkKQEAgLTQ0MzEsNiArNDQ0Nyw1MSBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8sIEV3a19GcmFtZV9S
ZXNvdXJjZQogICAgIHJldHVybiBzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihz
ZCwgcmVxdWVzdCk7CiB9CiAKKworLyoqCisgKiBDcmVhdGVzIGEgSlMgb2JqZWN0IG5hbWVkIEBh
IG9ial9uYW1lIGFzIHByb3BlcnR5IG9mIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIHNob3VsZCBi
ZSBjYWxsZWQgb24gYSBjYWxsYmFjayBjb25uZWN0ZWR0byB0aGUKKyAqIGpzLHdpbmRvd29iamVj
dCxjbGVhciBzaWduYWwuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBvYmogb2Jq
ZWN0IHRoYXQgd2lsbCBiZSBhZGRlZChzZWU6IEBhIGV3a19qc19vYmplY3RfbmV3KS4KKyAqIEBw
YXJhbSBvYmpfbmFtZSBuYW1lIG9mIHRoZSBvYmplY3QuCisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgaWYgb2JqZWN0IHdhcyBhZGRlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCisgKi8KK0Vp
bmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0ICpvLCBFd2tfSlNfT2Jq
ZWN0ICpvYmosIGNvbnN0IGNoYXIgKm9ial9uYW1lKQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQorICAgIGlmIChvYmotPnZpZXcpIC8vIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVu
IGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKKyAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Cisg
ICAgb2JqLT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqX25hbWUpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisKKyAgICBKU0M6OkpTTG9j
ayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBXZWJDb3JlOjpKU0RPTVdp
bmRvdyAqd2luZG93ID0gdG9KU0RPTVdpbmRvdyhwcml2LT5tYWluX2ZyYW1lLCBXZWJDb3JlOjpt
YWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCAq
cm9vdDsKKyAgICByb290ID0gcHJpdi0+bWFpbl9mcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290
T2JqZWN0KCk7CisKKyAgICBpZiAoIXdpbmRvdykgeworICAgICAgICBFUlIoIldhcm5pbmc6IGNv
dWxkbid0IGdldCB3aW5kb3cgb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwor
ICAgIH0KKworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVjKCk7
CisKKyAgICBvYmotPnZpZXcgPSBvOworICAgIEpTQzo6SlNPYmplY3QgKnJ1bnRpbWVPYmplY3Qg
PSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2Jq
ZWN0KilvYmosIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIEpTQzo6SWRl
bnRpZmllciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmpfbmFtZSk7CisKKyAgICBKU0M6
OlB1dFByb3BlcnR5U2xvdCBzbG90OworICAgIHdpbmRvdy0+cHV0KGV4ZWMsIGlkLCBydW50aW1l
T2JqZWN0LCBzbG90KTsKKyAgICByZXR1cm4gRUlOQV9UUlVFOworI2Vsc2UKKyAgICByZXR1cm4g
RUlOQV9GQUxTRTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKK30KKwor
CiAvKioKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IHRoZSBjb250ZW50cyBoYXZlIHJl
c2l6ZWQuIFRoZSBld2tfdmlldyBjYWxscyBjb250ZW50c19yZXNpemUsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5oCmluZGV4IDAzNjBmZWUuLjQ3MTJlOWY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuaApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVk
ZSAiZXdrX2hpc3RvcnkuaCIKKyNpbmNsdWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfd2lu
ZG93X2ZlYXR1cmVzLmgiCiAKICNpbmNsdWRlIDxFdmFzLmg+CkBAIC04NSw2ICs4Niw3IEBAIGV4
dGVybiAiQyIgewogICogIC0gImlucHV0bWV0aG9kLGNoYW5nZWQiLCBFaW5hX0Jvb2w6IHJlcG9y
dHMgdGhhdCBpbnB1dCBtZXRob2Qgd2FzIGNoYW5nZWQgYW5kCiAgKiAgICBpdCBnaXZlcyBhIGJv
b2xlYW4gdmFsdWUgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90IGFzIGFuIGFyZ3VtZW50Lgog
ICogIC0gInZpZXcscmVzaXplZCIsIHZvaWQ6IHZpZXcgb2JqZWN0J3Mgc2l6ZSB3YXMgY2hhbmdl
ZC4KKyAqICAtICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCB2b2lkOiBSZXBvcnQgdGhhdCB0aGUg
SlMgd2luZG93IG9iamVjdCBoYXMgYmVlbiBjbGVhcmVkLgogICogIC0gImxvYWQsbmV3d2luZG93
LHNob3ciLCB2b2lkOiByZXBvcnRzIHRoYXQgYSBuZXcgd2luZG93IHdhcyBjcmVhdGVkIGFuZCBj
YW4gYmUgc2hvd24uCiAgKiAgLSAicmVzdG9yZSIsIEV2YXNfT2JqZWN0ICo6IHJlcG9ydHMgdGhh
dCB2aWV3IHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRpdGlvbnMKICAqICAgIGFu
ZCBpdCBnaXZlcyBhIGZyYW1lIHRoYXQgb3JpZ2luYXRlZCByZXN0b3JlIGFzIGFuIGFyZ3VtZW50
LgpAQCAtNTQ1LDYgKzU0Nyw4IEBAIEVBUEkgdm9pZCBld2tfdmlld191c2VyX3NjYWxhYmxlX3Nl
dChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHVzZXJfc2NhbGFibGUpOwogRUFQSSBFaW5hX0Jv
b2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9nZXQoRXZhc19PYmplY3QqIG8pOwogRUFQSSBmbG9h
dCBld2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KEV2YXNfT2JqZWN0KiBvKTsKIAorRUFQ
SSBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCAqbywgRXdrX0pT
X09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1
cwogfQogI2VuZGlmCi0tIAoxLjcuNS4yCgo=
</data>
<flag name="review"
          id="92388"
          type_id="1"
          status="-"
          setter="leandro"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>103098</attachid>
            <date>2011-08-05 13:06:31 -0700</date>
            <delta_ts>2011-08-22 09:40:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-EFL-Exporting-JavaScript-objects-for-EFL-port.patch</filename>
            <type>text/plain</type>
            <size>40934</size>
            <attacher name="Flavio Ceolin">flavio.ceolin</attacher>
            
              <data encoding="base64">RnJvbSAzOTRkYWVkZDU0MjY1ZTIzOTg4ZmQwMDQ1ZjEyZjM3Y2VmNGMzNWFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGbGF2aW8gQ2VvbGluIDxmbGF2aW8uY2VvbGluQHByb2Z1c2lv
bi5tb2JpPgpEYXRlOiBUaHUsIDMwIEp1biAyMDExIDEzOjI1OjM5IC0wMzAwClN1YmplY3Q6IFtQ
QVRDSF0gW0VGTF0gIEV4cG9ydGluZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9yIEVGTCBwb3J0ICAg
ICAgIAogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNDQ2CgotLS0K
IFNvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMTQgKwogU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQgICAgICAgICAgICAg
ICAgfCAgICAxICsKIFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICA0MCArCiAuLi4vZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50
RWZsLmNwcCAgICB8ICAgIDQgKy0KIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmggICAg
ICAgICAgICAgICAgICAgIHwgICAgMSArCiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNw
cCAgICAgICAgICAgICAgICAgICB8ICA4MDQgKysrKysrKysrKysrKysrKysrKysKIFNvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfanMuaCAgICAgICAgICAgICAgICAgICAgIHwgIDExMiArKysKIFNv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJpdmF0ZS5oICAgICAgICAgICAgICAgIHwgICAyMSAr
CiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwICAgICAgICAgICAgICAgICB8ICAg
NTEgKysKIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5oICAgICAgICAgICAgICAgICAg
IHwgICAxNCArCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMDYyIGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYktpdC9D
TWFrZUxpc3RzLnR4dAppbmRleCBjZWU5NDU2Li5iNjVkMWJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvQ01ha2VMaXN0cy50eHQK
QEAgLTUsNiArNSw3IEBAIFNFVChXZWJLaXRfSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICIke1dF
QkNPUkVfRElSfS9iaW5kaW5ncy9qcyIKICAgICAiJHtXRUJDT1JFX0RJUn0vYmluZGluZ3MiCiAg
ICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZSIKKyAgICAiJHtXRUJDT1JFX0RJUn0vYnJpZGdlL2Mi
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2JyaWRnZS9qc2MiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Nz
cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vZG9tIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBlODNkM2I1Li4xYTM4OTI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA4LTA1ICBKb25hcyBNLiBHYXN0YWwg
PGpnYXN0YWxAcHJvZnVzaW9uLm1vYmk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW0VGTF0gRXhwb3J0aW5nIEphdmFTY3JpcHQgb2JqZWN0cyBmb3Ig
RUZMIHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQzNDQ2CisKKyAgICAgICAgVGhpcyBwYXRjaCBhbGxvd3MgdG8gZXhwb3J0IG9iamVjdHMgdG8g
SmF2YVNjcmlwdCBBUEksCisgICAgICAgIGp1c3QgbGlrZSBxdCBkb2VzLCBidXQgaXQgdXNlcyB0
aGUgbmV0c2NhcGUgYXBpCisgICAgICAgIHRvIGRvIHRoZSBjb252ZXJ0aW9uIHRvIGphdmFzY3Jp
cHQgb2JqZWN0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgIEFkZGluZyBu
ZWNlc3NhcnkgZmlsZXMgZm9yIHRoZSBwYXRjaC4KKwogMjAxMS0wNy0yOCAgVG9ueSBDaGFuZyAg
PHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBzcWwgdG8gc3ZuOmlnbm9yZSBhbmQg
cmVtb3ZlIGFwcC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL0NNYWtlTGlzdHNFZmwu
dHh0IGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKaW5kZXggZDVhZTNmZS4u
OTEwZGM5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ01ha2VMaXN0c0VmbC50eHQKQEAgLTgwLDYgKzgwLDcg
QEAgTElTVChBUFBFTkQgV2ViS2l0X1NPVVJDRVMKICAgICBlZmwvZXdrL2V3a192aWV3X3Npbmds
ZS5jCiAgICAgZWZsL2V3ay9ld2tfdmlld190aWxlZC5jCiAgICAgZWZsL2V3ay9ld2tfd2luZG93
X2ZlYXR1cmVzLmNwcAorICAgIGVmbC9ld2svZXdrX2pzLmNwcAogKQogCiBMSVNUKEFQUEVORCBX
ZWJLaXRfTElCUkFSSUVTCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cKaW5kZXggZTg2NTQwNS4uNjkwZmYwYyAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTA4LTA1ICBKb25hcyBNLiBHYXN0
YWwgPGpnYXN0YWxAcHJvZnVzaW9uLm1vYmk+CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtFRkxdIEV4cG9ydGluZyBKYXZhU2NyaXB0IG9iamVjdHMgZm9y
IEVGTCBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00MzQ0NgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIHRvIGV4cG9ydCBvYmplY3RzIHRv
IEphdmFTY3JpcHQgQVBJLAorICAgICAgICBqdXN0IGxpa2UgcXQgZG9lcywgYnV0IGl0IHVzZXMg
dGhlIG5ldHNjYXBlIGFwaQorICAgICAgICB0byBkbyB0aGUgY29udmVydGlvbiB0byBqYXZhc2Ny
aXB0IG9iamVjdC4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNv
cmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZCk6
CisgICAgICAgICogZXdrL0VXZWJLaXQuaDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDogQWRk
ZWQuCisgICAgICAgIChld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQpOgorICAgICAgICAoZXdr
X2pzX25wdmFyaWFudF90b192YXJpYW50KToKKyAgICAgICAgKGV3a19qc19wcm9wZXJ0eV9oYXMp
OgorICAgICAgICAoZXdrX2pzX3Byb3BlcnR5X2dldCk6CisgICAgICAgIChld2tfanNfcHJvcGVy
dHlfc2V0KToKKyAgICAgICAgKGV3a19qc19wcm9wZXJ0eV9yZW1vdmUpOgorICAgICAgICAoZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKToKKyAgICAgICAgKGV3a19qc19tZXRob2RfaGFzKToK
KyAgICAgICAgKGV3a19qc19tZXRob2RfaW52b2tlKToKKyAgICAgICAgKGV3a19qc19jbGFzc19u
ZXcpOgorICAgICAgICAoZXdrX2pzX2NsYXNzX2ZyZWUpOgorICAgICAgICAoZXdrX2pzX29iamVj
dF9uZXcpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9mcmVlKToKKyAgICAgICAgKGV3a19qc19v
YmplY3RfcHJvcGVydGllc19nZXQpOgorICAgICAgICAoZXdrX2pzX29iamVjdF9uYW1lX2dldCk6
CisgICAgICAgIChld2tfanNfdmFyaWFudF9mcmVlKToKKyAgICAgICAgKiBld2svZXdrX2pzLmg6
IEFkZGVkLgorICAgICAgICAqIGV3ay9ld2tfbWFpbi5jcHA6CisgICAgICAgIChld2tfaW5pdCk6
CisgICAgICAgICogZXdrL2V3a19wcml2YXRlLmg6CisgICAgICAgICogZXdrL2V3a192aWV3LmNw
cDoKKyAgICAgICAgKGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIpOgorICAgICAgICAo
ZXdrX3ZpZXdfanNfb2JqZWN0X2FkZCk6CisgICAgICAgICogZXdrL2V3a192aWV3Lmg6CisKIDIw
MTEtMDgtMDUgIEdyemVnb3J6IEN6YWprb3dza2kgIDxnLmN6YWprb3dza2lAc2Ftc3VuZy5jb20+
CiAKICAgICAgICAgW0VGTF0gTW92ZSBBUEkgZG9jdW1lbnRhdGlvbiBvZiBld2sgZmlsZXMgdG8g
dGhlIGhlYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL1dlYkNvcmVTdXBw
b3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAppbmRleCA4ZTdiMmU5Li44MjEzMzc5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEVmbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRFZmwuY3BwCkBAIC0xOTUsNyArMTk1LDkgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
KQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2luZG93T2Jq
ZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisj
aWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCisgICAgZXdrX3ZpZXdfanNfd2luZG93X29i
amVjdF9jbGVhcihtX3ZpZXcsIG1fZnJhbWUpOworI2VuZGlmCiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJL
aXQuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9FV2ViS2l0LmgKaW5kZXggYTVjMDM0Ni4uM2Y3
OTRmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL0VXZWJLaXQuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svRVdlYktpdC5oCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVk
ZSAiZXdrX2Nvb2tpZXMuaCIKICNpbmNsdWRlICJld2tfZnJhbWUuaCIKICNpbmNsdWRlICJld2tf
aGlzdG9yeS5oIgorI2luY2x1ZGUgImV3a19qcy5oIgogI2luY2x1ZGUgImV3a19tYWluLmgiCiAj
aW5jbHVkZSAiZXdrX25ldHdvcmsuaCIKICNpbmNsdWRlICJld2tfc2V0dGluZ3MuaCIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19qcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJh
NDJkMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3Bw
CkBAIC0wLDAgKzEsODA0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBQcm9GVVNJT04g
ZW1iZWRkZWQgc3lzdGVtcworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tf
anMuaCIKKworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorCisjaW5jbHVkZSAiTlBf
anNvYmplY3QuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgIm5wcnVudGlt
ZS5oIgorI2luY2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisK
KyNkZWZpbmUgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4obywgLi4uKSBcCisgICAgaWYgKCFF
SU5BX01BR0lDX0NIRUNLKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQykpIHsgXAorICAgICAgIEVJ
TkFfTUFHSUNfRkFJTChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOyBcCisgICAgICAgcmV0dXJu
IF9fVkFfQVJHU19fOyBcCisgICAgfQorCitzdHJ1Y3QgX0V3a19KU19DbGFzcyB7CisgICAgY29u
c3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGE7CisgICAgRWluYV9IYXNoKiBtZXRob2RzOyAvLyBL
ZXk9TlBJZGVudGlmaWVyKG5hbWUpLCB2YWx1ZT1wb2ludGVyIHRvIG1ldGEtPm1ldGhvZHMuCisg
ICAgRWluYV9IYXNoKiBwcm9wZXJ0aWVzOyAvLyBLZXk9TlBJZGVudGlmaWVyKG5hbWUpLCB2YWx1
ZT1wb2ludGVyIHRvIG1ldGEtPnByb3BlcnRpZXMuCisgICAgRXdrX0pTX0RlZmF1bHQgZGVmYXVs
dF9wcm9wOworfTsKKworc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnB2YXJpYW50X3RvX3Zhcmlh
bnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWFudCogcmVzdWx0KTsKKworc3Rh
dGljIEVpbmFfQm9vbCBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1Zh
cmlhbnQqIGRhdGEsIE5QVmFyaWFudCogcmVzdWx0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChkYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocmVzdWx0LCBFSU5BX0ZBTFNFKTsKKyAgICBjaGFyKiBzdHJpbmdfdmFsdWU7
CisKKyAgICBzd2l0Y2ggKGRhdGEtPnR5cGUpIHsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX1ZP
SUQ6CisgICAgICAgIFZPSURfVE9fTlBWQVJJQU5UKCpyZXN1bHQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEVXS19KU19WQVJJQU5UX05VTEw6CisgICAgICAgIE5VTExfVE9fTlBWQVJJQU5U
KCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX0lOVDMy
OgorICAgICAgICBJTlQzMl9UT19OUFZBUklBTlQoZGF0YS0+dmFsdWUuaSwgKnJlc3VsdCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfRE9VQkxFOgorICAgICAgICBE
T1VCTEVfVE9fTlBWQVJJQU5UKGRhdGEtPnZhbHVlLmQsICpyZXN1bHQpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEVXS19KU19WQVJJQU5UX1NUUklORzoKKyAgICAgICAgc3RyaW5nX3ZhbHVl
ID0gc3RyZHVwKGRhdGEtPnZhbHVlLnMpOworICAgICAgICBpZiAoc3RyaW5nX3ZhbHVlKQorICAg
ICAgICAgICAgU1RSSU5HWl9UT19OUFZBUklBTlQoc3RyaW5nX3ZhbHVlLCAqcmVzdWx0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfQk9PTDoKKyAgICAgICAgQk9PTEVBTl9UT19OUFZB
UklBTlQoZGF0YS0+dmFsdWUuYiwgKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RVdLX0pTX1ZBUklBTlRfT0JKRUNUOgorICAgICAgICBPQkpFQ1RfVE9fTlBWQVJJQU5UKHJlaW50
ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihkYXRhLT52YWx1ZS5vKSwgKnJlc3VsdCk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAgIH0K
KworICAgIHJldHVybiBFSU5BX1RSVUU7Cit9CisKKy8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQg
YnkgTlBBSSwgdGhhdHMgdGhlIHJlYXNvbiB0byB1c2UgYm9vbCBpbnN0ZWFkIG9mIEVpbmFfQm9v
bC4KK3N0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJ
ZGVudGlmaWVyIG5hbWUpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRf
Y2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBfb2JqKTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVS
TihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkp
IHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBO
X1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKKyAgICBib29sIGZhaWwgPSBlaW5hX2hhc2hfZmlu
ZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7IC8vIEZJWE1FOiBzaG91bGQgc2VhcmNoIG1l
dGhvZHMgdG9vPworICAgIGZyZWUocHJvcF9uYW1lKTsKKworICAgIHJldHVybiBmYWlsOworfQor
CitzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucF9vYmosIE5QSWRl
bnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBv
YmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAgIEV3a19K
U19WYXJpYW50KiB2YWx1ZTsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgYm9vbCBm
YWlsID0gZmFsc2U7CisKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2Jq
LCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisK
KyAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CisgICAgICAgIEVSUigi
aW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KG1h
bGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKSk7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19qc192YXJpYW50Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdr
X0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3BlcnRpZXMsIG5hbWUp
KTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5nZXQpIHsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFu
ZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyLgorICAgICAgICBmYWlsID0gcHJvcC0+Z2V0KG9iaiwgcHJv
cC0+bmFtZSwgdmFsdWUpOworICAgICAgICBpZiAoIWZhaWwpCisgICAgICAgICAgICBmYWlsID0g
ZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOworICAgIH0gZWxzZSBp
ZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3Rz
LgorICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQob2JqLCBwcm9wLT5u
YW1lLCB2YWx1ZSk7CisgICAgICAgIGlmICghZmFpbCkKKyAgICAgICAgICAgIGZhaWwgPSBld2tf
anNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsgLy8g
RmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KKyAgICAgICAgY2hhciogcHJvcF9uYW1lID0g
X05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAgICAgIGZyZWUodmFsdWUpOworICAg
ICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4oZWluYV9oYXNoX2ZpbmQo
b2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICAgICAgZnJlZShwcm9wX25hbWUpOwor
ICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZXdrX2pzX3ZhcmlhbnRfdG9f
bnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOworICAgIH0KKworICAgIGZyZWUodmFsdWUpOworICAg
IHJldHVybiBmYWlsOworfQorCitzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIG5wX3ZhbHVl
KQoreworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09i
amVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOworICAgIEV3a19KU19Q
cm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwgPSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJp
bmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0
ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOworICAgIH0KKworICAgIHZhbHVlID0gc3RhdGlj
X2Nhc3Q8RXdrX0pTX1ZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSkpOwor
ICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5
IGZvciBld2tfanNfdmFyaWFudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHZhbHVlLCBucF92YWx1ZSk7CisgICAgY2hh
ciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CisgICAgcHJvcCA9
IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5w
cm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICBpZiAocHJvcCAmJiBwcm9wLT5zZXQpCisgICAg
ICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhh
cyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlci4KKyAgICBlbHNlIGlmIChvYmotPmNs
cy0+ZGVmYXVsdF9wcm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3By
b3Auc2V0KG9iaiwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4K
KyAgICBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KKyAgICAgICAgdm9p
ZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgdmFsdWUp
OworICAgICAgICBmcmVlKG9sZCk7CisgICAgICAgIGZhaWwgPSB0cnVlOworICAgIH0KKworICAg
IGZyZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSkK
K3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmpl
Y3QqPihucF9vYmopOworICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKKyAgICBib29sIGZhaWwg
PSBmYWxzZTsKKworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZh
bHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAg
IGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQg
TlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWlsOwor
ICAgIH0KKworICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5h
bWUpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hf
ZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgaWYgKHByb3AgJiYg
cHJvcC0+ZGVsKQorICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8v
IENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KKyAgICBlbHNlIGlm
IChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5k
ZWZhdWx0X3Byb3AuZGVsKG9iaiwgcHJvcF9uYW1lKTsKKyAgICBlbHNlCisgICAgICAgIGZhaWwg
PSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCAwKTsKKworICAgIGZy
ZWUocHJvcF9uYW1lKTsKKyAgICByZXR1cm4gZmFpbDsKK30KKworc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllcioqIHZh
bHVlLCB1aW50MzJfdCogY291bnQpCit7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFaW5hX0l0ZXJhdG9yKiBp
dDsKKyAgICBjaGFyKiBrZXk7CisgICAgaW50IGkgPSAwOworCisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVsYXRpb24o
b2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxOUElkZW50aWZpZXIq
PihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiAqY291bnQpKTsKKyAgICBpZiAoISp2YWx1
ZSkgeworICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIE5QSWRlbnRp
ZmllciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaXQgPSBlaW5hX2hh
c2hfaXRlcmF0b3Jfa2V5X25ldyhvYmotPnByb3BlcnRpZXMpOworICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdCwga2V5KQorICAgICAgICAoKnZhbHVlKVtpKytdID0gX05QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyKGtleSk7CisKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2hhcyhOUE9iamVjdCogbnBf
b2JqLCBOUElkZW50aWZpZXIgbmFtZSkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworCisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tf
T1JfUkVUVVJOKG9iaiwgZmFsc2UpOworCisgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmlu
ZyhuYW1lKSkgeworICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRl
ZC4iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gZWluYV9oYXNo
X2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5zIHBvaW50ZXIgaWYgZm91
bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KK30KKworc3RhdGljIGJvb2wgZXdrX2pzX21l
dGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5Q
VmFyaWFudCogbnBfYXJncywgdWludDMyX3QgbnBfYXJnX2NvdW50LCBOUFZhcmlhbnQqIHJlc3Vs
dCkKK3sKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19P
YmplY3QqPihucF9vYmopOworICAgIEV3a19KU19NZXRob2QqIG1ldGhvZDsKKyAgICBFd2tfSlNf
VmFyaWFudCogYXJnczsKKyAgICBFd2tfSlNfVmFyaWFudCogcmV0X3ZhbDsKKworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lD
X0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKworICAgIGlmICghX05QTl9JZGVudGlmaWVy
SXNTdHJpbmcobmFtZSkpIHsKKyAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBz
dXBwb3J0ZWQuIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtZXRob2Qg
PSBzdGF0aWNfY2FzdDxFd2tfSlNfTWV0aG9kKj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1l
dGhvZHMsIG5hbWUpKTsKKyAgICBpZiAoIW1ldGhvZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgYXJncyA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4obWFsbG9jKHNpemVvZihF
d2tfSlNfVmFyaWFudCkgICpucF9hcmdfY291bnQpKTsKKyAgICBpZiAoIWFyZ3MpIHsKKyAgICAg
ICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfdmFyaWFudCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yICh1aW50MzJfdCBpID0gMDsg
aSA8IG5wX2FyZ19jb3VudDsgaSsrKQorICAgICAgICBld2tfanNfbnB2YXJpYW50X3RvX3Zhcmlh
bnQoJmFyZ3NbaV0sICZucF9hcmdzW2ldKTsKKyAgICByZXRfdmFsID0gbWV0aG9kLT5pbnZva2Uo
b2JqLCBhcmdzLCBucF9hcmdfY291bnQpOworICAgIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFu
dChyZXRfdmFsLCByZXN1bHQpOworCisgICAgZXdrX2pzX3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgRWluYV9Cb29sIGV3a19qc19ucG9iamVj
dF9wcm9wZXJ0eV9nZXQoRXdrX0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBuYW1lLCBFd2tf
SlNfVmFyaWFudCogdmFsdWUpCit7CisgICAgTlBJZGVudGlmaWVyIGlkID0gX05QTl9HZXRTdHJp
bmdJZGVudGlmaWVyKG5hbWUpOworICAgIE5QVmFyaWFudCB2YXI7CisgICAgYm9vbCBmYWlsID0g
X05QTl9HZXRQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSwgaWQs
ICZ2YXIpOworICAgIGlmICghZmFpbCkKKyAgICAgICAgZmFpbCA9IGV3a19qc19ucHZhcmlhbnRf
dG9fdmFyaWFudCh2YWx1ZSwgJnZhcik7CisgICAgcmV0dXJuIGZhaWw7Cit9CisKK3N0YXRpYyBF
aW5hX0Jvb2wgZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0KiBvYmos
IGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50KiB2YWx1ZSkKK3sKKyAgICBO
UElkZW50aWZpZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CisgICAgTlBW
YXJpYW50IHZhcjsKKyAgICBib29sIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQo
dmFsdWUsICZ2YXIpOworICAgIGlmIChmYWlsKQorICAgICAgICBmYWlsID0gX05QTl9TZXRQcm9w
ZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSwgaWQsICZ2YXIpOworICAg
IHJldHVybiBmYWlsOworfQorCitzdGF0aWMgRWluYV9Cb29sIGV3a19qc19ucG9iamVjdF9wcm9w
ZXJ0eV9kZWwoRXdrX0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIE5Q
SWRlbnRpZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKKyAgICByZXR1
cm4gX05QTl9SZW1vdmVQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2Jq
KSwgaWQpOworfQorCitzdGF0aWMgdm9pZCBld2tfanNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJv
cGVydHkqIHByb3ApCit7CisgICAgZnJlZShjb25zdF9jYXN0PGNoYXIqPihwcm9wLT5uYW1lKSk7
CisgICAgaWYgKHByb3AtPnZhbHVlLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQorICAg
ICAgICBmcmVlKHByb3AtPnZhbHVlLnZhbHVlLnMpOworICAgIGVsc2UgaWYgKHByb3AtPnZhbHVl
LnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICBld2tfanNfb2JqZWN0X2Zy
ZWUocHJvcC0+dmFsdWUudmFsdWUubyk7CisgICAgZnJlZShwcm9wKTsKK30KKworLyoqCisgKiBD
cmVhdGUgYSBFd2tfSlNfQ2xhc3MgdG8gYmUgdXNlZCBpbiBAYSBld2tfanNfb2JqZWN0X25ldy4K
KyAqCisgKiBAcGFyYW0gbWV0YSBAYSBFd2tfSlNfQ2xhc3NfTWV0YSB0aGF0IGRlc2NyaWJlcyB0
aGUgY2xhc3MgdG8gYmUgY3JlYXRlZC4KKyAqCisgKiBAcmV0dXJuIFRoZSBFd2tfSlNfQ2xhc3Mg
Y3JlYXRlZC4KKyAqLworRXdrX0pTX0NsYXNzKiBld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19K
U19DbGFzc19NZXRhKiBtZXRhKQoreworICAgIEV3a19KU19DbGFzcyogY2xzOworCisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGEsIDApOworCisgICAgY2xzID0gc3RhdGlj
X2Nhc3Q8RXdrX0pTX0NsYXNzKj4obWFsbG9jKHNpemVvZihFd2tfSlNfQ2xhc3MpKSk7CisgICAg
aWYgKCFjbHMpIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBl
d2tfanNfY2xhc3MiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgY2xzLT5tZXRh
ID0gbWV0YTsKKyAgICBjbHMtPmRlZmF1bHRfcHJvcCA9IG1ldGEtPmRlZmF1bHRfcHJvcDsKKwor
ICAgIC8vIERvbid0IGZyZWUgbWV0aG9kcyBzaW5jZSB0aGV5IHBvaW50IHRvIG1ldGEgY2xhc3Mg
bWV0aG9kcyh3aWxsIGJlIGZyZWVkIHdoZW4gbWV0YSBjbGFzcyBpcyBmcmVlZCkuCisgICAgY2xz
LT5tZXRob2RzID0gZWluYV9oYXNoX3BvaW50ZXJfbmV3KDApOworICAgIGZvciAoaW50IGkgPSAw
OyBtZXRhLT5tZXRob2RzICYmIG1ldGEtPm1ldGhvZHNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAg
IE5QSWRlbnRpZmllciBpZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihtZXRhLT5tZXRob2Rz
W2ldLm5hbWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKGNscy0+bWV0aG9kcywgaWQsICZtZXRh
LT5tZXRob2RzW2ldKTsKKyAgICB9CisKKyAgICAvLyBEb24ndCBmcmVlIHByb3BlcnRpZXMgc2lu
Y2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNzIHByb3BlcnRpZXMod2lsbCBiZSBmcmVlZCB3aGVu
IG1ldGEgY2xhc3MgaXMgZnJlZWQpLgorICAgIGNscy0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9w
b2ludGVyX25ldygwKTsKKyAgICBmb3IgKGludCBpID0gMDsgbWV0YS0+cHJvcGVydGllcyAmJiBt
ZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBOUElkZW50aWZpZXIgaWQg
PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobWV0YS0+cHJvcGVydGllc1tpXS5uYW1lKTsKKyAg
ICAgICAgZWluYV9oYXNoX2FkZChjbHMtPnByb3BlcnRpZXMsIGlkLCAmbWV0YS0+cHJvcGVydGll
c1tpXSk7CisgICAgfQorCisgICAgcmV0dXJuIGNsczsKK30KKworLyoqCisgKiBSZWxlYXNlIHJl
c291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgY2xzLgorICoKKyAqIEBwYXJhbSBjbHMgQGEgRXdrX0pT
X0NsYXNzIHRvIGJlIHJlbGVhc2VkLgorICovCit2b2lkIGV3a19qc19jbGFzc19mcmVlKEV3a19K
U19DbGFzcyogY2xzKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNscyk7Cisg
ICAgZWluYV9oYXNoX2ZyZWUoY2xzLT5tZXRob2RzKTsKKyAgICBlaW5hX2hhc2hfZnJlZShjbHMt
PnByb3BlcnRpZXMpOworICAgIGZyZWUoY2xzKTsKK30KKworc3RhdGljIE5QQ2xhc3MgRVdLX05Q
Q0xBU1MgPSB7CisgICAgTlBfQ0xBU1NfU1RSVUNUX1ZFUlNJT04sCisgICAgMCwgLy8gTlBBbGxv
Y2F0ZUZ1bmN0aW9uUHRyCisgICAgMCwgLy8gTlBEZWFsbG9jYXRlRnVuY3Rpb25QdHIKKyAgICAw
LCAvLyBOUEludmFsaWRhdGVGdW5jdGlvblB0cgorICAgIGV3a19qc19tZXRob2RfaGFzLCAvLyBO
UEhhc01ldGhvZEZ1bmN0aW9uUHRyCisgICAgZXdrX2pzX21ldGhvZF9pbnZva2UsIC8vIE5QSW52
b2tlRnVuY3Rpb25QdHIKKyAgICAwLCAvLyBOUEludm9rZURlZmF1bHRGdW5jdGlvblB0cgorICAg
IGV3a19qc19wcm9wZXJ0eV9oYXMsIC8vIE5QSGFzUHJvcGVydHlGdW5jdGlvblB0cgorICAgIGV3
a19qc19wcm9wZXJ0eV9nZXQsIC8vIE5QR2V0UHJvcGVydHlGdW5jdGlvblB0cgorICAgIGV3a19q
c19wcm9wZXJ0eV9zZXQsIC8vIE5QU2V0UHJvcGVydHlGdW5jdGlvblB0cgorICAgIGV3a19qc19w
cm9wZXJ0eV9yZW1vdmUsIC8vIE5QUmVtb3ZlUHJvcGVydHlGdW5jdGlvblB0cgorICAgIGV3a19q
c19wcm9wZXJ0aWVzX2VudW1lcmF0ZSwgLy8gTlBFbnVtZXJhdGlvbkZ1bmN0aW9uUHRyCisgICAg
MCAvLyBOUENvbnN0cnVjdEZ1bmN0aW9uCit9OworCitzdGF0aWMgRXdrX0pTX09iamVjdCogZXdr
X2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBfb2JqKQoreworICAgIE5QSWRlbnRp
ZmllciogdmFsdWVzOworICAgIHVpbnQzMl90IG5wX3Byb3BzX2NvdW50OworICAgIEV3a19KU19D
bGFzcyogY2xzOworICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFaW5hX0l0ZXJhdG9yKiBp
dDsKKyAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CisgICAgSmF2YVNjcmlwdE9iamVjdCoganNv
OworCisgICAgaWYgKEVJTkFfTUFHSUNfQ0hFQ0socmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBfb2JqKSwgRVdLX0pTX09CSkVDVF9NQUdJQykpCisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworCisgICAgaWYgKCFfTlBOX0Vu
dW1lcmF0ZSgwLCBucF9vYmosICZ2YWx1ZXMsICZucF9wcm9wc19jb3VudCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgY2xzID0gc3RhdGljX2Nhc3Q8RXdrX0pTX0NsYXNzKj4obWFsbG9jKHNp
emVvZihFd2tfSlNfQ2xhc3MpKSk7CisgICAgaWYgKCFjbHMpIHsKKyAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfY2xhc3MiKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorCisgICAgY2xzLT5tZXRhID0gMDsKKyAgICBFd2tfSlNfRGVmYXVsdCBkZWYg
PSB7CisgICAgICAgIGV3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9zZXQsCisgICAgICAgIGV3a19q
c19ucG9iamVjdF9wcm9wZXJ0eV9nZXQsCisgICAgICAgIGV3a19qc19ucG9iamVjdF9wcm9wZXJ0
eV9kZWwKKyAgICB9OworICAgIGNscy0+ZGVmYXVsdF9wcm9wID0gZGVmOworICAgIGNscy0+bWV0
aG9kcyA9IGVpbmFfaGFzaF9wb2ludGVyX25ldygwKTsKKyAgICBjbHMtPnByb3BlcnRpZXMgPSBl
aW5hX2hhc2hfcG9pbnRlcl9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19q
c19wcm9wZXJ0eV9mcmVlKSk7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5wX3Byb3Bz
X2NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKF9OUE5fSGFzUHJvcGVydHkoMCwgbnBfb2JqLCB2
YWx1ZXNbaV0pKSB7CisgICAgICAgICAgICBOUFZhcmlhbnQgdmFyOworICAgICAgICAgICAgRXdr
X0pTX1Byb3BlcnR5KiBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oY2FsbG9j
KHNpemVvZihFd2tfSlNfUHJvcGVydHkpLCAxKSk7CisgICAgICAgICAgICBpZiAoIXByb3ApIHsK
KyAgICAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19q
c19wcm9wZXJ0eSIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIF9OUE5fR2V0UHJvcGVydHkoMCwgbnBfb2JqLCB2YWx1ZXNbaV0sICZ2
YXIpOworICAgICAgICAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KCYocHJvcC0+dmFs
dWUpLCAmdmFyKTsKKyAgICAgICAgICAgIHByb3AtPm5hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRp
Zmllcih2YWx1ZXNbaV0pOworICAgICAgICAgICAgZWluYV9oYXNoX2FkZChjbHMtPnByb3BlcnRp
ZXMsIHZhbHVlc1tpXSwgcHJvcCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDYW4ndCB1
c2UgZXdrX2pzX29iamVjdF9uZXcoY2xzKSBiZWNhdXNlIGl0IGV4cGVjdHMgY2xzLT5tZXRhIHRv
IGV4aXN0LgorICAgIG9iaiA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6
ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFvYmopIHsKKyAgICAgICAgRVJSKCJDb3Vs
ZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2JqZWN0Iik7CisgICAgICAgIGdvdG8g
ZXJyb3I7CisgICAgfQorCisgICAgZnJlZSh2YWx1ZXMpOworICAgIEVJTkFfTUFHSUNfU0VUKG9i
aiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqLT5uYW1lID0gMDsKKyAgICBvYmotPmNs
cyA9IGNsczsKKyAgICBvYmotPnZpZXcgPSAwOworCisgICAganNvID0gcmVpbnRlcnByZXRfY2Fz
dDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBfb2JqKTsKKyAgICBpZiAoIXN0cmNtcCgiQXJyYXkiLCBq
c28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQorICAgICAgICBvYmotPnR5cGUg
PSBFV0tfSlNfT0JKRUNUX0FSUkFZOworICAgIGVsc2UgaWYgKCFzdHJjbXAoIkZ1bmN0aW9uIiwg
anNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKKyAgICAgICAgb2JqLT50eXBl
ID0gRVdLX0pTX09CSkVDVF9GVU5DVElPTjsKKyAgICBlbHNlCisgICAgICAgIG9iai0+dHlwZSA9
IEVXS19KU19PQkpFQ1RfT0JKRUNUOworCisgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKGNs
cy0+cHJvcGVydGllcykgPCAyNSkKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNo
X3N0cmluZ19zbWFsbF9uZXcoMCk7CisgICAgZWxzZQorICAgICAgICBvYmotPnByb3BlcnRpZXMg
PSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CisKKyAgICBpdCA9IGVpbmFfaGFz
aF9pdGVyYXRvcl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOworICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdCwgcHJvcCkgeworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1l
OworICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7CisgICAgICAg
IGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICB9CisKKyAg
ICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOworICAgIG9iai0+YmFzZSA9ICpyZWludGVycHJldF9j
YXN0PEphdmFTY3JpcHRPYmplY3QqPihucF9vYmopOworCisgICAgcmV0dXJuIG9iajsKKworZXJy
b3I6CisgICAgZXdrX2pzX2NsYXNzX2ZyZWUoY2xzKTsKKyAgICBmcmVlKHZhbHVlcyk7CisgICAg
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25wdmFyaWFudF90b192YXJp
YW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBjb25zdCBOUFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBpbnQgc3o7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXN1bHQsIEVJTkFf
RkFMU0UpOworICAgIHN3aXRjaCAocmVzdWx0LT50eXBlKSB7CisgICAgY2FzZSBOUFZhcmlhbnRU
eXBlX1ZvaWQ6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9WT0lEOworICAg
ICAgICBkYXRhLT52YWx1ZS5vID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZhcmlh
bnRUeXBlX051bGw6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9OVUxMOwor
ICAgICAgICBkYXRhLT52YWx1ZS5vID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOUFZh
cmlhbnRUeXBlX0ludDMyOgorICAgICAgICBkYXRhLT50eXBlID0gRVdLX0pTX1ZBUklBTlRfSU5U
MzI7CisgICAgICAgIGRhdGEtPnZhbHVlLmkgPSBOUFZBUklBTlRfVE9fSU5UMzIoKnJlc3VsdCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9Eb3VibGU6CisgICAgICAg
IGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9ET1VCTEU7CisgICAgICAgIGRhdGEtPnZhbHVl
LmQgPSBOUFZBUklBTlRfVE9fRE9VQkxFKCpyZXN1bHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIE5QVmFyaWFudFR5cGVfU3RyaW5nOgorICAgICAgICBzeiA9IE5QVkFSSUFOVF9UT19TVFJJ
TkcoKnJlc3VsdCkuVVRGOExlbmd0aDsKKyAgICAgICAgZGF0YS0+dmFsdWUucyA9IHN0YXRpY19j
YXN0PGNoYXIqPihtYWxsb2Moc2l6ZW9mKGNoYXIpICogKHN6ICsgMSkpKTsKKyAgICAgICAgaWYg
KCFkYXRhLT52YWx1ZS5zKQorICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CisgICAgICAg
IG1lbWNweShkYXRhLT52YWx1ZS5zLCBOUFZBUklBTlRfVE9fU1RSSU5HKCpyZXN1bHQpLlVURjhD
aGFyYWN0ZXJzLCBzeik7CisgICAgICAgIGRhdGEtPnZhbHVlLnNbc3pdID0gJ1wwJzsKKyAgICAg
ICAgZGF0YS0+dHlwZSA9IEVXS19KU19WQVJJQU5UX1NUUklORzsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBOUFZhcmlhbnRUeXBlX0Jvb2w6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNf
VkFSSUFOVF9CT09MOworICAgICAgICBkYXRhLT52YWx1ZS5iID0gTlBWQVJJQU5UX1RPX0JPT0xF
QU4oKnJlc3VsdCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlBWYXJpYW50VHlwZV9PYmpl
Y3Q6CisgICAgICAgIGRhdGEtPnR5cGUgPSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Q7CisgICAgICAg
IGRhdGEtPnZhbHVlLm8gPSBld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5QVkFSSUFOVF9UT19P
QkpFQ1QoKnJlc3VsdCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKKyAgICB9CisKKyAgICByZXR1cm4gRUlOQV9UUlVFOworfQorCisv
KioKKyAqIENyZWF0ZSBhIEV3a19KU19PYmplY3QgdG8gYmUgdXNlZCBpbiBAYSBld2tfdmlld19q
c19vYmplY3RfYWRkLiBUaGUgTWV0YSBjbGFzcydzCisgKiBtZXRob2RzIGFuZCBwcm9wZXJ0aWVz
IGFyZSBub3QgbW9kaWZpZWQgYnV0IHJlZmVyZW5jZXMgdG8gaXQgYXJlIGtlcHQgYXMgbG9uZwor
ICogYXMgdGhlIG9iamVjdCBjcmVhdGVkIGZyb20gaXQgbGl2ZXMuIEFsbCBwcm9wZXJ0aWVzIGNy
ZWF0ZWQgaGVyZQorICogd2lsbCBiZSBhZGRlZCB0byB0aGUgb2JqZWN0IGhhc2ggb2YgcHJvcGVy
dGllcy4gUHJvcGVydGllcyB1c2luZyBkZWZhdWx0X3Byb3AncworICogZ2V0L3NldC9kZWwgbWV0
aG9kcyBzaG91bGQgYWxzbyBiZSBhZGRlZCB0byB0aGUgb2JqZWN0cyBoYXNoKHNlZToKKyAqIEBh
IGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQpLiBNZXRob2RzIG11c3QgZnJlZSB0aGUgYXJn
dW1lbnRzIHRoZXkgcmVjZWl2ZShzZWU6CisgKiBAYSBld2tfanNfdmFyaWFuZ19hcnJheV9mcmVl
KS4KKyAqCisgKgorICogQHBhcmFtIGNscyBAYSBFd2tfSlNfQ2xhc3MgdGhhdCBkZXNjcmliZXMg
dGhlIG9iamVjdCB0byBiZSBjcmVhdGVkLgorICoKKyAqIEByZXR1cm4gVGhlIEV3a19KU19PYmpl
Y3QgY3JlYXRlZC4KKyAqLworRXdrX0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3Qg
RXdrX0pTX0NsYXNzX01ldGEqIG1ldGFfY2xzKQoreworICAgIEV3a19KU19PYmplY3QqIG9iajsK
KworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhX2NscywgMCk7CisKKyAg
ICBvYmogPSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNf
T2JqZWN0KSkpOworICAgIGlmICghb2JqKSB7CisgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9j
YXRlIG1lbW9yeSBmb3IgZXdrX2pzX29iamVjdCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBFSU5BX01BR0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9i
ai0+Y2xzID0gZXdrX2pzX2NsYXNzX25ldyhtZXRhX2Nscyk7CisgICAgb2JqLT52aWV3ID0gMDsK
KyAgICBvYmotPm5hbWUgPSAwOworICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OworCisgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+Y2xzLT5wcm9wZXJ0aWVzKSA8
IDI1KQorICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25l
dyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRfZnJlZSkpOwor
ICAgIGVsc2UKKyAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zdXBl
cmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFudF9m
cmVlKSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXMg
JiYgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAgIEV3
a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07CisgICAg
ICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7
CisgICAgICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJp
YW50Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkpKTsKKyAgICAgICAgaWYgKCF2YWx1
ZSkgeworICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tf
anNfdmFyaWFudCIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAg
ICBpZiAocHJvcC5nZXQpCisgICAgICAgICAgICBwcm9wLmdldChvYmosIGtleSwgdmFsdWUpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHZhbHVlLT50eXBlID0gcHJvcC52YWx1ZS50eXBl
OworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgeworICAgICAgICAgICAgY2FzZSBF
V0tfSlNfVkFSSUFOVF9WT0lEOgorICAgICAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFOVF9OVUxM
OgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZS5vID0gMDsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRVdLX0pTX1ZBUklBTlRfU1RSSU5HOgorICAgICAgICAg
ICAgICAgIHZhbHVlLT52YWx1ZS5zID0gc3RyZHVwKHByb3AudmFsdWUudmFsdWUucyk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0JPT0w6
CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLmIgPSBwcm9wLnZhbHVlLnZhbHVlLmI7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVXS19KU19WQVJJQU5UX0lO
VDMyOgorICAgICAgICAgICAgICAgIHZhbHVlLT52YWx1ZS5pID0gcHJvcC52YWx1ZS52YWx1ZS5p
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFV0tfSlNfVkFSSUFO
VF9ET1VCTEU6CisgICAgICAgICAgICAgICAgdmFsdWUtPnZhbHVlLmQgPSBwcm9wLnZhbHVlLnZh
bHVlLmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVXS19KU19W
QVJJQU5UX09CSkVDVDoKKyAgICAgICAgICAgICAgICB2YWx1ZS0+dmFsdWUubyA9IHByb3AudmFs
dWUudmFsdWUubzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlaW5hX2hhc2hfYWRkKG9iai0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7
CisgICAgfQorCisgICAgb2JqLT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7CisgICAg
b2JqLT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7CisgICAgcmV0dXJuIG9iajsK
KworZXJyb3I6CisgICAgZXdrX2pzX29iamVjdF9mcmVlKG9iaik7CisgICAgcmV0dXJuIDA7Cit9
CisKKy8qKgorICogUmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IEBhIG9iai4KKyAqCisg
KiBAcGFyYW0gb2JqIEBhIEV3a19KU19PYmplY3QgdG8gYmUgcmVsZWFzZWQuCisgKi8KK3ZvaWQg
ZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QqIG9iaikKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihvYmopOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9i
aik7CisgICAgRWluYV9Cb29sIHNjcmlwdF9vYmogPSAhb2JqLT5jbHMtPm1ldGE7CisKKyAgICBl
aW5hX2hhc2hfZnJlZShvYmotPnByb3BlcnRpZXMpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KG9iai0+bmFtZSk7CisKKyAgICBld2tfanNfY2xhc3NfZnJlZShjb25zdF9jYXN0PEV3a19KU19D
bGFzcyo+KG9iai0+Y2xzKSk7CisKKyAgICBFSU5BX01BR0lDX1NFVChvYmosIEVJTkFfTUFHSUNf
Tk9ORSk7CisKKyAgICBpZiAoc2NyaXB0X29iaikKKyAgICAgICAgZnJlZShvYmopOworfQorCisv
KioKKyAqIEdldHMgRWluYV9IYXNoIHdpdGggb2JqZWN0J3MgcHJvcGVydGllcy4KKyAqCisgKiBA
cGFyYW0gb2JqIE9iamVjdCB3aG9zZSBwcm9wZXJ0aWVzIGFyZSB3YW50ZWQuCisgKgorICogQHJl
dHVybiBvYmplY3QncyBwcm9wZXJ0aWVzLgorICovCitFaW5hX0hhc2gqIGV3a19qc19vYmplY3Rf
cHJvcGVydGllc19nZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChvYmosIDApOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKG9iaiwgMCk7CisgICAgcmV0dXJuIG9iai0+cHJvcGVydGllczsKK30KKworLyoqCisg
KiBHZXRzIG5hbWUgb2YgdGhlIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gb2JqIE9iamVjdCB3aG9z
ZSBuYW1lIGlzIHdhbnRlZC4KKyAqCisgKiBAcmV0dXJuIG5hbWUgb2Ygb2JqZWN0LgorICovCitj
b25zdCBjaGFyKiBld2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9i
aikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKKyAgICBF
SU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIDApOworICAgIHJldHVybiBvYmotPm5hbWU7
Cit9CisKKy8qKgorICogQ2FsbHMgdGhlIGZ1bmN0aW9uIHRoaXMgb2JqZWN0IHJlcHJlc2VudHMu
CisgKgorICogQHBhcmFtIG9iaiBPYmplY3QgdGhhdCByZXByZXNlbnRzIGZ1bmN0aW9uLgorICog
QHBhcmFtIGFyZ3MgQXJndW1lbnRzIHRvIGJlIHBhc3NlZCB0byBmdW5jdGlvbi4KKyAqIEBwYXJh
bSBhcmdfY291bnQgTnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAqIEBwYXJhbSByZXN1bHQgUmV0dXJu
IHZhbHVlIG9mIHRoZSBpbnZva2VkIGZ1bmN0aW9uLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9U
UlVFIGlmIGZ1bmN0aW9uIHdhcyBleGVjdXRlZCwgQGMgRUlOQV9GQUxTRSBpZiBmdW5jdGlvbiB3
YXMgbm90IGV4ZWN1dGVkLgorICovCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdr
X0pTX09iamVjdCogb2JqLCBFd2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ19jb3VudCwgRXdr
X0pTX1ZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBOUFZhcmlhbnQqIG5wX2FyZ3M7CisgICAgTlBW
YXJpYW50IG5wX3Jlc3VsdDsKKyAgICBib29sIGZhaWwgPSBFSU5BX0ZBTFNFOworCisgICAgRUlO
QV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZXdrX2pz
X29iamVjdF90eXBlX2dldChvYmopICE9IEVXS19KU19PQkpFQ1RfRlVOQ1RJT04pCisgICAgICAg
IHJldHVybiBFSU5BX0ZBTFNFOworICAgIGlmIChhcmdfY291bnQpCisgICAgICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChhcmdzLCBFSU5BX0ZBTFNFKTsKKworICAgIG5wX2FyZ3Mg
PSBzdGF0aWNfY2FzdDxOUFZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKE5QVmFyaWFudCkgICphcmdf
Y291bnQpKTsKKyAgICBpZiAoIW5wX2FyZ3MpIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxs
b2NhdGUgbWVtb3J5IHRvIG1ldGhvZCBhcmd1bWVudHMiKTsKKyAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CisgICAgfQorCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdfY291bnQ7IGkrKykK
KyAgICAgICAgaWYgKCFld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoJmFyZ3NbaV0sICZucF9h
cmdzW2ldKSkKKyAgICAgICAgICAgIGdvdG8gZW5kOworCisgICAgaWYgKCEoZmFpbCA9IF9OUE5f
SW52b2tlRGVmYXVsdCgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSwgbnBfYXJn
cywgYXJnX2NvdW50LCAmbnBfcmVzdWx0KSkpCisgICAgICAgIGdvdG8gZW5kOworICAgIGlmIChy
ZXN1bHQpCisgICAgICAgIGZhaWwgPSBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQocmVzdWx0
LCAmbnBfcmVzdWx0KTsKKworZW5kOgorICAgIGZyZWUobnBfYXJncyk7CisgICAgcmV0dXJuIGZh
aWw7Cit9CisKKy8qKgorICogUmV0dXJucyB0aGUgdHlwZSB0aGlzIG9iamVjdCByZXByZXNlbnRz
LgorICoKKyAqIEBwYXJhbSBvYmogT2JqZWN0CisgKgorICogQHJldHVybiBAYyBFV0tfSlNfT0JK
RUNUIGlmIGl0IGlzIGFuIG9iamVjdCwgQGMgRVdLX0pTX0FSUkFZIGlmIGl0IGlzIGFuIGFycmF5
IGFuZAorICogQGMgRVdLX0pTX0ZVTkNUSU9OIGlmIGl0IGlzIGEgZnVuY3Rpb24uCisgKi8KK0V3
a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QqIG9i
aikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCBFV0tfSlNfT0JK
RUNUX09CSkVDVCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBFV0tfSlNf
T0JKRUNUX09CSkVDVCk7CisKKyAgICByZXR1cm4gb2JqLT50eXBlOworfQorCisvKioKKyAqIFNl
dHMgdGhlIHR5cGUgdGhpcyBvYmplY3QgcmVwcmVzZW50cy4KKyAqCisgKiBAcGFyYW0gb2JqIE9i
amVjdAorICogQHBhcmFtIHR5cGUgVHlwZQorICoKKyAqLwordm9pZCBld2tfanNfb2JqZWN0X3R5
cGVfc2V0KEV3a19KU19PYmplY3QqIG9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmopOworCisgICAgb2JqLT50eXBlID0gdHlwZTsKK30KKworLyoqCisgKiBS
ZWxlYXNlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkgQGEgdmFyLgorICoKKyAqIEBwYXJhbSB2YXIg
QGEgRXdrX0pTX1ZhcmlhbnQgdG8gYmUgcmVsZWFzZQorICovCit2b2lkIGV3a19qc192YXJpYW50
X2ZyZWUoRXdrX0pTX1ZhcmlhbnQqIHZhcikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTih2YXIpOworICAgIGlmICh2YXItPnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQor
ICAgICAgICBmcmVlKHZhci0+dmFsdWUucyk7CisgICAgZWxzZSBpZiAodmFyLT50eXBlID09IEVX
S19KU19WQVJJQU5UX09CSkVDVCkKKyAgICAgICAgZXdrX2pzX29iamVjdF9mcmVlKHZhci0+dmFs
dWUubyk7CisgICAgZnJlZSh2YXIpOworfQorCit2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2Zy
ZWUoRXdrX0pTX1ZhcmlhbnQqIHZhciwgaW50IGNvdW50KQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHZhcik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
CisgICAgICAgIGlmICh2YXJbaV0udHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisgICAg
ICAgICAgICBmcmVlKHZhcltpXS52YWx1ZS5zKTsKKyAgICAgICAgZWxzZSBpZiAodmFyW2ldLnR5
cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICAgICAgZXdrX2pzX29iamVjdF9m
cmVlKHZhcltpXS52YWx1ZS5vKTsKKyAgICB9CisgICAgZnJlZSh2YXIpOworfQorCisjZWxzZQor
CitFaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29uc3QgRXdrX0pTX09i
amVjdCogb2JqKQoreworICAgIHJldHVybiAwOworfQorCitjb25zdCBjaGFyKiBld2tfanNfb2Jq
ZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9iaikKK3sKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJpYW50KiB2YXIpCit7Cit9
CisKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tfSlNfVmFyaWFudCogdmFyLCBp
bnQgY291bnQpCit7Cit9CisKK0V3a19KU19PYmplY3QqIGV3a19qc19vYmplY3RfbmV3KGNvbnN0
IEV3a19KU19DbGFzc19NZXRhKiBtZXRhX2NscykKK3sKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09iamVjdCogb2JqKQoreworfQorCitFaW5hX0Jv
b2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09iamVjdCogb2JqLCBFd2tfSlNfVmFyaWFu
dCogYXJncywgaW50IGFyZ19jb3VudCwgRXdrX0pTX1ZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKK30KKworRXdrX0pTX09iamVjdF9UeXBlIGV3a19qc19vYmplY3Rf
dHlwZV9nZXQoRXdrX0pTX09iamVjdCogb2JqKQoreworICAgIHJldHVybiBFV0tfSlNfT0JKRUNU
X0lOVkFMSUQ7Cit9CisKK3ZvaWQgZXdrX2pzX29iamVjdF90eXBlX3NldChFd2tfSlNfT2JqZWN0
KiBvYmosIEV3a19KU19PYmplY3RfVHlwZSB0eXBlKQoreworfQorCisjZW5kaWYgLy8gRU5BQkxF
KE5FVFNDQVBFX1BMVUdJTl9BUEkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2pzLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTBjOTljYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfanMuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAgICBDb3B5cmln
aHQgKEMpIDIwMTEgUHJvRlVTSU9OIGVtYmVkZGVkIHN5c3RlbXMKKworICAgIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIGV3a19q
c19oCisjZGVmaW5lIGV3a19qc19oCisKKyNpbmNsdWRlIDxFaW5hLmg+CisjaW5jbHVkZSA8RXZh
cy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNkZWZp
bmUgRVdLX0pTX0NMQVNTX01FVEFfVkVSU0lPTiAwCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfSlNf
T2JqZWN0IEV3a19KU19PYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX0NsYXNzX01ldGEg
RXdrX0pTX0NsYXNzX01ldGE7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX1ZhcmlhbnQgRXdrX0pT
X1ZhcmlhbnQ7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX01ldGhvZCBFd2tfSlNfTWV0aG9kOwor
dHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSBFd2tfSlNfUHJvcGVydHk7Cit0eXBlZGVm
IHN0cnVjdCBfRXdrX0pTX0RlZmF1bHQgRXdrX0pTX0RlZmF1bHQ7Cit0eXBlZGVmIEVpbmFfQm9v
bCAoKkV3a19KU19TZXRfQ2IpKEV3a19KU19PYmplY3QgKm9iaiwgY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX0pT
X0dldF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBjaGFyICpuYW1lLCBFd2tfSlNfVmFy
aWFudCAqdmFsdWUpOwordHlwZWRlZiBFaW5hX0Jvb2wgKCpFd2tfSlNfRGVsX0NiKShFd2tfSlNf
T2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOwordHlwZWRlZiBFd2tfSlNfVmFyaWFudCog
KCpFd2tfSlNfSW52b2tlX0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIEV3a19KU19WYXJpYW50ICph
cmdzLCBpbnQgYXJnQ291bnQpOworCit0eXBlZGVmIGVudW0geworICAgIEVXS19KU19WQVJJQU5U
X1ZPSUQsCisgICAgRVdLX0pTX1ZBUklBTlRfTlVMTCwKKyAgICBFV0tfSlNfVkFSSUFOVF9CT09M
LAorICAgIEVXS19KU19WQVJJQU5UX0lOVDMyLAorICAgIEVXS19KU19WQVJJQU5UX0RPVUJMRSwK
KyAgICBFV0tfSlNfVkFSSUFOVF9TVFJJTkcsCisgICAgRVdLX0pTX1ZBUklBTlRfT0JKRUNUCit9
IEV3a19KU19WYXJpYW50X1R5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgICAgRVdLX0pTX09CSkVD
VF9PQkpFQ1QsCisgICAgRVdLX0pTX09CSkVDVF9BUlJBWSwKKyAgICBFV0tfSlNfT0JKRUNUX0ZV
TkNUSU9OLAorICAgIEVXS19KU19PQkpFQ1RfSU5WQUxJRAorfSBFd2tfSlNfT2JqZWN0X1R5cGU7
CisKK3N0cnVjdCBfRXdrX0pTX1ZhcmlhbnQgeworICAgIEV3a19KU19WYXJpYW50X1R5cGUgdHlw
ZTsKKyAgICB1bmlvbiB7CisgICAgICAgIEVpbmFfQm9vbCBiOworICAgICAgICBpbnQgaTsKKyAg
ICAgICAgZG91YmxlIGQ7CisgICAgICAgIGNoYXIgKnM7CisgICAgICAgIEV3a19KU19PYmplY3Qg
Km87CisgICAgfSB2YWx1ZTsKK307CisKK3N0cnVjdCBfRXdrX0pTX01ldGhvZCB7CisgICAgY29u
c3QgY2hhciAqbmFtZTsKKyAgICBFd2tfSlNfSW52b2tlX0NiIGludm9rZTsKK307CisKK3N0cnVj
dCBfRXdrX0pTX1Byb3BlcnR5IHsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIEV3a19KU19T
ZXRfQ2Igc2V0OworICAgIEV3a19KU19HZXRfQ2IgZ2V0OworICAgIEV3a19KU19EZWxfQ2IgZGVs
OworICAgIEV3a19KU19WYXJpYW50IHZhbHVlOworfTsKKworc3RydWN0IF9Fd2tfSlNfRGVmYXVs
dCB7CisgICAgRXdrX0pTX1NldF9DYiBzZXQ7CisgICAgRXdrX0pTX0dldF9DYiBnZXQ7CisgICAg
RXdrX0pTX0RlbF9DYiBkZWw7Cit9OworCitzdHJ1Y3QgX0V3a19KU19DbGFzc19NZXRhIHsKKyAg
ICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsgLy8gZGVmaW5lCisgICAgY29uc3QgRXdrX0pTX01ldGhv
ZCAqbWV0aG9kczsgLy8gbnVsbCB0ZXJtaW5hdGVkIGFycmF5CisgICAgY29uc3QgRXdrX0pTX1By
b3BlcnR5ICpwcm9wZXJ0aWVzOyAvLyBudWxsIHRlcm1pbmF0ZWQgYXJyYXkKKyAgICBFd2tfSlNf
RGVmYXVsdCBkZWZhdWx0X3Byb3A7Cit9OworCitFQVBJIEVpbmFfSGFzaCAqZXdrX2pzX29iamVj
dF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0ICpvYmopOworRUFQSSBjb25zdCBj
aGFyICpld2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QgKm9iaik7CisK
K0VBUEkgdm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJpYW50ICp2YXIpOworRUFQ
SSB2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1ZhcmlhbnQgKnZhciwgaW50
IGNvdW50KTsKK0VBUEkgRXdrX0pTX09iamVjdCAqZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdr
X0pTX0NsYXNzX01ldGEgKm1ldGFfY2xzKTsKK0VBUEkgdm9pZCBld2tfanNfb2JqZWN0X2ZyZWUo
RXdrX0pTX09iamVjdCAqb2JqKTsKK0VBUEkgRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tl
KEV3a19KU19PYmplY3QgKm9iaiwgRXdrX0pTX1ZhcmlhbnQgKmFyZ3MsIGludCBhcmdfY291bnQs
IEV3a19KU19WYXJpYW50ICpyZXN1bHQpOworRUFQSSBFd2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pz
X29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0ICpvYmopOworRUFQSSB2b2lkIGV3a19qc19v
YmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCAqb2JqLCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlw
ZSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfanNf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaAppbmRleCAzMzlhMGEwLi5hZWM0NThjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ByaXZhdGUuaApAQCAtMjksOSArMjksMTEgQEAKICNpbmNs
dWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCiAjaW5jbHVkZSAiRVdlYktpdC5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiTlBfanNvYmplY3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKKyNpbmNsdWRlICJl
d2tfanMuaCIKICNpbmNsdWRlICJld2tfbG9nZ2luZy5oIgogI2luY2x1ZGUgImV3a191dGlsLmgi
CiAKQEAgLTQ2LDYgKzQ4LDIxIEBAIGV4dGVybiAiQyIgewogLy8gSWYgZGVmaW5lZCwgZXdrIHdp
bGwgZG8gdHlwZSBjaGVja2luZyB0byBlbnN1cmUgb2JqZWN0cyBhcmUgb2YgY29ycmVjdCB0eXBl
CiAjZGVmaW5lIEVXS19UWVBFX0NIRUNLIDEKIAorI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQorI2RlZmluZSBFV0tfSlNfT0JKRUNUX01BR0lDIDB4Njk2OTY5CisKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfSlNfQ2xhc3MgRXdrX0pTX0NsYXNzOworc3RydWN0IF9Fd2tfSlNfT2JqZWN0IHsK
KyAgICBKYXZhU2NyaXB0T2JqZWN0IGJhc2U7CisgICAgY29uc3QgY2hhciAqbmFtZTsKKyAgICBj
b25zdCBFd2tfSlNfQ2xhc3MgKmNsczsKKyAgICBFaW5hX0hhc2ggKnByb3BlcnRpZXM7CisgICAg
RXZhc19PYmplY3QgKnZpZXc7IC8vIGV3a192aWV3OiBjaGVjayBpZiB0aGlzIG9iamVjdCBoYXMg
YWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKKyAgICBFd2tfSlNfT2JqZWN0
X1R5cGUgdHlwZTsKKyAgICBFSU5BX01BR0lDOworfTsKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKKwogLy8gZm9yd2FyZCBkZWNsYXJhdGlvbnMKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIHN0cnVjdCBQb3B1cE1lbnVDbGllbnQ7CkBAIC0xMTQsNiArMTMxLDEwIEBAIHZvaWQg
ZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCAqbywgRXdrX0Rvd25sb2FkICpk
b3dubG9hZCk7CiB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChF
dmFzX09iamVjdCAqbyk7CiB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2No
YW5nZWQoRXZhc19PYmplY3QgKm8pOwogCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Cit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QgKm8sIEV2
YXNfT2JqZWN0ICpmcmFtZSk7CisjZW5kaWYKKwogaW50IGV3a191dGlsX2RwaV9nZXQodm9pZCk7
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAK
aW5kZXggMDk5NGJkMC4uYWI5NjRkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBA
IC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAiZXdrX3ZpZXcuaCIKIAogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkTGlzdEltcGwuaCIKKyNpbmNsdWRlICJCcmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRFZmwuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNv
bnRyb2xsZXIuaCIKQEAgLTQwLDEwICs0MSwxNCBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEVmbC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNp
bmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKKyNpbmNsdWRlICJKU0RPTVdpbmRvdy5oIgorI2luY2x1
ZGUgIkpTTG9jay5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUg
IlBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1
ZGUgIlJlbmRlclRoZW1lLmgiCisjaW5jbHVkZSAiY19pbnN0YW5jZS5oIgogI2luY2x1ZGUgImV3
a19wcml2YXRlLmgiCiAKICNpbmNsdWRlIDxFY29yZS5oPgpAQCAtMzM3Myw2ICszMzc4LDE4IEBA
IHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCAqbywgRXdrX0Rvd25s
b2FkICpkb3dubG9hZCkKIAogLyoqCiAgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydHMgdGhlIEpTIHdp
bmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJh
bSBmcmFtZSB0aGUgZnJhbWUuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9j
bGVhcihFdmFzX09iamVjdCAqbywgRXZhc19PYmplY3QgKmZyYW1lKQoreworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImpzLHdpbmRvd29iamVjdCxjbGVhciIsIGZyYW1l
KTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIHZpZXdwb3J0IGhhcyBj
aGFuZ2VkLgogICoKICAqIEBwYXJhbSBhcmd1bWVudHMgdmlld3BvcnQgYXJndW1lbnQuCkBAIC0z
NTIwLDYgKzM1MzcsNDAgQEAgRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2Rl
Y2lzaW9uKEV2YXNfT2JqZWN0ICpvLCBFd2tfRnJhbWVfUmVzb3VyY2UKICAgICByZXR1cm4gc2Qt
PmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3QpOwogfQogCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCAqbywgRXdrX0pTX09iamVj
dCAqb2JqLCBjb25zdCBjaGFyICpvYmpfbmFtZSkKK3sKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExV
R0lOX0FQSSkKKyAgICBpZiAob2JqLT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBh
ZGRlZCB0byBhbm90aGVyIGV3a192aWV3CisgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOworICAg
IG9iai0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9ial9uYW1lKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworCisgICAgSlNDOjpKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgV2ViQ29yZTo6SlNET01XaW5k
b3cgKndpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbl9mcmFtZSwgV2ViQ29yZTo6bWFp
blRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIEpTQzo6QmluZGluZ3M6OlJvb3RPYmplY3QgKnJv
b3Q7CisgICAgcm9vdCA9IHByaXYtPm1haW5fZnJhbWUtPnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9i
amVjdCgpOworCisgICAgaWYgKCF3aW5kb3cpIHsKKyAgICAgICAgRVJSKCJXYXJuaW5nOiBjb3Vs
ZG4ndCBnZXQgd2luZG93IG9iamVjdCIpOworICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKKyAg
ICB9CisKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwor
CisgICAgb2JqLT52aWV3ID0gbzsKKyAgICBKU0M6OkpTT2JqZWN0ICpydW50aW1lT2JqZWN0ID0g
KEpTQzo6SlNPYmplY3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVj
dCopb2JqLCByb290KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAgICBKU0M6OklkZW50
aWZpZXIgaWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqX25hbWUpOworCisgICAgSlNDOjpQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICB3aW5kb3ctPnB1dChleGVjLCBpZCwgcnVudGltZU9i
amVjdCwgc2xvdCk7CisgICAgcmV0dXJuIEVJTkFfVFJVRTsKKyNlbHNlCisgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CisjZW5kaWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit9CisKKwog
LyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCB0aGUgY29udGVudHMgaGF2ZSByZXNp
emVkLiBUaGUgZXdrX3ZpZXcgY2FsbHMgY29udGVudHNfcmVzaXplLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuaAppbmRleCBhZmU5MTA1Li45OTllN2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
aApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2ZyYW1lLmgiCiAjaW5jbHVkZSAi
ZXdrX2hpc3RvcnkuaCIKKyNpbmNsdWRlICJld2tfanMuaCIKICNpbmNsdWRlICJld2tfd2luZG93
X2ZlYXR1cmVzLmgiCiAKICNpbmNsdWRlIDxFdmFzLmg+CkBAIC04Niw2ICs4Nyw3IEBAIGV4dGVy
biAiQyIgewogICogIC0gImlucHV0bWV0aG9kLGNoYW5nZWQiLCBFaW5hX0Jvb2w6IHJlcG9ydHMg
dGhhdCBpbnB1dCBtZXRob2Qgd2FzIGNoYW5nZWQgYW5kCiAgKiAgICBpdCBnaXZlcyBhIGJvb2xl
YW4gdmFsdWUgd2hldGhlciBpdCdzIGVuYWJsZWQgb3Igbm90IGFzIGFuIGFyZ3VtZW50LgogICog
IC0gInZpZXcscmVzaXplZCIsIHZvaWQ6IHZpZXcgb2JqZWN0J3Mgc2l6ZSB3YXMgY2hhbmdlZC4K
KyAqICAtICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCB2b2lkOiBSZXBvcnQgdGhhdCB0aGUgSlMg
d2luZG93IG9iamVjdCBoYXMgYmVlbiBjbGVhcmVkLgogICogIC0gImxvYWQsbmV3d2luZG93LHNo
b3ciLCB2b2lkOiByZXBvcnRzIHRoYXQgYSBuZXcgd2luZG93IHdhcyBjcmVhdGVkIGFuZCBjYW4g
YmUgc2hvd24uCiAgKiAgLSAicmVzdG9yZSIsIEV2YXNfT2JqZWN0ICo6IHJlcG9ydHMgdGhhdCB2
aWV3IHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRpdGlvbnMKICAqICAgIGFuZCBp
dCBnaXZlcyBhIGZyYW1lIHRoYXQgb3JpZ2luYXRlZCByZXN0b3JlIGFzIGFuIGFyZ3VtZW50LgpA
QCAtMTY4NCw2ICsxNjg2LDE4IEBAIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X21vZGVfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSk7CiAgKiBAcmV0dXJuIGVudW0g
dmFsdWUgb2YgRXdrX1ZpZXdfTW9kZSB0aGF0IGluZGljYXRlcyBjdXJyZW50IHZpZXcgbW9kZS4K
ICAqLwogRUFQSSBFd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0KEV2YXNfT2JqZWN0ICpv
KTsKKworLyoqCisgKiBDcmVhdGVzIGEgSlMgb2JqZWN0IG5hbWVkIEBhIG9ial9uYW1lIGFzIHBy
b3BlcnR5IG9mIHRoZSB3aW5kb3cgb2JqZWN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb24gYSBj
YWxsYmFjayBjb25uZWN0ZWR0byB0aGUKKyAqIGpzLHdpbmRvd29iamVjdCxjbGVhciBzaWduYWwu
CisgKgorICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBvYmogb2JqZWN0IHRoYXQgd2lsbCBi
ZSBhZGRlZChzZWU6IEBhIGV3a19qc19vYmplY3RfbmV3KS4KKyAqIEBwYXJhbSBvYmpfbmFtZSBu
YW1lIG9mIHRoZSBvYmplY3QuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgb2JqZWN0
IHdhcyBhZGRlZCwgQGMgRUlOQV9GQUxTRSBpZiBub3QuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3
a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QgKm8sIEV3a19KU19PYmplY3QgKm9iaiwg
Y29uc3QgY2hhciAqb2JqX25hbWUpOwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLS0g
CjEuNy42Cgo=
</data>
<flag name="review"
          id="98580"
          type_id="1"
          status="+"
          setter="tonikitoo"
    />
    <flag name="commit-queue"
          id="100602"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>