<?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>98594</bug_id>
          
          <creation_ts>2012-10-06 03:23:57 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add History callbacks API</short_desc>
          <delta_ts>2012-10-10 01:14:43 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</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>1</everconfirmed>
          <reporter name="Mikhail Pozdnyakov">mikhail.pozdnyakov</reporter>
          <assigned_to name="Mikhail Pozdnyakov">mikhail.pozdnyakov</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jinwoo7.song</cc>
    
    <cc>kenneth</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>736225</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-06 03:23:57 -0700</bug_when>
    <thetext>History Client API should be added to Ewk_Context so that it is possible for the API client to compose global history.
An important part of this API is visited links tracking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736576</commentid>
    <comment_count>1</comment_count>
      <attachid>167520</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 01:53:12 -0700</bug_when>
    <thetext>Created attachment 167520
WIP patch

WIP as
- no unit test (currently working on them)
- no Change log records yet
- missing description for History Client callback parameters

But still the whole approach is already clear and I would like to hear opinions (remarks) about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736579</commentid>
    <comment_count>2</comment_count>
      <attachid>167520</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-08 02:01:45 -0700</bug_when>
    <thetext>Comment on attachment 167520
WIP patch

Attachment 167520 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14196823</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736589</commentid>
    <comment_count>3</comment_count>
      <attachid>167520</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-10-08 02:23:17 -0700</bug_when>
    <thetext>Comment on attachment 167520
WIP patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:117
&gt; +        memset(&amp;historyClient, 0, sizeof(Ewk_Context_History_Client));

Why is this necessary?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:301
&gt; +    if (!client) {
&gt; +        memset(&amp;ewkContext-&gt;historyClient, 0, sizeof(Ewk_Context_History_Client));
&gt; +        return;
&gt; +    }
&gt; +
&gt; +    memcpy(&amp;ewkContext-&gt;historyClient, client, sizeof(Ewk_Context_History_Client));

Why is this better than a simple assignment?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:304
&gt; +const Ewk_Context_History_Client *ewk_context_history_client_get(const Ewk_Context* ewkContext)

Wrong placement of the first * (I feel like Gyuyoung after reading what I wrote :-)

&gt; Source/WebKit2/UIProcess/API/efl/ewk_navigation_data.h:28
&gt; + * @brief   Describes the Ewk navigation data API.

It would also be nice to explain what an &quot;EWK Navigation Data&quot; is.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:86
&gt; +static PageViewMap viewMap;

Creating a static non-POD object like this is usually dangerous, using DEFINE_STATIC_LOCAL is probably better.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:1552
&gt; +    return (found != viewMap.end()) ? found-&gt;second : 0;

You probably need to use `value&apos; instead of `second&apos; after http://trac.webkit.org/changeset/130612.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_private.h:97
&gt; +const Evas_Object *get_veiw_by_page(const WebKit::WebPageProxy*);

Typo: veiw. Any reason for not using the usual naming scheme here, btw?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736593</commentid>
    <comment_count>4</comment_count>
      <attachid>167520</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-08 02:29:33 -0700</bug_when>
    <thetext>Comment on attachment 167520
WIP patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:117
&gt;&gt; +        memset(&amp;historyClient, 0, sizeof(Ewk_Context_History_Client));
&gt; 
&gt; Why is this necessary?

Remember memset is not a free operation

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:113
&gt; +    Ewk_Context_Did_Navigate_With_Navigation_Data_Cb didNavigateWithNavigationData;
&gt; +    Ewk_Context_Did_Perform_Client_Redirect_Cb didPerformClientRedirect;
&gt; +    Ewk_Context_Did_Perform_Server_Redirect_Cb didPerformServerRedirect;
&gt; +    Ewk_Context_Did_Update_History_Title_Cb didUpdateHistoryTitle;
&gt; +    Ewk_Context_Populate_Visited_Links_Cb populateVisitedLinks;

I am wondering whether these should follow more EFL naming practices? Or is this only used internally?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:779
&gt; +    addViewToMap(ewkView);

which map? We should use better func names

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_private.h:97
&gt;&gt; +const Evas_Object *get_veiw_by_page(const WebKit::WebPageProxy*);
&gt; 
&gt; Typo: veiw. Any reason for not using the usual naming scheme here, btw?

isn&apos;t it from instead of by?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736602</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 02:54:23 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 167520 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167520&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:117
&gt; &gt;&gt; +        memset(&amp;historyClient, 0, sizeof(Ewk_Context_History_Client));
&gt; &gt; 
&gt; &gt; Why is this necessary?
&gt; 
I was under influence of WK Clients which have different sizes depending on version, so memset() is often used when working with them :)
Off course, default initialization in constructor is better to use in this case.
Thanks for pointing this out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736603</commentid>
    <comment_count>6</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 02:55:37 -0700</bug_when>
    <thetext>&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:86
&gt; &gt; +static PageViewMap viewMap;
&gt; 
&gt; Creating a static non-POD object like this is usually dangerous, using DEFINE_STATIC_LOCAL is probably better.

Thanks for nice hint!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736731</commentid>
    <comment_count>7</comment_count>
      <attachid>167547</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 09:43:34 -0700</bug_when>
    <thetext>Created attachment 167547
patch

Added unit tests. Took comments from Rakuco and Kenneth into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736739</commentid>
    <comment_count>8</comment_count>
      <attachid>167547</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-08 09:48:55 -0700</bug_when>
    <thetext>Comment on attachment 167547
patch

Attachment 167547 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14218333</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736750</commentid>
    <comment_count>9</comment_count>
      <attachid>167552</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 09:58:57 -0700</bug_when>
    <thetext>Created attachment 167552
patch v2

uri -&gt; url, test_ewk2_context_history_delegate.cpp -&gt; test_ewk2_context_history_client.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736766</commentid>
    <comment_count>10</comment_count>
      <attachid>167552</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-10-08 10:20:15 -0700</bug_when>
    <thetext>Comment on attachment 167552
patch v2

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:90
&gt; +        , historyClient()

Does this really initialize all the members to 0?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:296
&gt; +        ewkContext-&gt;historyClient = { 0, 0, 0, 0, 0, 0 };

Why not use memset here? This be more maintainable when we add new callbacks.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_navigation_data.cpp:107
&gt; +    ASSERT(dataRef);

EINA_SAFETY_ON_NULL_RETURN_VAL?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:86
&gt; +DEFINE_STATIC_LOCAL(PageViewMap, viewMap, ());

This is usually used inside a static function.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:1550
&gt; +    PageViewMap::const_iterator found = viewMap.find(page);

Why not simply &quot;return viewMap.get(page);&quot; ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_private.h:97
&gt; +const Evas_Object *ewk_view_from_page_get(const WebKit::WebPageProxy*);

Star on wrong side.

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context_history_client.cpp:132
&gt; +    (*countLoadFinished)--;

preincrement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736844</commentid>
    <comment_count>11</comment_count>
      <attachid>167552</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 11:36:29 -0700</bug_when>
    <thetext>Comment on attachment 167552
patch v2

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:90
&gt;&gt; +        , historyClient()
&gt; 
&gt; Does this really initialize all the members to 0?

yep, it is POD value initialization

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:296
&gt;&gt; +        ewkContext-&gt;historyClient = { 0, 0, 0, 0, 0, 0 };
&gt; 
&gt; Why not use memset here? This be more maintainable when we add new callbacks.

I do not believe, we&apos;ll ever add new callbacks to it, but I&apos;m OK with memset

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_navigation_data.cpp:107
&gt;&gt; +    ASSERT(dataRef);
&gt; 
&gt; EINA_SAFETY_ON_NULL_RETURN_VAL?

it&apos;s not public function and we really do not anticipate &apos;0&apos; here. I can add EINA_SAFETY_ON_NULL_RETURN_VAL but would keep the assertion as well

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:86
&gt;&gt; +DEFINE_STATIC_LOCAL(PageViewMap, viewMap, ());
&gt; 
&gt; This is usually used inside a static function.

my bad :(

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:1550
&gt;&gt; +    PageViewMap::const_iterator found = viewMap.find(page);
&gt; 
&gt; Why not simply &quot;return viewMap.get(page);&quot; ?

Indeed! WTF::HashMap::get handles the case when key is not found.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736895</commentid>
    <comment_count>12</comment_count>
      <attachid>167579</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-08 11:59:14 -0700</bug_when>
    <thetext>Created attachment 167579
patch v3

Took comments from Chris into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737072</commentid>
    <comment_count>13</comment_count>
      <attachid>167579</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-08 14:44:58 -0700</bug_when>
    <thetext>Comment on attachment 167579
patch v3

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:109
&gt; +    Ewk_Context_Did_Navigate_With_Navigation_Data_Cb ewk_context_navigation_performed;

Is it really good that the callback def is so differently named than the func? Do you have examples of this from other EFL libs? (maybe it is all just inconsistent :-)) just wondering as I dont like changing api later

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_history_client.cpp:133
&gt; +
&gt; +

why two newlines?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737308</commentid>
    <comment_count>14</comment_count>
      <attachid>167579</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-08 18:29:15 -0700</bug_when>
    <thetext>Comment on attachment 167579
patch v3

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:310
&gt; +void ewk_context_add_visited_link(Ewk_Context* ewkContext, const char* visitedURL)

Generally, *_add* is placed at the end of function on efl API side.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:1552
&gt; +const Evas_Object* ewk_view_from_page_get(const WebKit::WebPageProxy* page)

Just wondering, do you think this function name is reasonable ?  ewk_view_get? or ewk_view_get_from_page(because this is private function) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737509</commentid>
    <comment_count>15</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 01:08:24 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 167579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167579&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:310
&gt; &gt; +void ewk_context_add_visited_link(Ewk_Context* ewkContext, const char* visitedURL)
&gt; 
&gt; Generally, *_add* is placed at the end of function on efl API side.

yes, thanks for catch!

&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:1552
&gt; &gt; +const Evas_Object* ewk_view_from_page_get(const WebKit::WebPageProxy* page)
&gt; 
&gt; Just wondering, do you think this function name is reasonable ?  ewk_view_get? or ewk_view_get_from_page(because this is private function) ?

Even though it&apos;s private API I would keep it in consistence with public API names. &apos;ewk_view_get&apos; to my mind would be too generic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737512</commentid>
    <comment_count>16</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 01:13:07 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 167579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167579&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:109
&gt; &gt; +    Ewk_Context_Did_Navigate_With_Navigation_Data_Cb ewk_context_navigation_performed;
&gt; 
&gt; Is it really good that the callback def is so differently named than the func? Do you have examples of this from other EFL libs? (maybe it is all just inconsistent :-)) just wondering as I dont like changing api later
&gt; 

Yeah, it looks quite ugly.. I should think of renaming maybe both defs and func names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737634</commentid>
    <comment_count>17</comment_count>
      <attachid>167728</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 04:07:53 -0700</bug_when>
    <thetext>Created attachment 167728
patch v4

Having a discussion with Kenneth came to conclusion that having &quot;set callbacks&quot; function in public API is more appropriate from EFL style POV.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737636</commentid>
    <comment_count>18</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 04:10:57 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=167728) [details]
&gt; patch v4
&gt; 
&gt; Having a discussion with Kenneth came to conclusion that having &quot;set callbacks&quot; function in public API is more appropriate from EFL style POV.

Had to commit style violation for code readability - put each function parameter to a new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737639</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 04:11:32 -0700</bug_when>
    <thetext>Attachment 167728 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_context.h:241:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:292:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:293:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:294:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:296:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:297:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 7 in 14 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>737641</commentid>
    <comment_count>20</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 04:12:53 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Attachment 167728 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:241:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:292:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:293:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:294:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:295:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:296:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:297:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
&gt; Total errors found: 7 in 14 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

as I mentioned in comment #18</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737676</commentid>
    <comment_count>21</comment_count>
      <attachid>167728</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-09 04:58:33 -0700</bug_when>
    <thetext>Comment on attachment 167728
patch v4

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:297
&gt;&gt; +                                       void* data)
&gt; 
&gt; Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]

Ah this is the implementation. What is the problem with it being on one line? The idea is that the IDE will wrap it for you.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:74
&gt; + * @brief Type definition for a function that will be called back when @a view did navigation.

did navigation? navigated from one page to another?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.h:229
&gt; + * The given @a client pointer is not stored anywhere and is used only once for copying of  @c Ewk_Context_History_Client fields.

This comment doesnt seem right</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737687</commentid>
    <comment_count>22</comment_count>
      <attachid>167740</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 05:13:06 -0700</bug_when>
    <thetext>Created attachment 167740
patch v5

Fixed issues in documentation, put ewk_context_history_callbacks_set parameters into one line in .cpp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737689</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-09 05:16:49 -0700</bug_when>
    <thetext>Attachment 167740 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_context.h:242:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 14 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>737692</commentid>
    <comment_count>24</comment_count>
      <attachid>167740</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-10-09 05:18:55 -0700</bug_when>
    <thetext>Comment on attachment 167740
patch v5

Someone else might want to have a final look</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737743</commentid>
    <comment_count>25</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-09 06:38:06 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 167740 [details])
&gt; Someone else might want to have a final look

So, any volunteers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737819</commentid>
    <comment_count>26</comment_count>
      <attachid>167740</attachid>
    <who name="Jinwoo Song">jinwoo7.song</who>
    <bug_when>2012-10-09 08:47:57 -0700</bug_when>
    <thetext>Comment on attachment 167740
patch v5

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_navigation_data.h:91
&gt; + * @see ewk_back_forward_list_item_original_uri_get()

nit: uri -&gt; url</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738411</commentid>
    <comment_count>27</comment_count>
      <attachid>167740</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-09 18:27:34 -0700</bug_when>
    <thetext>Comment on attachment 167740
patch v5

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

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context_history_callbacks.cpp:78
&gt; +    // FIXME : WebFrameLoaderClient sends empty title.

nit : FIXME : -&gt; FIXME:

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_context_history_callbacks.cpp:180
&gt; +    loadUrlSync(httpServer()-&gt;getURLForPath(toBeRedirectedPath).data());

Bug 97920 is changing the return type of *loadUrlSync()*. If the patch is landed, you may need to use ASSERT_TRUE for loadUrlSync().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738693</commentid>
    <comment_count>28</comment_count>
      <attachid>167947</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2012-10-10 00:54:21 -0700</bug_when>
    <thetext>Created attachment 167947
to be landed

Addressed comments from Jinwoo and Gyuyoung. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738696</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 00:56:49 -0700</bug_when>
    <thetext>Attachment 167947 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit2/ChangeLog&apos;, u&apos;Source/WebKit...&quot; exit_code: 1
Source/WebKit2/UIProcess/API/efl/ewk_context.h:242:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
Total errors found: 1 in 14 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>738718</commentid>
    <comment_count>30</comment_count>
      <attachid>167947</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 01:14:37 -0700</bug_when>
    <thetext>Comment on attachment 167947
to be landed

Clearing flags on attachment: 167947

Committed r130871: &lt;http://trac.webkit.org/changeset/130871&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738719</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-10 01:14:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167520</attachid>
            <date>2012-10-08 01:53:12 -0700</date>
            <delta_ts>2012-10-08 09:43:34 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>bug98594_WIP</filename>
            <type>text/plain</type>
            <size>30686</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGNkZTQ3NTc3MWZmMjIyMGZjNjFlMzM1NTQ4ODVmOTA5ZDVhMmExMDIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm1FZmwuY21ha2UKaW5kZXggNDAzNmI3ZS4uNDM1NTdhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwu
Y21ha2UKQEAgLTUwLDYgKzUwLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Nvb2tpZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9q
b2IuY3BwCkBAIC01Nyw2ICs1OCw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2ludGVudF9zZXJ2aWNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmNw
cAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3NldHRpbmdzLmNwcApAQCAtMjMyLDYgKzIzNCw3IEBAIFNFVCAoRVdlYktpdDJf
SEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2ludGVudC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5oIgorICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfc2V0dGluZ3Mu
aCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IDEz
ZWZhYjEuLmMyMWYyOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdl
YktpdDIuaApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNs
dWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tfbWFpbi5oIgorI2luY2x1
ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKICNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb24uaCIKICNpbmNsdWRlICJld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAjaW5jbHVk
ZSAiZXdrX3NldHRpbmdzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dC5jcHAKaW5kZXggOTQyZTliOS4uMDNkNjViYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMzEsNiArMzEs
NyBAQAogI2luY2x1ZGUgIldLU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2lu
Y2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCisjaW5jbHVkZSAi
ZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250
ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21hbmFnZXJfY2xp
ZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJpdmF0ZS5oIgpA
QCAtNzksNiArODAsOCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAgICBXS1JldGFpblB0cjxX
S1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJMU2NoZW1lSGFu
ZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKIAorICAgIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xp
ZW50IGhpc3RvcnlDbGllbnQ7CisKICAgICBfRXdrX0NvbnRleHQoV0tSZXRhaW5QdHI8V0tDb250
ZXh0UmVmPiBjb250ZXh0UmVmKQogICAgICAgICA6IF9fcmVmKDEpCiAgICAgICAgICwgY29udGV4
dChjb250ZXh0UmVmKQpAQCAtMTA5LDYgKzExMiw5IEBAIHN0cnVjdCBfRXdrX0NvbnRleHQgewog
I2VuZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNo
KHRoaXMpOwogICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMp
OworICAgICAgICBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2godGhpcyk7CisKKyAg
ICAgICAgbWVtc2V0KCZoaXN0b3J5Q2xpZW50LCAwLCBzaXplb2YoRXdrX0NvbnRleHRfSGlzdG9y
eV9DbGllbnQpKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKQEAgLTI4MiwzICsyODgs
MzEgQEAgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQoRXdr
X0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWIKICAgICBld2tDb250ZXh0LT52aWJyYXRpb25Q
cm92aWRlci0+c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNhbmNlbCwgZGF0
YSk7CiAjZW5kaWYKIH0KKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9zZXQoRXdr
X0NvbnRleHQqIGV3a0NvbnRleHQsIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBj
bGllbnQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisK
KyAgICBpZiAoIWNsaWVudCkgeworICAgICAgICBtZW1zZXQoJmV3a0NvbnRleHQtPmhpc3RvcnlD
bGllbnQsIDAsIHNpemVvZihFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbWVtY3B5KCZld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LCBj
bGllbnQsIHNpemVvZihFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCkpOworfQorCitjb25zdCBF
d2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCAqZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0
KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKworICAgIHJldHVybiAmZXdrQ29udGV4dC0+
aGlzdG9yeUNsaWVudDsKK30KKwordm9pZCBld2tfY29udGV4dF9hZGRfdmlzaXRlZF9saW5rKEV3
a19Db250ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiB2aXNpdGVkVVJMKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHZpc2l0ZWRVUkwpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IHdrVmlzaXRlZFVSTChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyh2aXNp
dGVkVVJMKSk7CisgICAgV0tDb250ZXh0QWRkVmlzaXRlZExpbmsoZXdrQ29udGV4dC0+Y29udGV4
dC5nZXQoKSwgd2tWaXNpdGVkVVJMLmdldCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCmluZGV4IGU2ZTllMGMuLjExYjhmMTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApAQCAtMzgs
NiArMzgsNyBAQAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKICNpbmNsdWRlICJld2tfY29va2ll
X21hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAi
ZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIApAQCAtNjksNiAr
NzAsNTIgQEAgdHlwZWRlZiB2b2lkICgqRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0ZV9DYiko
dWludDY0X3QgdmlicmF0aW9uX3RpbWUsIHZvaWQgKnUKIHR5cGVkZWYgdm9pZCAoKkV3a19WaWJy
YXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IpKHZvaWQgKnVzZXJfZGF0YSk7CiAKIC8q
KgorICogQHR5cGVkZWYgRXdrX0NvbnRleHRfRGlkX05hdmlnYXRlX1dpdGhfTmF2aWdhdGlvbl9E
YXRhX0NiIEV3a19Db250ZXh0X0RpZF9OYXZpZ2F0ZV9XaXRoX05hdmlnYXRpb25fRGF0YV9DYgor
ICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2Fs
bGVkIGJhY2sgd2hlbiBAYSB2aWV3IGRpZCBuYXZpZ2F0aW9uLgorICovCit0eXBlZGVmIHZvaWQg
KCpFd2tfQ29udGV4dF9EaWRfTmF2aWdhdGVfV2l0aF9OYXZpZ2F0aW9uX0RhdGFfQ2IpKGNvbnN0
IEV2YXNfT2JqZWN0ICp2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhICpuYXZpZ2F0aW9uX2RhdGEs
IHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0NvbnRleHRfRGlkX1Bl
cmZvcm1fQ2xpZW50X1JlZGlyZWN0X0NiIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX0NsaWVudF9S
ZWRpcmVjdF9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0
IHdpbGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRp
cmVjdC4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1fQ2xpZW50
X1JlZGlyZWN0X0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29uc3QgY2hhciAqc291cmNl
X3VybCwgY29uc3QgY2hhciAqZGVzdGluYXRpb25fdXJsLCB2b2lkICp1c2VyX2RhdGEpOworCisv
KioKKyAqIEB0eXBlZGVmIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX1NlcnZlcl9SZWRpcmVjdF9D
YiBFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9TZXJ2ZXJfUmVkaXJlY3RfQ2IKKyAqIEBicmllZiBU
eXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNrIHdo
ZW4gQGEgdmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QuCisgKi8KK3R5cGVkZWYgdm9p
ZCAoKkV3a19Db250ZXh0X0RpZF9QZXJmb3JtX1NlcnZlcl9SZWRpcmVjdF9DYikoY29uc3QgRXZh
c19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIgKmRlc3Rp
bmF0aW9uX3VybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfQ29u
dGV4dF9EaWRfVXBkYXRlX0hpc3RvcnlfVGl0bGVfQ2IgRXdrX0NvbnRleHRfRGlkX1VwZGF0ZV9I
aXN0b3J5X1RpdGxlX0NiCisgKiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9u
IHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIGhpc3RvcnkgdGl0bGUgaXMgdXBkYXRlZC4K
KyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlkX1VwZGF0ZV9IaXN0b3J5X1RpdGxl
X0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNo
YXIgKnVybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfQ29udGV4
dF9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiIEV3a19Db250ZXh0X1BvcHVsYXRlX1Zpc2l0ZWRf
TGlua3NfQ2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gY2xpZW50IGlzIGFza2VkIHRvIHByb3ZpZGUgdmlzaXRl
ZCBsaW5rcyBmcm9tIGEgY2xpZW50LW1hbmFnZWQgc3RvcmFnZS4KKyAqCisgKiBAc2VlIGV3a19j
b250ZXh0X2FkZF92aXNpdGVkX2xpbmsKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRf
UG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYikodm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBA
YnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgaGlzdG9yeSBkZWxlZ2F0ZSBjYWxsYmFja3MgYW5k
IHVzZXIgZGF0YSB0byBiZSBwYXNzZWQuCisgKi8KK3N0cnVjdCBfRXdrX0NvbnRleHRfSGlzdG9y
eV9DbGllbnQgeworICAgIHZvaWQgKnVzZXJfZGF0YTsKKyAgICBFd2tfQ29udGV4dF9EaWRfTmF2
aWdhdGVfV2l0aF9OYXZpZ2F0aW9uX0RhdGFfQ2IgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGE7CisgICAgRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1fQ2xpZW50X1JlZGlyZWN0X0NiIGRpZFBl
cmZvcm1DbGllbnRSZWRpcmVjdDsKKyAgICBFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9TZXJ2ZXJf
UmVkaXJlY3RfQ2IgZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0OworICAgIEV3a19Db250ZXh0X0Rp
ZF9VcGRhdGVfSGlzdG9yeV9UaXRsZV9DYiBkaWRVcGRhdGVIaXN0b3J5VGl0bGU7CisgICAgRXdr
X0NvbnRleHRfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYiBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsK
K307CisvLy8gQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgQGEgX0V3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50LgordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IEV3a19D
b250ZXh0X0hpc3RvcnlfQ2xpZW50OworCisvKioKICAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNl
IGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgKgogICogQHBhcmFtIGNvbnRleHQgY29udGV4
dCBvYmplY3QgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudApAQCAtMTkwLDYgKzIzNywy
OCBAQCBFQVBJIEVpbmFfQm9vbCBld2tfY29udGV4dF91cmlfc2NoZW1lX3JlZ2lzdGVyKEV3a19D
b250ZXh0ICpjb250ZXh0LCBjb25zdCBjaGFyCiAgKi8KIEVBUEkgdm9pZCBld2tfY29udGV4dF92
aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQoRXdrX0NvbnRleHQgKmNvbnRleHQsIEV3a19W
aWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IgdmlicmF0ZSwgRXdrX1ZpYnJhdGlvbl9DbGllbnRf
VmlicmF0aW9uX0NhbmNlbF9DYiBjYW5jZWwsIHZvaWQgKmRhdGEpOwogCisvKioKKyAqIFNldHMg
aGlzdG9yeSBjbGllbnQgZm9yIHRoZSBnaXZlbiBAYSBjb250ZXh0LgorICoKKyAqIFRoZSBnaXZl
biBAYSBjbGllbnQgcG9pbnRlciBpcyBub3Qgc3RvcmVkIGFueXdoZXJlIGFuZCBpcyB1c2VkIG9u
bHkgb25jZSBmb3IgY29weWluZyBvZiAgQGMgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgZmll
bGRzLgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHNldCBoaXN0b3J5
IGNsaWVudAorICogQHBhcmFtIGNsaWVudCBoaXN0b3J5IGNsaWVudCB0byBiZSBzZXQKKyAqLwor
RUFQSSB2b2lkIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldChFd2tfQ29udGV4dCAqY29u
dGV4dCwgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgKmNsaWVudCk7CisKKy8qKgor
ICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBAYSB2aXNpdGVkX3VybCBhcyB2aXNpdGVkIGxpbmsgaW4g
QGEgY29udGV4dCB2aXNpdGVkIGxpbmsgY2FjaGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaGFs
bCBiZSBpbnZva2VkIGFzIGEgcmVzcG9uc2UgdG8gQGMgcG9wdWxhdGVWaXNpdGVkTGlua3MgY2Fs
bGJhY2sgb2YgdGhlIGhpc3RvcnkgY2llbnQuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4
dCBvYmplY3QgdG8gYWRkIHZpc2l0ZWQgbGluayBkYXRhCisgKiBAcGFyYW0gdmlzaXRlZF91cmwg
dmlzaXRlZCB1cmwKKyAqCisgKiBAc2VlIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50CisgKi8K
K0VBUEkgdm9pZCBld2tfY29udGV4dF9hZGRfdmlzaXRlZF9saW5rKEV3a19Db250ZXh0ICpjb250
ZXh0LCBjb25zdCBjaGFyICp2aXNpdGVkX3VybCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2Y3ODUwMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApAQCAtMCww
ICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgImV3a19jb250ZXh0LmgiCisKKyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5j
bHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tF
aW5hU2hhcmVkU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tf
Y29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKyNpbmNsdWRlICJl
d2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNl
LmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdr
X3ZpZXdfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgaW5s
aW5lIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBnZXRFd2tIaXN0b3J5RGVsZWdh
dGUoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyk7Cisg
ICAgcmV0dXJuIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChzdGF0aWNfY2FzdDxjb25z
dCBFd2tfQ29udGV4dCo+KGNsaWVudEluZm8pKTsKK30KKworc3RhdGljIHZvaWQgZGlkTmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tOYXZp
Z2F0aW9uRGF0YVJlZiBuYXZpZ2F0aW9uRGF0YSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xp
ZW50SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9y
eURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VS
VChoaXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmRpZE5hdmln
YXRlV2l0aE5hdmlnYXRpb25EYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICBFd2tfTmF2aWdh
dGlvbl9EYXRhKiBuYXZpZ2F0aW9uRGF0YUV3ayA9IGV3a19uYXZpZ2F0aW9uX2RhdGFfbmV3KG5h
dmlnYXRpb25EYXRhKTsKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmRpZE5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKGdldF92ZWl3X2J5X3BhZ2UodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlvbkRhdGFF
d2ssIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBld2tfbmF2aWdhdGlvbl9kYXRh
X3VucmVmKG5hdmlnYXRpb25EYXRhRXdrKTsKK30KKworc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJj
ZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNs
aWVudEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3Rv
cnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBBU1NF
UlQoaGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5kaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIFdLRWluYVNoYXJlZFN0
cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcg
ZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOworCisgICAgaGlzdG9yeURlbGVn
YXRlLT5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoZ2V0X3ZlaXdfYnlfcGFnZSh0b0ltcGwocGFn
ZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVsZWdh
dGUtPnVzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJM
UmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQor
eworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUg
PSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlE
ZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+ZGlkUGVyZm9ybVNlcnZlclJl
ZGlyZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNl
VVJMU3RyaW5nKHNvdXJjZVVSTCk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9u
VVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+ZGlkUGVy
Zm9ybVNlcnZlclJlZGlyZWN0KGdldF92ZWl3X2J5X3BhZ2UodG9JbXBsKHBhZ2UpKSwgc291cmNl
VVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2Rh
dGEpOworfQorCitzdGF0aWMgdm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVm
LCBXS1BhZ2VSZWYgcGFnZSwgV0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFt
ZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4dF9I
aXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNs
aWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFoaXN0
b3J5RGVsZWdhdGUtPmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxlU3RyaW5nKHRpdGxlKTsKKyAgICBXS0VpbmFT
aGFyZWRTdHJpbmcgc3RyaW5nVVJMKFVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmRpZFVw
ZGF0ZUhpc3RvcnlUaXRsZShnZXRfdmVpd19ieV9wYWdlKHRvSW1wbChwYWdlKSksIHRpdGxlU3Ry
aW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30KKworc3RhdGlj
IHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5
RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJU
KGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+cG9wdWxhdGVW
aXNpdGVkTGlua3MpCisgICAgICAgIHJldHVybjsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+cG9w
dWxhdGVWaXNpdGVkTGlua3MoaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworfQorCit2b2lk
IGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCogZXdrQ29udGV4
dCkKK3sKKyAgICBXS0NvbnRleHRIaXN0b3J5Q2xpZW50IHdrSGlzdG9yeUNsaWVudDsKKyAgICBt
ZW1zZXQoJndrSGlzdG9yeUNsaWVudCwgMCwgc2l6ZW9mKFdLQ29udGV4dEhpc3RvcnlDbGllbnQp
KTsKKworICAgIHdrSGlzdG9yeUNsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dEhpc3RvcnlDbGll
bnRDdXJyZW50VmVyc2lvbjsKKyAgICB3a0hpc3RvcnlDbGllbnQuY2xpZW50SW5mbyA9IGV3a0Nv
bnRleHQ7CisKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRh
dGEgPSBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTsKKyAgICB3a0hpc3RvcnlDbGllbnQu
ZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0ID0gZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0OworICAg
IHdrSGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QgPSBkaWRQZXJmb3JtU2Vy
dmVyUmVkaXJlY3Q7CisgICAgd2tIaXN0b3J5Q2xpZW50LmRpZFVwZGF0ZUhpc3RvcnlUaXRsZSA9
IGRpZFVwZGF0ZUhpc3RvcnlUaXRsZTsKKyAgICB3a0hpc3RvcnlDbGllbnQucG9wdWxhdGVWaXNp
dGVkTGlua3MgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsKKworICAgIFdLQ29udGV4dFNldEhpc3Rv
cnlDbGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwgJndrSGlzdG9y
eUNsaWVudCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMDUyYTE5Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlz
dG9yeV9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZV9oCisjZGVmaW5l
IGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaAorCit0eXBlZGVmIHN0cnVjdCBf
RXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7CisKK3ZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfYXR0YWNoKEV3a19Db250ZXh0Kik7CisKKyNlbmRpZiAvLyBld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAppbmRleCBkMWI2OTVlLi5mMmMzMjJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2
YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw3IEBACiB0eXBlZGVmIHN0cnVjdCBfRXdrX0NvbnRleHQg
RXdrX0NvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkX0pvYiBFd2tfRG93bmxv
YWRfSm9iOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfU2NoZW1lX1JlcXVlc3QgRXdrX1VybF9T
Y2hlbWVfUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVu
dCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudDsKIAogV0tDb250ZXh0UmVmIGV3a19jb250ZXh0
X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKIEV3a19Db250ZXh0KiBld2tfY29u
dGV4dF9uZXdfZnJvbV9XS0NvbnRleHQoV0tDb250ZXh0UmVmKTsKQEAgLTM1LDQgKzM2LDYgQEAg
dm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKEV3a19Db250ZXh0KiwgRXdrX0Rvd25s
b2FkX0pvYiopOwogRXdrX0Rvd25sb2FkX0pvYiogZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dl
dChjb25zdCBFd2tfQ29udGV4dCosIHVpbnQ2NF90IGRvd25sb2FkSWQpOwogdm9pZCBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJ
ZCk7CiAKK2NvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBld2tfY29udGV4dF9oaXN0
b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKKwogI2VuZGlmIC8vIGV3a19jb250
ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi43YTQwMzRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAKQEAgLTAsMCArMSwxMDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfbmF2
aWdhdGlvbl9kYXRhLmgiCisKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Vp
bmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgorI2luY2x1ZGUgImV3
a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19wcml2YXRlLmgiCisj
aW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworLyoqCisgKiBcc3RydWN0ICBfRXdrX05hdmlnYXRpb25fRGF0YQorICogQGJyaWVm
ICAgQ29udGFpbnMgdGhlIG5hdmlnYXRpb24gZGF0YSBkZXRhaWxzLgorICovCitzdHJ1Y3QgX0V3
a19OYXZpZ2F0aW9uX0RhdGEgeworICAgIHVuc2lnbmVkIF9fcmVmOyAvKio8IHRoZSByZWZlcmVu
Y2UgY291bnQgb2YgdGhlIG9iamVjdCAqLworICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZTsK
KyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsOworICAgIEV3a19VcmxfUmVxdWVzdCogcmVxdWVz
dDsKKworICAgIF9Fd2tfTmF2aWdhdGlvbl9EYXRhKFdLTmF2aWdhdGlvbkRhdGFSZWYgZGF0YVJl
ZikKKyAgICAgICAgOiBfX3JlZigxKQorICAgICAgICAsIHRpdGxlKEFkb3B0V0ssIFdLTmF2aWdh
dGlvbkRhdGFDb3B5VGl0bGUoZGF0YVJlZikpCisgICAgICAgICwgdXJsKEFkb3B0V0ssIFdLTmF2
aWdhdGlvbkRhdGFDb3B5VVJMKGRhdGFSZWYpKQorICAgICAgICAsIHJlcXVlc3QoMCkKKyAgICB7
CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJlZj4gcmVxdWVzdFdLKEFkb3B0V0ss
IFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0KGRhdGFSZWYpKTsKKyAgICAgICAg
cmVxdWVzdCA9IGV3a191cmxfcmVxdWVzdF9uZXcocmVxdWVzdFdLLmdldCgpKTsKKyAgICB9CisK
KyAgICB+X0V3a19OYXZpZ2F0aW9uX0RhdGEoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFfX3Jl
Zik7CisgICAgICAgIGV3a191cmxfcmVxdWVzdF91bnJlZihyZXF1ZXN0KTsKKyAgICB9Cit9Owor
CitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tfbmF2aWdhdGlvbl9kYXRhX3JlZihFd2tfTmF2aWdh
dGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
YXRhLCAwKTsKKworICAgICsrZGF0YS0+X19yZWY7CisKKyAgICByZXR1cm4gZGF0YTsKK30KKwor
dm9pZCBld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZGF0YSk7CisKKyAgICBpZiAoLS1k
YXRhLT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIGRhdGE7Cit9CisKK2Nv
bnN0IGNoYXIqIGV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVfZ2V0KGNvbnN0IEV3a19OYXZpZ2F0
aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRh
dGEsIDApOworCisgICAgcmV0dXJuIGRhdGEtPnRpdGxlOworfQorCitFd2tfVXJsX1JlcXVlc3Qq
IGV3a19uYXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQoY29uc3QgRXdrX05hdmln
YXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+cmVxdWVzdDsKK30KKworY29uc3QgY2hhciog
ZXdrX25hdmlnYXRpb25fZGF0YV91cmxfZ2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRh
dGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIDApOworCisg
ICAgcmV0dXJuIGRhdGEtPnVybDsKK30KKworRXdrX05hdmlnYXRpb25fRGF0YSogZXdrX25hdmln
YXRpb25fZGF0YV9uZXcoV0tOYXZpZ2F0aW9uRGF0YVJlZiBkYXRhUmVmKQoreworICAgIEFTU0VS
VChkYXRhUmVmKTsKKyAgICByZXR1cm4gbmV3IEV3a19OYXZpZ2F0aW9uX0RhdGEoZGF0YVJlZik7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2
aWdhdGlvbl9kYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2
aWdhdGlvbl9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVhNjNm
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19uYXZpZ2F0aW9uX2RhdGEuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworLyoqCisgKiBAZmlsZSAgICBld2tfbmF2aWdhdGlvbl9kYXRhLmgKKyAqIEBicmllZiAgIERl
c2NyaWJlcyB0aGUgRXdrIG5hdmlnYXRpb24gZGF0YSBBUEkuCisgKi8KKworI2lmbmRlZiBld2tf
bmF2aWdhdGlvbl9kYXRhX2gKKyNkZWZpbmUgZXdrX25hdmlnYXRpb25fZGF0YV9oCisKKyNpbmNs
dWRlICJld2tfdXJsX3JlcXVlc3QuaCIKKyNpbmNsdWRlIDxFaW5hLmg+CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0ZXMgYSB0eXBlIG5hbWUg
Zm9yIF9Fd2tfTmF2aWdhdGlvbl9EYXRhICovCit0eXBlZGVmIHN0cnVjdCBfRXdrX05hdmlnYXRp
b25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCisvKioKKyAqIEluY3JlYXNlcyB0aGUgcmVm
ZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisgKgorICogQHBhcmFtIGRhdGEgdGhl
IG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAor
ICoKKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBvYmplY3Qgb24gc3VjY2VzcywgQGMgTlVM
TCBvdGhlcndpc2UuCisgKi8KK0VBUEkgRXdrX05hdmlnYXRpb25fRGF0YSAqZXdrX25hdmlnYXRp
b25fZGF0YV9yZWYoRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisKKy8qKgorICogRGVjcmVh
c2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwgcG9zc2libHkgZnJl
ZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUg
b2JqZWN0IGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBkYXRhIHRoZSBuYXZpZ2F0aW9uIGRhdGEg
b2JqZWN0IHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3
a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYoRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisKKy8q
KgorICogUmV0dXJucyB0aXRsZSBmb3IgdGhpcyBuYXZpZ2F0aW9uIGRhdGEuCisgKgorICogVGhl
IHRpdGxlIG9mIHRoZSBuYXZpZ2F0ZWQgcGFnZS4KKyAqCisgKiBAcGFyYW0gZGF0YSBuYXZpZ2F0
aW9uIGRhdGEgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiB0aGUgdGl0bGUgb3IgQGMg
TlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFu
dGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAg
ICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVp
bmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9y
CisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19uYXZpZ2F0
aW9uX2RhdGFfdGl0bGVfZ2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEgKmRhdGEpOworCisv
KioKKyAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZm9yIHRoaXMgbmF2aWdhdGlvbiBk
YXRhLgorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gcXVlcnkK
KyAqCisgKiBAcmV0dXJuIFRoZSBVUkwgcmVxdWVzdCBwb2ludGVyIG9yIEBjIE5VTEwgaW4gY2Fz
ZSBvZiBlcnJvci4KKyAqLworRUFQSSBFd2tfVXJsX1JlcXVlc3QgKmV3a19uYXZpZ2F0aW9uX2Rh
dGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7
CisKKy8qKgorICogUmV0dXJucyBVUkwgb2YgdGhlIGl0ZW0uCisgKgorICogVGhlIHJldHVybmVk
IFVSTCBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVSTCAoRm9yIGV4YW1wbGUgaWYgdGhl
IHBhZ2Ugd2FzIHJlZGlyZWN0ZWQpLgorICoKKyAqIEBzZWUgZXdrX2JhY2tfZm9yd2FyZF9saXN0
X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCgpCisgKgorICogQHBhcmFtIGRhdGEgbmF2aWdhdGlvbiBk
YXRhIG9iamVjdCB0byBxdWVyeQorICoKKyAqIEByZXR1cm4gdGhlIFVSTCBvZiB0aGUgQGEgaXRl
bSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAg
ICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxl
CisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tf
bmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSAqaXRlbSk7
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfbmF2aWdh
dGlvbl9kYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNDMwYzYxNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oCkBAIC0w
LDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX25hdmlnYXRpb25f
ZGF0YV9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlX2gKKwor
I2luY2x1ZGUgIldLTmF2aWdhdGlvbkRhdGEuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19OYXZp
Z2F0aW9uX0RhdGEgRXdrX05hdmlnYXRpb25fRGF0YTsKKworRXdrX05hdmlnYXRpb25fRGF0YSog
ZXdrX25hdmlnYXRpb25fZGF0YV9uZXcoV0tOYXZpZ2F0aW9uRGF0YVJlZiBkYXRhUmVmKTsKKwor
I2VuZGlmIC8vIGV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNTU4Y2QyMi4uYjk5YTQzNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAt
ODIsNiArODIsMjUgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6ZSA9IDE2Owog
dHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfV2ViX1Jlc291cmNlKj4gTG9hZGluZ1Jlc291
cmNlc01hcDsKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2Ns
ZWFyKExvYWRpbmdSZXNvdXJjZXNNYXAmIGxvYWRpbmdSZXNvdXJjZXNNYXApOwogCit0eXBlZGVm
IEhhc2hNYXA8Y29uc3QgV2ViUGFnZVByb3h5KiwgY29uc3QgRXZhc19PYmplY3QqPiBQYWdlVmll
d01hcDsKK3N0YXRpYyBQYWdlVmlld01hcCB2aWV3TWFwOworCitzdGF0aWMgaW5saW5lIHZvaWQg
YWRkVmlld1RvTWFwKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEFTU0VSVChl
d2tWaWV3KTsKKyAgICBBU1NFUlQoZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpOworICAgIFBh
Z2VWaWV3TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gdmlld01hcC5hZGQoZXdrX3ZpZXdfcGFnZV9n
ZXQoZXdrVmlldyksIGV3a1ZpZXcpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQu
aXNOZXdFbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVWaWV3RnJvbU1hcChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQoZXdrVmlldyk7CisgICAg
QVNTRVJUKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBBU1NFUlQodmlld01hcC5j
b250YWlucyhld2tfdmlld19wYWdlX2dldChld2tWaWV3KSkpOworICAgIHZpZXdNYXAucmVtb3Zl
KGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKK30KKwogc3RydWN0IF9Fd2tfVmlld19Qcml2
YXRlX0RhdGEgewogICAgIE93blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKICNpZiBV
U0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC00ODYsNiArNTA1LDcgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKKyAgICByZW1vdmVW
aWV3RnJvbU1hcChld2tWaWV3KTsKICAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnRE
YXRhKTsKICAgICBpZiAoc21hcnREYXRhICYmIHNtYXJ0RGF0YS0+cHJpdikKICAgICAgICAgX2V3
a192aWV3X3ByaXZfZGVsKHNtYXJ0RGF0YS0+cHJpdik7CkBAIC03NTUsNiArNzc1LDkgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19D
b250ZXh0KiBjb250ZXh0LCBXS1AKICAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGV3
a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4dCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBh
Z2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAgICBlbHNlCiAgICAgICAg
IHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRl
eHQpKS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCBXZWJQYWdlR3JvdXA6
OmNyZWF0ZSgpLmdldCgpKTsKKworICAgIGFkZFZpZXdUb01hcChld2tWaWV3KTsKKwogI2lmIFVT
RShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBwcml2LT5wYWdlUHJveHktPnBhZ2VHcm91cCgp
LT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsK
ICAgICBwcml2LT5wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3Jj
ZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKQEAgLTE1MjEsNiArMTU0NCwxNCBAQCB2b2lkIGV3a192
aWV3X2ludGVudF9zZXJ2aWNlX3JlZ2lzdGVyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBF
d2tfSW50ZW50X1NlcgogfQogI2VuZGlmIC8vIEVOQUJMRShXRUJfSU5URU5UU19UQUcpCiAKK2Nv
bnN0IEV2YXNfT2JqZWN0KiBnZXRfdmVpd19ieV9wYWdlKGNvbnN0IFdlYktpdDo6V2ViUGFnZVBy
b3h5KiBwYWdlKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwYWdlLCAw
KTsKKyAgICBQYWdlVmlld01hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSB2aWV3TWFwLmZpbmQo
cGFnZSk7CisKKyAgICByZXR1cm4gKGZvdW5kICE9IHZpZXdNYXAuZW5kKCkpID8gZm91bmQtPnNl
Y29uZCA6IDA7Cit9CisKIFdlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDJmZThiYWQuLmNjOWJhNDAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
QEAgLTk0LDYgKzk0LDcgQEAgdm9pZCBld2tfdmlld19pbnRlbnRfcmVxdWVzdF9uZXcoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19JbnRlbnQqIGV3a0ludGUKIHZvaWQgZXdrX3ZpZXdf
aW50ZW50X3NlcnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19J
bnRlbnRfU2VydmljZSogZXdrSW50ZW50U2VydmljZSk7CiAjZW5kaWYKIAorY29uc3QgRXZhc19P
YmplY3QgKmdldF92ZWl3X2J5X3BhZ2UoY29uc3QgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIFdl
YktpdDo6V2ViUGFnZVByb3h5KiBld2tfdmlld19wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldyk7CiBXZWJDb3JlOjpJbnRTaXplIGV3a192aWV3X3NpemVfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KTsKIAo=
</data>
<flag name="commit-queue"
          id="180222"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167547</attachid>
            <date>2012-10-08 09:43:34 -0700</date>
            <delta_ts>2012-10-08 09:58:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug98594</filename>
            <type>text/plain</type>
            <size>41867</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDJiZDk1ZjRjMmFiMDcwMTA5ZTk5OGYwZDYyNjNjMzdkOTFkN2NmMmIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCBjNTQ3MTA5Li44ODE1M2I2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTItMTAt
MDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV0syXSBBZGQgSGlzdG9yeSBDbGllbnQgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODU5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhpc3RvcnkgQ2xpZW50IEFQ
SSB0byBFd2sgQ29udGV4dC4gQWRkZWQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19D
b250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldCk6CisgICAgICAgIChld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRfbGlu
ayk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoZ2V0RXdrSGlzdG9yeURlbGVnYXRlKToKKyAgICAgICAgKGRpZE5hdmlnYXRl
V2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHA6IEFkZGVkLgorICAg
ICAgICAoX0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoX0V3a19OYXZpZ2F0aW9uX0Rh
dGE6Ol9Fd2tfTmF2aWdhdGlvbl9EYXRhKToKKyAgICAgICAgKF9Fd2tfTmF2aWdhdGlvbl9EYXRh
Ojp+X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV9y
ZWYpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZik6CisgICAgICAgIChld2tf
bmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRh
X29yaWdpbmFsX3JlcXVlc3RfZ2V0KToKKyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdXJs
X2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX25ldyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoYWRkVG9Q
YWdlVmlld01hcCk6CisgICAgICAgIChyZW1vdmVGcm9tUGFnZVZpZXdNYXApOgorICAgICAgICAo
X2V3a192aWV3X3NtYXJ0X2RlbCk6CisgICAgICAgIChfZXdrX3ZpZXdfaW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9kZWxlZ2F0ZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoaHR0cFNlcnZlcik6CisgICAgICAgIChuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChwZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAocGVyZm9ybVNlcnZlclJl
ZGlyZWN0KToKKyAgICAgICAgKHVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrUmVkaXJlY3Rpb24pOgorICAgICAgICAoVEVTVF9GKToK
KwogMjAxMi0xMC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gRG9uJ3QgdXNlIHRoZSBDIEFQSSBpbnRlcm5hbGx5IGluIFdlYktp
dFdlYkNvbnRleHQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggMWJiZjNkYi4uMDkzZDU4
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291
cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUwLDYgKzUwLDcgQEAgTElTVChBUFBF
TkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2JhY2tfZm9yd2Fy
ZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAorICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcAogICAgIFVJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC01OCw2ICs1OSw3IEBAIExJU1QoQVBQ
RU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmNwcAogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19tYWluLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZp
Z2F0aW9uX2RhdGEuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0
ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Jlc291cmNlLmNwcApAQCAtMjMzLDYg
KzIzNSw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5oIgogICAgICIke0NNQUtFX0NV
UlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
bWFpbi5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAg
ICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcG9w
dXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKQEAgLTMyMiw2ICszMjUsNyBAQCBUQVJHRVRfTElO
S19MSUJSQVJJRVMoZXdrMlVuaXRUZXN0VXRpbHMgJHtFV0syVW5pdFRlc3RzX0xJQlJBUklFU30p
CiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9iYWNrX2ZvcndhcmRf
bGlzdAogICAgIHRlc3RfZXdrMl9jb250ZXh0CisgICAgdGVzdF9ld2syX2NvbnRleHRfaGlzdG9y
eV9kZWxlZ2F0ZQogICAgIHRlc3RfZXdrMl9jb29raWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9k
b3dubG9hZF9qb2IKICAgICB0ZXN0X2V3azJfZWluYV9zaGFyZWRfc3RyaW5nCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCAwODUwOTRjLi4wMGRkODEx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM4
LDYgKzM4LDcgQEAKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVu
dF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdrX21haW4uaCIKKyNpbmNsdWRlICJld2tfbmF2aWdh
dGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgi
CiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJj
ZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQu
Y3BwCmluZGV4IDRhOWMzY2EuLjhiOTJlZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRl
ICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29u
dGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hp
c3RvcnlfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgi
CiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKQEAgLTc5LDExICs4MCwx
NCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0
TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxT
Y2hlbWVIYW5kbGVyczsKIAorICAgIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IGhpc3RvcnlD
bGllbnQ7CisKICAgICBfRXdrX0NvbnRleHQoV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250
ZXh0UmVmKQogICAgICAgICA6IF9fcmVmKDEpCiAgICAgICAgICwgY29udGV4dChjb250ZXh0UmVm
KQogICAgICAgICAsIGNvb2tpZU1hbmFnZXIoMCkKICAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihX
S0NvbnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCisgICAgICAg
ICwgaGlzdG9yeUNsaWVudCgpCiAgICAgewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAg
ICAgICAgYmF0dGVyeVByb3ZpZGVyID0gQmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5n
ZXQoKSk7CkBAIC0xMDksNiArMTEzLDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYK
ICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7
CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7CisgICAg
ICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAg
ICB+X0V3a19Db250ZXh0KCkKQEAgLTI4MiwzICsyODcsMzEgQEAgdm9pZCBld2tfY29udGV4dF92
aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3
a19WaWIKICAgICBld2tDb250ZXh0LT52aWJyYXRpb25Qcm92aWRlci0+c2V0VmlicmF0aW9uQ2xp
ZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNhbmNlbCwgZGF0YSk7CiAjZW5kaWYKIH0KKwordm9pZCBl
d2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIGNv
bnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBjbGllbnQpCit7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisKKyAgICBpZiAoIWNsaWVudCkgeworICAg
ICAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50ID0geyAwLCAwLCAwLCAwLCAwLCAwIH07Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50ID0g
KmNsaWVudDsKK30KKworY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250
ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAg
ICByZXR1cm4gJmV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQ7Cit9CisKK3ZvaWQgZXdrX2NvbnRl
eHRfYWRkX3Zpc2l0ZWRfbGluayhFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciog
dmlzaXRlZFVSTCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2aXNpdGVkVVJMKTsKKworICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1Zpc2l0ZWRVUkwoQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcodmlzaXRlZFVSTCkpOworICAgIFdLQ29udGV4dEFkZFZpc2l0ZWRM
aW5rKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCksIHdrVmlzaXRlZFVSTC5nZXQoKSk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5o
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBl
NmU5ZTBjLi4xZDU1MDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgZXdrX2NvbnRleHRfaAog
CiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRp
b25fZGF0YS5oIgogI2luY2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRl
IDxFdmFzLmg+CiAKQEAgLTY5LDYgKzcwLDUyIEBAIHR5cGVkZWYgdm9pZCAoKkV3a19WaWJyYXRp
b25fQ2xpZW50X1ZpYnJhdGVfQ2IpKHVpbnQ2NF90IHZpYnJhdGlvbl90aW1lLCB2b2lkICp1CiB0
eXBlZGVmIHZvaWQgKCpFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiKSh2
b2lkICp1c2VyX2RhdGEpOwogCiAvKioKKyAqIEB0eXBlZGVmIEV3a19Db250ZXh0X0RpZF9OYXZp
Z2F0ZV9XaXRoX05hdmlnYXRpb25fRGF0YV9DYiBFd2tfQ29udGV4dF9EaWRfTmF2aWdhdGVfV2l0
aF9OYXZpZ2F0aW9uX0RhdGFfQ2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVu
Y3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gQGEgdmlldyBkaWQgbmF2aWdhdGlv
bi4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlkX05hdmlnYXRlX1dpdGhfTmF2
aWdhdGlvbl9EYXRhX0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgRXdrX05hdmlnYXRpb25f
RGF0YSAqbmF2aWdhdGlvbl9kYXRhLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEB0eXBl
ZGVmIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX0NsaWVudF9SZWRpcmVjdF9DYiBFd2tfQ29udGV4
dF9EaWRfUGVyZm9ybV9DbGllbnRfUmVkaXJlY3RfQ2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRp
b24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gQGEgdmlldyBw
ZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19Db250
ZXh0X0RpZF9QZXJmb3JtX0NsaWVudF9SZWRpcmVjdF9DYikoY29uc3QgRXZhc19PYmplY3QgKnZp
ZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIgKmRlc3RpbmF0aW9uX3VybCwg
dm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfQ29udGV4dF9EaWRfUGVy
Zm9ybV9TZXJ2ZXJfUmVkaXJlY3RfQ2IgRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1fU2VydmVyX1Jl
ZGlyZWN0X0NiCisgKiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQg
d2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIEBhIHZpZXcgcGVyZm9ybWVkIGEgc2VydmVyIHJlZGly
ZWN0LgorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9TZXJ2ZXJf
UmVkaXJlY3RfQ2IpKGNvbnN0IEV2YXNfT2JqZWN0ICp2aWV3LCBjb25zdCBjaGFyICpzb3VyY2Vf
dXJsLCBjb25zdCBjaGFyICpkZXN0aW5hdGlvbl91cmwsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8q
KgorICogQHR5cGVkZWYgRXdrX0NvbnRleHRfRGlkX1VwZGF0ZV9IaXN0b3J5X1RpdGxlX0NiIEV3
a19Db250ZXh0X0RpZF9VcGRhdGVfSGlzdG9yeV9UaXRsZV9DYgorICogQGJyaWVmIFR5cGUgZGVm
aW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBoaXN0
b3J5IHRpdGxlIGlzIHVwZGF0ZWQuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19Db250ZXh0X0Rp
ZF9VcGRhdGVfSGlzdG9yeV9UaXRsZV9DYikoY29uc3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0
IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp1cmwsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgor
ICogQHR5cGVkZWYgRXdrX0NvbnRleHRfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYiBFd2tfQ29u
dGV4dF9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiCisgKiBAYnJpZWYgVHlwZSBkZWZpbml0aW9u
IGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIGNsaWVudCBpcyBh
c2tlZCB0byBwcm92aWRlIHZpc2l0ZWQgbGlua3MgZnJvbSBhIGNsaWVudC1tYW5hZ2VkIHN0b3Jh
Z2UuCisgKgorICogQHNlZSBld2tfY29udGV4dF9hZGRfdmlzaXRlZF9saW5rCisgKi8KK3R5cGVk
ZWYgdm9pZCAoKkV3a19Db250ZXh0X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2IpKHZvaWQgKnVz
ZXJfZGF0YSk7CisKKy8qKgorICogQGJyaWVmIFN0cnVjdHVyZSBjb250YWluaW5nIGhpc3Rvcnkg
ZGVsZWdhdGUgY2FsbGJhY2tzIGFuZCB1c2VyIGRhdGEgdG8gYmUgcGFzc2VkLgorICovCitzdHJ1
Y3QgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IHsKKyAgICB2b2lkICp1c2VyX2RhdGE7Cisg
ICAgRXdrX0NvbnRleHRfRGlkX05hdmlnYXRlX1dpdGhfTmF2aWdhdGlvbl9EYXRhX0NiIGV3a19j
b250ZXh0X25hdmlnYXRpb25fcGVyZm9ybWVkOworICAgIEV3a19Db250ZXh0X0RpZF9QZXJmb3Jt
X0NsaWVudF9SZWRpcmVjdF9DYiBld2tfY29udGV4dF9jbGllbnRfcmVkaXJlY3RfcGVyZm9ybWVk
OworICAgIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX1NlcnZlcl9SZWRpcmVjdF9DYiBld2tfY29u
dGV4dF9zZXJ2ZXJfcmVkaXJlY3RfcGVyZm9ybWVkOworICAgIEV3a19Db250ZXh0X0RpZF9VcGRh
dGVfSGlzdG9yeV9UaXRsZV9DYiBld2tfY29udGV4dF9oaXN0b3J5X3RpdGxlX3VwZGF0ZWQ7Cisg
ICAgRXdrX0NvbnRleHRfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYiBld2tfY29udGV4dF92aXNp
dGVkX2xpbmtzX3BvcHVsYXRlOworfTsKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBf
RXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQuCit0eXBlZGVmIHN0cnVjdCBfRXdrX0NvbnRleHRf
SGlzdG9yeV9DbGllbnQgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQ7CisKKy8qKgogICogSW5j
cmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAqCiAgKiBA
cGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNv
dW50CkBAIC0xOTAsNiArMjM3LDI4IEBAIEVBUEkgRWluYV9Cb29sIGV3a19jb250ZXh0X3VyaV9z
Y2hlbWVfcmVnaXN0ZXIoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIKICAqLwogRUFQ
SSB2b2lkIGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3NldChFd2tfQ29u
dGV4dCAqY29udGV4dCwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0ZV9DYiB2aWJyYXRlLCBF
d2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiIGNhbmNlbCwgdm9pZCAqZGF0
YSk7CiAKKy8qKgorICogU2V0cyBoaXN0b3J5IGNsaWVudCBmb3IgdGhlIGdpdmVuIEBhIGNvbnRl
eHQuCisgKgorICogVGhlIGdpdmVuIEBhIGNsaWVudCBwb2ludGVyIGlzIG5vdCBzdG9yZWQgYW55
d2hlcmUgYW5kIGlzIHVzZWQgb25seSBvbmNlIGZvciBjb3B5aW5nIG9mICBAYyBFd2tfQ29udGV4
dF9IaXN0b3J5X0NsaWVudCBmaWVsZHMuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBv
YmplY3QgdG8gc2V0IGhpc3RvcnkgY2xpZW50CisgKiBAcGFyYW0gY2xpZW50IGhpc3RvcnkgY2xp
ZW50IHRvIGJlIHNldAorICovCitFQVBJIHZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRf
c2V0KEV3a19Db250ZXh0ICpjb250ZXh0LCBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVu
dCAqY2xpZW50KTsKKworLyoqCisgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIEBhIHZpc2l0ZWRfdXJs
IGFzIHZpc2l0ZWQgbGluayBpbiBAYSBjb250ZXh0IHZpc2l0ZWQgbGluayBjYWNoZS4KKyAqCisg
KiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGludm9rZWQgYXMgYSByZXNwb25zZSB0byBAYyBwb3B1
bGF0ZVZpc2l0ZWRMaW5rcyBjYWxsYmFjayBvZiB0aGUgaGlzdG9yeSBjaWVudC4KKyAqCisgKiBA
cGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBhZGQgdmlzaXRlZCBsaW5rIGRhdGEKKyAq
IEBwYXJhbSB2aXNpdGVkX3VybCB2aXNpdGVkIHVybAorICoKKyAqIEBzZWUgRXdrX0NvbnRleHRf
SGlzdG9yeV9DbGllbnQKKyAqLworRUFQSSB2b2lkIGV3a19jb250ZXh0X2FkZF92aXNpdGVkX2xp
bmsoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnZpc2l0ZWRfdXJsKTsKKwogI2lm
ZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmZiYjE0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9y
eV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKworI2luY2x1ZGUgIkRv
d25sb2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0cmlu
Zy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIKKyNp
bmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25f
ZGF0YS5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQq
IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFT
U0VSVChjbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRf
Z2V0KHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0Kj4oY2xpZW50SW5mbykpOworfQorCitz
dGF0aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS0NvbnRleHRSZWYsIFdL
UGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1l
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hp
c3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xp
ZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3Rv
cnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfbmF2aWdhdGlvbl9wZXJmb3JtZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEV3a19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25EYXRhRXdrID0gZXdr
X25hdmlnYXRpb25fZGF0YV9uZXcobmF2aWdhdGlvbkRhdGEpOworICAgIGhpc3RvcnlEZWxlZ2F0
ZS0+ZXdrX2NvbnRleHRfbmF2aWdhdGlvbl9wZXJmb3JtZWQoZXdrX3ZpZXdfZnJvbV9wYWdlX2dl
dCh0b0ltcGwocGFnZSkpLCBuYXZpZ2F0aW9uRGF0YUV3aywgaGlzdG9yeURlbGVnYXRlLT51c2Vy
X2RhdGEpOworICAgIGV3a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYobmF2aWdhdGlvbkRhdGFFd2sp
OworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QoV0tDb250ZXh0UmVm
LCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlv
blVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25zdCBF
d2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9y
eURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworCisg
ICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X2NsaWVudF9yZWRpcmVjdF9wZXJm
b3JtZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzb3VyY2VV
UkxTdHJpbmcoc291cmNlVVJMKTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgZGVzdGluYXRpb25V
UkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOworCisgICAgaGlzdG9yeURlbGVnYXRlLT5ld2tfY29u
dGV4dF9jbGllbnRfcmVkaXJlY3RfcGVyZm9ybWVkKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9J
bXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9y
eURlbGVnYXRlLT51c2VyX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVy
UmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJM
LCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURl
bGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VSVCho
aXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0
X3NlcnZlcl9yZWRpcmVjdF9wZXJmb3JtZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBzb3VyY2VVUkxTdHJpbmcoc291cmNlVVJMKTsKKyAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgZGVzdGluYXRpb25VUkxTdHJpbmcoZGVzdGluYXRpb25VUkwpOworCisgICAgaGlz
dG9yeURlbGVnYXRlLT5ld2tfY29udGV4dF9zZXJ2ZXJfcmVkaXJlY3RfcGVyZm9ybWVkKGV3a192
aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5h
dGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworfQorCitzdGF0aWMg
dm9pZCBkaWRVcGRhdGVIaXN0b3J5VGl0bGUoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwg
V0tTdHJpbmdSZWYgdGl0bGUsIFdLVVJMUmVmIFVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlz
dG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFT
U0VSVChoaXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmV3a19j
b250ZXh0X2hpc3RvcnlfdGl0bGVfdXBkYXRlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tF
aW5hU2hhcmVkU3RyaW5nIHRpdGxlU3RyaW5nKHRpdGxlKTsKKyAgICBXS0VpbmFTaGFyZWRTdHJp
bmcgc3RyaW5nVVJMKFVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X2hp
c3RvcnlfdGl0bGVfdXBkYXRlZChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSks
IHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30K
Kworc3RhdGljIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Cisg
ICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+
ZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rc19wb3B1bGF0ZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaGlzdG9yeURlbGVnYXRlLT5ld2tfY29udGV4dF92aXNpdGVkX2xpbmtzX3BvcHVsYXRlKGhp
c3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30KKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7CisgICAgV0tDb250ZXh0
SGlzdG9yeUNsaWVudCB3a0hpc3RvcnlDbGllbnQ7CisgICAgbWVtc2V0KCZ3a0hpc3RvcnlDbGll
bnQsIDAsIHNpemVvZihXS0NvbnRleHRIaXN0b3J5Q2xpZW50KSk7CisKKyAgICB3a0hpc3RvcnlD
bGllbnQudmVyc2lvbiA9IGtXS0NvbnRleHRIaXN0b3J5Q2xpZW50Q3VycmVudFZlcnNpb247Cisg
ICAgd2tIaXN0b3J5Q2xpZW50LmNsaWVudEluZm8gPSBld2tDb250ZXh0OworCisgICAgd2tIaXN0
b3J5Q2xpZW50LmRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhID0gZGlkTmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGE7CisgICAgd2tIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1DbGllbnRSZWRp
cmVjdCA9IGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdDsKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlk
UGVyZm9ybVNlcnZlclJlZGlyZWN0ID0gZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0OworICAgIHdr
SGlzdG9yeUNsaWVudC5kaWRVcGRhdGVIaXN0b3J5VGl0bGUgPSBkaWRVcGRhdGVIaXN0b3J5VGl0
bGU7CisgICAgd2tIaXN0b3J5Q2xpZW50LnBvcHVsYXRlVmlzaXRlZExpbmtzID0gcG9wdWxhdGVW
aXNpdGVkTGlua3M7CisKKyAgICBXS0NvbnRleHRTZXRIaXN0b3J5Q2xpZW50KGV3a19jb250ZXh0
X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksICZ3a0hpc3RvcnlDbGllbnQpOworfQorCisKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hp
c3RvcnlfY2xpZW50X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mZDA1MmExOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19jb250
ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaAorI2RlZmluZSBld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudF9wcml2YXRlX2gKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250
ZXh0OworCit2b2lkIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4
dCopOworCisjZW5kaWYgLy8gZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9w
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9w
cml2YXRlLmgKaW5kZXggZDFiNjk1ZS4uZjJjMzIyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaApAQCAtMjUsNiAr
MjUsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250ZXh0OwogdHlwZWRl
ZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZF9Kb2IgRXdrX0Rvd25sb2FkX0pvYjsKIHR5cGVkZWYgc3Ry
dWN0IF9Fd2tfVXJsX1NjaGVtZV9SZXF1ZXN0IEV3a19VcmxfU2NoZW1lX1JlcXVlc3Q7Cit0eXBl
ZGVmIHN0cnVjdCBfRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgRXdrX0NvbnRleHRfSGlzdG9y
eV9DbGllbnQ7CiAKIFdLQ29udGV4dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnN0
IEV3a19Db250ZXh0Kik7CiBFd2tfQ29udGV4dCogZXdrX2NvbnRleHRfbmV3X2Zyb21fV0tDb250
ZXh0KFdLQ29udGV4dFJlZik7CkBAIC0zNSw0ICszNiw2IEBAIHZvaWQgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX2FkZChFd2tfQ29udGV4dCosIEV3a19Eb3dubG9hZF9Kb2IqKTsKIEV3a19Eb3du
bG9hZF9Kb2IqIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQoY29uc3QgRXdrX0NvbnRleHQq
LCB1aW50NjRfdCBkb3dubG9hZElkKTsKIHZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX3Jl
bW92ZShFd2tfQ29udGV4dCosIHVpbnQ2NF90IGRvd25sb2FkSWQpOwogCitjb25zdCBFd2tfQ29u
dGV4dF9IaXN0b3J5X0NsaWVudCogZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0KGNvbnN0
IEV3a19Db250ZXh0Kik7CisKICNlbmRpZiAvLyBld2tfY29udGV4dF9wcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2Rh
dGEuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25f
ZGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0MDM0ZQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZp
Z2F0aW9uX2RhdGEuY3BwCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgorCisj
aW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhX3By
aXZhdGUuaCIKKyNpbmNsdWRlICJld2tfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a191cmxfcmVx
dWVzdF9wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogXHN0
cnVjdCAgX0V3a19OYXZpZ2F0aW9uX0RhdGEKKyAqIEBicmllZiAgIENvbnRhaW5zIHRoZSBuYXZp
Z2F0aW9uIGRhdGEgZGV0YWlscy4KKyAqLworc3RydWN0IF9Fd2tfTmF2aWdhdGlvbl9EYXRhIHsK
KyAgICB1bnNpZ25lZCBfX3JlZjsgLyoqPCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvYmpl
Y3QgKi8KKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdGl0bGU7CisgICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIHVybDsKKyAgICBFd2tfVXJsX1JlcXVlc3QqIHJlcXVlc3Q7CisKKyAgICBfRXdrX05hdmln
YXRpb25fRGF0YShXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFSZWYpCisgICAgICAgIDogX19yZWYo
MSkKKyAgICAgICAgLCB0aXRsZShBZG9wdFdLLCBXS05hdmlnYXRpb25EYXRhQ29weVRpdGxlKGRh
dGFSZWYpKQorICAgICAgICAsIHVybChBZG9wdFdLLCBXS05hdmlnYXRpb25EYXRhQ29weVVSTChk
YXRhUmVmKSkKKyAgICAgICAgLCByZXF1ZXN0KDApCisgICAgeworICAgICAgICBXS1JldGFpblB0
cjxXS1VSTFJlcXVlc3RSZWY+IHJlcXVlc3RXSyhBZG9wdFdLLCBXS05hdmlnYXRpb25EYXRhQ29w
eU9yaWdpbmFsUmVxdWVzdChkYXRhUmVmKSk7CisgICAgICAgIHJlcXVlc3QgPSBld2tfdXJsX3Jl
cXVlc3RfbmV3KHJlcXVlc3RXSy5nZXQoKSk7CisgICAgfQorCisgICAgfl9Fd2tfTmF2aWdhdGlv
bl9EYXRhKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghX19yZWYpOworICAgICAgICBld2tfdXJs
X3JlcXVlc3RfdW5yZWYocmVxdWVzdCk7CisgICAgfQorfTsKKworRXdrX05hdmlnYXRpb25fRGF0
YSogZXdrX25hdmlnYXRpb25fZGF0YV9yZWYoRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICArK2Rh
dGEtPl9fcmVmOworCisgICAgcmV0dXJuIGRhdGE7Cit9CisKK3ZvaWQgZXdrX25hdmlnYXRpb25f
ZGF0YV91bnJlZihFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGRhdGEpOworCisgICAgaWYgKC0tZGF0YS0+X19yZWYpCisgICAgICAg
IHJldHVybjsKKworICAgIGRlbGV0ZSBkYXRhOworfQorCitjb25zdCBjaGFyKiBld2tfbmF2aWdh
dGlvbl9kYXRhX3RpdGxlX2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCAwKTsKKworICAgIHJldHVy
biBkYXRhLT50aXRsZTsKK30KKworRXdrX1VybF9SZXF1ZXN0KiBld2tfbmF2aWdhdGlvbl9kYXRh
X29yaWdpbmFsX3JlcXVlc3RfZ2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIDApOworCisgICAgcmV0
dXJuIGRhdGEtPnJlcXVlc3Q7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19uYXZpZ2F0aW9uX2RhdGFf
dXJsX2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCAwKTsKKworICAgIHJldHVybiBkYXRhLT51cmw7
Cit9CisKK0V3a19OYXZpZ2F0aW9uX0RhdGEqIGV3a19uYXZpZ2F0aW9uX2RhdGFfbmV3KFdLTmF2
aWdhdGlvbkRhdGFSZWYgZGF0YVJlZikKK3sKKyAgICBBU1NFUlQoZGF0YVJlZik7CisgICAgcmV0
dXJuIG5ldyBFd2tfTmF2aWdhdGlvbl9EYXRhKGRhdGFSZWYpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYTYzZmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmgK
QEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAg
ZXdrX25hdmlnYXRpb25fZGF0YS5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3ayBuYXZp
Z2F0aW9uIGRhdGEgQVBJLgorICovCisKKyNpZm5kZWYgZXdrX25hdmlnYXRpb25fZGF0YV9oCisj
ZGVmaW5lIGV3a19uYXZpZ2F0aW9uX2RhdGFfaAorCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0
LmgiCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX05hdmlnYXRpb25f
RGF0YSAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19OYXZpZ2F0aW9uX0RhdGEgRXdrX05hdmlnYXRp
b25fRGF0YTsKKworLyoqCisgKiBJbmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUg
Z2l2ZW4gb2JqZWN0LgorICoKKyAqIEBwYXJhbSBkYXRhIHRoZSBuYXZpZ2F0aW9uIGRhdGEgb2Jq
ZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAqCisgKiBAcmV0dXJuIGEgcG9p
bnRlciB0byB0aGUgb2JqZWN0IG9uIHN1Y2Nlc3MsIEBjIE5VTEwgb3RoZXJ3aXNlLgorICovCitF
QVBJIEV3a19OYXZpZ2F0aW9uX0RhdGEgKmV3a19uYXZpZ2F0aW9uX2RhdGFfcmVmKEV3a19OYXZp
Z2F0aW9uX0RhdGEgKmRhdGEpOworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNv
dW50IG9mIHRoZSBnaXZlbiBvYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hl
biB0aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIG9iamVjdCBpcyBmcmVlZC4KKyAq
CisgKiBAcGFyYW0gZGF0YSB0aGUgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBkZWNyZWFzZSB0
aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfbmF2aWdhdGlvbl9kYXRhX3Vu
cmVmKEV3a19OYXZpZ2F0aW9uX0RhdGEgKmRhdGEpOworCisvKioKKyAqIFJldHVybnMgdGl0bGUg
Zm9yIHRoaXMgbmF2aWdhdGlvbiBkYXRhLgorICoKKyAqIFRoZSB0aXRsZSBvZiB0aGUgbmF2aWdh
dGVkIHBhZ2UuCisgKgorICogQHBhcmFtIGRhdGEgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBx
dWVyeQorICoKKyAqIEByZXR1cm4gdGhlIHRpdGxlIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJv
ci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJp
bmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBz
b21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigp
IGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAo
KS4KKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfbmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldChj
b25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBv
cmlnaW5hbCByZXF1ZXN0IGZvciB0aGlzIG5hdmlnYXRpb24gZGF0YS4KKyAqCisgKiBAcGFyYW0g
ZGF0YSBuYXZpZ2F0aW9uIGRhdGEgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiBUaGUg
VVJMIHJlcXVlc3QgcG9pbnRlciBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKi8KK0VB
UEkgRXdrX1VybF9SZXF1ZXN0ICpld2tfbmF2aWdhdGlvbl9kYXRhX29yaWdpbmFsX3JlcXVlc3Rf
Z2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEgKmRhdGEpOworCisvKioKKyAqIFJldHVybnMg
VVJMIG9mIHRoZSBpdGVtLgorICoKKyAqIFRoZSByZXR1cm5lZCBVUkwgbWF5IGRpZmZlciBmcm9t
IHRoZSBvcmlnaW5hbCBVUkwgKEZvciBleGFtcGxlIGlmIHRoZSBwYWdlIHdhcyByZWRpcmVjdGVk
KS4KKyAqCisgKiBAc2VlIGV3a19iYWNrX2ZvcndhcmRfbGlzdF9pdGVtX29yaWdpbmFsX3VyaV9n
ZXQoKQorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gcXVlcnkK
KyAqCisgKiBAcmV0dXJuIHRoZSBVUkwgb2YgdGhlIEBhIGl0ZW0gb3IgQGMgTlVMTCBpbiBjYXNl
IG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBl
aW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlv
dXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hh
cmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAg
IHN0cmR1cCgpCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX25hdmlnYXRpb25fZGF0YV91cmxf
Z2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEgKml0ZW0pOworCisjaWZkZWYgX19jcGx1c3Bs
dXMKK30KKyNlbmRpZgorCisjZW5kaWYgLy8gZXdrX25hdmlnYXRpb25fZGF0YV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRh
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX2RhdGFfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQz
MGM2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaApAQCAtMCwwICsxLDM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZV9oCisjZGVm
aW5lIGV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXS05hdmlnYXRp
b25EYXRhLmgiCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfTmF2aWdhdGlvbl9EYXRhIEV3a19OYXZp
Z2F0aW9uX0RhdGE7CisKK0V3a19OYXZpZ2F0aW9uX0RhdGEqIGV3a19uYXZpZ2F0aW9uX2RhdGFf
bmV3KFdLTmF2aWdhdGlvbkRhdGFSZWYgZGF0YVJlZik7CisKKyNlbmRpZiAvLyBld2tfbmF2aWdh
dGlvbl9kYXRhX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCmluZGV4IGY0NjAyZjUuLmFiN2EzNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTgyLDYgKzgyLDI1IEBAIHN0YXRp
YyBjb25zdCBpbnQgZGVmYXVsdEN1cnNvclNpemUgPSAxNjsKIHR5cGVkZWYgSGFzaE1hcDx1aW50
NjRfdCwgRXdrX1Jlc291cmNlKj4gTG9hZGluZ1Jlc291cmNlc01hcDsKIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19wcml2X2xvYWRpbmdfcmVzb3VyY2VzX2NsZWFyKExvYWRpbmdSZXNvdXJjZXNNYXAm
IGxvYWRpbmdSZXNvdXJjZXNNYXApOwogCit0eXBlZGVmIEhhc2hNYXA8Y29uc3QgV2ViUGFnZVBy
b3h5KiwgY29uc3QgRXZhc19PYmplY3QqPiBQYWdlVmlld01hcDsKK0RFRklORV9TVEFUSUNfTE9D
QUwoUGFnZVZpZXdNYXAsIHZpZXdNYXAsICgpKTsKKworc3RhdGljIGlubGluZSB2b2lkIGFkZFRv
UGFnZVZpZXdNYXAoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgQVNTRVJUKGV3
a1ZpZXcpOworICAgIEFTU0VSVChld2tfdmlld19wYWdlX2dldChld2tWaWV3KSk7CisgICAgUGFn
ZVZpZXdNYXA6OkFkZFJlc3VsdCByZXN1bHQgPSB2aWV3TWFwLmFkZChld2tfdmlld19wYWdlX2dl
dChld2tWaWV3KSwgZXdrVmlldyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5p
c05ld0VudHJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUZyb21QYWdlVmlld01h
cChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQoZXdrVmlldyk7Cisg
ICAgQVNTRVJUKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBBU1NFUlQodmlld01h
cC5jb250YWlucyhld2tfdmlld19wYWdlX2dldChld2tWaWV3KSkpOworICAgIHZpZXdNYXAucmVt
b3ZlKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKK30KKwogc3RydWN0IF9Fd2tfVmlld19Q
cml2YXRlX0RhdGEgewogICAgIE93blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC00ODYsNiArNTA1LDcgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKKyAgICByZW1v
dmVGcm9tUGFnZVZpZXdNYXAoZXdrVmlldyk7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7CiAgICAgaWYgKHNtYXJ0RGF0YSAmJiBzbWFydERhdGEtPnByaXYpCiAgICAg
ICAgIF9ld2tfdmlld19wcml2X2RlbChzbWFydERhdGEtPnByaXYpOwpAQCAtNzU1LDYgKzc3NSw5
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAgICAgICAgIHByaXYtPnBhZ2VQcm94eSA9IHRv
SW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRleHQpKS0+Y3JlYXRlV2ViUGFnZShw
cml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAgICAgZWxzZQog
ICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dl
dChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgV2ViUGFn
ZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CisKKyAgICBhZGRUb1BhZ2VWaWV3TWFwKGV3a1ZpZXcp
OworCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHByaXYtPnBhZ2VQcm94eS0+
cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKHRydWUpOwogICAgIHByaXYtPnBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2Vz
KCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwpAQCAtMTUyMSw2ICsxNTQ0LDE0IEBA
IHZvaWQgZXdrX3ZpZXdfaW50ZW50X3NlcnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IEV3a19JbnRlbnRfU2VyCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRT
X1RBRykKIAorY29uc3QgRXZhc19PYmplY3QqIGV3a192aWV3X2Zyb21fcGFnZV9nZXQoY29uc3Qg
V2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHBhZ2UsIDApOworICAgIFBhZ2VWaWV3TWFwOjpjb25zdF9pdGVyYXRvciBmb3Vu
ZCA9IHZpZXdNYXAuZmluZChwYWdlKTsKKworICAgIHJldHVybiAoZm91bmQgIT0gdmlld01hcC5l
bmQoKSkgPyBmb3VuZC0+dmFsdWUgOiAwOworfQorCiBXZWJQYWdlUHJveHkqIGV3a192aWV3X3Bh
Z2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCA0NDEyZTRlLi4w
Y2Y2M2E1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXdfcHJpdmF0ZS5oCkBAIC05NCw2ICs5NCw3IEBAIHZvaWQgZXdrX3ZpZXdfaW50ZW50X3Jl
cXVlc3RfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfSW50ZW50KiBld2tJbnRl
CiB2b2lkIGV3a192aWV3X2ludGVudF9zZXJ2aWNlX3JlZ2lzdGVyKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBjb25zdCBFd2tfSW50ZW50X1NlcnZpY2UqIGV3a0ludGVudFNlcnZpY2UpOwogI2VuZGlm
CiAKK2NvbnN0IEV2YXNfT2JqZWN0ICpld2tfdmlld19mcm9tX3BhZ2VfZ2V0KGNvbnN0IFdlYktp
dDo6V2ViUGFnZVByb3h5Kik7CiBXZWJLaXQ6OldlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpOwogV2ViQ29yZTo6SW50U2l6ZSBld2tfdmll
d19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0X2hp
c3RvcnlfZGVsZWdhdGUuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9kZWxlZ2F0ZS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkY2Q0MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0X2hpc3Rvcnlf
ZGVsZWdhdGUuY3BwCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJh
c2UuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50Lmgi
CisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRl
IDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKwordXNpbmcgbmFtZXNwYWNlIEVXSzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVz
dEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFRp
dGxlW10gPSAiRGVmYXVsdCBUZXN0aW5nIFdlYiBQYWdlIjsKKworc3RhdGljIGNvbnN0IGNoYXIg
dG9CZVJlZGlyZWN0ZWRQYXRoW10gPSAiL3NvbWVfcGFnZV90b19iZV9yZWRpcmVjdGVkIjsKK3N0
YXRpYyBjb25zdCBjaGFyIHJlZGlyZWN0aW9uVGFyZ2V0UGF0aFtdID0gIi9yZWRpcmVjdGlvbl90
YXJnZXQiOworCitzdGF0aWMgRVdLMlVuaXRUZXN0U2VydmVyKiBodHRwU2VydmVyKCkKK3sKKyAg
ICBzdGF0aWMgRVdLMlVuaXRUZXN0U2VydmVyKiBzZXJ2ZXIgPSAwOworCisgICAgaWYgKCFzZXJ2
ZXIpCisgICAgICAgIHNlcnZlciA9IG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXI7CisKKyAgICByZXR1
cm4gc2VydmVyOworfQorCisjZGVmaW5lIERFQ0xBUkVfSU5WT0tFX0ZMQUcoZnVuY3Rpb25OYW1l
KSBcCisgICAgc3RhdGljIGJvb2wgZnVuY3Rpb25OYW1lIyNJbnZva2VkID0gZmFsc2U7CisKKyNk
ZWZpbmUgV0FTX0lOVk9LRUQoZnVuY3Rpb25OYW1lKSBcCisgICAgaWYgKGZ1bmN0aW9uTmFtZSMj
SW52b2tlZCkgICAgXAorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAgIFwKKyAgICBm
dW5jdGlvbk5hbWUjI0ludm9rZWQgPSB0cnVlCisKKyNkZWZpbmUgQ0hFQ0tfV0FTX0lOVk9LRUQo
ZnVuY3Rpb25OYW1lKSBcCisgICAgQVNTRVJUX1RSVUUoZnVuY3Rpb25OYW1lIyNJbnZva2VkKQor
CitERUNMQVJFX0lOVk9LRV9GTEFHKG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKQorREVDTEFS
RV9JTlZPS0VfRkxBRyhwZXJmb3JtQ2xpZW50UmVkaXJlY3QpCitERUNMQVJFX0lOVk9LRV9GTEFH
KHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUcodXBkYXRlSGlzdG9y
eVRpdGxlKQorREVDTEFSRV9JTlZPS0VfRkxBRyhwb3B1bGF0ZVZpc2l0ZWRMaW5rcykKKworc3Rh
dGljIHZvaWQgbmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEoY29uc3QgRXZhc19PYmplY3QqIHZp
ZXcsIEV3a19OYXZpZ2F0aW9uX0RhdGEqIG5hdmlnYXRpb25EYXRhLCB2b2lkKiB1c2VyRGF0YSkK
K3sKKyAgICBXQVNfSU5WT0tFRChuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk7CisKKyAgICBF
V0syVW5pdFRlc3RCYXNlKiB1bml0VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2Uq
Pih1c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1
bml0VGVzdC0+d2ViVmlldygpLCB2aWV3KTsKKyAgICAvLyBGSVhNRSA6IFdlYkZyYW1lTG9hZGVy
Q2xpZW50IHNlbmRzIGVtcHR5IHRpdGxlLgorICAgIC8vIEFTU0VSVF9TVFJFUShkZWZhdWx0VGl0
bGUsIGV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVfZ2V0KG5hdmlnYXRpb25EYXRhKSk7CisgICAg
QVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwgZXdrX25hdmln
YXRpb25fZGF0YV91cmxfZ2V0KG5hdmlnYXRpb25EYXRhKSk7CisKKyAgICBFd2tfVXJsX1JlcXVl
c3QqIHJlcXVlc3QgPSBld2tfbmF2aWdhdGlvbl9kYXRhX29yaWdpbmFsX3JlcXVlc3RfZ2V0KG5h
dmlnYXRpb25EYXRhKTsKKyAgICBBU1NFUlRfU1RSRVEoIkdFVCIsIGV3a191cmxfcmVxdWVzdF9o
dHRwX21ldGhvZF9nZXQocmVxdWVzdCkpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+
ZGVmYXVsdFRlc3RQYWdlVXJsKCksIGV3a191cmxfcmVxdWVzdF91cmxfZ2V0KHJlcXVlc3QpKTsK
KyAgICBBU1NFUlRfRVEoMCwgZXdrX3JlcXVlc3RfY29va2llc19maXJzdF9wYXJ0eV9nZXQocmVx
dWVzdCkpOworfQorCitzdGF0aWMgdm9pZCBwZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgRXZh
c19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVybCwgY29uc3QgY2hhciogZGVzdGlu
YXRpb25VcmwsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZPS0VEKHBlcmZvcm1DbGll
bnRSZWRpcmVjdCk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0VGVzdCA9IHN0YXRpY19j
YXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUodW5pdFRl
c3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygpLCB2aWV3KTsKKyAgICBBU1NF
UlRfU1RSRVEoZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJyZWRpcmVjdF91cmlfdG9fZGVm
YXVsdC5odG1sIikuZGF0YSgpLCBzb3VyY2VVcmwpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9u
bWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJsKCksIGRlc3RpbmF0aW9uVXJsKTsKK30KKworc3RhdGlj
IHZvaWQgcGVyZm9ybVNlcnZlclJlZGlyZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25z
dCBjaGFyKiBzb3VyY2VVcmwsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uVXJsLCB2b2lkKiB1c2Vy
RGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRChwZXJmb3JtU2VydmVyUmVkaXJlY3QpOworCisgICAg
RVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3QgPSBzdGF0aWNfY2FzdDxFV0syVW5pdFRlc3RCYXNl
Kj4odXNlckRhdGEpOworICAgIEFTU0VSVF9UUlVFKHVuaXRUZXN0KTsKKyAgICBBU1NFUlRfRVEo
dW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7CisgICAgQVNTRVJUX1NUUkVRKGh0dHBTZXJ2ZXIo
KS0+Z2V0VVJJRm9yUGF0aCh0b0JlUmVkaXJlY3RlZFBhdGgpLmRhdGEoKSwgc291cmNlVXJsKTsK
KyAgICBBU1NFUlRfU1RSRVEoaHR0cFNlcnZlcigpLT5nZXRVUklGb3JQYXRoKHJlZGlyZWN0aW9u
VGFyZ2V0UGF0aCkuZGF0YSgpLCBkZXN0aW5hdGlvblVybCk7Cit9CisKK3N0YXRpYyB2b2lkIHVw
ZGF0ZUhpc3RvcnlUaXRsZShjb25zdCBFdmFzX09iamVjdCogdmlldywgY29uc3QgY2hhciogdGl0
bGUsIGNvbnN0IGNoYXIqIHVybCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgV0FTX0lOVk9LRUQo
dXBkYXRlSGlzdG9yeVRpdGxlKTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0g
c3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJV
RSh1bml0VGVzdCk7CisgICAgQVNTRVJUX0VRKHVuaXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOwor
ICAgIEFTU0VSVF9TVFJFUShkZWZhdWx0VGl0bGUsIHRpdGxlKTsKKyAgICBBU1NFUlRfU1RSRVEo
ZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCB1cmwpOworfQorCitzdGF0aWMgdm9p
ZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tF
RChwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0VGVz
dCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNTRVJU
X1RSVUUodW5pdFRlc3QpOworfQorCitzdGF0aWMgdm9pZCBvbkxvYWRGaW5pc2hlZEZvclJlZGly
ZWN0aW9uKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqKQoreworICAgIGludCog
Y291bnRMb2FkRmluaXNoZWQgPSBzdGF0aWNfY2FzdDxpbnQqPih1c2VyRGF0YSk7CisgICAgKCpj
b3VudExvYWRGaW5pc2hlZCktLTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2tSZWRp
cmVjdGlvbihTb3VwU2VydmVyKiwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBh
dGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlm
IChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoc3RyY21wKHBhdGgsIHJlZGlyZWN0aW9u
VGFyZ2V0UGF0aCkpIHsgLy8gUmVkaXJlY3QgaWYgJ3BhdGgnIGlzIG5vdCBlcXVhbCB0byAncmVk
aXJlY3Rpb25UYXJnZXRQYXRoJy4KKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVz
c2FnZSwgU09VUF9TVEFUVVNfVEVNUE9SQVJZX1JFRElSRUNUKTsKKyAgICAgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIs
IGh0dHBTZXJ2ZXIoKS0+Z2V0VVJJRm9yUGF0aChyZWRpcmVjdGlvblRhcmdldFBhdGgpLmRhdGEo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgRWluYV9TdHJidWYqIGJvZHkgPSBlaW5h
X3N0cmJ1Zl9uZXcoKTsKKyAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJvZHksICI8aHRt
bD48dGl0bGU+UmVkaXJlY3Rpb24gVGFyZ2V0PC90aXRsZT48L2h0bWw+Iik7CisgICAgY29uc3Qg
c2l6ZV90IGJvZHlMZW5ndGggPSBlaW5hX3N0cmJ1Zl9sZW5ndGhfZ2V0KGJvZHkpOworICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9UQUtFLCBlaW5hX3N0cmJ1Zl9zdHJpbmdfc3RlYWwoYm9keSksIGJvZHlMZW5ndGgpOworICAg
IGVpbmFfc3RyYnVmX2ZyZWUoYm9keSk7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0
ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2Us
IGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldCkKK3sKKyAgICBFd2tfQ29udGV4dF9IaXN0
b3J5X0NsaWVudCBoaXN0b3J5Q2xpZW50ID0KKyAgICB7IHRoaXMsIG5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhLCBwZXJmb3JtQ2xpZW50UmVkaXJlY3QsIHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCwg
dXBkYXRlSGlzdG9yeVRpdGxlLCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyB9OworCisgICAgZXdrX2Nv
bnRleHRfaGlzdG9yeV9jbGllbnRfc2V0KGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSks
ICZoaXN0b3J5Q2xpZW50KTsKKworICAgIC8vIFRlc3QgbmF2aWdhdGlvbi4KKyAgICBsb2FkVXJs
U3luYyhlbnZpcm9ubWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJsKCkpOworICAgIENIRUNLX1dBU19J
TlZPS0VEKG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKTsKKyAgICBDSEVDS19XQVNfSU5WT0tF
RCh1cGRhdGVIaXN0b3J5VGl0bGUpOworICAgIENIRUNLX1dBU19JTlZPS0VEKHBvcHVsYXRlVmlz
aXRlZExpbmtzKTsKKworICAgIC8vIFRlc3QgY2xpZW50IHJlZGlyZWN0LgorICAgIGludCBjb3Vu
dExvYWRGaW5pc2hlZCA9IDI7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdl
YlZpZXcoKSwgImxvYWQsZmluaXNoZWQiLCBvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uLCAm
Y291bnRMb2FkRmluaXNoZWQpOworICAgIGV3a192aWV3X3VyaV9zZXQod2ViVmlldygpLCBlbnZp
cm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInJlZGlyZWN0X3VyaV90b19kZWZhdWx0Lmh0bWwiKS5k
YXRhKCkpOworICAgIHdoaWxlIChjb3VudExvYWRGaW5pc2hlZCkKKyAgICAgICAgZWNvcmVfbWFp
bl9sb29wX2l0ZXJhdGUoKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2Vi
VmlldygpLCAibG9hZCxmaW5pc2hlZCIsIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24pOwor
ICAgIENIRUNLX1dBU19JTlZPS0VEKHBlcmZvcm1DbGllbnRSZWRpcmVjdCk7CisKKyAgICAvLyBU
ZXN0IHNlcnZlciByZWRpcmVjdC4KKyAgICBodHRwU2VydmVyKCktPnJ1bihzZXJ2ZXJDYWxsYmFj
a1JlZGlyZWN0aW9uKTsKKworICAgIGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXIoKS0+Z2V0VVJJRm9y
UGF0aCh0b0JlUmVkaXJlY3RlZFBhdGgpLmRhdGEoKSk7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQo
cGVyZm9ybVNlcnZlclJlZGlyZWN0KTsKK30KKwo=
</data>
<flag name="commit-queue"
          id="180257"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167552</attachid>
            <date>2012-10-08 09:58:57 -0700</date>
            <delta_ts>2012-10-08 11:59:14 -0700</delta_ts>
            <desc>patch v2</desc>
            <filename>bug98594_v2</filename>
            <type>text/plain</type>
            <size>41877</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDhhZDJmMjBlNWUyYzNjYzVkM2M0ZWEzZmNhYmE5N2MzNmUyMzkwNWQKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA5ZGYzMzcwLi4xYzVjMWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTItMTAt
MDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV0syXSBBZGQgSGlzdG9yeSBDbGllbnQgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODU5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhpc3RvcnkgQ2xpZW50IEFQ
SSB0byBFd2sgQ29udGV4dC4gQWRkZWQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19D
b250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldCk6CisgICAgICAgIChld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRfbGlu
ayk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoZ2V0RXdrSGlzdG9yeURlbGVnYXRlKToKKyAgICAgICAgKGRpZE5hdmlnYXRl
V2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHA6IEFkZGVkLgorICAg
ICAgICAoX0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoX0V3a19OYXZpZ2F0aW9uX0Rh
dGE6Ol9Fd2tfTmF2aWdhdGlvbl9EYXRhKToKKyAgICAgICAgKF9Fd2tfTmF2aWdhdGlvbl9EYXRh
Ojp+X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV9y
ZWYpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZik6CisgICAgICAgIChld2tf
bmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRh
X29yaWdpbmFsX3JlcXVlc3RfZ2V0KToKKyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdXJs
X2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX25ldyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoYWRkVG9Q
YWdlVmlld01hcCk6CisgICAgICAgIChyZW1vdmVGcm9tUGFnZVZpZXdNYXApOgorICAgICAgICAo
X2V3a192aWV3X3NtYXJ0X2RlbCk6CisgICAgICAgIChfZXdrX3ZpZXdfaW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9kZWxlZ2F0ZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoaHR0cFNlcnZlcik6CisgICAgICAgIChuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChwZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAocGVyZm9ybVNlcnZlclJl
ZGlyZWN0KToKKyAgICAgICAgKHVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrUmVkaXJlY3Rpb24pOgorICAgICAgICAoVEVTVF9GKToK
KwogMjAxMi0xMC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQWRkIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBzbW9vdGgg
c2Nyb2xsaW5nIHRvIFdlYktpdDIgR1RLKyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggMWJiZjNkYi4uYmJlYmVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUwLDYg
KzUwLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFu
YWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2Vy
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC01OCw2
ICs1OSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19pbnRlbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2
aWNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmNwcAorICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19wb3B1cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Jlc291
cmNlLmNwcApAQCAtMjMzLDYgKzIzNSw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2ludGVudF9zZXJ2aWNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKQEAgLTMyMiw2ICsz
MjUsNyBAQCBUQVJHRVRfTElOS19MSUJSQVJJRVMoZXdrMlVuaXRUZXN0VXRpbHMgJHtFV0syVW5p
dFRlc3RzX0xJQlJBUklFU30pCiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3Rf
ZXdrMl9iYWNrX2ZvcndhcmRfbGlzdAogICAgIHRlc3RfZXdrMl9jb250ZXh0CisgICAgdGVzdF9l
d2syX2NvbnRleHRfaGlzdG9yeV9jbGllbnQKICAgICB0ZXN0X2V3azJfY29va2llX21hbmFnZXIK
ICAgICB0ZXN0X2V3azJfZG93bmxvYWRfam9iCiAgICAgdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0
cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktp
dDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXgg
MDg1MDk0Yy4uMDBkZDgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2lu
Y2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgogI2luY2x1ZGUgImV3a19tYWluLmgiCisjaW5j
bHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbi5oIgogI2luY2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKICNpbmNs
dWRlICJld2tfcmVzb3VyY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBiMGRlZjAzLi5lNmJmMDkyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nv
bnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9j
bGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgi
CkBAIC03OSwxMSArODAsMTQgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgV0tSZXRhaW5Q
dHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAgIFVSTFNjaGVt
ZUhhbmRsZXJNYXAgdXJsU2NoZW1lSGFuZGxlcnM7CiAKKyAgICBFd2tfQ29udGV4dF9IaXN0b3J5
X0NsaWVudCBoaXN0b3J5Q2xpZW50OworCiAgICAgX0V3a19Db250ZXh0KFdLUmV0YWluUHRyPFdL
Q29udGV4dFJlZj4gY29udGV4dFJlZikKICAgICAgICAgOiBfX3JlZigxKQogICAgICAgICAsIGNv
bnRleHQoY29udGV4dFJlZikKICAgICAgICAgLCBjb29raWVNYW5hZ2VyKDApCiAgICAgICAgICwg
cmVxdWVzdE1hbmFnZXIoV0tDb250ZXh0R2V0U291cFJlcXVlc3RNYW5hZ2VyKGNvbnRleHRSZWYu
Z2V0KCkpKQorICAgICAgICAsIGhpc3RvcnlDbGllbnQoKQogICAgIHsKICNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCiAgICAgICAgIGJhdHRlcnlQcm92aWRlciA9IEJhdHRlcnlQcm92aWRlcjo6
Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOwpAQCAtMTA5LDYgKzExMyw3IEBAIHN0cnVjdCBfRXdrX0Nv
bnRleHQgewogI2VuZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGll
bnRfYXR0YWNoKHRoaXMpOwogICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0
YWNoKHRoaXMpOworICAgICAgICBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2godGhp
cyk7CiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCkBAIC0yODIsMyArMjg3LDMxIEBAIHZv
aWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBFd2tfVmliCiAgICAgZXdrQ29udGV4dC0+dmlicmF0aW9uUHJvdmlkZXIt
PnNldFZpYnJhdGlvbkNsaWVudENhbGxiYWNrcyh2aWJyYXRlLCBjYW5jZWwsIGRhdGEpOwogI2Vu
ZGlmCiB9CisKK3ZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogY2xpZW50KQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworCisgICAgaWYg
KCFjbGllbnQpIHsKKyAgICAgICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudCA9IHsgMCwgMCwg
MCwgMCwgMCwgMCB9OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZXdrQ29udGV4dC0+
aGlzdG9yeUNsaWVudCA9ICpjbGllbnQ7Cit9CisKK2NvbnN0IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50KiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRleHQq
IGV3a0NvbnRleHQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0Nv
bnRleHQsIDApOworCisgICAgcmV0dXJuICZld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50OworfQor
Cit2b2lkIGV3a19jb250ZXh0X2FkZF92aXNpdGVkX2xpbmsoRXdrX0NvbnRleHQqIGV3a0NvbnRl
eHQsIGNvbnN0IGNoYXIqIHZpc2l0ZWRVUkwpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oZXdrQ29udGV4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odmlzaXRl
ZFVSTCk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tWaXNpdGVkVVJMKEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZpc2l0ZWRVUkwpKTsKKyAgICBXS0Nv
bnRleHRBZGRWaXNpdGVkTGluayhld2tDb250ZXh0LT5jb250ZXh0LmdldCgpLCB3a1Zpc2l0ZWRV
UkwuZ2V0KCkpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0LmgKaW5kZXggYmY4MjdjZC4uZjU4YjliNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCkBAIC0zOCw2ICszOCw3IEBACiAjZGVmaW5l
IGV3a19jb250ZXh0X2gKIAogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgorI2luY2x1
ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKICNpbmNsdWRlICJld2tfdXJsX3NjaGVtZV9yZXF1
ZXN0LmgiCiAjaW5jbHVkZSA8RXZhcy5oPgogCkBAIC02OSw2ICs3MCw1MiBAQCB0eXBlZGVmIHZv
aWQgKCpFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiKSh1aW50NjRfdCB2aWJyYXRpb25f
dGltZSwgdm9pZCAqdQogdHlwZWRlZiB2b2lkICgqRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0
aW9uX0NhbmNlbF9DYikodm9pZCAqdXNlcl9kYXRhKTsKIAogLyoqCisgKiBAdHlwZWRlZiBFd2tf
Q29udGV4dF9EaWRfTmF2aWdhdGVfV2l0aF9OYXZpZ2F0aW9uX0RhdGFfQ2IgRXdrX0NvbnRleHRf
RGlkX05hdmlnYXRlX1dpdGhfTmF2aWdhdGlvbl9EYXRhX0NiCisgKiBAYnJpZWYgVHlwZSBkZWZp
bml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIEBhIHZp
ZXcgZGlkIG5hdmlnYXRpb24uCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19Db250ZXh0X0RpZF9O
YXZpZ2F0ZV9XaXRoX05hdmlnYXRpb25fRGF0YV9DYikoY29uc3QgRXZhc19PYmplY3QgKnZpZXcs
IEV3a19OYXZpZ2F0aW9uX0RhdGEgKm5hdmlnYXRpb25fZGF0YSwgdm9pZCAqdXNlcl9kYXRhKTsK
KworLyoqCisgKiBAdHlwZWRlZiBFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9DbGllbnRfUmVkaXJl
Y3RfQ2IgRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1fQ2xpZW50X1JlZGlyZWN0X0NiCisgKiBAYnJp
ZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFj
ayB3aGVuIEBhIHZpZXcgcGVyZm9ybWVkIGEgY2xpZW50IHJlZGlyZWN0LgorICovCit0eXBlZGVm
IHZvaWQgKCpFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9DbGllbnRfUmVkaXJlY3RfQ2IpKGNvbnN0
IEV2YXNfT2JqZWN0ICp2aWV3LCBjb25zdCBjaGFyICpzb3VyY2VfdXJsLCBjb25zdCBjaGFyICpk
ZXN0aW5hdGlvbl91cmwsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdr
X0NvbnRleHRfRGlkX1BlcmZvcm1fU2VydmVyX1JlZGlyZWN0X0NiIEV3a19Db250ZXh0X0RpZF9Q
ZXJmb3JtX1NlcnZlcl9SZWRpcmVjdF9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3Ig
YSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IHBlcmZvcm1l
ZCBhIHNlcnZlciByZWRpcmVjdC4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlk
X1BlcmZvcm1fU2VydmVyX1JlZGlyZWN0X0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29u
c3QgY2hhciAqc291cmNlX3VybCwgY29uc3QgY2hhciAqZGVzdGluYXRpb25fdXJsLCB2b2lkICp1
c2VyX2RhdGEpOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19Db250ZXh0X0RpZF9VcGRhdGVfSGlz
dG9yeV9UaXRsZV9DYiBFd2tfQ29udGV4dF9EaWRfVXBkYXRlX0hpc3RvcnlfVGl0bGVfQ2IKKyAq
IEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxl
ZCBiYWNrIHdoZW4gaGlzdG9yeSB0aXRsZSBpcyB1cGRhdGVkLgorICovCit0eXBlZGVmIHZvaWQg
KCpFd2tfQ29udGV4dF9EaWRfVXBkYXRlX0hpc3RvcnlfVGl0bGVfQ2IpKGNvbnN0IEV2YXNfT2Jq
ZWN0ICp2aWV3LCBjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdXJsLCB2b2lkICp1c2Vy
X2RhdGEpOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19Db250ZXh0X1BvcHVsYXRlX1Zpc2l0ZWRf
TGlua3NfQ2IgRXdrX0NvbnRleHRfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYgorICogQGJyaWVm
IFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sg
d2hlbiBjbGllbnQgaXMgYXNrZWQgdG8gcHJvdmlkZSB2aXNpdGVkIGxpbmtzIGZyb20gYSBjbGll
bnQtbWFuYWdlZCBzdG9yYWdlLgorICoKKyAqIEBzZWUgZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRf
bGluaworICovCit0eXBlZGVmIHZvaWQgKCpFd2tfQ29udGV4dF9Qb3B1bGF0ZV9WaXNpdGVkX0xp
bmtzX0NiKSh2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEBicmllZiBTdHJ1Y3R1cmUgY29u
dGFpbmluZyBoaXN0b3J5IGRlbGVnYXRlIGNhbGxiYWNrcyBhbmQgdXNlciBkYXRhIHRvIGJlIHBh
c3NlZC4KKyAqLworc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCB7CisgICAgdm9p
ZCAqdXNlcl9kYXRhOworICAgIEV3a19Db250ZXh0X0RpZF9OYXZpZ2F0ZV9XaXRoX05hdmlnYXRp
b25fRGF0YV9DYiBld2tfY29udGV4dF9uYXZpZ2F0aW9uX3BlcmZvcm1lZDsKKyAgICBFd2tfQ29u
dGV4dF9EaWRfUGVyZm9ybV9DbGllbnRfUmVkaXJlY3RfQ2IgZXdrX2NvbnRleHRfY2xpZW50X3Jl
ZGlyZWN0X3BlcmZvcm1lZDsKKyAgICBFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9TZXJ2ZXJfUmVk
aXJlY3RfQ2IgZXdrX2NvbnRleHRfc2VydmVyX3JlZGlyZWN0X3BlcmZvcm1lZDsKKyAgICBFd2tf
Q29udGV4dF9EaWRfVXBkYXRlX0hpc3RvcnlfVGl0bGVfQ2IgZXdrX2NvbnRleHRfaGlzdG9yeV90
aXRsZV91cGRhdGVkOworICAgIEV3a19Db250ZXh0X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2Ig
ZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rc19wb3B1bGF0ZTsKK307CisvLy8gQ3JlYXRlcyBhIHR5
cGUgbmFtZSBmb3IgQGEgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50LgordHlwZWRlZiBzdHJ1
Y3QgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
OworCisvKioKICAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBv
YmplY3QuCiAgKgogICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gaW5jcmVhc2Ug
dGhlIHJlZmVyZW5jZSBjb3VudApAQCAtMTkwLDYgKzIzNywyOCBAQCBFQVBJIEVpbmFfQm9vbCBl
d2tfY29udGV4dF91cmxfc2NoZW1lX3JlZ2lzdGVyKEV3a19Db250ZXh0ICpjb250ZXh0LCBjb25z
dCBjaGFyCiAgKi8KIEVBUEkgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxi
YWNrc19zZXQoRXdrX0NvbnRleHQgKmNvbnRleHQsIEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJh
dGVfQ2IgdmlicmF0ZSwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0aW9uX0NhbmNlbF9DYiBj
YW5jZWwsIHZvaWQgKmRhdGEpOwogCisvKioKKyAqIFNldHMgaGlzdG9yeSBjbGllbnQgZm9yIHRo
ZSBnaXZlbiBAYSBjb250ZXh0LgorICoKKyAqIFRoZSBnaXZlbiBAYSBjbGllbnQgcG9pbnRlciBp
cyBub3Qgc3RvcmVkIGFueXdoZXJlIGFuZCBpcyB1c2VkIG9ubHkgb25jZSBmb3IgY29weWluZyBv
ZiAgQGMgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQgZmllbGRzLgorICoKKyAqIEBwYXJhbSBj
b250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHNldCBoaXN0b3J5IGNsaWVudAorICogQHBhcmFtIGNs
aWVudCBoaXN0b3J5IGNsaWVudCB0byBiZSBzZXQKKyAqLworRUFQSSB2b2lkIGV3a19jb250ZXh0
X2hpc3RvcnlfY2xpZW50X3NldChFd2tfQ29udGV4dCAqY29udGV4dCwgY29uc3QgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQgKmNsaWVudCk7CisKKy8qKgorICogUmVnaXN0ZXJzIHRoZSBnaXZl
biBAYSB2aXNpdGVkX3VybCBhcyB2aXNpdGVkIGxpbmsgaW4gQGEgY29udGV4dCB2aXNpdGVkIGxp
bmsgY2FjaGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBpbnZva2VkIGFzIGEgcmVz
cG9uc2UgdG8gQGMgcG9wdWxhdGVWaXNpdGVkTGlua3MgY2FsbGJhY2sgb2YgdGhlIGhpc3Rvcnkg
Y2llbnQuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gYWRkIHZpc2l0
ZWQgbGluayBkYXRhCisgKiBAcGFyYW0gdmlzaXRlZF91cmwgdmlzaXRlZCB1cmwKKyAqCisgKiBA
c2VlIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50CisgKi8KK0VBUEkgdm9pZCBld2tfY29udGV4
dF9hZGRfdmlzaXRlZF9saW5rKEV3a19Db250ZXh0ICpjb250ZXh0LCBjb25zdCBjaGFyICp2aXNp
dGVkX3VybCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVu
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0
b3J5X2NsaWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJmYmIx
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0Lmgi
CisKKyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisj
aW5jbHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tFaW5hU2hhcmVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9oaXN0b3J5X2NsaWVu
dF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhX3By
aXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCisjaW5jbHVkZSAiZXdrX3Vy
bF9yZXNwb25zZV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgaW5saW5lIGNvbnN0IEV3a19Db250ZXh0
X0hpc3RvcnlfQ2xpZW50KiBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY29uc3Qgdm9pZCogY2xpZW50
SW5mbykKK3sKKyAgICBBU1NFUlQoY2xpZW50SW5mbyk7CisgICAgcmV0dXJuIGV3a19jb250ZXh0
X2hpc3RvcnlfY2xpZW50X2dldChzdGF0aWNfY2FzdDxjb25zdCBFd2tfQ29udGV4dCo+KGNsaWVu
dEluZm8pKTsKK30KKworc3RhdGljIHZvaWQgZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEo
V0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tOYXZpZ2F0aW9uRGF0YVJlZiBuYXZpZ2F0
aW9uRGF0YSwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25z
dCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlz
dG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOwor
CisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X25hdmlnYXRpb25fcGVyZm9y
bWVkKQorICAgICAgICByZXR1cm47CisKKyAgICBFd2tfTmF2aWdhdGlvbl9EYXRhKiBuYXZpZ2F0
aW9uRGF0YUV3ayA9IGV3a19uYXZpZ2F0aW9uX2RhdGFfbmV3KG5hdmlnYXRpb25EYXRhKTsKKyAg
ICBoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X25hdmlnYXRpb25fcGVyZm9ybWVkKGV3a192
aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlvbkRhdGFFd2ssIGhpc3Rv
cnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKG5h
dmlnYXRpb25EYXRhRXdrKTsKK30KKworc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGly
ZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tV
UkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0
ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQoaGlzdG9y
eURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5ld2tfY29udGV4dF9jbGll
bnRfcmVkaXJlY3RfcGVyZm9ybWVkKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFy
ZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CisgICAgV0tFaW5hU2hhcmVkU3Ry
aW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKKworICAgIGhpc3RvcnlE
ZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfY2xpZW50X3JlZGlyZWN0X3BlcmZvcm1lZChld2tfdmlld19m
cm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHNvdXJjZVVSTFN0cmluZywgZGVzdGluYXRpb25V
UkxTdHJpbmcsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQg
ZGlkUGVyZm9ybVNlcnZlclJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdL
VVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9D
bGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZv
KTsKKyAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVn
YXRlLT5ld2tfY29udGV4dF9zZXJ2ZXJfcmVkaXJlY3RfcGVyZm9ybWVkKQorICAgICAgICByZXR1
cm47CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7
CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9u
VVJMKTsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfc2VydmVyX3JlZGlyZWN0
X3BlcmZvcm1lZChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHNvdXJjZVVS
TFN0cmluZywgZGVzdGluYXRpb25VUkxTdHJpbmcsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRh
KTsKK30KKworc3RhdGljIHZvaWQgZGlkVXBkYXRlSGlzdG9yeVRpdGxlKFdLQ29udGV4dFJlZiwg
V0tQYWdlUmVmIHBhZ2UsIFdLU3RyaW5nUmVmIHRpdGxlLCBXS1VSTFJlZiBVUkwsIFdLRnJhbWVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGll
bnRJbmZvKTsKKyAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9y
eURlbGVnYXRlLT5ld2tfY29udGV4dF9oaXN0b3J5X3RpdGxlX3VwZGF0ZWQpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CisgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VSTChVUkwpOworCisgICAgaGlzdG9yeURlbGVnYXRl
LT5ld2tfY29udGV4dF9oaXN0b3J5X3RpdGxlX3VwZGF0ZWQoZXdrX3ZpZXdfZnJvbV9wYWdlX2dl
dCh0b0ltcGwocGFnZSkpLCB0aXRsZVN0cmluZywgc3RyaW5nVVJMLCBoaXN0b3J5RGVsZWdhdGUt
PnVzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtzKFdLQ29u
dGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4
dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRl
KGNsaWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFo
aXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X3Zpc2l0ZWRfbGlua3NfcG9wdWxhdGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfdmlzaXRlZF9s
aW5rc19wb3B1bGF0ZShoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3ZvaWQgZXdr
X2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQor
eworICAgIFdLQ29udGV4dEhpc3RvcnlDbGllbnQgd2tIaXN0b3J5Q2xpZW50OworICAgIG1lbXNl
dCgmd2tIaXN0b3J5Q2xpZW50LCAwLCBzaXplb2YoV0tDb250ZXh0SGlzdG9yeUNsaWVudCkpOwor
CisgICAgd2tIaXN0b3J5Q2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0SGlzdG9yeUNsaWVudEN1
cnJlbnRWZXJzaW9uOworICAgIHdrSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvID0gZXdrQ29udGV4
dDsKKworICAgIHdrSGlzdG9yeUNsaWVudC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSA9
IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOworICAgIHdrSGlzdG9yeUNsaWVudC5kaWRQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Q7CisgICAgd2tI
aXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCA9IGRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdDsKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlk
VXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHdrSGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRM
aW5rcyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworCisgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNs
aWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGV3a0NvbnRleHQpLCAmd2tIaXN0b3J5Q2xp
ZW50KTsKK30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQwNTJhMTkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5
X2NsaWVudF9wcml2YXRlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlX2gKKyNkZWZpbmUgZXdr
X2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZV9oCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tf
Q29udGV4dCBFd2tfQ29udGV4dDsKKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9h
dHRhY2goRXdrX0NvbnRleHQqKTsKKworI2VuZGlmIC8vIGV3a19jb250ZXh0X2hpc3RvcnlfY2xp
ZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGQxYjY5NWUuLmYyYzMyMmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2
YXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dCBFd2tf
Q29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWRfSm9iIEV3a19Eb3dubG9hZF9K
b2I7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJsX1NjaGVt
ZV9SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IEV3
a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50OwogCiBXS0NvbnRleHRSZWYgZXdrX2NvbnRleHRfV0tD
b250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCopOwogRXdrX0NvbnRleHQqIGV3a19jb250ZXh0
X25ld19mcm9tX1dLQ29udGV4dChXS0NvbnRleHRSZWYpOwpAQCAtMzUsNCArMzYsNiBAQCB2b2lk
IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqLCBFd2tfRG93bmxvYWRf
Sm9iKik7CiBFd2tfRG93bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNv
bnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7CiB2b2lkIGV3a19jb250ZXh0
X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsK
IAorY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCopOworCiAjZW5kaWYgLy8gZXdrX2NvbnRleHRf
cHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfbmF2aWdhdGlvbl9kYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjdhNDAzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcApAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0
aW9uX2RhdGEuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLRWluYVNo
YXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiZXdrX25h
dmlnYXRpb25fZGF0YV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfTmF2aWdhdGlvbl9EYXRhCisgKiBAYnJpZWYgICBD
b250YWlucyB0aGUgbmF2aWdhdGlvbiBkYXRhIGRldGFpbHMuCisgKi8KK3N0cnVjdCBfRXdrX05h
dmlnYXRpb25fRGF0YSB7CisgICAgdW5zaWduZWQgX19yZWY7IC8qKjwgdGhlIHJlZmVyZW5jZSBj
b3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxlOworICAg
IFdLRWluYVNoYXJlZFN0cmluZyB1cmw7CisgICAgRXdrX1VybF9SZXF1ZXN0KiByZXF1ZXN0Owor
CisgICAgX0V3a19OYXZpZ2F0aW9uX0RhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBkYXRhUmVmKQor
ICAgICAgICA6IF9fcmVmKDEpCisgICAgICAgICwgdGl0bGUoQWRvcHRXSywgV0tOYXZpZ2F0aW9u
RGF0YUNvcHlUaXRsZShkYXRhUmVmKSkKKyAgICAgICAgLCB1cmwoQWRvcHRXSywgV0tOYXZpZ2F0
aW9uRGF0YUNvcHlVUkwoZGF0YVJlZikpCisgICAgICAgICwgcmVxdWVzdCgwKQorICAgIHsKKyAg
ICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0V0soQWRvcHRXSywgV0tO
YXZpZ2F0aW9uRGF0YUNvcHlPcmlnaW5hbFJlcXVlc3QoZGF0YVJlZikpOworICAgICAgICByZXF1
ZXN0ID0gZXdrX3VybF9yZXF1ZXN0X25ldyhyZXF1ZXN0V0suZ2V0KCkpOworICAgIH0KKworICAg
IH5fRXdrX05hdmlnYXRpb25fRGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoIV9fcmVmKTsK
KyAgICAgICAgZXdrX3VybF9yZXF1ZXN0X3VucmVmKHJlcXVlc3QpOworICAgIH0KK307CisKK0V3
a19OYXZpZ2F0aW9uX0RhdGEqIGV3a19uYXZpZ2F0aW9uX2RhdGFfcmVmKEV3a19OYXZpZ2F0aW9u
X0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEs
IDApOworCisgICAgKytkYXRhLT5fX3JlZjsKKworICAgIHJldHVybiBkYXRhOworfQorCit2b2lk
IGV3a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYoRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkYXRhKTsKKworICAgIGlmICgtLWRhdGEt
Pl9fcmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgZGF0YTsKK30KKworY29uc3Qg
Y2hhciogZXdrX25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25f
RGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwg
MCk7CisKKyAgICByZXR1cm4gZGF0YS0+dGl0bGU7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogZXdr
X25hdmlnYXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBFd2tfTmF2aWdhdGlv
bl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRh
LCAwKTsKKworICAgIHJldHVybiBkYXRhLT5yZXF1ZXN0OworfQorCitjb25zdCBjaGFyKiBld2tf
bmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICBy
ZXR1cm4gZGF0YS0+dXJsOworfQorCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tfbmF2aWdhdGlv
bl9kYXRhX25ldyhXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFSZWYpCit7CisgICAgQVNTRVJUKGRh
dGFSZWYpOworICAgIHJldHVybiBuZXcgRXdrX05hdmlnYXRpb25fRGF0YShkYXRhUmVmKTsKK30K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX2RhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0
aW9uX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE2M2ZmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25h
dmlnYXRpb25fZGF0YS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisv
KioKKyAqIEBmaWxlICAgIGV3a19uYXZpZ2F0aW9uX2RhdGEuaAorICogQGJyaWVmICAgRGVzY3Jp
YmVzIHRoZSBFd2sgbmF2aWdhdGlvbiBkYXRhIEFQSS4KKyAqLworCisjaWZuZGVmIGV3a19uYXZp
Z2F0aW9uX2RhdGFfaAorI2RlZmluZSBld2tfbmF2aWdhdGlvbl9kYXRhX2gKKworI2luY2x1ZGUg
ImV3a191cmxfcmVxdWVzdC5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3Ig
X0V3a19OYXZpZ2F0aW9uX0RhdGEgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfTmF2aWdhdGlvbl9E
YXRhIEV3a19OYXZpZ2F0aW9uX0RhdGE7CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVu
Y2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gZGF0YSB0aGUgbmF2
aWdhdGlvbiBkYXRhIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKgor
ICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBzdWNjZXNzLCBAYyBOVUxMIG90
aGVyd2lzZS4KKyAqLworRUFQSSBFd2tfTmF2aWdhdGlvbl9EYXRhICpld2tfbmF2aWdhdGlvbl9k
YXRhX3JlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisgKiBEZWNyZWFzZXMg
dGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5n
IGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBvYmpl
Y3QgaXMgZnJlZWQuCisgKgorICogQHBhcmFtIGRhdGEgdGhlIG5hdmlnYXRpb24gZGF0YSBvYmpl
Y3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX25h
dmlnYXRpb25fZGF0YV91bnJlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisg
KiBSZXR1cm5zIHRpdGxlIGZvciB0aGlzIG5hdmlnYXRpb24gZGF0YS4KKyAqCisgKiBUaGUgdGl0
bGUgb2YgdGhlIG5hdmlnYXRlZCBwYWdlLgorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmlnYXRpb24g
ZGF0YSBvYmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIHRoZSB0aXRsZSBvciBAYyBOVUxM
IGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVk
IHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAg
IHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAq
ICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX25hdmlnYXRpb25f
ZGF0YV90aXRsZV9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisKKy8qKgor
ICogUmV0dXJucyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBmb3IgdGhpcyBuYXZpZ2F0aW9uIGRhdGEu
CisgKgorICogQHBhcmFtIGRhdGEgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBxdWVyeQorICoK
KyAqIEByZXR1cm4gVGhlIFVSTCByZXF1ZXN0IHBvaW50ZXIgb3IgQGMgTlVMTCBpbiBjYXNlIG9m
IGVycm9yLgorICovCitFQVBJIEV3a19VcmxfUmVxdWVzdCAqZXdrX25hdmlnYXRpb25fZGF0YV9v
cmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKwor
LyoqCisgKiBSZXR1cm5zIFVSTCBvZiB0aGUgaXRlbS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgVVJM
IG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgVVJMIChGb3IgZXhhbXBsZSBpZiB0aGUgcGFn
ZSB3YXMgcmVkaXJlY3RlZCkuCisgKgorICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRl
bV9vcmlnaW5hbF91cmlfZ2V0KCkKKyAqCisgKiBAcGFyYW0gZGF0YSBuYXZpZ2F0aW9uIGRhdGEg
b2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiB0aGUgVVJMIG9mIHRoZSBAYSBpdGVtIG9y
IEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1
YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAq
ICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAg
ICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQo
KSBvcgorICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19uYXZp
Z2F0aW9uX2RhdGFfdXJsX2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhICppdGVtKTsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a19uYXZpZ2F0aW9u
X2RhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40MzBjNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgKQEAgLTAsMCAr
MSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfbmF2aWdhdGlvbl9kYXRh
X3ByaXZhdGVfaAorI2RlZmluZSBld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGVfaAorCisjaW5j
bHVkZSAiV0tOYXZpZ2F0aW9uRGF0YS5oIgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX05hdmlnYXRp
b25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tf
bmF2aWdhdGlvbl9kYXRhX25ldyhXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFSZWYpOworCisjZW5k
aWYgLy8gZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA0MGUzMTQxLi4xNTc0OWZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04Miw2
ICs4MiwyNSBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDdXJzb3JTaXplID0gMTY7CiB0eXBl
ZGVmIEhhc2hNYXA8dWludDY0X3QsIEV3a19SZXNvdXJjZSo+IExvYWRpbmdSZXNvdXJjZXNNYXA7
CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcihMb2Fk
aW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUmVzb3VyY2VzTWFwKTsKIAordHlwZWRlZiBIYXNoTWFw
PGNvbnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IEV2YXNfT2JqZWN0Kj4gUGFnZVZpZXdNYXA7CitE
RUZJTkVfU1RBVElDX0xPQ0FMKFBhZ2VWaWV3TWFwLCB2aWV3TWFwLCAoKSk7CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBhZGRUb1BhZ2VWaWV3TWFwKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQor
eworICAgIEFTU0VSVChld2tWaWV3KTsKKyAgICBBU1NFUlQoZXdrX3ZpZXdfcGFnZV9nZXQoZXdr
VmlldykpOworICAgIFBhZ2VWaWV3TWFwOjpBZGRSZXN1bHQgcmVzdWx0ID0gdmlld01hcC5hZGQo
ZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldyksIGV3a1ZpZXcpOworICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQuaXNOZXdFbnRyeSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZW1v
dmVGcm9tUGFnZVZpZXdNYXAoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgQVNT
RVJUKGV3a1ZpZXcpOworICAgIEFTU0VSVChld2tfdmlld19wYWdlX2dldChld2tWaWV3KSk7Cisg
ICAgQVNTRVJUKHZpZXdNYXAuY29udGFpbnMoZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpKTsK
KyAgICB2aWV3TWFwLnJlbW92ZShld2tfdmlld19wYWdlX2dldChld2tWaWV3KSk7Cit9CisKIHN0
cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICBPd25QdHI8UGFnZUNsaWVudEltcGw+
IHBhZ2VDbGllbnQ7CiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQpAQCAtNDg2LDYgKzUw
NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7CisgICAgcmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKGV3a1ZpZXcpOwogICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwogICAgIGlmIChzbWFydERhdGEgJiYgc21hcnRE
YXRhLT5wcml2KQogICAgICAgICBfZXdrX3ZpZXdfcHJpdl9kZWwoc21hcnREYXRhLT5wcml2KTsK
QEAgLTc1NSw2ICs3NzUsOSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfaW5pdGlhbGl6ZShFdmFz
X09iamVjdCogZXdrVmlldywgRXdrX0NvbnRleHQqIGNvbnRleHQsIFdLUAogICAgICAgICBwcml2
LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb250ZXh0KSkt
PmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgdG9JbXBsKHBhZ2VHcm91cFJl
ZikpOwogICAgIGVsc2UKICAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGV3a19jb250
ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4dCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBhZ2VDbGll
bnQuZ2V0KCksIFdlYlBhZ2VHcm91cDo6Y3JlYXRlKCkuZ2V0KCkpOworCisgICAgYWRkVG9QYWdl
Vmlld01hcChld2tWaWV3KTsKKwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKICAgICBw
cml2LT5wYWdlUHJveHktPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nRW5hYmxlZCh0cnVlKTsKICAgICBwcml2LT5wYWdlUHJveHktPnBhZ2VHcm91
cCgpLT5wcmVmZXJlbmNlcygpLT5zZXRGb3JjZUNvbXBvc2l0aW5nTW9kZSh0cnVlKTsKQEAgLTE1
MjEsNiArMTU0NCwxNCBAQCB2b2lkIGV3a192aWV3X2ludGVudF9zZXJ2aWNlX3JlZ2lzdGVyKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfSW50ZW50X1NlcgogfQogI2VuZGlmIC8vIEVO
QUJMRShXRUJfSU5URU5UU19UQUcpCiAKK2NvbnN0IEV2YXNfT2JqZWN0KiBld2tfdmlld19mcm9t
X3BhZ2VfZ2V0KGNvbnN0IFdlYktpdDo6V2ViUGFnZVByb3h5KiBwYWdlKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwYWdlLCAwKTsKKyAgICBQYWdlVmlld01hcDo6Y29u
c3RfaXRlcmF0b3IgZm91bmQgPSB2aWV3TWFwLmZpbmQocGFnZSk7CisKKyAgICByZXR1cm4gKGZv
dW5kICE9IHZpZXdNYXAuZW5kKCkpID8gZm91bmQtPnZhbHVlIDogMDsKK30KKwogV2ViUGFnZVBy
b3h5KiBld2tfdmlld19wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgK
aW5kZXggMGU0ODE4Zi4uZDJhYzcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApAQCAtOTQsNiArOTQsNyBAQCB2b2lkIGV3
a192aWV3X2ludGVudF9yZXF1ZXN0X25ldyhFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdr
X0ludGVudCogZXdrSW50ZQogdm9pZCBld2tfdmlld19pbnRlbnRfc2VydmljZV9yZWdpc3RlcihF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0ludGVudF9TZXJ2aWNlKiBld2tJbnRlbnRT
ZXJ2aWNlKTsKICNlbmRpZgogCitjb25zdCBFdmFzX09iamVjdCAqZXdrX3ZpZXdfZnJvbV9wYWdl
X2dldChjb25zdCBXZWJLaXQ6OldlYlBhZ2VQcm94eSopOwogV2ViS2l0OjpXZWJQYWdlUHJveHkq
IGV3a192aWV3X3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIFdlYkNvcmU6
OkludFNpemUgZXdrX3ZpZXdfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkNGZiYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250
ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RCYXNlLmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZp
cm9ubWVudC5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0U2VydmVyLmgi
CisjaW5jbHVkZSA8RVdlYktpdDIuaD4KKyNpbmNsdWRlIDxFY29yZS5oPgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7CisKK2V4dGVybiBF
V0syVW5pdFRlc3RFbnZpcm9ubWVudCogZW52aXJvbm1lbnQ7CisKK3N0YXRpYyBjb25zdCBjaGFy
IGRlZmF1bHRUaXRsZVtdID0gIkRlZmF1bHQgVGVzdGluZyBXZWIgUGFnZSI7CisKK3N0YXRpYyBj
b25zdCBjaGFyIHRvQmVSZWRpcmVjdGVkUGF0aFtdID0gIi9zb21lX3BhZ2VfdG9fYmVfcmVkaXJl
Y3RlZCI7CitzdGF0aWMgY29uc3QgY2hhciByZWRpcmVjdGlvblRhcmdldFBhdGhbXSA9ICIvcmVk
aXJlY3Rpb25fdGFyZ2V0IjsKKworc3RhdGljIEVXSzJVbml0VGVzdFNlcnZlciogaHR0cFNlcnZl
cigpCit7CisgICAgc3RhdGljIEVXSzJVbml0VGVzdFNlcnZlciogc2VydmVyID0gMDsKKworICAg
IGlmICghc2VydmVyKQorICAgICAgICBzZXJ2ZXIgPSBuZXcgRVdLMlVuaXRUZXN0U2VydmVyOwor
CisgICAgcmV0dXJuIHNlcnZlcjsKK30KKworI2RlZmluZSBERUNMQVJFX0lOVk9LRV9GTEFHKGZ1
bmN0aW9uTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGZ1bmN0aW9uTmFtZSMjSW52b2tlZCA9IGZh
bHNlOworCisjZGVmaW5lIFdBU19JTlZPS0VEKGZ1bmN0aW9uTmFtZSkgXAorICAgIGlmIChmdW5j
dGlvbk5hbWUjI0ludm9rZWQpICAgIFwKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAg
ICBcCisgICAgZnVuY3Rpb25OYW1lIyNJbnZva2VkID0gdHJ1ZQorCisjZGVmaW5lIENIRUNLX1dB
U19JTlZPS0VEKGZ1bmN0aW9uTmFtZSkgXAorICAgIEFTU0VSVF9UUlVFKGZ1bmN0aW9uTmFtZSMj
SW52b2tlZCkKKworREVDTEFSRV9JTlZPS0VfRkxBRyhuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YSkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUcocGVyZm9ybUNsaWVudFJlZGlyZWN0KQorREVDTEFSRV9J
TlZPS0VfRkxBRyhwZXJmb3JtU2VydmVyUmVkaXJlY3QpCitERUNMQVJFX0lOVk9LRV9GTEFHKHVw
ZGF0ZUhpc3RvcnlUaXRsZSkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUcocG9wdWxhdGVWaXNpdGVkTGlu
a3MpCisKK3N0YXRpYyB2b2lkIG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKGNvbnN0IEV2YXNf
T2JqZWN0KiB2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBuYXZpZ2F0aW9uRGF0YSwgdm9pZCog
dXNlckRhdGEpCit7CisgICAgV0FTX0lOVk9LRUQobmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEp
OworCisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3QgPSBzdGF0aWNfY2FzdDxFV0syVW5p
dFRlc3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VSVF9UUlVFKHVuaXRUZXN0KTsKKyAgICBB
U1NFUlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7CisgICAgLy8gRklYTUUgOiBXZWJG
cmFtZUxvYWRlckNsaWVudCBzZW5kcyBlbXB0eSB0aXRsZS4KKyAgICAvLyBBU1NFUlRfU1RSRVEo
ZGVmYXVsdFRpdGxlLCBld2tfbmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldChuYXZpZ2F0aW9uRGF0
YSkpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJsKCks
IGV3a19uYXZpZ2F0aW9uX2RhdGFfdXJsX2dldChuYXZpZ2F0aW9uRGF0YSkpOworCisgICAgRXdr
X1VybF9SZXF1ZXN0KiByZXF1ZXN0ID0gZXdrX25hdmlnYXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1
ZXN0X2dldChuYXZpZ2F0aW9uRGF0YSk7CisgICAgQVNTRVJUX1NUUkVRKCJHRVQiLCBld2tfdXJs
X3JlcXVlc3RfaHR0cF9tZXRob2RfZ2V0KHJlcXVlc3QpKTsKKyAgICBBU1NFUlRfU1RSRVEoZW52
aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCBld2tfdXJsX3JlcXVlc3RfdXJsX2dldChy
ZXF1ZXN0KSk7CisgICAgQVNTRVJUX0VRKDAsIGV3a19yZXF1ZXN0X2Nvb2tpZXNfZmlyc3RfcGFy
dHlfZ2V0KHJlcXVlc3QpKTsKK30KKworc3RhdGljIHZvaWQgcGVyZm9ybUNsaWVudFJlZGlyZWN0
KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25zdCBjaGFyKiBzb3VyY2VVcmwsIGNvbnN0IGNo
YXIqIGRlc3RpbmF0aW9uVXJsLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRChw
ZXJmb3JtQ2xpZW50UmVkaXJlY3QpOworCisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3Qg
PSBzdGF0aWNfY2FzdDxFV0syVW5pdFRlc3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VSVF9U
UlVFKHVuaXRUZXN0KTsKKyAgICBBU1NFUlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7
CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgicmVkaXJlY3Rf
dXJsX3RvX2RlZmF1bHQuaHRtbCIpLmRhdGEoKSwgc291cmNlVXJsKTsKKyAgICBBU1NFUlRfU1RS
RVEoZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCBkZXN0aW5hdGlvblVybCk7Cit9
CisKK3N0YXRpYyB2b2lkIHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChjb25zdCBFdmFzX09iamVjdCog
dmlldywgY29uc3QgY2hhciogc291cmNlVXJsLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVybCwg
dm9pZCogdXNlckRhdGEpCit7CisgICAgV0FTX0lOVk9LRUQocGVyZm9ybVNlcnZlclJlZGlyZWN0
KTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVu
aXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7CisgICAg
QVNTRVJUX0VRKHVuaXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIEFTU0VSVF9TVFJFUSho
dHRwU2VydmVyKCktPmdldFVSTEZvclBhdGgodG9CZVJlZGlyZWN0ZWRQYXRoKS5kYXRhKCksIHNv
dXJjZVVybCk7CisgICAgQVNTRVJUX1NUUkVRKGh0dHBTZXJ2ZXIoKS0+Z2V0VVJMRm9yUGF0aChy
ZWRpcmVjdGlvblRhcmdldFBhdGgpLmRhdGEoKSwgZGVzdGluYXRpb25VcmwpOworfQorCitzdGF0
aWMgdm9pZCB1cGRhdGVIaXN0b3J5VGl0bGUoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0
IGNoYXIqIHRpdGxlLCBjb25zdCBjaGFyKiB1cmwsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdB
U19JTlZPS0VEKHVwZGF0ZUhpc3RvcnlUaXRsZSk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1
bml0VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAg
QVNTRVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygp
LCB2aWV3KTsKKyAgICBBU1NFUlRfU1RSRVEoZGVmYXVsdFRpdGxlLCB0aXRsZSk7CisgICAgQVNT
RVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwgdXJsKTsKK30KKwor
c3RhdGljIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3Modm9pZCogdXNlckRhdGEpCit7CisgICAg
V0FTX0lOVk9LRUQocG9wdWxhdGVWaXNpdGVkTGlua3MpOworCisgICAgRVdLMlVuaXRUZXN0QmFz
ZSogdW5pdFRlc3QgPSBzdGF0aWNfY2FzdDxFV0syVW5pdFRlc3RCYXNlKj4odXNlckRhdGEpOwor
ICAgIEFTU0VSVF9UUlVFKHVuaXRUZXN0KTsKK30KKworc3RhdGljIHZvaWQgb25Mb2FkRmluaXNo
ZWRGb3JSZWRpcmVjdGlvbih2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKikKK3sK
KyAgICBpbnQqIGNvdW50TG9hZEZpbmlzaGVkID0gc3RhdGljX2Nhc3Q8aW50Kj4odXNlckRhdGEp
OworICAgICgqY291bnRMb2FkRmluaXNoZWQpLS07Cit9CisKK3N0YXRpYyB2b2lkIHNlcnZlckNh
bGxiYWNrUmVkaXJlY3Rpb24oU291cFNlcnZlciosIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25z
dCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikK
K3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAg
ICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVN
RU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHN0cmNtcChwYXRoLCBy
ZWRpcmVjdGlvblRhcmdldFBhdGgpKSB7IC8vIFJlZGlyZWN0IGlmICdwYXRoJyBpcyBub3QgZXF1
YWwgdG8gJ3JlZGlyZWN0aW9uVGFyZ2V0UGF0aCcuCisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRf
c3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX1RFTVBPUkFSWV9SRURJUkVDVCk7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
TG9jYXRpb24iLCBodHRwU2VydmVyKCktPmdldFVSTEZvclBhdGgocmVkaXJlY3Rpb25UYXJnZXRQ
YXRoKS5kYXRhKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIEVpbmFfU3RyYnVmKiBi
b2R5ID0gZWluYV9zdHJidWZfbmV3KCk7CisgICAgZWluYV9zdHJidWZfYXBwZW5kX3ByaW50Zihi
b2R5LCAiPGh0bWw+PHRpdGxlPlJlZGlyZWN0aW9uIFRhcmdldDwvdGl0bGU+PC9odG1sPiIpOwor
ICAgIGNvbnN0IHNpemVfdCBib2R5TGVuZ3RoID0gZWluYV9zdHJidWZfbGVuZ3RoX2dldChib2R5
KTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwg
U09VUF9NRU1PUllfVEFLRSwgZWluYV9zdHJidWZfc3RyaW5nX3N0ZWFsKGJvZHkpLCBib2R5TGVu
Z3RoKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGJvZHkpOworCisgICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7Cit9CisKK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9zZXQpCit7CisgICAgRXdrX0Nv
bnRleHRfSGlzdG9yeV9DbGllbnQgaGlzdG9yeUNsaWVudCA9CisgICAgeyB0aGlzLCBuYXZpZ2F0
ZVdpdGhOYXZpZ2F0aW9uRGF0YSwgcGVyZm9ybUNsaWVudFJlZGlyZWN0LCBwZXJmb3JtU2VydmVy
UmVkaXJlY3QsIHVwZGF0ZUhpc3RvcnlUaXRsZSwgcG9wdWxhdGVWaXNpdGVkTGlua3MgfTsKKwor
ICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldChld2tfdmlld19jb250ZXh0X2dldCh3
ZWJWaWV3KCkpLCAmaGlzdG9yeUNsaWVudCk7CisKKyAgICAvLyBUZXN0IG5hdmlnYXRpb24uCisg
ICAgbG9hZFVybFN5bmMoZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpKTsKKyAgICBD
SEVDS19XQVNfSU5WT0tFRChuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk7CisgICAgQ0hFQ0tf
V0FTX0lOVk9LRUQodXBkYXRlSGlzdG9yeVRpdGxlKTsKKyAgICBDSEVDS19XQVNfSU5WT0tFRChw
b3B1bGF0ZVZpc2l0ZWRMaW5rcyk7CisKKyAgICAvLyBUZXN0IGNsaWVudCByZWRpcmVjdC4KKyAg
ICBpbnQgY291bnRMb2FkRmluaXNoZWQgPSAyOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2FkZCh3ZWJWaWV3KCksICJsb2FkLGZpbmlzaGVkIiwgb25Mb2FkRmluaXNoZWRGb3JSZWRp
cmVjdGlvbiwgJmNvdW50TG9hZEZpbmlzaGVkKTsKKyAgICBld2tfdmlld191cmxfc2V0KHdlYlZp
ZXcoKSwgZW52aXJvbm1lbnQtPnVybEZvclJlc291cmNlKCJyZWRpcmVjdF91cmxfdG9fZGVmYXVs
dC5odG1sIikuZGF0YSgpKTsKKyAgICB3aGlsZSAoY291bnRMb2FkRmluaXNoZWQpCisgICAgICAg
IGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfZGVsKHdlYlZpZXcoKSwgImxvYWQsZmluaXNoZWQiLCBvbkxvYWRGaW5pc2hlZEZvclJlZGly
ZWN0aW9uKTsKKyAgICBDSEVDS19XQVNfSU5WT0tFRChwZXJmb3JtQ2xpZW50UmVkaXJlY3QpOwor
CisgICAgLy8gVGVzdCBzZXJ2ZXIgcmVkaXJlY3QuCisgICAgaHR0cFNlcnZlcigpLT5ydW4oc2Vy
dmVyQ2FsbGJhY2tSZWRpcmVjdGlvbik7CisKKyAgICBsb2FkVXJsU3luYyhodHRwU2VydmVyKCkt
PmdldFVSTEZvclBhdGgodG9CZVJlZGlyZWN0ZWRQYXRoKS5kYXRhKCkpOworICAgIENIRUNLX1dB
U19JTlZPS0VEKHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk7Cit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167579</attachid>
            <date>2012-10-08 11:59:14 -0700</date>
            <delta_ts>2012-10-09 04:07:53 -0700</delta_ts>
            <desc>patch v3</desc>
            <filename>bug98594_v3</filename>
            <type>text/plain</type>
            <size>41957</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDM3NTIxMTk1MDZmMThlMTA2Y2U0MWYxNTFmNzNhOWZjMjk0OThiOTcKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA5ZGYzMzcwLi4xYzVjMWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTItMTAt
MDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV0syXSBBZGQgSGlzdG9yeSBDbGllbnQgQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODU5NAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhpc3RvcnkgQ2xpZW50IEFQ
SSB0byBFd2sgQ29udGV4dC4gQWRkZWQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBsYXRmb3Jt
RWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAoX0V3a19D
b250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3NldCk6CisgICAgICAgIChld2tfY29udGV4dF9o
aXN0b3J5X2NsaWVudF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRfbGlu
ayk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHA6IEFkZGVk
LgorICAgICAgICAoZ2V0RXdrSGlzdG9yeURlbGVnYXRlKToKKyAgICAgICAgKGRpZE5hdmlnYXRl
V2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAgKGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6
CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRl
SGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAg
KGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHA6IEFkZGVkLgorICAg
ICAgICAoX0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoX0V3a19OYXZpZ2F0aW9uX0Rh
dGE6Ol9Fd2tfTmF2aWdhdGlvbl9EYXRhKToKKyAgICAgICAgKF9Fd2tfTmF2aWdhdGlvbl9EYXRh
Ojp+X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV9y
ZWYpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZik6CisgICAgICAgIChld2tf
bmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRh
X29yaWdpbmFsX3JlcXVlc3RfZ2V0KToKKyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdXJs
X2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX25ldyk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaDogQWRkZWQuCisg
ICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwOgorICAgICAgICAoYWRkVG9Q
YWdlVmlld01hcCk6CisgICAgICAgIChyZW1vdmVGcm9tUGFnZVZpZXdNYXApOgorICAgICAgICAo
X2V3a192aWV3X3NtYXJ0X2RlbCk6CisgICAgICAgIChfZXdrX3ZpZXdfaW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9kZWxlZ2F0ZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoaHR0cFNlcnZlcik6CisgICAgICAgIChuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6Cisg
ICAgICAgIChwZXJmb3JtQ2xpZW50UmVkaXJlY3QpOgorICAgICAgICAocGVyZm9ybVNlcnZlclJl
ZGlyZWN0KToKKyAgICAgICAgKHVwZGF0ZUhpc3RvcnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uKToK
KyAgICAgICAgKHNlcnZlckNhbGxiYWNrUmVkaXJlY3Rpb24pOgorICAgICAgICAoVEVTVF9GKToK
KwogMjAxMi0xMC0wOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dUS10gQWRkIGEgc2V0dGluZyB0byBlbmFibGUvZGlzYWJsZSBzbW9vdGgg
c2Nyb2xsaW5nIHRvIFdlYktpdDIgR1RLKyBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5k
ZXggMWJiZjNkYi4uYmJlYmVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUwLDYg
KzUwLDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2JhY2tfZm9yd2FyZF9saXN0X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFu
YWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2Vy
LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCkBAIC01OCw2
ICs1OSw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19pbnRlbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2
aWNlLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmNwcAorICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a19wb3B1cF9tZW51X2l0ZW0uY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Jlc291
cmNlLmNwcApAQCAtMjMzLDYgKzIzNSw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2ludGVudF9zZXJ2aWNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5oIgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oIgogICAgICIke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfcG9wdXBfbWVudV9pdGVtLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfcmVzb3VyY2UuaCIKQEAgLTMyMiw2ICsz
MjUsNyBAQCBUQVJHRVRfTElOS19MSUJSQVJJRVMoZXdrMlVuaXRUZXN0VXRpbHMgJHtFV0syVW5p
dFRlc3RzX0xJQlJBUklFU30pCiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3Rf
ZXdrMl9iYWNrX2ZvcndhcmRfbGlzdAogICAgIHRlc3RfZXdrMl9jb250ZXh0CisgICAgdGVzdF9l
d2syX2NvbnRleHRfaGlzdG9yeV9jbGllbnQKICAgICB0ZXN0X2V3azJfY29va2llX21hbmFnZXIK
ICAgICB0ZXN0X2V3azJfZG93bmxvYWRfam9iCiAgICAgdGVzdF9ld2syX2VpbmFfc2hhcmVkX3N0
cmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktp
dDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKaW5kZXgg
MDg1MDk0Yy4uMDBkZDgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2lu
Y2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgogI2luY2x1ZGUgImV3a19tYWluLmgiCisjaW5j
bHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgogI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX3Bv
bGljeV9kZWNpc2lvbi5oIgogI2luY2x1ZGUgImV3a19wb3B1cF9tZW51X2l0ZW0uaCIKICNpbmNs
dWRlICJld2tfcmVzb3VyY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBiMGRlZjAzLi4xMjRmNGVhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0zMSw2ICsz
MSw3IEBACiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nv
bnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9j
bGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlcl9wcml2YXRlLmgi
CkBAIC03OSwxMSArODAsMTQgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAgICAgV0tSZXRhaW5Q
dHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAgIFVSTFNjaGVt
ZUhhbmRsZXJNYXAgdXJsU2NoZW1lSGFuZGxlcnM7CiAKKyAgICBFd2tfQ29udGV4dF9IaXN0b3J5
X0NsaWVudCBoaXN0b3J5Q2xpZW50OworCiAgICAgX0V3a19Db250ZXh0KFdLUmV0YWluUHRyPFdL
Q29udGV4dFJlZj4gY29udGV4dFJlZikKICAgICAgICAgOiBfX3JlZigxKQogICAgICAgICAsIGNv
bnRleHQoY29udGV4dFJlZikKICAgICAgICAgLCBjb29raWVNYW5hZ2VyKDApCiAgICAgICAgICwg
cmVxdWVzdE1hbmFnZXIoV0tDb250ZXh0R2V0U291cFJlcXVlc3RNYW5hZ2VyKGNvbnRleHRSZWYu
Z2V0KCkpKQorICAgICAgICAsIGhpc3RvcnlDbGllbnQoKQogICAgIHsKICNpZiBFTkFCTEUoQkFU
VEVSWV9TVEFUVVMpCiAgICAgICAgIGJhdHRlcnlQcm92aWRlciA9IEJhdHRlcnlQcm92aWRlcjo6
Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOwpAQCAtMTA5LDYgKzExMyw3IEBAIHN0cnVjdCBfRXdrX0Nv
bnRleHQgewogI2VuZGlmCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGll
bnRfYXR0YWNoKHRoaXMpOwogICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0
YWNoKHRoaXMpOworICAgICAgICBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2godGhp
cyk7CiAgICAgfQogCiAgICAgfl9Fd2tfQ29udGV4dCgpCkBAIC0yODIsMyArMjg3LDMxIEBAIHZv
aWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBFd2tfVmliCiAgICAgZXdrQ29udGV4dC0+dmlicmF0aW9uUHJvdmlkZXIt
PnNldFZpYnJhdGlvbkNsaWVudENhbGxiYWNrcyh2aWJyYXRlLCBjYW5jZWwsIGRhdGEpOwogI2Vu
ZGlmCiB9CisKK3ZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfc2V0KEV3a19Db250ZXh0
KiBld2tDb250ZXh0LCBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogY2xpZW50KQor
eworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworCisgICAgaWYg
KCFjbGllbnQpIHsKKyAgICAgICAgbWVtc2V0KCZld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LCAw
LCBzaXplb2YoRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQgPSAqY2xpZW50OworfQorCitj
b25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0LCAwKTsKKworICAgIHJldHVybiAmZXdrQ29u
dGV4dC0+aGlzdG9yeUNsaWVudDsKK30KKwordm9pZCBld2tfY29udGV4dF9hZGRfdmlzaXRlZF9s
aW5rKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiB2aXNpdGVkVVJMKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHZpc2l0ZWRVUkwpOworCisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IHdrVmlzaXRlZFVSTChBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
Zyh2aXNpdGVkVVJMKSk7CisgICAgV0tDb250ZXh0QWRkVmlzaXRlZExpbmsoZXdrQ29udGV4dC0+
Y29udGV4dC5nZXQoKSwgd2tWaXNpdGVkVVJMLmdldCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCmluZGV4IGJmODI3Y2QuLmY1OGI5YjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaApA
QCAtMzgsNiArMzgsNyBAQAogI2RlZmluZSBld2tfY29udGV4dF9oCiAKICNpbmNsdWRlICJld2tf
Y29va2llX21hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5j
bHVkZSAiZXdrX3VybF9zY2hlbWVfcmVxdWVzdC5oIgogI2luY2x1ZGUgPEV2YXMuaD4KIApAQCAt
NjksNiArNzAsNTIgQEAgdHlwZWRlZiB2b2lkICgqRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0
ZV9DYikodWludDY0X3QgdmlicmF0aW9uX3RpbWUsIHZvaWQgKnUKIHR5cGVkZWYgdm9pZCAoKkV3
a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IpKHZvaWQgKnVzZXJfZGF0YSk7
CiAKIC8qKgorICogQHR5cGVkZWYgRXdrX0NvbnRleHRfRGlkX05hdmlnYXRlX1dpdGhfTmF2aWdh
dGlvbl9EYXRhX0NiIEV3a19Db250ZXh0X0RpZF9OYXZpZ2F0ZV9XaXRoX05hdmlnYXRpb25fRGF0
YV9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwg
YmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IGRpZCBuYXZpZ2F0aW9uLgorICovCit0eXBlZGVm
IHZvaWQgKCpFd2tfQ29udGV4dF9EaWRfTmF2aWdhdGVfV2l0aF9OYXZpZ2F0aW9uX0RhdGFfQ2Ip
KGNvbnN0IEV2YXNfT2JqZWN0ICp2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhICpuYXZpZ2F0aW9u
X2RhdGEsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0NvbnRleHRf
RGlkX1BlcmZvcm1fQ2xpZW50X1JlZGlyZWN0X0NiIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX0Ns
aWVudF9SZWRpcmVjdF9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlv
biB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IHBlcmZvcm1lZCBhIGNsaWVu
dCByZWRpcmVjdC4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1f
Q2xpZW50X1JlZGlyZWN0X0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29uc3QgY2hhciAq
c291cmNlX3VybCwgY29uc3QgY2hhciAqZGVzdGluYXRpb25fdXJsLCB2b2lkICp1c2VyX2RhdGEp
OworCisvKioKKyAqIEB0eXBlZGVmIEV3a19Db250ZXh0X0RpZF9QZXJmb3JtX1NlcnZlcl9SZWRp
cmVjdF9DYiBFd2tfQ29udGV4dF9EaWRfUGVyZm9ybV9TZXJ2ZXJfUmVkaXJlY3RfQ2IKKyAqIEBi
cmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBi
YWNrIHdoZW4gQGEgdmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QuCisgKi8KK3R5cGVk
ZWYgdm9pZCAoKkV3a19Db250ZXh0X0RpZF9QZXJmb3JtX1NlcnZlcl9SZWRpcmVjdF9DYikoY29u
c3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIg
KmRlc3RpbmF0aW9uX3VybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBF
d2tfQ29udGV4dF9EaWRfVXBkYXRlX0hpc3RvcnlfVGl0bGVfQ2IgRXdrX0NvbnRleHRfRGlkX1Vw
ZGF0ZV9IaXN0b3J5X1RpdGxlX0NiCisgKiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1
bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFjayB3aGVuIGhpc3RvcnkgdGl0bGUgaXMgdXBk
YXRlZC4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfRGlkX1VwZGF0ZV9IaXN0b3J5
X1RpdGxlX0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29uc3QgY2hhciAqdGl0bGUsIGNv
bnN0IGNoYXIgKnVybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tf
Q29udGV4dF9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiIEV3a19Db250ZXh0X1BvcHVsYXRlX1Zp
c2l0ZWRfTGlua3NfQ2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24g
dGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gY2xpZW50IGlzIGFza2VkIHRvIHByb3ZpZGUg
dmlzaXRlZCBsaW5rcyBmcm9tIGEgY2xpZW50LW1hbmFnZWQgc3RvcmFnZS4KKyAqCisgKiBAc2Vl
IGV3a19jb250ZXh0X2FkZF92aXNpdGVkX2xpbmsKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0Nv
bnRleHRfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYikodm9pZCAqdXNlcl9kYXRhKTsKKworLyoq
CisgKiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgaGlzdG9yeSBkZWxlZ2F0ZSBjYWxsYmFj
a3MgYW5kIHVzZXIgZGF0YSB0byBiZSBwYXNzZWQuCisgKi8KK3N0cnVjdCBfRXdrX0NvbnRleHRf
SGlzdG9yeV9DbGllbnQgeworICAgIHZvaWQgKnVzZXJfZGF0YTsKKyAgICBFd2tfQ29udGV4dF9E
aWRfTmF2aWdhdGVfV2l0aF9OYXZpZ2F0aW9uX0RhdGFfQ2IgZXdrX2NvbnRleHRfbmF2aWdhdGlv
bl9wZXJmb3JtZWQ7CisgICAgRXdrX0NvbnRleHRfRGlkX1BlcmZvcm1fQ2xpZW50X1JlZGlyZWN0
X0NiIGV3a19jb250ZXh0X2NsaWVudF9yZWRpcmVjdF9wZXJmb3JtZWQ7CisgICAgRXdrX0NvbnRl
eHRfRGlkX1BlcmZvcm1fU2VydmVyX1JlZGlyZWN0X0NiIGV3a19jb250ZXh0X3NlcnZlcl9yZWRp
cmVjdF9wZXJmb3JtZWQ7CisgICAgRXdrX0NvbnRleHRfRGlkX1VwZGF0ZV9IaXN0b3J5X1RpdGxl
X0NiIGV3a19jb250ZXh0X2hpc3RvcnlfdGl0bGVfdXBkYXRlZDsKKyAgICBFd2tfQ29udGV4dF9Q
b3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiIGV3a19jb250ZXh0X3Zpc2l0ZWRfbGlua3NfcG9wdWxh
dGU7Cit9OworLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfQ29udGV4dF9IaXN0
b3J5X0NsaWVudC4KK3R5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCBF
d2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudDsKKworLyoqCiAgKiBJbmNyZWFzZXMgdGhlIHJlZmVy
ZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICoKICAqIEBwYXJhbSBjb250ZXh0IGNv
bnRleHQgb2JqZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKQEAgLTE5MCw2ICsy
MzcsMjggQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZWdpc3RlcihF
d2tfQ29udGV4dCAqY29udGV4dCwgY29uc3QgY2hhcgogICovCiBFQVBJIHZvaWQgZXdrX2NvbnRl
eHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0ICpjb250ZXh0LCBF
d2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGUsIEV3a19WaWJyYXRpb25fQ2xp
ZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IgY2FuY2VsLCB2b2lkICpkYXRhKTsKIAorLyoqCisgKiBT
ZXRzIGhpc3RvcnkgY2xpZW50IGZvciB0aGUgZ2l2ZW4gQGEgY29udGV4dC4KKyAqCisgKiBUaGUg
Z2l2ZW4gQGEgY2xpZW50IHBvaW50ZXIgaXMgbm90IHN0b3JlZCBhbnl3aGVyZSBhbmQgaXMgdXNl
ZCBvbmx5IG9uY2UgZm9yIGNvcHlpbmcgb2YgIEBjIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
IGZpZWxkcy4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBzZXQgaGlz
dG9yeSBjbGllbnQKKyAqIEBwYXJhbSBjbGllbnQgaGlzdG9yeSBjbGllbnQgdG8gYmUgc2V0Cisg
Ki8KK0VBUEkgdm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9zZXQoRXdrX0NvbnRleHQg
KmNvbnRleHQsIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50ICpjbGllbnQpOworCisv
KioKKyAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gQGEgdmlzaXRlZF91cmwgYXMgdmlzaXRlZCBsaW5r
IGluIEBhIGNvbnRleHQgdmlzaXRlZCBsaW5rIGNhY2hlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24g
c2hhbGwgYmUgaW52b2tlZCBhcyBhIHJlc3BvbnNlIHRvIEBjIHBvcHVsYXRlVmlzaXRlZExpbmtz
IGNhbGxiYWNrIG9mIHRoZSBoaXN0b3J5IGNpZW50LgorICoKKyAqIEBwYXJhbSBjb250ZXh0IGNv
bnRleHQgb2JqZWN0IHRvIGFkZCB2aXNpdGVkIGxpbmsgZGF0YQorICogQHBhcmFtIHZpc2l0ZWRf
dXJsIHZpc2l0ZWQgdXJsCisgKgorICogQHNlZSBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudAor
ICovCitFQVBJIHZvaWQgZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRfbGluayhFd2tfQ29udGV4dCAq
Y29udGV4dCwgY29uc3QgY2hhciAqdmlzaXRlZF91cmwpOworCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQyZmJiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudC5jcHAKQEAg
LTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJld2tfY29udGV4dC5oIgorCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eS5oIgor
I2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLQ29udGV4dC5oIgorI2luY2x1ZGUg
IldLRWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAi
ZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250
ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCisjaW5jbHVk
ZSAiZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNw
b25zZS5oIgorI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2VfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a192aWV3X3ByaXZhdGUuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGlj
IGlubGluZSBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogZ2V0RXdrSGlzdG9yeURl
bGVnYXRlKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgQVNTRVJUKGNsaWVudEluZm8p
OworICAgIHJldHVybiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQoc3RhdGljX2Nhc3Q8
Y29uc3QgRXdrX0NvbnRleHQqPihjbGllbnRJbmZvKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZE5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdL
TmF2aWdhdGlvbkRhdGFSZWYgbmF2aWdhdGlvbkRhdGEsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhp
c3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBB
U1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5ld2tf
Y29udGV4dF9uYXZpZ2F0aW9uX3BlcmZvcm1lZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRXdr
X05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGFFd2sgPSBld2tfbmF2aWdhdGlvbl9kYXRh
X25ldyhuYXZpZ2F0aW9uRGF0YSk7CisgICAgaGlzdG9yeURlbGVnYXRlLT5ld2tfY29udGV4dF9u
YXZpZ2F0aW9uX3BlcmZvcm1lZChld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSks
IG5hdmlnYXRpb25EYXRhRXdrLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7CisgICAgZXdr
X25hdmlnYXRpb25fZGF0YV91bnJlZihuYXZpZ2F0aW9uRGF0YUV3ayk7Cit9CisKK3N0YXRpYyB2
b2lkIGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdChXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdl
LCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3RpbmF0aW9uVVJMLCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50
SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlE
ZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfY2xpZW50X3JlZGlyZWN0X3BlcmZvcm1lZCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVSTFN0cmluZyhzb3VyY2VV
UkwpOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVSTFN0cmluZyhkZXN0aW5h
dGlvblVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmV3a19jb250ZXh0X2NsaWVudF9yZWRp
cmVjdF9wZXJmb3JtZWQoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3Vy
Y2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJf
ZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdChXS0NvbnRl
eHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1VSTFJlZiBzb3VyY2VVUkwsIFdLVVJMUmVmIGRlc3Rp
bmF0aW9uVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNv
bnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tI
aXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7
CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfc2VydmVyX3JlZGlyZWN0
X3BlcmZvcm1lZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNv
dXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5h
dGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmV3
a19jb250ZXh0X3NlcnZlcl9yZWRpcmVjdF9wZXJmb3JtZWQoZXdrX3ZpZXdfZnJvbV9wYWdlX2dl
dCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBo
aXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFVwZGF0ZUhp
c3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRs
ZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBn
ZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxl
Z2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfaGlzdG9yeV90
aXRsZV91cGRhdGVkKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcg
dGl0bGVTdHJpbmcodGl0bGUpOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBzdHJpbmdVUkwoVVJM
KTsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+ZXdrX2NvbnRleHRfaGlzdG9yeV90aXRsZV91cGRh
dGVkKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgdGl0bGVTdHJpbmcsIHN0
cmluZ1VSTCwgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBw
b3B1bGF0ZVZpc2l0ZWRMaW5rcyhXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0
ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQoaGlzdG9y
eURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5ld2tfY29udGV4dF92aXNp
dGVkX2xpbmtzX3BvcHVsYXRlKQorICAgICAgICByZXR1cm47CisKKyAgICBoaXN0b3J5RGVsZWdh
dGUtPmV3a19jb250ZXh0X3Zpc2l0ZWRfbGlua3NfcG9wdWxhdGUoaGlzdG9yeURlbGVnYXRlLT51
c2VyX2RhdGEpOworfQorCit2b2lkIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0dGFjaChF
d2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBXS0NvbnRleHRIaXN0b3J5Q2xpZW50IHdr
SGlzdG9yeUNsaWVudDsKKyAgICBtZW1zZXQoJndrSGlzdG9yeUNsaWVudCwgMCwgc2l6ZW9mKFdL
Q29udGV4dEhpc3RvcnlDbGllbnQpKTsKKworICAgIHdrSGlzdG9yeUNsaWVudC52ZXJzaW9uID0g
a1dLQ29udGV4dEhpc3RvcnlDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB3a0hpc3RvcnlDbGll
bnQuY2xpZW50SW5mbyA9IGV3a0NvbnRleHQ7CisKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlkTmF2
aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEgPSBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YTsK
KyAgICB3a0hpc3RvcnlDbGllbnQuZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0ID0gZGlkUGVyZm9y
bUNsaWVudFJlZGlyZWN0OworICAgIHdrSGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtU2VydmVyUmVk
aXJlY3QgPSBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3Q7CisgICAgd2tIaXN0b3J5Q2xpZW50LmRp
ZFVwZGF0ZUhpc3RvcnlUaXRsZSA9IGRpZFVwZGF0ZUhpc3RvcnlUaXRsZTsKKyAgICB3a0hpc3Rv
cnlDbGllbnQucG9wdWxhdGVWaXNpdGVkTGlua3MgPSBwb3B1bGF0ZVZpc2l0ZWRMaW5rczsKKwor
ICAgIFdLQ29udGV4dFNldEhpc3RvcnlDbGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChl
d2tDb250ZXh0KSwgJndrSGlzdG9yeUNsaWVudCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlz
dG9yeV9jbGllbnRfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmZkMDUyYTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVf
aAorCit0eXBlZGVmIHN0cnVjdCBfRXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7CisKK3ZvaWQgZXdr
X2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0Kik7CisKKyNlbmRpZiAv
LyBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAppbmRleCBk
MWI2OTVlLi5mMmMzMjJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCkBAIC0yNSw2ICsyNSw3IEBACiB0eXBlZGVm
IHN0cnVjdCBfRXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX0Rv
d25sb2FkX0pvYiBFd2tfRG93bmxvYWRfSm9iOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfU2No
ZW1lX1JlcXVlc3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKK3R5cGVkZWYgc3RydWN0IF9Fd2tf
Q29udGV4dF9IaXN0b3J5X0NsaWVudCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudDsKIAogV0tD
b250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsK
IEV3a19Db250ZXh0KiBld2tfY29udGV4dF9uZXdfZnJvbV9XS0NvbnRleHQoV0tDb250ZXh0UmVm
KTsKQEAgLTM1LDQgKzM2LDYgQEAgdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfYWRkKEV3
a19Db250ZXh0KiwgRXdrX0Rvd25sb2FkX0pvYiopOwogRXdrX0Rvd25sb2FkX0pvYiogZXdrX2Nv
bnRleHRfZG93bmxvYWRfam9iX2dldChjb25zdCBFd2tfQ29udGV4dCosIHVpbnQ2NF90IGRvd25s
b2FkSWQpOwogdm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKEV3a19Db250ZXh0
KiwgdWludDY0X3QgZG93bmxvYWRJZCk7CiAKK2NvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xp
ZW50KiBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsK
KwogI2VuZGlmIC8vIGV3a19jb250ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzY3ZmVmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAK
QEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9y
YXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCisKKyNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1JldGFp
blB0ci5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIgorI2luY2x1
ZGUgImV3a19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0X3ByaXZhdGUuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBcc3RydWN0ICBfRXdrX05hdmln
YXRpb25fRGF0YQorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIG5hdmlnYXRpb24gZGF0YSBkZXRh
aWxzLgorICovCitzdHJ1Y3QgX0V3a19OYXZpZ2F0aW9uX0RhdGEgeworICAgIHVuc2lnbmVkIF9f
cmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdCAqLworICAgIFdLRWlu
YVNoYXJlZFN0cmluZyB0aXRsZTsKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgdXJsOworICAgIEV3
a19VcmxfUmVxdWVzdCogcmVxdWVzdDsKKworICAgIF9Fd2tfTmF2aWdhdGlvbl9EYXRhKFdLTmF2
aWdhdGlvbkRhdGFSZWYgZGF0YVJlZikKKyAgICAgICAgOiBfX3JlZigxKQorICAgICAgICAsIHRp
dGxlKEFkb3B0V0ssIFdLTmF2aWdhdGlvbkRhdGFDb3B5VGl0bGUoZGF0YVJlZikpCisgICAgICAg
ICwgdXJsKEFkb3B0V0ssIFdLTmF2aWdhdGlvbkRhdGFDb3B5VVJMKGRhdGFSZWYpKQorICAgICAg
ICAsIHJlcXVlc3QoMCkKKyAgICB7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJMUmVxdWVzdFJl
Zj4gcmVxdWVzdFdLKEFkb3B0V0ssIFdLTmF2aWdhdGlvbkRhdGFDb3B5T3JpZ2luYWxSZXF1ZXN0
KGRhdGFSZWYpKTsKKyAgICAgICAgcmVxdWVzdCA9IGV3a191cmxfcmVxdWVzdF9uZXcocmVxdWVz
dFdLLmdldCgpKTsKKyAgICB9CisKKyAgICB+X0V3a19OYXZpZ2F0aW9uX0RhdGEoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFfX3JlZik7CisgICAgICAgIGV3a191cmxfcmVxdWVzdF91bnJlZihy
ZXF1ZXN0KTsKKyAgICB9Cit9OworCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tfbmF2aWdhdGlv
bl9kYXRhX3JlZihFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCAwKTsKKworICAgICsrZGF0YS0+X19yZWY7CisKKyAg
ICByZXR1cm4gZGF0YTsKK30KKwordm9pZCBld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKEV3a19O
YXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
ZGF0YSk7CisKKyAgICBpZiAoLS1kYXRhLT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAg
ZGVsZXRlIGRhdGE7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVf
Z2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIDApOworCisgICAgcmV0dXJuIGRhdGEtPnRpdGxlOwor
fQorCitFd2tfVXJsX1JlcXVlc3QqIGV3a19uYXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVz
dF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+cmVxdWVz
dDsKK30KKworY29uc3QgY2hhciogZXdrX25hdmlnYXRpb25fZGF0YV91cmxfZ2V0KGNvbnN0IEV3
a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRhdGEsIDApOworCisgICAgcmV0dXJuIGRhdGEtPnVybDsKK30KKworRXdrX05hdmln
YXRpb25fRGF0YSogZXdrX25hdmlnYXRpb25fZGF0YV9uZXcoV0tOYXZpZ2F0aW9uRGF0YVJlZiBk
YXRhUmVmKQoreworICAgIEFTU0VSVChkYXRhUmVmKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZGF0YVJlZiwgMCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19OYXZpZ2F0aW9u
X0RhdGEoZGF0YVJlZik7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmVhNjNmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuaApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworLyoqCisgKiBAZmlsZSAgICBld2tfbmF2aWdhdGlvbl9kYXRhLmgK
KyAqIEBicmllZiAgIERlc2NyaWJlcyB0aGUgRXdrIG5hdmlnYXRpb24gZGF0YSBBUEkuCisgKi8K
KworI2lmbmRlZiBld2tfbmF2aWdhdGlvbl9kYXRhX2gKKyNkZWZpbmUgZXdrX25hdmlnYXRpb25f
ZGF0YV9oCisKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKKyNpbmNsdWRlIDxFaW5hLmg+
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIENyZWF0
ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfTmF2aWdhdGlvbl9EYXRhICovCit0eXBlZGVmIHN0cnVj
dCBfRXdrX05hdmlnYXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCisvKioKKyAqIElu
Y3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3QuCisgKgorICog
QHBhcmFtIGRhdGEgdGhlIG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gaW5jcmVhc2UgdGhlIHJl
ZmVyZW5jZSBjb3VudAorICoKKyAqIEByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBvYmplY3Qgb24g
c3VjY2VzcywgQGMgTlVMTCBvdGhlcndpc2UuCisgKi8KK0VBUEkgRXdrX05hdmlnYXRpb25fRGF0
YSAqZXdrX25hdmlnYXRpb25fZGF0YV9yZWYoRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisK
Ky8qKgorICogRGVjcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVj
dCwgcG9zc2libHkgZnJlZWluZyBpdC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQg
cmVhY2hlcyAwLCB0aGUgb2JqZWN0IGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBkYXRhIHRoZSBu
YXZpZ2F0aW9uIGRhdGEgb2JqZWN0IHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQKKyAq
LworRUFQSSB2b2lkIGV3a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYoRXdrX05hdmlnYXRpb25fRGF0
YSAqZGF0YSk7CisKKy8qKgorICogUmV0dXJucyB0aXRsZSBmb3IgdGhpcyBuYXZpZ2F0aW9uIGRh
dGEuCisgKgorICogVGhlIHRpdGxlIG9mIHRoZSBuYXZpZ2F0ZWQgcGFnZS4KKyAqCisgKiBAcGFy
YW0gZGF0YSBuYXZpZ2F0aW9uIGRhdGEgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiB0
aGUgdGl0bGUgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLiBUaGlzIHBvaW50ZXIgaXMKKyAq
ICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBw
b3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNl
CisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmlu
Z3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNo
YXIgKmV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVfZ2V0KGNvbnN0IEV3a19OYXZpZ2F0aW9uX0Rh
dGEgKmRhdGEpOworCisvKioKKyAqIFJldHVybnMgdGhlIG9yaWdpbmFsIHJlcXVlc3QgZm9yIHRo
aXMgbmF2aWdhdGlvbiBkYXRhLgorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmlnYXRpb24gZGF0YSBv
YmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIFRoZSBVUkwgcmVxdWVzdCBwb2ludGVyIG9y
IEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4KKyAqLworRUFQSSBFd2tfVXJsX1JlcXVlc3QgKmV3
a19uYXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQoY29uc3QgRXdrX05hdmlnYXRp
b25fRGF0YSAqZGF0YSk7CisKKy8qKgorICogUmV0dXJucyBVUkwgb2YgdGhlIGl0ZW0uCisgKgor
ICogVGhlIHJldHVybmVkIFVSTCBtYXkgZGlmZmVyIGZyb20gdGhlIG9yaWdpbmFsIFVSTCAoRm9y
IGV4YW1wbGUgaWYgdGhlIHBhZ2Ugd2FzIHJlZGlyZWN0ZWQpLgorICoKKyAqIEBzZWUgZXdrX2Jh
Y2tfZm9yd2FyZF9saXN0X2l0ZW1fb3JpZ2luYWxfdXJpX2dldCgpCisgKgorICogQHBhcmFtIGRh
dGEgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBxdWVyeQorICoKKyAqIEByZXR1cm4gdGhlIFVS
TCBvZiB0aGUgQGEgaXRlbSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRl
ciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdo
ZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVz
IGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVp
bmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBj
b25zdCBjaGFyICpld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmlnYXRp
b25fRGF0YSAqaXRlbSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRp
ZiAvLyBld2tfbmF2aWdhdGlvbl9kYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwYzYxNQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFf
cHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
ZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX25hdmlnYXRpb25fZGF0
YV9wcml2YXRlX2gKKworI2luY2x1ZGUgIldLTmF2aWdhdGlvbkRhdGEuaCIKKwordHlwZWRlZiBz
dHJ1Y3QgX0V3a19OYXZpZ2F0aW9uX0RhdGEgRXdrX05hdmlnYXRpb25fRGF0YTsKKworRXdrX05h
dmlnYXRpb25fRGF0YSogZXdrX25hdmlnYXRpb25fZGF0YV9uZXcoV0tOYXZpZ2F0aW9uRGF0YVJl
ZiBkYXRhUmVmKTsKKworI2VuZGlmIC8vIGV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggNDBl
MzE0MS4uYjZkMDdhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3LmNwcApAQCAtODIsNiArODIsMzAgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vy
c29yU2l6ZSA9IDE2OwogdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfUmVzb3VyY2UqPiBM
b2FkaW5nUmVzb3VyY2VzTWFwOwogc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfbG9hZGluZ19y
ZXNvdXJjZXNfY2xlYXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9hZGluZ1Jlc291cmNlc01hcCk7
CiAKK3R5cGVkZWYgSGFzaE1hcDxjb25zdCBXZWJQYWdlUHJveHkqLCBjb25zdCBFdmFzX09iamVj
dCo+IFBhZ2VWaWV3TWFwOworCitzdGF0aWMgaW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01h
cCgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7Cisg
ICAgcmV0dXJuIG1hcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFRvUGFnZVZpZXdNYXAo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgQVNTRVJUKGV3a1ZpZXcpOworICAg
IEFTU0VSVChld2tfdmlld19wYWdlX2dldChld2tWaWV3KSk7CisgICAgUGFnZVZpZXdNYXA6OkFk
ZFJlc3VsdCByZXN1bHQgPSBwYWdlVmlld01hcCgpLmFkZChld2tfdmlld19wYWdlX2dldChld2tW
aWV3KSwgZXdrVmlldyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0Vu
dHJ5KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUZyb21QYWdlVmlld01hcChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQoZXdrVmlldyk7CisgICAgQVNT
RVJUKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBBU1NFUlQocGFnZVZpZXdNYXAo
KS5jb250YWlucyhld2tfdmlld19wYWdlX2dldChld2tWaWV3KSkpOworICAgIHBhZ2VWaWV3TWFw
KCkucmVtb3ZlKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKK30KKwogc3RydWN0IF9Fd2tf
Vmlld19Qcml2YXRlX0RhdGEgewogICAgIE93blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVu
dDsKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC00ODYsNiArNTEwLDcgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKKyAg
ICByZW1vdmVGcm9tUGFnZVZpZXdNYXAoZXdrVmlldyk7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgaWYgKHNtYXJ0RGF0YSAmJiBzbWFydERhdGEtPnByaXYp
CiAgICAgICAgIF9ld2tfdmlld19wcml2X2RlbChzbWFydERhdGEtPnByaXYpOwpAQCAtNzU1LDYg
Kzc4MCw5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAgICAgICAgIHByaXYtPnBhZ2VQcm94
eSA9IHRvSW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRleHQpKS0+Y3JlYXRlV2Vi
UGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAgICAg
ZWxzZQogICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2NvbnRleHRfV0tDb250
ZXh0X2dldChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwg
V2ViUGFnZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CisKKyAgICBhZGRUb1BhZ2VWaWV3TWFwKGV3
a1ZpZXcpOworCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHByaXYtPnBhZ2VQ
cm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdFbmFibGVkKHRydWUpOwogICAgIHByaXYtPnBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZl
cmVuY2VzKCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwpAQCAtMTUyMSw2ICsxNTQ5
LDEzIEBAIHZvaWQgZXdrX3ZpZXdfaW50ZW50X3NlcnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IEV3a19JbnRlbnRfU2VyCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9J
TlRFTlRTX1RBRykKIAorY29uc3QgRXZhc19PYmplY3QqIGV3a192aWV3X2Zyb21fcGFnZV9nZXQo
Y29uc3QgV2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHBhZ2UsIDApOworCisgICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0
KHBhZ2UpOworfQorCiBXZWJQYWdlUHJveHkqIGV3a192aWV3X3BhZ2VfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCAwZTQ4MThmLi45ZmUzMDEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBA
IC05NCw2ICs5NCw3IEBAIHZvaWQgZXdrX3ZpZXdfaW50ZW50X3JlcXVlc3RfbmV3KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfSW50ZW50KiBld2tJbnRlCiB2b2lkIGV3a192aWV3X2lu
dGVudF9zZXJ2aWNlX3JlZ2lzdGVyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfSW50
ZW50X1NlcnZpY2UqIGV3a0ludGVudFNlcnZpY2UpOwogI2VuZGlmCiAKK2NvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tfdmlld19mcm9tX3BhZ2VfZ2V0KGNvbnN0IFdlYktpdDo6V2ViUGFnZVByb3h5Kik7
CiBXZWJLaXQ6OldlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpOwogV2ViQ29yZTo6SW50U2l6ZSBld2tfdmlld19zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0
X2hpc3RvcnlfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
MTgxZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCkBAIC0wLDAgKzEs
MTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUg
PEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIEVX
SzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dDsKKworc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFRpdGxlW10gPSAiRGVmYXVsdCBUZXN0aW5n
IFdlYiBQYWdlIjsKKworc3RhdGljIGNvbnN0IGNoYXIgdG9CZVJlZGlyZWN0ZWRQYXRoW10gPSAi
L3NvbWVfcGFnZV90b19iZV9yZWRpcmVjdGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZGlyZWN0
aW9uVGFyZ2V0UGF0aFtdID0gIi9yZWRpcmVjdGlvbl90YXJnZXQiOworCitzdGF0aWMgRVdLMlVu
aXRUZXN0U2VydmVyKiBodHRwU2VydmVyKCkKK3sKKyAgICBzdGF0aWMgRVdLMlVuaXRUZXN0U2Vy
dmVyKiBzZXJ2ZXIgPSAwOworCisgICAgaWYgKCFzZXJ2ZXIpCisgICAgICAgIHNlcnZlciA9IG5l
dyBFV0syVW5pdFRlc3RTZXJ2ZXI7CisKKyAgICByZXR1cm4gc2VydmVyOworfQorCisjZGVmaW5l
IERFQ0xBUkVfSU5WT0tFX0ZMQUcoZnVuY3Rpb25OYW1lKSBcCisgICAgc3RhdGljIGJvb2wgZnVu
Y3Rpb25OYW1lIyNJbnZva2VkID0gZmFsc2U7CisKKyNkZWZpbmUgV0FTX0lOVk9LRUQoZnVuY3Rp
b25OYW1lKSBcCisgICAgaWYgKGZ1bmN0aW9uTmFtZSMjSW52b2tlZCkgICAgXAorICAgICAgICBy
ZXR1cm47ICAgICAgICAgICAgICAgICAgIFwKKyAgICBmdW5jdGlvbk5hbWUjI0ludm9rZWQgPSB0
cnVlCisKKyNkZWZpbmUgQ0hFQ0tfV0FTX0lOVk9LRUQoZnVuY3Rpb25OYW1lKSBcCisgICAgQVNT
RVJUX1RSVUUoZnVuY3Rpb25OYW1lIyNJbnZva2VkKQorCitERUNMQVJFX0lOVk9LRV9GTEFHKG5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKQorREVDTEFSRV9JTlZPS0VfRkxBRyhwZXJmb3JtQ2xp
ZW50UmVkaXJlY3QpCitERUNMQVJFX0lOVk9LRV9GTEFHKHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCkK
K0RFQ0xBUkVfSU5WT0tFX0ZMQUcodXBkYXRlSGlzdG9yeVRpdGxlKQorREVDTEFSRV9JTlZPS0Vf
RkxBRyhwb3B1bGF0ZVZpc2l0ZWRMaW5rcykKKworc3RhdGljIHZvaWQgbmF2aWdhdGVXaXRoTmF2
aWdhdGlvbkRhdGEoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIEV3a19OYXZpZ2F0aW9uX0RhdGEq
IG5hdmlnYXRpb25EYXRhLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRChuYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0VGVz
dCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNTRVJU
X1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygpLCB2aWV3
KTsKKyAgICAvLyBGSVhNRSA6IFdlYkZyYW1lTG9hZGVyQ2xpZW50IHNlbmRzIGVtcHR5IHRpdGxl
LgorICAgIC8vIEFTU0VSVF9TVFJFUShkZWZhdWx0VGl0bGUsIGV3a19uYXZpZ2F0aW9uX2RhdGFf
dGl0bGVfZ2V0KG5hdmlnYXRpb25EYXRhKSk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50
LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwgZXdrX25hdmlnYXRpb25fZGF0YV91cmxfZ2V0KG5hdmln
YXRpb25EYXRhKSk7CisKKyAgICBFd2tfVXJsX1JlcXVlc3QqIHJlcXVlc3QgPSBld2tfbmF2aWdh
dGlvbl9kYXRhX29yaWdpbmFsX3JlcXVlc3RfZ2V0KG5hdmlnYXRpb25EYXRhKTsKKyAgICBBU1NF
UlRfU1RSRVEoIkdFVCIsIGV3a191cmxfcmVxdWVzdF9odHRwX21ldGhvZF9nZXQocmVxdWVzdCkp
OworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJsKCksIGV3
a191cmxfcmVxdWVzdF91cmxfZ2V0KHJlcXVlc3QpKTsKKyAgICBBU1NFUlRfRVEoMCwgZXdrX3Jl
cXVlc3RfY29va2llc19maXJzdF9wYXJ0eV9nZXQocmVxdWVzdCkpOworfQorCitzdGF0aWMgdm9p
ZCBwZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNo
YXIqIHNvdXJjZVVybCwgY29uc3QgY2hhciogZGVzdGluYXRpb25VcmwsIHZvaWQqIHVzZXJEYXRh
KQoreworICAgIFdBU19JTlZPS0VEKHBlcmZvcm1DbGllbnRSZWRpcmVjdCk7CisKKyAgICBFV0sy
VW5pdFRlc3RCYXNlKiB1bml0VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1
c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0
VGVzdC0+d2ViVmlldygpLCB2aWV3KTsKKyAgICBBU1NFUlRfU1RSRVEoZW52aXJvbm1lbnQtPnVy
bEZvclJlc291cmNlKCJyZWRpcmVjdF91cmxfdG9fZGVmYXVsdC5odG1sIikuZGF0YSgpLCBzb3Vy
Y2VVcmwpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJs
KCksIGRlc3RpbmF0aW9uVXJsKTsKK30KKworc3RhdGljIHZvaWQgcGVyZm9ybVNlcnZlclJlZGly
ZWN0KGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25zdCBjaGFyKiBzb3VyY2VVcmwsIGNvbnN0
IGNoYXIqIGRlc3RpbmF0aW9uVXJsLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tF
RChwZXJmb3JtU2VydmVyUmVkaXJlY3QpOworCisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRl
c3QgPSBzdGF0aWNfY2FzdDxFV0syVW5pdFRlc3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VS
VF9UUlVFKHVuaXRUZXN0KTsKKyAgICBBU1NFUlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmll
dyk7CisgICAgQVNTRVJUX1NUUkVRKGh0dHBTZXJ2ZXIoKS0+Z2V0VVJMRm9yUGF0aCh0b0JlUmVk
aXJlY3RlZFBhdGgpLmRhdGEoKSwgc291cmNlVXJsKTsKKyAgICBBU1NFUlRfU1RSRVEoaHR0cFNl
cnZlcigpLT5nZXRVUkxGb3JQYXRoKHJlZGlyZWN0aW9uVGFyZ2V0UGF0aCkuZGF0YSgpLCBkZXN0
aW5hdGlvblVybCk7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZUhpc3RvcnlUaXRsZShjb25zdCBF
dmFzX09iamVjdCogdmlldywgY29uc3QgY2hhciogdGl0bGUsIGNvbnN0IGNoYXIqIHVybCwgdm9p
ZCogdXNlckRhdGEpCit7CisgICAgV0FTX0lOVk9LRUQodXBkYXRlSGlzdG9yeVRpdGxlKTsKKwor
ICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0
QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7CisgICAgQVNTRVJU
X0VRKHVuaXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIEFTU0VSVF9TVFJFUShkZWZhdWx0
VGl0bGUsIHRpdGxlKTsKKyAgICBBU1NFUlRfU1RSRVEoZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0
UGFnZVVybCgpLCB1cmwpOworfQorCitzdGF0aWMgdm9pZCBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyh2
b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRChwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk7
CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0
VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUodW5pdFRlc3QpOworfQorCitz
dGF0aWMgdm9pZCBvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uKHZvaWQqIHVzZXJEYXRhLCBF
dmFzX09iamVjdCosIHZvaWQqKQoreworICAgIGludCogY291bnRMb2FkRmluaXNoZWQgPSBzdGF0
aWNfY2FzdDxpbnQqPih1c2VyRGF0YSk7CisgICAgLS0oKmNvdW50TG9hZEZpbmlzaGVkKTsKK30K
Kworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2tSZWRpcmVjdGlvbihTb3VwU2VydmVyKiwgU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xp
ZW50Q29udGV4dCosIGdwb2ludGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09V
UF9NRVRIT0RfR0VUKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX05PVF9JTVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoc3RyY21wKHBhdGgsIHJlZGlyZWN0aW9uVGFyZ2V0UGF0aCkpIHsgLy8gUmVkaXJl
Y3QgaWYgJ3BhdGgnIGlzIG5vdCBlcXVhbCB0byAncmVkaXJlY3Rpb25UYXJnZXRQYXRoJy4KKyAg
ICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfVEVNUE9S
QVJZX1JFRElSRUNUKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3Nh
Z2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsIGh0dHBTZXJ2ZXIoKS0+Z2V0VVJMRm9y
UGF0aChyZWRpcmVjdGlvblRhcmdldFBhdGgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19P
Syk7CisgICAgRWluYV9TdHJidWYqIGJvZHkgPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgICBlaW5h
X3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGJvZHksICI8aHRtbD48dGl0bGU+UmVkaXJlY3Rpb24gVGFy
Z2V0PC90aXRsZT48L2h0bWw+Iik7CisgICAgY29uc3Qgc2l6ZV90IGJvZHlMZW5ndGggPSBlaW5h
X3N0cmJ1Zl9sZW5ndGhfZ2V0KGJvZHkpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtFLCBlaW5hX3N0cmJ1Zl9zdHJp
bmdfc3RlYWwoYm9keSksIGJvZHlMZW5ndGgpOworICAgIGVpbmFfc3RyYnVmX2ZyZWUoYm9keSk7
CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5
KTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19jb250ZXh0X2hpc3RvcnlfY2xp
ZW50X3NldCkKK3sKKyAgICBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCBoaXN0b3J5Q2xpZW50
ID0KKyAgICB7IHRoaXMsIG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhLCBwZXJmb3JtQ2xpZW50
UmVkaXJlY3QsIHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCwgdXBkYXRlSGlzdG9yeVRpdGxlLCBwb3B1
bGF0ZVZpc2l0ZWRMaW5rcyB9OworCisgICAgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfc2V0
KGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSksICZoaXN0b3J5Q2xpZW50KTsKKworICAg
IC8vIFRlc3QgbmF2aWdhdGlvbi4KKyAgICBsb2FkVXJsU3luYyhlbnZpcm9ubWVudC0+ZGVmYXVs
dFRlc3RQYWdlVXJsKCkpOworICAgIENIRUNLX1dBU19JTlZPS0VEKG5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKTsKKyAgICBDSEVDS19XQVNfSU5WT0tFRCh1cGRhdGVIaXN0b3J5VGl0bGUpOwor
ICAgIENIRUNLX1dBU19JTlZPS0VEKHBvcHVsYXRlVmlzaXRlZExpbmtzKTsKKworICAgIC8vIFRl
c3QgY2xpZW50IHJlZGlyZWN0LgorICAgIGludCBjb3VudExvYWRGaW5pc2hlZCA9IDI7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImxvYWQsZmluaXNoZWQi
LCBvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uLCAmY291bnRMb2FkRmluaXNoZWQpOworICAg
IGV3a192aWV3X3VybF9zZXQod2ViVmlldygpLCBlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2Uo
InJlZGlyZWN0X3VybF90b19kZWZhdWx0Lmh0bWwiKS5kYXRhKCkpOworICAgIHdoaWxlIChjb3Vu
dExvYWRGaW5pc2hlZCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAibG9hZCxmaW5pc2hlZCIs
IG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24pOworICAgIENIRUNLX1dBU19JTlZPS0VEKHBl
cmZvcm1DbGllbnRSZWRpcmVjdCk7CisKKyAgICAvLyBUZXN0IHNlcnZlciByZWRpcmVjdC4KKyAg
ICBodHRwU2VydmVyKCktPnJ1bihzZXJ2ZXJDYWxsYmFja1JlZGlyZWN0aW9uKTsKKworICAgIGxv
YWRVcmxTeW5jKGh0dHBTZXJ2ZXIoKS0+Z2V0VVJMRm9yUGF0aCh0b0JlUmVkaXJlY3RlZFBhdGgp
LmRhdGEoKSk7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQocGVyZm9ybVNlcnZlclJlZGlyZWN0KTsK
K30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167728</attachid>
            <date>2012-10-09 04:07:53 -0700</date>
            <delta_ts>2012-10-09 05:13:06 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>bug98594_v4</filename>
            <type>text/plain</type>
            <size>43222</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IGM3OGY5NTYxOTgxNGI5ZDNiMjYzNGRhZGM1OWNlMGYwMTFiOTZkMDIKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA5ZGYzMzcwLi4wODRmMzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTItMTAt
MDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV0syXSBBZGQgSGlzdG9yeSBjYWxsYmFja3MgQVBJCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODU5NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhpc3RvcnkgY2FsbGJh
Y2tzIEFQSSB0byBFd2sgQ29udGV4dC4gQWRkZWQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBs
YXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAo
X0V3a19Db250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAg
ICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3NldCk6IE5ldyBwdWJsaWMgZnVu
Y3Rpb24gd2hpY2ggbGV0cyB0aGUgY2xpZW50IHRvIHNldCBIaXN0b3J5IGNhbGxiYWNrcy4KKyAg
ICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldCk6CisgICAgICAgIChld2tfY29u
dGV4dF9hZGRfdmlzaXRlZF9saW5rKTogTmV3IHB1YmxpYyBmdW5jdGlvbiB0byBtYXJrIGEgVVJM
IGFzIHZpc2l0ZWQgbGluay4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xp
ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChnZXRFd2tIaXN0b3J5RGVsZWdhdGUpOgorICAgICAg
ICAoZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk6CisgICAg
ICAgIChkaWRVcGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAocG9wdWxhdGVWaXNpdGVkTGlu
a3MpOgorICAgICAgICAoZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRl
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNw
cDogQWRkZWQuCisgICAgICAgIChfRXdrX05hdmlnYXRpb25fRGF0YSk6CisgICAgICAgIChfRXdr
X05hdmlnYXRpb25fRGF0YTo6X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoX0V3a19O
YXZpZ2F0aW9uX0RhdGE6On5fRXdrX05hdmlnYXRpb25fRGF0YSk6CisgICAgICAgIChld2tfbmF2
aWdhdGlvbl9kYXRhX3JlZik6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKToK
KyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVfZ2V0KToKKyAgICAgICAgKGV3a19u
YXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQpOgorICAgICAgICAoZXdrX25hdmln
YXRpb25fZGF0YV91cmxfZ2V0KToKKyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfbmV3KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChhZGRUb1BhZ2VWaWV3TWFwKToKKyAgICAgICAgKHJlbW92ZUZyb21QYWdlVmlld01h
cCk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfZGVsKToKKyAgICAgICAgKF9ld2tfdmlld19p
bml0aWFsaXplKToKKyAgICAgICAgKGV3a192aWV3X2Zyb21fcGFnZV9nZXQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2RlbGVnYXRlLmNwcDog
QWRkZWQuCisgICAgICAgIChodHRwU2VydmVyKToKKyAgICAgICAgKG5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKToKKyAgICAgICAgKHBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChw
ZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAodXBkYXRlSGlzdG9yeVRpdGxlKToKKyAg
ICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKG9uTG9hZEZpbmlzaGVkRm9y
UmVkaXJlY3Rpb24pOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2tSZWRpcmVjdGlvbik6CisgICAg
ICAgIChURVNUX0YpOgorCiAyMDEyLTEwLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgYSBzZXR0aW5nIHRvIGVuYWJsZS9k
aXNhYmxlIHNtb290aCBzY3JvbGxpbmcgdG8gV2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCAxYmJmM2RiLi5hMTJmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29va2llX21hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pv
Yi5jcHAKQEAgLTU4LDYgKzU5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfaW50ZW50X3NlcnZpY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfcmVzb3VyY2UuY3BwCkBAIC0yMzMsNiArMjM1LDcgQEAgU0VUIChFV2ViS2l0Ml9I
RUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfaW50ZW50LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmgiCisgICAgIiR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5o
IgpAQCAtMzIyLDYgKzMyNSw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5pdFRlc3RV
dGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkKIFNFVChFV0syVW5pdFRlc3RzX0JJTkFS
SUVTCiAgICAgdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0CiAgICAgdGVzdF9ld2syX2NvbnRl
eHQKKyAgICB0ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrcwogICAgIHRlc3RfZXdr
Ml9jb29raWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9hZF9qb2IKICAgICB0ZXN0X2V3
azJfZWluYV9zaGFyZWRfc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaAppbmRleCAwODUwOTRjLi4wMGRkODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJl
d2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAi
ZXdrX21haW4uaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAi
ZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21l
bnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGIwZGVmMDMuLmNmMDcw
MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRf
cmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9t
YW5hZ2VyX3ByaXZhdGUuaCIKQEAgLTc5LDExICs4MCwxNCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0
IHsKICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFn
ZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKIAorICAgIEV3
a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IGhpc3RvcnlDbGllbnQ7CisKICAgICBfRXdrX0NvbnRl
eHQoV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0UmVmKQogICAgICAgICA6IF9fcmVm
KDEpCiAgICAgICAgICwgY29udGV4dChjb250ZXh0UmVmKQogICAgICAgICAsIGNvb2tpZU1hbmFn
ZXIoMCkKICAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0NvbnRleHRHZXRTb3VwUmVxdWVzdE1h
bmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCisgICAgICAgICwgaGlzdG9yeUNsaWVudCgpCiAgICAg
ewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICAgICAgYmF0dGVyeVByb3ZpZGVyID0g
QmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7CkBAIC0xMDksNiArMTEzLDcg
QEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVx
dWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgICAgIGV3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKQEAgLTI4
MiwzICsyODcsMzcgQEAgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNr
c19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWIKICAgICBld2tDb250ZXh0LT52
aWJyYXRpb25Qcm92aWRlci0+c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNh
bmNlbCwgZGF0YSk7CiAjZW5kaWYKIH0KKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NhbGxi
YWNrc19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9OYXZpZ2F0aW9uX0NiIG5hdmlnYXRlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXdrX0hpc3RvcnlfQ2xpZW50X1Jl
ZGlyZWN0aW9uX0NiIGNsaWVudFJlZGlyZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlclJlZGly
ZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXdrX0hpc3Rvcnlf
VGl0bGVfVXBkYXRlX0NiIHRpdGxlVXBkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRXdrX0hpc3RvcnlfUG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYiBwb3B1bGF0
ZVZpc2l0ZWRMaW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv
aWQqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7
CisKKyAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1bmMgPSBuYXZpZ2F0
ZTsKKyAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jID0g
Y2xpZW50UmVkaXJlY3Q7CisgICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVk
aXJlY3RfZnVuYyA9IHNlcnZlclJlZGlyZWN0OworICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGll
bnQudGl0bGVfdXBkYXRlX2Z1bmMgPSB0aXRsZVVwZGF0ZTsKKyAgICBld2tDb250ZXh0LT5oaXN0
b3J5Q2xpZW50LnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYyA9IHBvcHVsYXRlVmlzaXRlZExp
bmtzOworICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQudXNlcl9kYXRhID0gZGF0YTsKK30K
KworY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gJmV3
a0NvbnRleHQtPmhpc3RvcnlDbGllbnQ7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfdmlzaXRlZF9s
aW5rX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciogdmlzaXRlZFVSTCkK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2aXNpdGVkVVJMKTsKKworICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiB3a1Zpc2l0ZWRVUkwoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcodmlzaXRlZFVSTCkpOworICAgIFdLQ29udGV4dEFkZFZpc2l0ZWRMaW5rKGV3a0NvbnRl
eHQtPmNvbnRleHQuZ2V0KCksIHdrVmlzaXRlZFVSTC5nZXQoKSk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBiZjgyN2NkLi5kODY4
NjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAi
ZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgog
I2luY2x1ZGUgImV3a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAK
QEAgLTY5LDYgKzcwLDM4IEBAIHR5cGVkZWYgdm9pZCAoKkV3a19WaWJyYXRpb25fQ2xpZW50X1Zp
YnJhdGVfQ2IpKHVpbnQ2NF90IHZpYnJhdGlvbl90aW1lLCB2b2lkICp1CiB0eXBlZGVmIHZvaWQg
KCpFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiKSh2b2lkICp1c2VyX2Rh
dGEpOwogCiAvKioKKyAqIEB0eXBlZGVmIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgRXdrX0hp
c3RvcnlfTmF2aWdhdGlvbl9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IGRpZCBuYXZpZ2F0aW9u
LgorICovCit0eXBlZGVmIHZvaWQgKCpFd2tfSGlzdG9yeV9OYXZpZ2F0aW9uX0NiKShjb25zdCBF
dmFzX09iamVjdCAqdmlldywgRXdrX05hdmlnYXRpb25fRGF0YSAqbmF2aWdhdGlvbl9kYXRhLCB2
b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19IaXN0b3J5X0NsaWVudF9S
ZWRpcmVjdGlvbl9DYiBFd2tfSGlzdG9yeV9DbGllbnRfUmVkaXJlY3Rpb25fQ2IKKyAqIEBicmll
ZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZCBiYWNr
IHdoZW4gQGEgdmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QuCisgKi8KK3R5cGVkZWYg
dm9pZCAoKkV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYikoY29uc3QgRXZhc19PYmpl
Y3QgKnZpZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIgKmRlc3RpbmF0aW9u
X3VybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfSGlzdG9yeV9T
ZXJ2ZXJfUmVkaXJlY3Rpb25fQ2IgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiCisg
KiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxs
ZWQgYmFjayB3aGVuIEBhIHZpZXcgcGVyZm9ybWVkIGEgc2VydmVyIHJlZGlyZWN0LgorICovCit0
eXBlZGVmIHZvaWQgKCpFd2tfSGlzdG9yeV9TZXJ2ZXJfUmVkaXJlY3Rpb25fQ2IpKGNvbnN0IEV2
YXNfT2JqZWN0ICp2aWV3LCBjb25zdCBjaGFyICpzb3VyY2VfdXJsLCBjb25zdCBjaGFyICpkZXN0
aW5hdGlvbl91cmwsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0hp
c3RvcnlfVGl0bGVfVXBkYXRlX0NiIEV3a19IaXN0b3J5X1RpdGxlX1VwZGF0ZV9DYgorICogQGJy
aWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJh
Y2sgd2hlbiBoaXN0b3J5IHRpdGxlIGlzIHVwZGF0ZWQuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3
a19IaXN0b3J5X1RpdGxlX1VwZGF0ZV9DYikoY29uc3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0
IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp1cmwsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgor
ICogQHR5cGVkZWYgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnRfVmlzaXRlZF9MaW5rc19Qb3B1
bGF0ZV9DYiBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudF9WaXNpdGVkX0xpbmtzX1BvcHVsYXRl
X0NiCisgKiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBi
ZSBjYWxsZWQgYmFjayB3aGVuIGNsaWVudCBpcyBhc2tlZCB0byBwcm92aWRlIHZpc2l0ZWQgbGlu
a3MgZnJvbSBhIGNsaWVudC1tYW5hZ2VkIHN0b3JhZ2UuCisgKgorICogQHNlZSBld2tfY29udGV4
dF92aXNpdGVkX2xpbmtfYWRkCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X1BvcHVs
YXRlX1Zpc2l0ZWRfTGlua3NfQ2IpKHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgogICogSW5jcmVh
c2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAqCiAgKiBAcGFy
YW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50
CkBAIC0xOTAsNiArMjIzLDQwIEBAIEVBUEkgRWluYV9Cb29sIGV3a19jb250ZXh0X3VybF9zY2hl
bWVfcmVnaXN0ZXIoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIKICAqLwogRUFQSSB2
b2lkIGV3a19jb250ZXh0X3ZpYnJhdGlvbl9jbGllbnRfY2FsbGJhY2tzX3NldChFd2tfQ29udGV4
dCAqY29udGV4dCwgRXdrX1ZpYnJhdGlvbl9DbGllbnRfVmlicmF0ZV9DYiB2aWJyYXRlLCBFd2tf
VmlicmF0aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiIGNhbmNlbCwgdm9pZCAqZGF0YSk7
CiAKKy8qKgorICogU2V0cyBoaXN0b3J5IGNhbGxiYWNrcyBmb3IgdGhlIGdpdmVuIEBhIGNvbnRl
eHQuCisgKgorICogVGhlIGdpdmVuIEBhIGNsaWVudCBwb2ludGVyIGlzIG5vdCBzdG9yZWQgYW55
d2hlcmUgYW5kIGlzIHVzZWQgb25seSBvbmNlIGZvciBjb3B5aW5nIG9mICBAYyBFd2tfQ29udGV4
dF9IaXN0b3J5X0NsaWVudCBmaWVsZHMuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBv
YmplY3QgdG8gc2V0IGhpc3RvcnkgY2FsbGJhY2tzCisgKiBAcGFyYW0gbmF2aWdhdGVfZnVuYyBU
aGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIEBjIGV3a192aWV3IGRpZCBuYXZpZ2F0aW9uIChtYXkg
YmUgQGMgTlVMTCkuCisgKiBAcGFyYW0gY2xpZW50X3JlZGlyZWN0X2Z1bmMgVGhlIGZ1bmN0aW9u
IHRvIGNhbGwgd2hlbiBAYyBld2tfdmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QgKG1h
eSBiZSBAYyBOVUxMKS4KKyAqIEBwYXJhbSBzZXJ2ZXJfcmVkaXJlY3RfZnVuYyBUaGUgZnVuY3Rp
b24gdG8gY2FsbCB3aGVuIEBjIGV3a192aWV3IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCAo
bWF5IGJlIEBjIE5VTEwpLgorICogQHBhcmFtIHRpdGxlX3VwZGF0ZV9mdW5jIFRoZSBmdW5jdGlv
biB0byBjYWxsIHdoZW4gaGlzdG9yeSB0aXRsZSBpcyB1cGRhdGVkIChtYXkgYmUgQGMgTlVMTCku
CisgKiBAcGFyYW0gcG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5jIFRoZSBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbiBjbGllbnQgaXMgYXNrZWQgdG8gcHJvdmlkZSB2aXNpdGVkIGxpbmtzIGZyb20g
YQorICogICAgICAgIGNsaWVudC1tYW5hZ2VkIHN0b3JhZ2UgKG1heSBiZSBAYyBOVUxMKS4KKyAq
IEBwYXJhbSBkYXRhIFVzZXIgZGF0YSAobWF5IGJlIEBjIE5VTEwpLgorICovCitFQVBJIHZvaWQg
ZXdrX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0ICpjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9O
YXZpZ2F0aW9uX0NiIG5hdmlnYXRlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYiBjbGllbnRf
cmVkaXJlY3RfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlcl9yZWRpcmVjdF9mdW5j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFd2tfSGlzdG9y
eV9UaXRsZV9VcGRhdGVfQ2IgdGl0bGVfdXBkYXRlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEV3a19IaXN0b3J5X1BvcHVsYXRlX1Zpc2l0ZWRfTGlu
a3NfQ2IgcG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhKTsKKworLyoqCisgKiBSZWdpc3RlcnMg
dGhlIGdpdmVuIEBhIHZpc2l0ZWRfdXJsIGFzIHZpc2l0ZWQgbGluayBpbiBAYSBjb250ZXh0IHZp
c2l0ZWQgbGluayBjYWNoZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGludm9rZWQg
YXMgYSByZXNwb25zZSB0byBAYyBwb3B1bGF0ZVZpc2l0ZWRMaW5rcyBjYWxsYmFjayBvZiB0aGUg
aGlzdG9yeSBjaWVudC4KKyAqCisgKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBh
ZGQgdmlzaXRlZCBsaW5rIGRhdGEKKyAqIEBwYXJhbSB2aXNpdGVkX3VybCB2aXNpdGVkIHVybAor
ICoKKyAqIEBzZWUgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQKKyAqLworRUFQSSB2b2lkIGV3
a19jb250ZXh0X3Zpc2l0ZWRfbGlua19hZGQoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNo
YXIgKnZpc2l0ZWRfdXJsKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3Rv
cnlfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li4xYWI5NWU0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2Nv
bnRleHQuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKKyNpbmNsdWRlICJXS0NvbnRleHQuaCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJp
bmcuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3Rv
cnlfY2xpZW50X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCisj
aW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9u
X2RhdGFfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRl
LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgRXdr
X0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIEFTU0VSVChjbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZXdr
X2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0KHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0
Kj4oY2xpZW50SW5mbykpOworfQorCitzdGF0aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0
aW9uRGF0YShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25EYXRhUmVm
IG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBn
ZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxl
Z2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgRXdrX05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGFFd2sg
PSBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhuYXZpZ2F0aW9uRGF0YSk7CisgICAgaGlzdG9yeURl
bGVnYXRlLT5uYXZpZ2F0ZV9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2Up
KSwgbmF2aWdhdGlvbkRhdGFFd2ssIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBl
d2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKG5hdmlnYXRpb25EYXRhRXdrKTsKK30KKworc3RhdGlj
IHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBh
Z2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVS
ZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGll
bnRJbmZvKTsKKyAgICBBU1NFUlQoaGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9y
eURlbGVnYXRlLT5jbGllbnRfcmVkaXJlY3RfZnVuYykKKyAgICAgICAgcmV0dXJuOworCisgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOworICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CisKKyAg
ICBoaXN0b3J5RGVsZWdhdGUtPmNsaWVudF9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFn
ZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmlu
ZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJm
b3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYg
c291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCog
aGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAg
IEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOworCisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnNl
cnZlcl9yZWRpcmVjdF9mdW5jKQorICAgICAgICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFyZWRT
dHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJjZVVSTCk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3RpbmF0aW9uVVJMKTsKKworICAgIGhpc3RvcnlEZWxl
Z2F0ZS0+c2VydmVyX3JlZGlyZWN0X2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwo
cGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVs
ZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRs
ZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxS
ZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0
IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0
b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisK
KyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+dGl0bGVfdXBkYXRlX2Z1bmMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFdLRWluYVNoYXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CisgICAg
V0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VSTChVUkwpOworCisgICAgaGlzdG9yeURlbGVnYXRl
LT50aXRsZV91cGRhdGVfZnVuYyhld2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSks
IHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30K
Kworc3RhdGljIHZvaWQgcG9wdWxhdGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Cisg
ICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+
cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5jKQorICAgICAgICByZXR1cm47CisKKyAgICBoaXN0
b3J5RGVsZWdhdGUtPnBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYyhoaXN0b3J5RGVsZWdhdGUt
PnVzZXJfZGF0YSk7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNo
KEV3a19Db250ZXh0KiBld2tDb250ZXh0KQoreworICAgIFdLQ29udGV4dEhpc3RvcnlDbGllbnQg
d2tIaXN0b3J5Q2xpZW50OworICAgIG1lbXNldCgmd2tIaXN0b3J5Q2xpZW50LCAwLCBzaXplb2Yo
V0tDb250ZXh0SGlzdG9yeUNsaWVudCkpOworCisgICAgd2tIaXN0b3J5Q2xpZW50LnZlcnNpb24g
PSBrV0tDb250ZXh0SGlzdG9yeUNsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIHdrSGlzdG9yeUNs
aWVudC5jbGllbnRJbmZvID0gZXdrQ29udGV4dDsKKworICAgIHdrSGlzdG9yeUNsaWVudC5kaWRO
YXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSA9IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRh
OworICAgIHdrSGlzdG9yeUNsaWVudC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJm
b3JtQ2xpZW50UmVkaXJlY3Q7CisgICAgd2tIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdCA9IGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdDsKKyAgICB3a0hpc3RvcnlDbGllbnQu
ZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHdrSGlz
dG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRMaW5rcyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOwor
CisgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNsaWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0
KGV3a0NvbnRleHQpLCAmd2tIaXN0b3J5Q2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3Rv
cnlfY2xpZW50X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
OTUxOGNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRf
cHJpdmF0ZV9oCisjZGVmaW5lIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaAor
CisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKworc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5
X0NsaWVudCB7CisgICAgdm9pZCogdXNlcl9kYXRhOworICAgIEV3a19IaXN0b3J5X05hdmlnYXRp
b25fQ2IgbmF2aWdhdGVfZnVuYzsKKyAgICBFd2tfSGlzdG9yeV9DbGllbnRfUmVkaXJlY3Rpb25f
Q2IgY2xpZW50X3JlZGlyZWN0X2Z1bmM7CisgICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0
aW9uX0NiIHNlcnZlcl9yZWRpcmVjdF9mdW5jOworICAgIEV3a19IaXN0b3J5X1RpdGxlX1VwZGF0
ZV9DYiB0aXRsZV91cGRhdGVfZnVuYzsKKyAgICBFd2tfSGlzdG9yeV9Qb3B1bGF0ZV9WaXNpdGVk
X0xpbmtzX0NiIHBvcHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYzsKK307CisKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVu
dDsKKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQq
KTsKKworI2VuZGlmIC8vIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJp
dmF0ZS5oCmluZGV4IGQxYjY5NWUuLmYyYzMyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTI1LDYgKzI1
LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKIHR5cGVkZWYg
c3RydWN0IF9Fd2tfRG93bmxvYWRfSm9iIEV3a19Eb3dubG9hZF9Kb2I7CiB0eXBlZGVmIHN0cnVj
dCBfRXdrX1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50OwogCiBXS0NvbnRleHRSZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBF
d2tfQ29udGV4dCopOwogRXdrX0NvbnRleHQqIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4
dChXS0NvbnRleHRSZWYpOwpAQCAtMzUsNCArMzYsNiBAQCB2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqLCBFd2tfRG93bmxvYWRfSm9iKik7CiBFd2tfRG93bmxv
YWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0Kiwg
dWludDY0X3QgZG93bmxvYWRJZCk7CiB2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1v
dmUoRXdrX0NvbnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKIAorY29uc3QgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBF
d2tfQ29udGV4dCopOworCiAjZW5kaWYgLy8gZXdrX2NvbnRleHRfcHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRh
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2Rh
dGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjdmZWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdh
dGlvbl9kYXRhLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKworI2lu
Y2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgorI2lu
Y2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YV9wcml2
YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVl
c3RfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFxzdHJ1
Y3QgIF9Fd2tfTmF2aWdhdGlvbl9EYXRhCisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgbmF2aWdh
dGlvbiBkYXRhIGRldGFpbHMuCisgKi8KK3N0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSB7Cisg
ICAgdW5zaWduZWQgX19yZWY7IC8qKjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0
ICovCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHRpdGxlOworICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyB1cmw7CisgICAgRXdrX1VybF9SZXF1ZXN0KiByZXF1ZXN0OworCisgICAgX0V3a19OYXZpZ2F0
aW9uX0RhdGEoV0tOYXZpZ2F0aW9uRGF0YVJlZiBkYXRhUmVmKQorICAgICAgICA6IF9fcmVmKDEp
CisgICAgICAgICwgdGl0bGUoQWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShkYXRh
UmVmKSkKKyAgICAgICAgLCB1cmwoQWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwoZGF0
YVJlZikpCisgICAgICAgICwgcmVxdWVzdCgwKQorICAgIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8
V0tVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0V0soQWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlP
cmlnaW5hbFJlcXVlc3QoZGF0YVJlZikpOworICAgICAgICByZXF1ZXN0ID0gZXdrX3VybF9yZXF1
ZXN0X25ldyhyZXF1ZXN0V0suZ2V0KCkpOworICAgIH0KKworICAgIH5fRXdrX05hdmlnYXRpb25f
RGF0YSgpCisgICAgeworICAgICAgICBBU1NFUlQoIV9fcmVmKTsKKyAgICAgICAgZXdrX3VybF9y
ZXF1ZXN0X3VucmVmKHJlcXVlc3QpOworICAgIH0KK307CisKK0V3a19OYXZpZ2F0aW9uX0RhdGEq
IGV3a19uYXZpZ2F0aW9uX2RhdGFfcmVmKEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRhdGEsIDApOworCisgICAgKytkYXRh
LT5fX3JlZjsKKworICAgIHJldHVybiBkYXRhOworfQorCit2b2lkIGV3a19uYXZpZ2F0aW9uX2Rh
dGFfdW5yZWYoRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihkYXRhKTsKKworICAgIGlmICgtLWRhdGEtPl9fcmVmKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBkZWxldGUgZGF0YTsKK30KKworY29uc3QgY2hhciogZXdrX25hdmlnYXRp
b25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICByZXR1cm4g
ZGF0YS0+dGl0bGU7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogZXdrX25hdmlnYXRpb25fZGF0YV9v
cmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQorewor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhLCAwKTsKKworICAgIHJldHVy
biBkYXRhLT5yZXF1ZXN0OworfQorCitjb25zdCBjaGFyKiBld2tfbmF2aWdhdGlvbl9kYXRhX3Vy
bF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+dXJsOwor
fQorCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhXS05hdmln
YXRpb25EYXRhUmVmIGRhdGFSZWYpCit7CisgICAgQVNTRVJUKGRhdGFSZWYpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkYXRhUmVmLCAwKTsKKworICAgIHJldHVybiBuZXcg
RXdrX05hdmlnYXRpb25fRGF0YShkYXRhUmVmKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE2M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oCkBAIC0wLDAg
KzEsMTA3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19uYXZp
Z2F0aW9uX2RhdGEuaAorICogQGJyaWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgbmF2aWdhdGlvbiBk
YXRhIEFQSS4KKyAqLworCisjaWZuZGVmIGV3a19uYXZpZ2F0aW9uX2RhdGFfaAorI2RlZmluZSBl
d2tfbmF2aWdhdGlvbl9kYXRhX2gKKworI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgorI2lu
Y2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19OYXZpZ2F0aW9uX0RhdGEgKi8K
K3R5cGVkZWYgc3RydWN0IF9Fd2tfTmF2aWdhdGlvbl9EYXRhIEV3a19OYXZpZ2F0aW9uX0RhdGE7
CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9i
amVjdC4KKyAqCisgKiBAcGFyYW0gZGF0YSB0aGUgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBp
bmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8g
dGhlIG9iamVjdCBvbiBzdWNjZXNzLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqLworRUFQSSBFd2tf
TmF2aWdhdGlvbl9EYXRhICpld2tfbmF2aWdhdGlvbl9kYXRhX3JlZihFd2tfTmF2aWdhdGlvbl9E
YXRhICpkYXRhKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0
aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJl
ZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBvYmplY3QgaXMgZnJlZWQuCisgKgorICogQHBh
cmFtIGRhdGEgdGhlIG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVy
ZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZihFd2tf
TmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisgKiBSZXR1cm5zIHRpdGxlIGZvciB0aGlz
IG5hdmlnYXRpb24gZGF0YS4KKyAqCisgKiBUaGUgdGl0bGUgb2YgdGhlIG5hdmlnYXRlZCBwYWdl
LgorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gcXVlcnkKKyAq
CisgKiBAcmV0dXJuIHRoZSB0aXRsZSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMg
cG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUs
IHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUg
Y3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFk
IG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8K
K0VBUEkgY29uc3QgY2hhciAqZXdrX25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdr
X05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisKKy8qKgorICogUmV0dXJucyB0aGUgb3JpZ2luYWwg
cmVxdWVzdCBmb3IgdGhpcyBuYXZpZ2F0aW9uIGRhdGEuCisgKgorICogQHBhcmFtIGRhdGEgbmF2
aWdhdGlvbiBkYXRhIG9iamVjdCB0byBxdWVyeQorICoKKyAqIEByZXR1cm4gVGhlIFVSTCByZXF1
ZXN0IHBvaW50ZXIgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19V
cmxfUmVxdWVzdCAqZXdrX25hdmlnYXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChjb25z
dCBFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisgKiBSZXR1cm5zIFVSTCBvZiB0
aGUgaXRlbS4KKyAqCisgKiBUaGUgcmV0dXJuZWQgVVJMIG1heSBkaWZmZXIgZnJvbSB0aGUgb3Jp
Z2luYWwgVVJMIChGb3IgZXhhbXBsZSBpZiB0aGUgcGFnZSB3YXMgcmVkaXJlY3RlZCkuCisgKgor
ICogQHNlZSBld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KCkKKyAq
CisgKiBAcGFyYW0gZGF0YSBuYXZpZ2F0aW9uIGRhdGEgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICog
QHJldHVybiB0aGUgVVJMIG9mIHRoZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJv
ci4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJp
bmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBz
b21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigp
IGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAo
KQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19uYXZpZ2F0aW9uX2RhdGFfdXJsX2dldChjb25z
dCBFd2tfTmF2aWdhdGlvbl9EYXRhICppdGVtKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8vIGV3a19uYXZpZ2F0aW9uX2RhdGFfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRh
X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBjNjE1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25h
dmlnYXRpb25fZGF0YV9wcml2YXRlLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGVfaAorI2RlZmluZSBld2tf
bmF2aWdhdGlvbl9kYXRhX3ByaXZhdGVfaAorCisjaW5jbHVkZSAiV0tOYXZpZ2F0aW9uRGF0YS5o
IgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9E
YXRhOworCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhXS05h
dmlnYXRpb25EYXRhUmVmIGRhdGFSZWYpOworCisjZW5kaWYgLy8gZXdrX25hdmlnYXRpb25fZGF0
YV9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcAppbmRleCA0MGUzMTQxLi5iNmQwN2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC04Miw2ICs4MiwzMCBAQCBzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRDdXJzb3JTaXplID0gMTY7CiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEV3
a19SZXNvdXJjZSo+IExvYWRpbmdSZXNvdXJjZXNNYXA7CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
cHJpdl9sb2FkaW5nX3Jlc291cmNlc19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5n
UmVzb3VyY2VzTWFwKTsKIAordHlwZWRlZiBIYXNoTWFwPGNvbnN0IFdlYlBhZ2VQcm94eSosIGNv
bnN0IEV2YXNfT2JqZWN0Kj4gUGFnZVZpZXdNYXA7CisKK3N0YXRpYyBpbmxpbmUgUGFnZVZpZXdN
YXAmIHBhZ2VWaWV3TWFwKCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhZ2VWaWV3TWFw
LCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRk
VG9QYWdlVmlld01hcChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQo
ZXdrVmlldyk7CisgICAgQVNTRVJUKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBQ
YWdlVmlld01hcDo6QWRkUmVzdWx0IHJlc3VsdCA9IHBhZ2VWaWV3TWFwKCkuYWRkKGV3a192aWV3
X3BhZ2VfZ2V0KGV3a1ZpZXcpLCBld2tWaWV3KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwg
cmVzdWx0LmlzTmV3RW50cnkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRnJvbVBh
Z2VWaWV3TWFwKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEFTU0VSVChld2tW
aWV3KTsKKyAgICBBU1NFUlQoZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpOworICAgIEFTU0VS
VChwYWdlVmlld01hcCgpLmNvbnRhaW5zKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKSk7Cisg
ICAgcGFnZVZpZXdNYXAoKS5yZW1vdmUoZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpOworfQor
CiBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgT3duUHRyPFBhZ2VDbGllbnRJ
bXBsPiBwYWdlQ2xpZW50OwogI2lmIFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTQ4Niw2
ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogeworICAgIHJlbW92ZUZyb21QYWdlVmlld01hcChld2tWaWV3KTsKICAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKICAgICBpZiAoc21hcnREYXRhICYmIHNt
YXJ0RGF0YS0+cHJpdikKICAgICAgICAgX2V3a192aWV3X3ByaXZfZGVsKHNtYXJ0RGF0YS0+cHJp
dik7CkBAIC03NTUsNiArNzgwLDkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Db250ZXh0KiBjb250ZXh0LCBXS1AKICAgICAgICAg
cHJpdi0+cGFnZVByb3h5ID0gdG9JbXBsKGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4
dCkpLT5jcmVhdGVXZWJQYWdlKHByaXYtPnBhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3Jv
dXBSZWYpKTsKICAgICBlbHNlCiAgICAgICAgIHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChld2tf
Y29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRleHQpKS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdl
Q2xpZW50LmdldCgpLCBXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpLmdldCgpKTsKKworICAgIGFkZFRv
UGFnZVZpZXdNYXAoZXdrVmlldyk7CisKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAg
ICAgcHJpdi0+cGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQodHJ1ZSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5wYWdl
R3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CkBA
IC0xNTIxLDYgKzE1NDksMTMgQEAgdm9pZCBld2tfdmlld19pbnRlbnRfc2VydmljZV9yZWdpc3Rl
cihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0ludGVudF9TZXIKIH0KICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0lOVEVOVFNfVEFHKQogCitjb25zdCBFdmFzX09iamVjdCogZXdrX3ZpZXdf
ZnJvbV9wYWdlX2dldChjb25zdCBXZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFnZSwgMCk7CisKKyAgICByZXR1cm4gcGFn
ZVZpZXdNYXAoKS5nZXQocGFnZSk7Cit9CisKIFdlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDBlNDgxOGYuLjlmZTMw
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmll
d19wcml2YXRlLmgKQEAgLTk0LDYgKzk0LDcgQEAgdm9pZCBld2tfdmlld19pbnRlbnRfcmVxdWVz
dF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19JbnRlbnQqIGV3a0ludGUKIHZv
aWQgZXdrX3ZpZXdfaW50ZW50X3NlcnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IEV3a19JbnRlbnRfU2VydmljZSogZXdrSW50ZW50U2VydmljZSk7CiAjZW5kaWYKIAor
Y29uc3QgRXZhc19PYmplY3QqIGV3a192aWV3X2Zyb21fcGFnZV9nZXQoY29uc3QgV2ViS2l0OjpX
ZWJQYWdlUHJveHkqKTsKIFdlYktpdDo6V2ViUGFnZVByb3h5KiBld2tfdmlld19wYWdlX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldyk7CiBXZWJDb3JlOjpJbnRTaXplIGV3a192aWV3X3Np
emVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9y
eV9jYWxsYmFja3MuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcwYWQ1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2Nh
bGxiYWNrcy5jcHAKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFz
ZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuaCIK
KyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUg
PEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OworCitleHRlcm4gRVdLMlVuaXRUZXN0
RW52aXJvbm1lbnQqIGVudmlyb25tZW50OworCitzdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0VGl0
bGVbXSA9ICJEZWZhdWx0IFRlc3RpbmcgV2ViIFBhZ2UiOworCitzdGF0aWMgY29uc3QgY2hhciB0
b0JlUmVkaXJlY3RlZFBhdGhbXSA9ICIvc29tZV9wYWdlX3RvX2JlX3JlZGlyZWN0ZWQiOworc3Rh
dGljIGNvbnN0IGNoYXIgcmVkaXJlY3Rpb25UYXJnZXRQYXRoW10gPSAiL3JlZGlyZWN0aW9uX3Rh
cmdldCI7CisKK3N0YXRpYyBFV0syVW5pdFRlc3RTZXJ2ZXIqIGh0dHBTZXJ2ZXIoKQoreworICAg
IHN0YXRpYyBFV0syVW5pdFRlc3RTZXJ2ZXIqIHNlcnZlciA9IDA7CisKKyAgICBpZiAoIXNlcnZl
cikKKyAgICAgICAgc2VydmVyID0gbmV3IEVXSzJVbml0VGVzdFNlcnZlcjsKKworICAgIHJldHVy
biBzZXJ2ZXI7Cit9CisKKyNkZWZpbmUgREVDTEFSRV9JTlZPS0VfRkxBRyhmdW5jdGlvbk5hbWUp
IFwKKyAgICBzdGF0aWMgYm9vbCBmdW5jdGlvbk5hbWUjI0ludm9rZWQgPSBmYWxzZTsKKworI2Rl
ZmluZSBXQVNfSU5WT0tFRChmdW5jdGlvbk5hbWUpIFwKKyAgICBpZiAoZnVuY3Rpb25OYW1lIyNJ
bnZva2VkKSAgICBcCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgXAorICAgIGZ1
bmN0aW9uTmFtZSMjSW52b2tlZCA9IHRydWUKKworI2RlZmluZSBDSEVDS19XQVNfSU5WT0tFRChm
dW5jdGlvbk5hbWUpIFwKKyAgICBBU1NFUlRfVFJVRShmdW5jdGlvbk5hbWUjI0ludm9rZWQpCisK
K0RFQ0xBUkVfSU5WT0tFX0ZMQUcobmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpCitERUNMQVJF
X0lOVk9LRV9GTEFHKHBlcmZvcm1DbGllbnRSZWRpcmVjdCkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUco
cGVyZm9ybVNlcnZlclJlZGlyZWN0KQorREVDTEFSRV9JTlZPS0VfRkxBRyh1cGRhdGVIaXN0b3J5
VGl0bGUpCitERUNMQVJFX0lOVk9LRV9GTEFHKHBvcHVsYXRlVmlzaXRlZExpbmtzKQorCitzdGF0
aWMgdm9pZCBuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShjb25zdCBFdmFzX09iamVjdCogdmll
dywgRXdrX05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGEsIHZvaWQqIHVzZXJEYXRhKQor
eworICAgIFdBU19JTlZPS0VEKG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKTsKKworICAgIEVX
SzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+
KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7CisgICAgQVNTRVJUX0VRKHVu
aXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIC8vIEZJWE1FIDogV2ViRnJhbWVMb2FkZXJD
bGllbnQgc2VuZHMgZW1wdHkgdGl0bGUuCisgICAgLy8gQVNTRVJUX1NUUkVRKGRlZmF1bHRUaXRs
ZSwgZXdrX25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQobmF2aWdhdGlvbkRhdGEpKTsKKyAgICBB
U1NFUlRfU1RSRVEoZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCBld2tfbmF2aWdh
dGlvbl9kYXRhX3VybF9nZXQobmF2aWdhdGlvbkRhdGEpKTsKKworICAgIEV3a19VcmxfUmVxdWVz
dCogcmVxdWVzdCA9IGV3a19uYXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQobmF2
aWdhdGlvbkRhdGEpOworICAgIEFTU0VSVF9TVFJFUSgiR0VUIiwgZXdrX3VybF9yZXF1ZXN0X2h0
dHBfbWV0aG9kX2dldChyZXF1ZXN0KSk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5k
ZWZhdWx0VGVzdFBhZ2VVcmwoKSwgZXdrX3VybF9yZXF1ZXN0X3VybF9nZXQocmVxdWVzdCkpOwor
ICAgIEFTU0VSVF9FUSgwLCBld2tfcmVxdWVzdF9jb29raWVzX2ZpcnN0X3BhcnR5X2dldChyZXF1
ZXN0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBFdmFz
X09iamVjdCogdmlldywgY29uc3QgY2hhciogc291cmNlVXJsLCBjb25zdCBjaGFyKiBkZXN0aW5h
dGlvblVybCwgdm9pZCogdXNlckRhdGEpCit7CisgICAgV0FTX0lOVk9LRUQocGVyZm9ybUNsaWVu
dFJlZGlyZWN0KTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nh
c3Q8RVdLMlVuaXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVz
dCk7CisgICAgQVNTRVJUX0VRKHVuaXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIEFTU0VS
VF9TVFJFUShlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3VyY2UoInJlZGlyZWN0X3VybF90b19kZWZh
dWx0Lmh0bWwiKS5kYXRhKCksIHNvdXJjZVVybCk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25t
ZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwgZGVzdGluYXRpb25VcmwpOworfQorCitzdGF0aWMg
dm9pZCBwZXJmb3JtU2VydmVyUmVkaXJlY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0
IGNoYXIqIHNvdXJjZVVybCwgY29uc3QgY2hhciogZGVzdGluYXRpb25VcmwsIHZvaWQqIHVzZXJE
YXRhKQoreworICAgIFdBU19JTlZPS0VEKHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk7CisKKyAgICBF
V0syVW5pdFRlc3RCYXNlKiB1bml0VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2Uq
Pih1c2VyRGF0YSk7CisgICAgQVNTRVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1
bml0VGVzdC0+d2ViVmlldygpLCB2aWV3KTsKKyAgICBBU1NFUlRfU1RSRVEoaHR0cFNlcnZlcigp
LT5nZXRVUkxGb3JQYXRoKHRvQmVSZWRpcmVjdGVkUGF0aCkuZGF0YSgpLCBzb3VyY2VVcmwpOwor
ICAgIEFTU0VSVF9TVFJFUShodHRwU2VydmVyKCktPmdldFVSTEZvclBhdGgocmVkaXJlY3Rpb25U
YXJnZXRQYXRoKS5kYXRhKCksIGRlc3RpbmF0aW9uVXJsKTsKK30KKworc3RhdGljIHZvaWQgdXBk
YXRlSGlzdG9yeVRpdGxlKGNvbnN0IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25zdCBjaGFyKiB0aXRs
ZSwgY29uc3QgY2hhciogdXJsLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRCh1
cGRhdGVIaXN0b3J5VGl0bGUpOworCisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3QgPSBz
dGF0aWNfY2FzdDxFV0syVW5pdFRlc3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VSVF9UUlVF
KHVuaXRUZXN0KTsKKyAgICBBU1NFUlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7Cisg
ICAgQVNTRVJUX1NUUkVRKGRlZmF1bHRUaXRsZSwgdGl0bGUpOworICAgIEFTU0VSVF9TVFJFUShl
bnZpcm9ubWVudC0+ZGVmYXVsdFRlc3RQYWdlVXJsKCksIHVybCk7Cit9CisKK3N0YXRpYyB2b2lk
IHBvcHVsYXRlVmlzaXRlZExpbmtzKHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZPS0VE
KHBvcHVsYXRlVmlzaXRlZExpbmtzKTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0
ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRf
VFJVRSh1bml0VGVzdCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJl
Y3Rpb24odm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgaW50KiBj
b3VudExvYWRGaW5pc2hlZCA9IHN0YXRpY19jYXN0PGludCo+KHVzZXJEYXRhKTsKKyAgICAtLSgq
Y291bnRMb2FkRmluaXNoZWQpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFja1JlZGly
ZWN0aW9uKFNvdXBTZXJ2ZXIqLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0
aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChzdHJjbXAocGF0aCwgcmVkaXJlY3Rpb25U
YXJnZXRQYXRoKSkgeyAvLyBSZWRpcmVjdCBpZiAncGF0aCcgaXMgbm90IGVxdWFsIHRvICdyZWRp
cmVjdGlvblRhcmdldFBhdGgnLgorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19URU1QT1JBUllfUkVESVJFQ1QpOworICAgICAgICBzb3VwX21lc3Nh
Z2VfaGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwg
aHR0cFNlcnZlcigpLT5nZXRVUkxGb3JQYXRoKHJlZGlyZWN0aW9uVGFyZ2V0UGF0aCkuZGF0YSgp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKyAgICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVpbmFf
c3RyYnVmX25ldygpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYm9keSwgIjxodG1s
Pjx0aXRsZT5SZWRpcmVjdGlvbiBUYXJnZXQ8L3RpdGxlPjwvaHRtbD4iKTsKKyAgICBjb25zdCBz
aXplX3QgYm9keUxlbmd0aCA9IGVpbmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1RBS0UsIGVpbmFfc3RyYnVmX3N0cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAg
ZWluYV9zdHJidWZfZnJlZShib2R5KTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwg
ZXdrX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3Nfc2V0KQoreworICAgIGV3a19jb250ZXh0X2hp
c3RvcnlfY2FsbGJhY2tzX3NldChld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpLCBuYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSwgcGVyZm9ybUNsaWVudFJlZGlyZWN0LCBwZXJmb3JtU2Vy
dmVyUmVkaXJlY3QsIHVwZGF0ZUhpc3RvcnlUaXRsZSwgcG9wdWxhdGVWaXNpdGVkTGlua3MsIHRo
aXMpOworCisgICAgLy8gVGVzdCBuYXZpZ2F0aW9uLgorICAgIGxvYWRVcmxTeW5jKGVudmlyb25t
ZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSk7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQobmF2aWdh
dGVXaXRoTmF2aWdhdGlvbkRhdGEpOworICAgIENIRUNLX1dBU19JTlZPS0VEKHVwZGF0ZUhpc3Rv
cnlUaXRsZSk7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQocG9wdWxhdGVWaXNpdGVkTGlua3MpOwor
CisgICAgLy8gVGVzdCBjbGllbnQgcmVkaXJlY3QuCisgICAgaW50IGNvdW50TG9hZEZpbmlzaGVk
ID0gMjsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAibG9h
ZCxmaW5pc2hlZCIsIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24sICZjb3VudExvYWRGaW5p
c2hlZCk7CisgICAgZXdrX3ZpZXdfdXJsX3NldCh3ZWJWaWV3KCksIGVudmlyb25tZW50LT51cmxG
b3JSZXNvdXJjZSgicmVkaXJlY3RfdXJsX3RvX2RlZmF1bHQuaHRtbCIpLmRhdGEoKSk7CisgICAg
d2hpbGUgKGNvdW50TG9hZEZpbmlzaGVkKQorICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0
ZSgpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJsb2Fk
LGZpbmlzaGVkIiwgb25Mb2FkRmluaXNoZWRGb3JSZWRpcmVjdGlvbik7CisgICAgQ0hFQ0tfV0FT
X0lOVk9LRUQocGVyZm9ybUNsaWVudFJlZGlyZWN0KTsKKworICAgIC8vIFRlc3Qgc2VydmVyIHJl
ZGlyZWN0LgorICAgIGh0dHBTZXJ2ZXIoKS0+cnVuKHNlcnZlckNhbGxiYWNrUmVkaXJlY3Rpb24p
OworCisgICAgbG9hZFVybFN5bmMoaHR0cFNlcnZlcigpLT5nZXRVUkxGb3JQYXRoKHRvQmVSZWRp
cmVjdGVkUGF0aCkuZGF0YSgpKTsKKyAgICBDSEVDS19XQVNfSU5WT0tFRChwZXJmb3JtU2VydmVy
UmVkaXJlY3QpOworfQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167740</attachid>
            <date>2012-10-09 05:13:06 -0700</date>
            <delta_ts>2012-10-10 00:54:21 -0700</delta_ts>
            <desc>patch v5</desc>
            <filename>bug98594_v5</filename>
            <type>text/plain</type>
            <size>42973</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDRlOTI5MmJmMTI4ZTlmMjI0NmI4YzNjYzY0NWExMTFiODAxYTg2MTUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
TW9uIE9jdCA4IDExOjQzOjM5IDIwMTIgKzAzMDAKCiAgICBidWc5ODU5NAoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA5ZGYzMzcwLi4wODRmMzAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEgQEAKKzIwMTItMTAt
MDggIE1pa2hhaWwgUG96ZG55YWtvdiAgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CisK
KyAgICAgICAgW0VGTF1bV0syXSBBZGQgSGlzdG9yeSBjYWxsYmFja3MgQVBJCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODU5NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIEhpc3RvcnkgY2FsbGJh
Y2tzIEFQSSB0byBFd2sgQ29udGV4dC4gQWRkZWQgdW5pdCB0ZXN0cy4KKworICAgICAgICAqIFBs
YXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmg6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwOgorICAgICAgICAo
X0V3a19Db250ZXh0KToKKyAgICAgICAgKF9Fd2tfQ29udGV4dDo6X0V3a19Db250ZXh0KToKKyAg
ICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3NldCk6IE5ldyBwdWJsaWMgZnVu
Y3Rpb24gd2hpY2ggbGV0cyB0aGUgY2xpZW50IHRvIHNldCBIaXN0b3J5IGNhbGxiYWNrcy4KKyAg
ICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldCk6CisgICAgICAgIChld2tfY29u
dGV4dF9hZGRfdmlzaXRlZF9saW5rKTogTmV3IHB1YmxpYyBmdW5jdGlvbiB0byBtYXJrIGEgVVJM
IGFzIHZpc2l0ZWQgbGluay4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xp
ZW50LmNwcDogQWRkZWQuCisgICAgICAgIChnZXRFd2tIaXN0b3J5RGVsZWdhdGUpOgorICAgICAg
ICAoZGlkTmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpOgorICAgICAgICAoZGlkUGVyZm9ybUNs
aWVudFJlZGlyZWN0KToKKyAgICAgICAgKGRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk6CisgICAg
ICAgIChkaWRVcGRhdGVIaXN0b3J5VGl0bGUpOgorICAgICAgICAocG9wdWxhdGVWaXNpdGVkTGlu
a3MpOgorICAgICAgICAoZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9wcml2YXRl
Lmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNw
cDogQWRkZWQuCisgICAgICAgIChfRXdrX05hdmlnYXRpb25fRGF0YSk6CisgICAgICAgIChfRXdr
X05hdmlnYXRpb25fRGF0YTo6X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAgICAgICAoX0V3a19O
YXZpZ2F0aW9uX0RhdGE6On5fRXdrX05hdmlnYXRpb25fRGF0YSk6CisgICAgICAgIChld2tfbmF2
aWdhdGlvbl9kYXRhX3JlZik6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKToK
KyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdGl0bGVfZ2V0KToKKyAgICAgICAgKGV3a19u
YXZpZ2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQpOgorICAgICAgICAoZXdrX25hdmln
YXRpb25fZGF0YV91cmxfZ2V0KToKKyAgICAgICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfbmV3KToK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmg6IEFkZGVk
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChhZGRUb1BhZ2VWaWV3TWFwKToKKyAgICAgICAgKHJlbW92ZUZyb21QYWdlVmlld01h
cCk6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfZGVsKToKKyAgICAgICAgKF9ld2tfdmlld19p
bml0aWFsaXplKToKKyAgICAgICAgKGV3a192aWV3X2Zyb21fcGFnZV9nZXQpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2RlbGVnYXRlLmNwcDog
QWRkZWQuCisgICAgICAgIChodHRwU2VydmVyKToKKyAgICAgICAgKG5hdmlnYXRlV2l0aE5hdmln
YXRpb25EYXRhKToKKyAgICAgICAgKHBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChw
ZXJmb3JtU2VydmVyUmVkaXJlY3QpOgorICAgICAgICAodXBkYXRlSGlzdG9yeVRpdGxlKToKKyAg
ICAgICAgKHBvcHVsYXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKG9uTG9hZEZpbmlzaGVkRm9y
UmVkaXJlY3Rpb24pOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2tSZWRpcmVjdGlvbik6CisgICAg
ICAgIChURVNUX0YpOgorCiAyMDEyLTEwLTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBBZGQgYSBzZXR0aW5nIHRvIGVuYWJsZS9k
aXNhYmxlIHNtb290aCBzY3JvbGxpbmcgdG8gV2ViS2l0MiBHVEsrIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bUVmbC5jbWFrZQppbmRleCAxYmJmM2RiLi5hMTJmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQpAQCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHRfaGlzdG9yeV9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRl
eHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29va2llX21hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pv
Yi5jcHAKQEAgLTU4LDYgKzU5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfaW50ZW50X3NlcnZpY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3Bw
CisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfcmVzb3VyY2UuY3BwCkBAIC0yMzMsNiArMjM1LDcgQEAgU0VUIChFV2ViS2l0Ml9I
RUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfaW50ZW50LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmgiCisgICAgIiR7Q01BS0VfQ1VS
UkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJD
RV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5o
IgpAQCAtMzIyLDYgKzMyNSw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5pdFRlc3RV
dGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkKIFNFVChFV0syVW5pdFRlc3RzX0JJTkFS
SUVTCiAgICAgdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0CiAgICAgdGVzdF9ld2syX2NvbnRl
eHQKKyAgICB0ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrcwogICAgIHRlc3RfZXdr
Ml9jb29raWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9hZF9qb2IKICAgICB0ZXN0X2V3
azJfZWluYV9zaGFyZWRfc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaAppbmRleCAwODUwOTRjLi4wMGRkODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJl
d2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAi
ZXdrX21haW4uaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAi
ZXdrX25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21l
bnVfaXRlbS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGIwZGVmMDMuLjAyZWRk
YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUg
IldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRf
cmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9t
YW5hZ2VyX3ByaXZhdGUuaCIKQEAgLTc5LDExICs4MCwxNCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0
IHsKICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFn
ZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKIAorICAgIEV3
a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50IGhpc3RvcnlDbGllbnQ7CisKICAgICBfRXdrX0NvbnRl
eHQoV0tSZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0UmVmKQogICAgICAgICA6IF9fcmVm
KDEpCiAgICAgICAgICwgY29udGV4dChjb250ZXh0UmVmKQogICAgICAgICAsIGNvb2tpZU1hbmFn
ZXIoMCkKICAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0NvbnRleHRHZXRTb3VwUmVxdWVzdE1h
bmFnZXIoY29udGV4dFJlZi5nZXQoKSkpCisgICAgICAgICwgaGlzdG9yeUNsaWVudCgpCiAgICAg
ewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICAgICAgYmF0dGVyeVByb3ZpZGVyID0g
QmF0dGVyeVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7CkBAIC0xMDksNiArMTEzLDcg
QEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVx
dWVzdF9tYW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgICAgIGV3a19jb250ZXh0X2hpc3Rvcnlf
Y2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKQEAgLTI4
MiwzICsyODcsMzEgQEAgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNr
c19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWIKICAgICBld2tDb250ZXh0LT52
aWJyYXRpb25Qcm92aWRlci0+c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNh
bmNlbCwgZGF0YSk7CiAjZW5kaWYKIH0KKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NhbGxi
YWNrc19zZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19IaXN0b3J5X05hdmlnYXRpb25f
Q2IgbmF2aWdhdGUsIEV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYiBjbGllbnRSZWRp
cmVjdCwgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlclJlZGlyZWN0LCBF
d2tfSGlzdG9yeV9UaXRsZV9VcGRhdGVfQ2IgdGl0bGVVcGRhdGUsIEV3a19IaXN0b3J5X1BvcHVs
YXRlX1Zpc2l0ZWRfTGlua3NfQ2IgcG9wdWxhdGVWaXNpdGVkTGlua3MsIHZvaWQqIGRhdGEpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisKKyAgICBld2tD
b250ZXh0LT5oaXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1bmMgPSBuYXZpZ2F0ZTsKKyAgICBld2tD
b250ZXh0LT5oaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jID0gY2xpZW50UmVkaXJl
Y3Q7CisgICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVkaXJlY3RfZnVuYyA9
IHNlcnZlclJlZGlyZWN0OworICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQudGl0bGVfdXBk
YXRlX2Z1bmMgPSB0aXRsZVVwZGF0ZTsKKyAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LnBv
cHVsYXRlX3Zpc2l0ZWRfbGlua3NfZnVuYyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworICAgIGV3
a0NvbnRleHQtPmhpc3RvcnlDbGllbnQudXNlcl9kYXRhID0gZGF0YTsKK30KKworY29uc3QgRXdr
X0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChj
b25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gJmV3a0NvbnRleHQtPmhp
c3RvcnlDbGllbnQ7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rX2FkZChFd2tf
Q29udGV4dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciogdmlzaXRlZFVSTCkKK3sKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih2aXNpdGVkVVJMKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3
a1Zpc2l0ZWRVUkwoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodmlzaXRl
ZFVSTCkpOworICAgIFdLQ29udGV4dEFkZFZpc2l0ZWRMaW5rKGV3a0NvbnRleHQtPmNvbnRleHQu
Z2V0KCksIHdrVmlzaXRlZFVSTC5nZXQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBiZjgyN2NkLi4yNWZmZGVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4LDYg
KzM4LDcgQEAKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9t
YW5hZ2VyLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgogI2luY2x1ZGUgImV3
a191cmxfc2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKQEAgLTY5LDYgKzcw
LDM4IEBAIHR5cGVkZWYgdm9pZCAoKkV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IpKHVp
bnQ2NF90IHZpYnJhdGlvbl90aW1lLCB2b2lkICp1CiB0eXBlZGVmIHZvaWQgKCpFd2tfVmlicmF0
aW9uX0NsaWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiKSh2b2lkICp1c2VyX2RhdGEpOwogCiAvKioK
KyAqIEB0eXBlZGVmIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgRXdrX0hpc3RvcnlfTmF2aWdh
dGlvbl9DYgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdp
bGwgYmUgY2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IGRpZCBuYXZpZ2F0aW9uIChsb2FkZWQgbmV3
IFVSTCkuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IpKGNv
bnN0IEV2YXNfT2JqZWN0ICp2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhICpuYXZpZ2F0aW9uX2Rh
dGEsIHZvaWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0hpc3RvcnlfQ2xp
ZW50X1JlZGlyZWN0aW9uX0NiIEV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYgorICog
QGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk
IGJhY2sgd2hlbiBAYSB2aWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdC4KKyAqLwordHlw
ZWRlZiB2b2lkICgqRXdrX0hpc3RvcnlfQ2xpZW50X1JlZGlyZWN0aW9uX0NiKShjb25zdCBFdmFz
X09iamVjdCAqdmlldywgY29uc3QgY2hhciAqc291cmNlX3VybCwgY29uc3QgY2hhciAqZGVzdGlu
YXRpb25fdXJsLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19IaXN0
b3J5X1NlcnZlcl9SZWRpcmVjdGlvbl9DYiBFd2tfSGlzdG9yeV9TZXJ2ZXJfUmVkaXJlY3Rpb25f
Q2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJl
IGNhbGxlZCBiYWNrIHdoZW4gQGEgdmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QuCisg
Ki8KK3R5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X1NlcnZlcl9SZWRpcmVjdGlvbl9DYikoY29u
c3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIg
KmRlc3RpbmF0aW9uX3VybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBF
d2tfSGlzdG9yeV9UaXRsZV9VcGRhdGVfQ2IgRXdrX0hpc3RvcnlfVGl0bGVfVXBkYXRlX0NiCisg
KiBAYnJpZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxs
ZWQgYmFjayB3aGVuIGhpc3RvcnkgdGl0bGUgaXMgdXBkYXRlZC4KKyAqLwordHlwZWRlZiB2b2lk
ICgqRXdrX0hpc3RvcnlfVGl0bGVfVXBkYXRlX0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywg
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqdXNlcl9kYXRhKTsKKwor
LyoqCisgKiBAdHlwZWRlZiBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudF9WaXNpdGVkX0xpbmtz
X1BvcHVsYXRlX0NiIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50X1Zpc2l0ZWRfTGlua3NfUG9w
dWxhdGVfQ2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3
aWxsIGJlIGNhbGxlZCBiYWNrIHdoZW4gY2xpZW50IGlzIGFza2VkIHRvIHByb3ZpZGUgdmlzaXRl
ZCBsaW5rcyBmcm9tIGEgY2xpZW50LW1hbmFnZWQgc3RvcmFnZS4KKyAqCisgKiBAc2VlIGV3a19j
b250ZXh0X3Zpc2l0ZWRfbGlua19hZGQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0hpc3Rvcnlf
UG9wdWxhdGVfVmlzaXRlZF9MaW5rc19DYikodm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCiAgKiBJ
bmNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICoKICAq
IEBwYXJhbSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2Ug
Y291bnQKQEAgLTE5MCw2ICsyMjMsNDEgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfdXJs
X3NjaGVtZV9yZWdpc3RlcihFd2tfQ29udGV4dCAqY29udGV4dCwgY29uc3QgY2hhcgogICovCiBF
QVBJIHZvaWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19D
b250ZXh0ICpjb250ZXh0LCBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGUs
IEV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IgY2FuY2VsLCB2b2lkICpk
YXRhKTsKIAorLyoqCisgKiBTZXRzIGhpc3RvcnkgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gQGEg
Y29udGV4dC4KKyAqCisgKiBUbyBzdG9wIGxpc3RlbmluZyBmb3IgaGlzdG9yeSBldmVudHMsIHlv
dSBtYXkgY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggQGMKKyAqIE5VTEwgZm9yIHRoZSBjYWxsYmFj
a3MuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gc2V0IGhpc3Rvcnkg
Y2FsbGJhY2tzCisgKiBAcGFyYW0gbmF2aWdhdGVfZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3
aGVuIEBjIGV3a192aWV3IGRpZCBuYXZpZ2F0aW9uIChtYXkgYmUgQGMgTlVMTCkuCisgKiBAcGFy
YW0gY2xpZW50X3JlZGlyZWN0X2Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBAYyBld2tf
dmlldyBwZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QgKG1heSBiZSBAYyBOVUxMKS4KKyAqIEBw
YXJhbSBzZXJ2ZXJfcmVkaXJlY3RfZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIEBjIGV3
a192aWV3IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCAobWF5IGJlIEBjIE5VTEwpLgorICog
QHBhcmFtIHRpdGxlX3VwZGF0ZV9mdW5jIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaGlzdG9y
eSB0aXRsZSBpcyB1cGRhdGVkIChtYXkgYmUgQGMgTlVMTCkuCisgKiBAcGFyYW0gcG9wdWxhdGVf
dmlzaXRlZF9saW5rc19mdW5jIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjbGllbnQgaXMg
YXNrZWQgdG8gcHJvdmlkZSB2aXNpdGVkIGxpbmtzIGZyb20gYQorICogICAgICAgIGNsaWVudC1t
YW5hZ2VkIHN0b3JhZ2UgKG1heSBiZSBAYyBOVUxMKS4KKyAqIEBwYXJhbSBkYXRhIFVzZXIgZGF0
YSAobWF5IGJlIEBjIE5VTEwpLgorICovCitFQVBJIHZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9j
YWxsYmFja3Nfc2V0KEV3a19Db250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9OYXZpZ2F0aW9uX0NiIG5hdmlnYXRl
X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV3a19I
aXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYiBjbGllbnRfcmVkaXJlY3RfZnVuYywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXdrX0hpc3RvcnlfU2VydmVy
X1JlZGlyZWN0aW9uX0NiIHNlcnZlcl9yZWRpcmVjdF9mdW5jLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9UaXRsZV9VcGRhdGVfQ2IgdGl0
bGVfdXBkYXRlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEV3a19IaXN0b3J5X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2IgcG9wdWxhdGVfdmlzaXRl
ZF9saW5rc19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2b2lkICpkYXRhKTsKKworLyoqCisgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIEBhIHZpc2l0ZWRf
dXJsIGFzIHZpc2l0ZWQgbGluayBpbiBAYSBjb250ZXh0IHZpc2l0ZWQgbGluayBjYWNoZS4KKyAq
CisgKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGludm9rZWQgYXMgYSByZXNwb25zZSB0byBAYyBw
b3B1bGF0ZVZpc2l0ZWRMaW5rcyBjYWxsYmFjayBvZiB0aGUgaGlzdG9yeSBjaWVudC4KKyAqCisg
KiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBhZGQgdmlzaXRlZCBsaW5rIGRhdGEK
KyAqIEBwYXJhbSB2aXNpdGVkX3VybCB2aXNpdGVkIHVybAorICoKKyAqIEBzZWUgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQKKyAqLworRUFQSSB2b2lkIGV3a19jb250ZXh0X3Zpc2l0ZWRfbGlu
a19hZGQoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnZpc2l0ZWRfdXJsKTsKKwog
I2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWI5NWU0Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlz
dG9yeV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKworI2luY2x1ZGUg
IkRvd25sb2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0
cmluZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIK
KyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRp
b25fZGF0YS5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3By
aXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJLaXQ7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGll
bnQqIGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAg
IEFTU0VSVChjbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfZ2V0KHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0Kj4oY2xpZW50SW5mbykpOworfQor
CitzdGF0aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS0NvbnRleHRSZWYs
IFdLUGFnZVJlZiBwYWdlLCBXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0Zy
YW1lUmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0
X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUo
Y2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhp
c3RvcnlEZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYykKKyAgICAgICAgcmV0dXJuOworCisgICAgRXdr
X05hdmlnYXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGFFd2sgPSBld2tfbmF2aWdhdGlvbl9kYXRh
X25ldyhuYXZpZ2F0aW9uRGF0YSk7CisgICAgaGlzdG9yeURlbGVnYXRlLT5uYXZpZ2F0ZV9mdW5j
KGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlvbkRhdGFFd2ss
IGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBld2tfbmF2aWdhdGlvbl9kYXRhX3Vu
cmVmKG5hdmlnYXRpb25EYXRhRXdrKTsKK30KKworc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNsaWVu
dFJlZGlyZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVS
TCwgV0tVUkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlE
ZWxlZ2F0ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQo
aGlzdG9yeURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5jbGllbnRfcmVk
aXJlY3RfZnVuYykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNv
dXJjZVVSTFN0cmluZyhzb3VyY2VVUkwpOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5h
dGlvblVSTFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmNs
aWVudF9yZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwg
c291cmNlVVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51
c2VyX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tD
b250ZXh0UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBk
ZXN0aW5hdGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAg
ICBjb25zdCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0
RXdrSGlzdG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdh
dGUpOworCisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnNlcnZlcl9yZWRpcmVjdF9mdW5jKQor
ICAgICAgICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5n
KHNvdXJjZVVSTCk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5n
KGRlc3RpbmF0aW9uVVJMKTsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+c2VydmVyX3JlZGlyZWN0
X2Z1bmMoZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJp
bmcsIGRlc3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFn
ZVJlZiBwYWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rvcnlf
Q2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5m
byk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxl
Z2F0ZS0+dGl0bGVfdXBkYXRlX2Z1bmMpCisgICAgICAgIHJldHVybjsKKworICAgIFdLRWluYVNo
YXJlZFN0cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0
cmluZ1VSTChVUkwpOworCisgICAgaGlzdG9yeURlbGVnYXRlLT50aXRsZV91cGRhdGVfZnVuYyhl
d2tfdmlld19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHRpdGxlU3RyaW5nLCBzdHJpbmdV
UkwsIGhpc3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcG9wdWxh
dGVWaXNpdGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBn
ZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxl
Z2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+cG9wdWxhdGVfdmlzaXRlZF9saW5r
c19mdW5jKQorICAgICAgICByZXR1cm47CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPnBvcHVsYXRl
X3Zpc2l0ZWRfbGlua3NfZnVuYyhoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3Zv
aWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250
ZXh0KQoreworICAgIFdLQ29udGV4dEhpc3RvcnlDbGllbnQgd2tIaXN0b3J5Q2xpZW50OworICAg
IG1lbXNldCgmd2tIaXN0b3J5Q2xpZW50LCAwLCBzaXplb2YoV0tDb250ZXh0SGlzdG9yeUNsaWVu
dCkpOworCisgICAgd2tIaXN0b3J5Q2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0SGlzdG9yeUNs
aWVudEN1cnJlbnRWZXJzaW9uOworICAgIHdrSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvID0gZXdr
Q29udGV4dDsKKworICAgIHdrSGlzdG9yeUNsaWVudC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9u
RGF0YSA9IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOworICAgIHdrSGlzdG9yeUNsaWVu
dC5kaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Q7Cisg
ICAgd2tIaXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCA9IGRpZFBlcmZvcm1T
ZXJ2ZXJSZWRpcmVjdDsKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxl
ID0gZGlkVXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHdrSGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZp
c2l0ZWRMaW5rcyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworCisgICAgV0tDb250ZXh0U2V0SGlz
dG9yeUNsaWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGV3a0NvbnRleHQpLCAmd2tIaXN0
b3J5Q2xpZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUxOGNlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9y
eV9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3
a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaAorCisjaW5jbHVkZSAiZXdrX2NvbnRl
eHQuaCIKKworc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCB7CisgICAgdm9pZCog
dXNlcl9kYXRhOworICAgIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgbmF2aWdhdGVfZnVuYzsK
KyAgICBFd2tfSGlzdG9yeV9DbGllbnRfUmVkaXJlY3Rpb25fQ2IgY2xpZW50X3JlZGlyZWN0X2Z1
bmM7CisgICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlcl9yZWRpcmVj
dF9mdW5jOworICAgIEV3a19IaXN0b3J5X1RpdGxlX1VwZGF0ZV9DYiB0aXRsZV91cGRhdGVfZnVu
YzsKKyAgICBFd2tfSGlzdG9yeV9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiIHBvcHVsYXRlX3Zp
c2l0ZWRfbGlua3NfZnVuYzsKK307CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0
b3J5X0NsaWVudCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudDsKKwordm9pZCBld2tfY29udGV4
dF9oaXN0b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqKTsKKworI2VuZGlmIC8vIGV3a19j
b250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGQxYjY5NWUu
LmYyYzMyMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9wcml2YXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAKIHR5cGVkZWYgc3RydWN0
IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWRf
Sm9iIEV3a19Eb3dubG9hZF9Kb2I7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9TY2hlbWVfUmVx
dWVzdCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0
X0hpc3RvcnlfQ2xpZW50IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50OwogCiBXS0NvbnRleHRS
ZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCopOwogRXdrX0Nv
bnRleHQqIGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChXS0NvbnRleHRSZWYpOwpAQCAt
MzUsNCArMzYsNiBAQCB2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRl
eHQqLCBFd2tfRG93bmxvYWRfSm9iKik7CiBFd2tfRG93bmxvYWRfSm9iKiBld2tfY29udGV4dF9k
b3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7
CiB2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1aW50
NjRfdCBkb3dubG9hZElkKTsKIAorY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3
a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCopOworCiAjZW5k
aWYgLy8gZXdrX2NvbnRleHRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNjdmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcApAQCAtMCww
ICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgor
I2luY2x1ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgi
CisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfTmF2aWdhdGlvbl9E
YXRhCisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgbmF2aWdhdGlvbiBkYXRhIGRldGFpbHMuCisg
Ki8KK3N0cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSB7CisgICAgdW5zaWduZWQgX19yZWY7IC8q
KjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIHRpdGxlOworICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmw7CisgICAgRXdrX1VybF9S
ZXF1ZXN0KiByZXF1ZXN0OworCisgICAgX0V3a19OYXZpZ2F0aW9uX0RhdGEoV0tOYXZpZ2F0aW9u
RGF0YVJlZiBkYXRhUmVmKQorICAgICAgICA6IF9fcmVmKDEpCisgICAgICAgICwgdGl0bGUoQWRv
cHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShkYXRhUmVmKSkKKyAgICAgICAgLCB1cmwo
QWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwoZGF0YVJlZikpCisgICAgICAgICwgcmVx
dWVzdCgwKQorICAgIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiByZXF1
ZXN0V0soQWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlPcmlnaW5hbFJlcXVlc3QoZGF0YVJl
ZikpOworICAgICAgICByZXF1ZXN0ID0gZXdrX3VybF9yZXF1ZXN0X25ldyhyZXF1ZXN0V0suZ2V0
KCkpOworICAgIH0KKworICAgIH5fRXdrX05hdmlnYXRpb25fRGF0YSgpCisgICAgeworICAgICAg
ICBBU1NFUlQoIV9fcmVmKTsKKyAgICAgICAgZXdrX3VybF9yZXF1ZXN0X3VucmVmKHJlcXVlc3Qp
OworICAgIH0KK307CisKK0V3a19OYXZpZ2F0aW9uX0RhdGEqIGV3a19uYXZpZ2F0aW9uX2RhdGFf
cmVmKEV3a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRhdGEsIDApOworCisgICAgKytkYXRhLT5fX3JlZjsKKworICAgIHJldHVy
biBkYXRhOworfQorCit2b2lkIGV3a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYoRXdrX05hdmlnYXRp
b25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkYXRhKTsK
KworICAgIGlmICgtLWRhdGEtPl9fcmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUg
ZGF0YTsKK30KKworY29uc3QgY2hhciogZXdrX25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQoY29u
c3QgRXdrX05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+dGl0bGU7Cit9CisKK0V3
a19VcmxfUmVxdWVzdCogZXdrX25hdmlnYXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChj
b25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChkYXRhLCAwKTsKKworICAgIHJldHVybiBkYXRhLT5yZXF1ZXN0OworfQor
Citjb25zdCBjaGFyKiBld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmln
YXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
ZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+dXJsOworfQorCitFd2tfTmF2aWdhdGlvbl9E
YXRhKiBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFSZWYp
Cit7CisgICAgQVNTRVJUKGRhdGFSZWYpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChkYXRhUmVmLCAwKTsKKworICAgIHJldHVybiBuZXcgRXdrX05hdmlnYXRpb25fRGF0YShk
YXRhUmVmKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19uYXZpZ2F0aW9uX2RhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19uYXZpZ2F0aW9uX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42ZWE2M2ZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5oCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3a19uYXZpZ2F0aW9uX2RhdGEuaAorICogQGJy
aWVmICAgRGVzY3JpYmVzIHRoZSBFd2sgbmF2aWdhdGlvbiBkYXRhIEFQSS4KKyAqLworCisjaWZu
ZGVmIGV3a19uYXZpZ2F0aW9uX2RhdGFfaAorI2RlZmluZSBld2tfbmF2aWdhdGlvbl9kYXRhX2gK
KworI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lm
ZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5
cGUgbmFtZSBmb3IgX0V3a19OYXZpZ2F0aW9uX0RhdGEgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tf
TmF2aWdhdGlvbl9EYXRhIEV3a19OYXZpZ2F0aW9uX0RhdGE7CisKKy8qKgorICogSW5jcmVhc2Vz
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0g
ZGF0YSB0aGUgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNl
IGNvdW50CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBzdWNjZXNz
LCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqLworRUFQSSBFd2tfTmF2aWdhdGlvbl9EYXRhICpld2tf
bmF2aWdhdGlvbl9kYXRhX3JlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisg
KiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3Nz
aWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVz
IDAsIHRoZSBvYmplY3QgaXMgZnJlZWQuCisgKgorICogQHBhcmFtIGRhdGEgdGhlIG5hdmlnYXRp
b24gZGF0YSBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJ
IHZvaWQgZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRh
KTsKKworLyoqCisgKiBSZXR1cm5zIHRpdGxlIGZvciB0aGlzIG5hdmlnYXRpb24gZGF0YS4KKyAq
CisgKiBUaGUgdGl0bGUgb2YgdGhlIG5hdmlnYXRlZCBwYWdlLgorICoKKyAqIEBwYXJhbSBkYXRh
IG5hdmlnYXRpb24gZGF0YSBvYmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIHRoZSB0aXRs
ZSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAg
ICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxl
CisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdr
X25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0
YSk7CisKKy8qKgorICogUmV0dXJucyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBmb3IgdGhpcyBuYXZp
Z2F0aW9uIGRhdGEuCisgKgorICogQHBhcmFtIGRhdGEgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0
byBxdWVyeQorICoKKyAqIEByZXR1cm4gVGhlIFVSTCByZXF1ZXN0IHBvaW50ZXIgb3IgQGMgTlVM
TCBpbiBjYXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19VcmxfUmVxdWVzdCAqZXdrX25hdmln
YXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRh
ICpkYXRhKTsKKworLyoqCisgKiBSZXR1cm5zIFVSTCBvZiB0aGUgaXRlbS4KKyAqCisgKiBUaGUg
cmV0dXJuZWQgVVJMIG1heSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgVVJMIChGb3IgZXhhbXBs
ZSBpZiB0aGUgcGFnZSB3YXMgcmVkaXJlY3RlZCkuCisgKgorICogQHNlZSBld2tfYmFja19mb3J3
YXJkX2xpc3RfaXRlbV9vcmlnaW5hbF91cmlfZ2V0KCkKKyAqCisgKiBAcGFyYW0gZGF0YSBuYXZp
Z2F0aW9uIGRhdGEgb2JqZWN0IHRvIHF1ZXJ5CisgKgorICogQHJldHVybiB0aGUgVVJMIG9mIHRo
ZSBAYSBpdGVtIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvci4gVGhpcyBwb2ludGVyIGlzCisg
KiAgICAgICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIg
cG9zc2libGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVz
ZQorICogICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJp
bmdzaGFyZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAoKQorICovCitFQVBJIGNvbnN0IGNo
YXIgKmV3a19uYXZpZ2F0aW9uX2RhdGFfdXJsX2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRh
ICppdGVtKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3
a19uYXZpZ2F0aW9uX2RhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzBjNjE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRl
LmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfbmF2
aWdhdGlvbl9kYXRhX3ByaXZhdGVfaAorI2RlZmluZSBld2tfbmF2aWdhdGlvbl9kYXRhX3ByaXZh
dGVfaAorCisjaW5jbHVkZSAiV0tOYXZpZ2F0aW9uRGF0YS5oIgorCit0eXBlZGVmIHN0cnVjdCBf
RXdrX05hdmlnYXRpb25fRGF0YSBFd2tfTmF2aWdhdGlvbl9EYXRhOworCitFd2tfTmF2aWdhdGlv
bl9EYXRhKiBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFS
ZWYpOworCisjZW5kaWYgLy8gZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA0MGUzMTQxLi5i
NmQwN2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwCkBAIC04Miw2ICs4MiwzMCBAQCBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDdXJzb3JTaXpl
ID0gMTY7CiB0eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEV3a19SZXNvdXJjZSo+IExvYWRpbmdS
ZXNvdXJjZXNNYXA7CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9sb2FkaW5nX3Jlc291cmNl
c19jbGVhcihMb2FkaW5nUmVzb3VyY2VzTWFwJiBsb2FkaW5nUmVzb3VyY2VzTWFwKTsKIAordHlw
ZWRlZiBIYXNoTWFwPGNvbnN0IFdlYlBhZ2VQcm94eSosIGNvbnN0IEV2YXNfT2JqZWN0Kj4gUGFn
ZVZpZXdNYXA7CisKK3N0YXRpYyBpbmxpbmUgUGFnZVZpZXdNYXAmIHBhZ2VWaWV3TWFwKCkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFBhZ2VWaWV3TWFwLCBtYXAsICgpKTsKKyAgICByZXR1
cm4gbWFwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkVG9QYWdlVmlld01hcChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQoZXdrVmlldyk7CisgICAgQVNTRVJU
KGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBQYWdlVmlld01hcDo6QWRkUmVzdWx0
IHJlc3VsdCA9IHBhZ2VWaWV3TWFwKCkuYWRkKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpLCBl
d2tWaWV3KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOwor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRnJvbVBhZ2VWaWV3TWFwKGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQoreworICAgIEFTU0VSVChld2tWaWV3KTsKKyAgICBBU1NFUlQoZXdr
X3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpOworICAgIEFTU0VSVChwYWdlVmlld01hcCgpLmNvbnRh
aW5zKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKSk7CisgICAgcGFnZVZpZXdNYXAoKS5yZW1v
dmUoZXdrX3ZpZXdfcGFnZV9nZXQoZXdrVmlldykpOworfQorCiBzdHJ1Y3QgX0V3a19WaWV3X1By
aXZhdGVfRGF0YSB7CiAgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwogI2lm
IFVTRShDT09SRElOQVRFRF9HUkFQSElDUykKQEAgLTQ4Niw2ICs1MTAsNyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogeworICAgIHJlbW92
ZUZyb21QYWdlVmlld01hcChld2tWaWV3KTsKICAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywg
c21hcnREYXRhKTsKICAgICBpZiAoc21hcnREYXRhICYmIHNtYXJ0RGF0YS0+cHJpdikKICAgICAg
ICAgX2V3a192aWV3X3ByaXZfZGVsKHNtYXJ0RGF0YS0+cHJpdik7CkBAIC03NTUsNiArNzgwLDkg
QEAgc3RhdGljIHZvaWQgX2V3a192aWV3X2luaXRpYWxpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV3a19Db250ZXh0KiBjb250ZXh0LCBXS1AKICAgICAgICAgcHJpdi0+cGFnZVByb3h5ID0gdG9J
bXBsKGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29udGV4dCkpLT5jcmVhdGVXZWJQYWdlKHBy
aXYtPnBhZ2VDbGllbnQuZ2V0KCksIHRvSW1wbChwYWdlR3JvdXBSZWYpKTsKICAgICBlbHNlCiAg
ICAgICAgIHByaXYtPnBhZ2VQcm94eSA9IHRvSW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0
KGNvbnRleHQpKS0+Y3JlYXRlV2ViUGFnZShwcml2LT5wYWdlQ2xpZW50LmdldCgpLCBXZWJQYWdl
R3JvdXA6OmNyZWF0ZSgpLmdldCgpKTsKKworICAgIGFkZFRvUGFnZVZpZXdNYXAoZXdrVmlldyk7
CisKICNpZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCiAgICAgcHJpdi0+cGFnZVByb3h5LT5w
YWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMoKS0+c2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJs
ZWQodHJ1ZSk7CiAgICAgcHJpdi0+cGFnZVByb3h5LT5wYWdlR3JvdXAoKS0+cHJlZmVyZW5jZXMo
KS0+c2V0Rm9yY2VDb21wb3NpdGluZ01vZGUodHJ1ZSk7CkBAIC0xNTIxLDYgKzE1NDksMTMgQEAg
dm9pZCBld2tfdmlld19pbnRlbnRfc2VydmljZV9yZWdpc3RlcihFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgRXdrX0ludGVudF9TZXIKIH0KICNlbmRpZiAvLyBFTkFCTEUoV0VCX0lOVEVOVFNf
VEFHKQogCitjb25zdCBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJvbV9wYWdlX2dldChjb25zdCBX
ZWJLaXQ6OldlYlBhZ2VQcm94eSogcGFnZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwocGFnZSwgMCk7CisKKyAgICByZXR1cm4gcGFnZVZpZXdNYXAoKS5nZXQocGFnZSk7
Cit9CisKIFdlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXdfcHJpdmF0ZS5oCmluZGV4IDBlNDgxOGYuLjlmZTMwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKQEAgLTk0LDYg
Kzk0LDcgQEAgdm9pZCBld2tfdmlld19pbnRlbnRfcmVxdWVzdF9uZXcoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IEV3a19JbnRlbnQqIGV3a0ludGUKIHZvaWQgZXdrX3ZpZXdfaW50ZW50X3Nl
cnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19JbnRlbnRfU2Vy
dmljZSogZXdrSW50ZW50U2VydmljZSk7CiAjZW5kaWYKIAorY29uc3QgRXZhc19PYmplY3QqIGV3
a192aWV3X2Zyb21fcGFnZV9nZXQoY29uc3QgV2ViS2l0OjpXZWJQYWdlUHJveHkqKTsKIFdlYktp
dDo6V2ViUGFnZVByb3h5KiBld2tfdmlld19wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
Vmlldyk7CiBXZWJDb3JlOjpJbnRTaXplIGV3a192aWV3X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3MuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlz
dG9yeV9jYWxsYmFja3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcw
YWQ1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrcy5jcHAKQEAgLTAsMCAr
MSwxODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRU
ZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0
aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVk
ZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2Ug
RVdLMlVuaXRUZXN0OworCitleHRlcm4gRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQqIGVudmlyb25t
ZW50OworCitzdGF0aWMgY29uc3QgY2hhciBkZWZhdWx0VGl0bGVbXSA9ICJEZWZhdWx0IFRlc3Rp
bmcgV2ViIFBhZ2UiOworCitzdGF0aWMgY29uc3QgY2hhciB0b0JlUmVkaXJlY3RlZFBhdGhbXSA9
ICIvc29tZV9wYWdlX3RvX2JlX3JlZGlyZWN0ZWQiOworc3RhdGljIGNvbnN0IGNoYXIgcmVkaXJl
Y3Rpb25UYXJnZXRQYXRoW10gPSAiL3JlZGlyZWN0aW9uX3RhcmdldCI7CisKK3N0YXRpYyBFV0sy
VW5pdFRlc3RTZXJ2ZXIqIGh0dHBTZXJ2ZXIoKQoreworICAgIHN0YXRpYyBFV0syVW5pdFRlc3RT
ZXJ2ZXIqIHNlcnZlciA9IDA7CisKKyAgICBpZiAoIXNlcnZlcikKKyAgICAgICAgc2VydmVyID0g
bmV3IEVXSzJVbml0VGVzdFNlcnZlcjsKKworICAgIHJldHVybiBzZXJ2ZXI7Cit9CisKKyNkZWZp
bmUgREVDTEFSRV9JTlZPS0VfRkxBRyhmdW5jdGlvbk5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBm
dW5jdGlvbk5hbWUjI0ludm9rZWQgPSBmYWxzZTsKKworI2RlZmluZSBXQVNfSU5WT0tFRChmdW5j
dGlvbk5hbWUpIFwKKyAgICBpZiAoZnVuY3Rpb25OYW1lIyNJbnZva2VkKSAgICBcCisgICAgICAg
IHJldHVybjsgICAgICAgICAgICAgICAgICAgXAorICAgIGZ1bmN0aW9uTmFtZSMjSW52b2tlZCA9
IHRydWUKKworI2RlZmluZSBDSEVDS19XQVNfSU5WT0tFRChmdW5jdGlvbk5hbWUpIFwKKyAgICBB
U1NFUlRfVFJVRShmdW5jdGlvbk5hbWUjI0ludm9rZWQpCisKK0RFQ0xBUkVfSU5WT0tFX0ZMQUco
bmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEpCitERUNMQVJFX0lOVk9LRV9GTEFHKHBlcmZvcm1D
bGllbnRSZWRpcmVjdCkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUcocGVyZm9ybVNlcnZlclJlZGlyZWN0
KQorREVDTEFSRV9JTlZPS0VfRkxBRyh1cGRhdGVIaXN0b3J5VGl0bGUpCitERUNMQVJFX0lOVk9L
RV9GTEFHKHBvcHVsYXRlVmlzaXRlZExpbmtzKQorCitzdGF0aWMgdm9pZCBuYXZpZ2F0ZVdpdGhO
YXZpZ2F0aW9uRGF0YShjb25zdCBFdmFzX09iamVjdCogdmlldywgRXdrX05hdmlnYXRpb25fRGF0
YSogbmF2aWdhdGlvbkRhdGEsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZPS0VEKG5h
dmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRU
ZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NF
UlRfVFJVRSh1bml0VGVzdCk7CisgICAgQVNTRVJUX0VRKHVuaXRUZXN0LT53ZWJWaWV3KCksIHZp
ZXcpOworICAgIC8vIEZJWE1FIDogV2ViRnJhbWVMb2FkZXJDbGllbnQgc2VuZHMgZW1wdHkgdGl0
bGUuCisgICAgLy8gQVNTRVJUX1NUUkVRKGRlZmF1bHRUaXRsZSwgZXdrX25hdmlnYXRpb25fZGF0
YV90aXRsZV9nZXQobmF2aWdhdGlvbkRhdGEpKTsKKyAgICBBU1NFUlRfU1RSRVEoZW52aXJvbm1l
bnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCBld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQobmF2
aWdhdGlvbkRhdGEpKTsKKworICAgIEV3a19VcmxfUmVxdWVzdCogcmVxdWVzdCA9IGV3a19uYXZp
Z2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQobmF2aWdhdGlvbkRhdGEpOworICAgIEFT
U0VSVF9TVFJFUSgiR0VUIiwgZXdrX3VybF9yZXF1ZXN0X2h0dHBfbWV0aG9kX2dldChyZXF1ZXN0
KSk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwg
ZXdrX3VybF9yZXF1ZXN0X3VybF9nZXQocmVxdWVzdCkpOworICAgIEFTU0VSVF9FUSgwLCBld2tf
cmVxdWVzdF9jb29raWVzX2ZpcnN0X3BhcnR5X2dldChyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2
b2lkIHBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBFdmFzX09iamVjdCogdmlldywgY29uc3Qg
Y2hhciogc291cmNlVXJsLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVybCwgdm9pZCogdXNlckRh
dGEpCit7CisgICAgV0FTX0lOVk9LRUQocGVyZm9ybUNsaWVudFJlZGlyZWN0KTsKKworICAgIEVX
SzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+
KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7CisgICAgQVNTRVJUX0VRKHVu
aXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+
dXJsRm9yUmVzb3VyY2UoInJlZGlyZWN0X3VybF90b19kZWZhdWx0Lmh0bWwiKS5kYXRhKCksIHNv
dXJjZVVybCk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VV
cmwoKSwgZGVzdGluYXRpb25VcmwpOworfQorCitzdGF0aWMgdm9pZCBwZXJmb3JtU2VydmVyUmVk
aXJlY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVybCwgY29u
c3QgY2hhciogZGVzdGluYXRpb25VcmwsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZP
S0VEKHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0
VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNT
RVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygpLCB2
aWV3KTsKKyAgICBBU1NFUlRfU1RSRVEoaHR0cFNlcnZlcigpLT5nZXRVUkxGb3JQYXRoKHRvQmVS
ZWRpcmVjdGVkUGF0aCkuZGF0YSgpLCBzb3VyY2VVcmwpOworICAgIEFTU0VSVF9TVFJFUShodHRw
U2VydmVyKCktPmdldFVSTEZvclBhdGgocmVkaXJlY3Rpb25UYXJnZXRQYXRoKS5kYXRhKCksIGRl
c3RpbmF0aW9uVXJsKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlSGlzdG9yeVRpdGxlKGNvbnN0
IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogdXJsLCB2
b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRCh1cGRhdGVIaXN0b3J5VGl0bGUpOwor
CisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3QgPSBzdGF0aWNfY2FzdDxFV0syVW5pdFRl
c3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VSVF9UUlVFKHVuaXRUZXN0KTsKKyAgICBBU1NF
UlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7CisgICAgQVNTRVJUX1NUUkVRKGRlZmF1
bHRUaXRsZSwgdGl0bGUpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+ZGVmYXVsdFRl
c3RQYWdlVXJsKCksIHVybCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtz
KHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZPS0VEKHBvcHVsYXRlVmlzaXRlZExpbmtz
KTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVu
aXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7Cit9CisK
K3N0YXRpYyB2b2lkIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24odm9pZCogdXNlckRhdGEs
IEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgaW50KiBjb3VudExvYWRGaW5pc2hlZCA9IHN0
YXRpY19jYXN0PGludCo+KHVzZXJEYXRhKTsKKyAgICAtLSgqY291bnRMb2FkRmluaXNoZWQpOwor
fQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFja1JlZGlyZWN0aW9uKFNvdXBTZXJ2ZXIqLCBT
b3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBD
bGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChzdHJjbXAocGF0aCwgcmVkaXJlY3Rpb25UYXJnZXRQYXRoKSkgeyAvLyBSZWRp
cmVjdCBpZiAncGF0aCcgaXMgbm90IGVxdWFsIHRvICdyZWRpcmVjdGlvblRhcmdldFBhdGgnLgor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19URU1Q
T1JBUllfUkVESVJFQ1QpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgaHR0cFNlcnZlcigpLT5nZXRVUkxG
b3JQYXRoKHJlZGlyZWN0aW9uVGFyZ2V0UGF0aCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X09LKTsKKyAgICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygpOworICAgIGVp
bmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYm9keSwgIjxodG1sPjx0aXRsZT5SZWRpcmVjdGlvbiBU
YXJnZXQ8L3RpdGxlPjwvaHRtbD4iKTsKKyAgICBjb25zdCBzaXplX3QgYm9keUxlbmd0aCA9IGVp
bmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGVpbmFfc3RyYnVmX3N0
cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAgZWluYV9zdHJidWZfZnJlZShib2R5
KTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfaGlzdG9yeV9j
YWxsYmFja3Nfc2V0KQoreworICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3NldChl
d2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpLCBuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YSwgcGVyZm9ybUNsaWVudFJlZGlyZWN0LCBwZXJmb3JtU2VydmVyUmVkaXJlY3QsIHVwZGF0ZUhp
c3RvcnlUaXRsZSwgcG9wdWxhdGVWaXNpdGVkTGlua3MsIHRoaXMpOworCisgICAgLy8gVGVzdCBu
YXZpZ2F0aW9uLgorICAgIGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VV
cmwoKSk7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQobmF2aWdhdGVXaXRoTmF2aWdhdGlvbkRhdGEp
OworICAgIENIRUNLX1dBU19JTlZPS0VEKHVwZGF0ZUhpc3RvcnlUaXRsZSk7CisgICAgQ0hFQ0tf
V0FTX0lOVk9LRUQocG9wdWxhdGVWaXNpdGVkTGlua3MpOworCisgICAgLy8gVGVzdCBjbGllbnQg
cmVkaXJlY3QuCisgICAgaW50IGNvdW50TG9hZEZpbmlzaGVkID0gMjsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAibG9hZCxmaW5pc2hlZCIsIG9uTG9hZEZp
bmlzaGVkRm9yUmVkaXJlY3Rpb24sICZjb3VudExvYWRGaW5pc2hlZCk7CisgICAgZXdrX3ZpZXdf
dXJsX3NldCh3ZWJWaWV3KCksIGVudmlyb25tZW50LT51cmxGb3JSZXNvdXJjZSgicmVkaXJlY3Rf
dXJsX3RvX2RlZmF1bHQuaHRtbCIpLmRhdGEoKSk7CisgICAgd2hpbGUgKGNvdW50TG9hZEZpbmlz
aGVkKQorICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJsb2FkLGZpbmlzaGVkIiwgb25Mb2FkRmlu
aXNoZWRGb3JSZWRpcmVjdGlvbik7CisgICAgQ0hFQ0tfV0FTX0lOVk9LRUQocGVyZm9ybUNsaWVu
dFJlZGlyZWN0KTsKKworICAgIC8vIFRlc3Qgc2VydmVyIHJlZGlyZWN0LgorICAgIGh0dHBTZXJ2
ZXIoKS0+cnVuKHNlcnZlckNhbGxiYWNrUmVkaXJlY3Rpb24pOworCisgICAgbG9hZFVybFN5bmMo
aHR0cFNlcnZlcigpLT5nZXRVUkxGb3JQYXRoKHRvQmVSZWRpcmVjdGVkUGF0aCkuZGF0YSgpKTsK
KyAgICBDSEVDS19XQVNfSU5WT0tFRChwZXJmb3JtU2VydmVyUmVkaXJlY3QpOworfQorCg==
</data>
<flag name="review"
          id="180489"
          type_id="1"
          status="+"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167947</attachid>
            <date>2012-10-10 00:54:21 -0700</date>
            <delta_ts>2012-10-10 01:14:37 -0700</delta_ts>
            <desc>to be landed</desc>
            <filename>bug98594_v6</filename>
            <type>text/plain</type>
            <size>42885</size>
            <attacher name="Mikhail Pozdnyakov">mikhail.pozdnyakov</attacher>
            
              <data encoding="base64">Y29tbWl0IDk0MjU4OTJhOGM4NzUzNmYzZTcyNDRmNjZmOWVlY2I1YWM5YzI0NWUKQXV0aG9yOiBN
aWtoYWlsIFBvemRueWFrb3YgPG1pa2hhaWwucG96ZG55YWtvdkBpbnRlbC5jb20+CkRhdGU6ICAg
V2VkIE9jdCAxMCAxMDo1MDo0NCAyMDEyICswMzAwCgogICAgYnVnOTg1OTQKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5k
ZXggNmVmOThmMy4uMDlkZTY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEyLTEw
LTEwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgor
CisgICAgICAgIFtFRkxdW1dLMl0gQWRkIEhpc3RvcnkgY2FsbGJhY2tzIEFQSQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg1OTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KKworICAgICAgICBBZGRlZCBI
aXN0b3J5IGNhbGxiYWNrcyBBUEkgdG8gRXdrIENvbnRleHQuIEFkZGVkIHVuaXQgdGVzdHMuCisK
KyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9FV2ViS2l0Mi5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cDoKKyAgICAgICAgKF9Fd2tfQ29udGV4dCk6CisgICAgICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tf
Q29udGV4dCk6CisgICAgICAgIChld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19zZXQpOiBO
ZXcgcHVibGljIGZ1bmN0aW9uIHdoaWNoIGxldHMgdGhlIGNsaWVudCB0byBzZXQgSGlzdG9yeSBj
YWxsYmFja3MuCisgICAgICAgIChld2tfY29udGV4dF9oaXN0b3J5X2NsaWVudF9nZXQpOgorICAg
ICAgICAoZXdrX2NvbnRleHRfYWRkX3Zpc2l0ZWRfbGluayk6IE5ldyBwdWJsaWMgZnVuY3Rpb24g
dG8gbWFyayBhIFVSTCBhcyB2aXNpdGVkIGxpbmsuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9oaXN0b3J5X2NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0RXdrSGlzdG9yeURlbGVn
YXRlKToKKyAgICAgICAgKGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKToKKyAgICAgICAg
KGRpZFBlcmZvcm1DbGllbnRSZWRpcmVjdCk6CisgICAgICAgIChkaWRQZXJmb3JtU2VydmVyUmVk
aXJlY3QpOgorICAgICAgICAoZGlkVXBkYXRlSGlzdG9yeVRpdGxlKToKKyAgICAgICAgKHBvcHVs
YXRlVmlzaXRlZExpbmtzKToKKyAgICAgICAgKGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2F0
dGFjaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9j
bGllbnRfcHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmln
YXRpb25fZGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAoX0V3a19OYXZpZ2F0aW9uX0RhdGEpOgor
ICAgICAgICAoX0V3a19OYXZpZ2F0aW9uX0RhdGE6Ol9Fd2tfTmF2aWdhdGlvbl9EYXRhKToKKyAg
ICAgICAgKF9Fd2tfTmF2aWdhdGlvbl9EYXRhOjp+X0V3a19OYXZpZ2F0aW9uX0RhdGEpOgorICAg
ICAgICAoZXdrX25hdmlnYXRpb25fZGF0YV9yZWYpOgorICAgICAgICAoZXdrX25hdmlnYXRpb25f
ZGF0YV91bnJlZik6CisgICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX3RpdGxlX2dldCk6Cisg
ICAgICAgIChld2tfbmF2aWdhdGlvbl9kYXRhX29yaWdpbmFsX3JlcXVlc3RfZ2V0KToKKyAgICAg
ICAgKGV3a19uYXZpZ2F0aW9uX2RhdGFfdXJsX2dldCk6CisgICAgICAgIChld2tfbmF2aWdhdGlv
bl9kYXRhX25ldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25f
ZGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlv
bl9kYXRhX3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwOgorICAgICAgICAoYWRkVG9QYWdlVmlld01hcCk6CisgICAgICAgIChyZW1vdmVG
cm9tUGFnZVZpZXdNYXApOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X2RlbCk6CisgICAgICAg
IChfZXdrX3ZpZXdfaW5pdGlhbGl6ZSk6CisgICAgICAgIChld2tfdmlld19mcm9tX3BhZ2VfZ2V0
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmg6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9k
ZWxlZ2F0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoaHR0cFNlcnZlcik6CisgICAgICAgIChuYXZp
Z2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk6CisgICAgICAgIChwZXJmb3JtQ2xpZW50UmVkaXJlY3Qp
OgorICAgICAgICAocGVyZm9ybVNlcnZlclJlZGlyZWN0KToKKyAgICAgICAgKHVwZGF0ZUhpc3Rv
cnlUaXRsZSk6CisgICAgICAgIChwb3B1bGF0ZVZpc2l0ZWRMaW5rcyk6CisgICAgICAgIChvbkxv
YWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrUmVkaXJl
Y3Rpb24pOgorICAgICAgICAoVEVTVF9GKToKKwogMjAxMi0xMC0wOSAgQnl1bmd3b28gTGVlICA8
Ync4MC5sZWVAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0syXSBDaGFuZ2UgcGFyYW1l
dGVyIGFuZCByZXR1cm4gdHlwZSBvZiBsb2FkVXJsU3luYygpLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5j
bWFrZQppbmRleCAxYmJmM2RiLi5hMTJmNDRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpA
QCAtNTAsNiArNTAsNyBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfYmFja19mb3J3YXJkX2xpc3RfaXRlbS5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
aGlzdG9yeV9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcmVx
dWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2ll
X21hbmFnZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5jcHAK
QEAgLTU4LDYgKzU5LDcgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2ludGVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50
ZW50X3NlcnZpY2UuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uY3BwCisgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YS5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3BvcHVwX21lbnVfaXRlbS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9l
d2tfcmVzb3VyY2UuY3BwCkBAIC0yMzMsNiArMjM1LDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFERVJT
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
aW50ZW50LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9E
SVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19tYWluLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9T
T1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAgICAg
IiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19wb3B1cF9tZW51X2l0ZW0uaCIKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19yZXNvdXJjZS5oIgpAQCAt
MzIyLDYgKzMyNSw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAk
e0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkKIFNFVChFV0syVW5pdFRlc3RzX0JJTkFSSUVTCiAg
ICAgdGVzdF9ld2syX2JhY2tfZm9yd2FyZF9saXN0CiAgICAgdGVzdF9ld2syX2NvbnRleHQKKyAg
ICB0ZXN0X2V3azJfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrcwogICAgIHRlc3RfZXdrMl9jb29r
aWVfbWFuYWdlcgogICAgIHRlc3RfZXdrMl9kb3dubG9hZF9qb2IKICAgICB0ZXN0X2V3azJfZWlu
YV9zaGFyZWRfc3RyaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktp
dDIuaAppbmRleCAwODUwOTRjLi4wMGRkODExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJld2tfaW50
ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdrX21h
aW4uaCIKKyNpbmNsdWRlICJld2tfbmF2aWdhdGlvbl9kYXRhLmgiCiAjaW5jbHVkZSAiZXdrX25h
dmlnYXRpb25fcG9saWN5X2RlY2lzaW9uLmgiCiAjaW5jbHVkZSAiZXdrX3BvcHVwX21lbnVfaXRl
bS5oIgogI2luY2x1ZGUgImV3a19yZXNvdXJjZS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGIwZGVmMDMuLjAyZWRkYjQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJXS1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkNv
bnRleHQuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5o
IgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNs
dWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVz
dF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2Vy
X3ByaXZhdGUuaCIKQEAgLTc5LDExICs4MCwxNCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICAg
ICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAg
ICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKIAorICAgIEV3a19Db250
ZXh0X0hpc3RvcnlfQ2xpZW50IGhpc3RvcnlDbGllbnQ7CisKICAgICBfRXdrX0NvbnRleHQoV0tS
ZXRhaW5QdHI8V0tDb250ZXh0UmVmPiBjb250ZXh0UmVmKQogICAgICAgICA6IF9fcmVmKDEpCiAg
ICAgICAgICwgY29udGV4dChjb250ZXh0UmVmKQogICAgICAgICAsIGNvb2tpZU1hbmFnZXIoMCkK
ICAgICAgICAgLCByZXF1ZXN0TWFuYWdlcihXS0NvbnRleHRHZXRTb3VwUmVxdWVzdE1hbmFnZXIo
Y29udGV4dFJlZi5nZXQoKSkpCisgICAgICAgICwgaGlzdG9yeUNsaWVudCgpCiAgICAgewogI2lm
IEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICAgICAgYmF0dGVyeVByb3ZpZGVyID0gQmF0dGVy
eVByb3ZpZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7CkBAIC0xMDksNiArMTEzLDcgQEAgc3Ry
dWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKICAgICAgICAgZXdrX2NvbnRleHRfcmVxdWVzdF9t
YW5hZ2VyX2NsaWVudF9hdHRhY2godGhpcyk7CiAgICAgICAgIGV3a19jb250ZXh0X2Rvd25sb2Fk
X2NsaWVudF9hdHRhY2godGhpcyk7CisgICAgICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50
X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKQEAgLTI4MiwzICsy
ODcsMzEgQEAgdm9pZCBld2tfY29udGV4dF92aWJyYXRpb25fY2xpZW50X2NhbGxiYWNrc19zZXQo
RXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19WaWIKICAgICBld2tDb250ZXh0LT52aWJyYXRp
b25Qcm92aWRlci0+c2V0VmlicmF0aW9uQ2xpZW50Q2FsbGJhY2tzKHZpYnJhdGUsIGNhbmNlbCwg
ZGF0YSk7CiAjZW5kaWYKIH0KKwordm9pZCBld2tfY29udGV4dF9oaXN0b3J5X2NhbGxiYWNrc19z
ZXQoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgbmF2
aWdhdGUsIEV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYiBjbGllbnRSZWRpcmVjdCwg
RXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlclJlZGlyZWN0LCBFd2tfSGlz
dG9yeV9UaXRsZV9VcGRhdGVfQ2IgdGl0bGVVcGRhdGUsIEV3a19IaXN0b3J5X1BvcHVsYXRlX1Zp
c2l0ZWRfTGlua3NfQ2IgcG9wdWxhdGVWaXNpdGVkTGlua3MsIHZvaWQqIGRhdGEpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisKKyAgICBld2tDb250ZXh0
LT5oaXN0b3J5Q2xpZW50Lm5hdmlnYXRlX2Z1bmMgPSBuYXZpZ2F0ZTsKKyAgICBld2tDb250ZXh0
LT5oaXN0b3J5Q2xpZW50LmNsaWVudF9yZWRpcmVjdF9mdW5jID0gY2xpZW50UmVkaXJlY3Q7Cisg
ICAgZXdrQ29udGV4dC0+aGlzdG9yeUNsaWVudC5zZXJ2ZXJfcmVkaXJlY3RfZnVuYyA9IHNlcnZl
clJlZGlyZWN0OworICAgIGV3a0NvbnRleHQtPmhpc3RvcnlDbGllbnQudGl0bGVfdXBkYXRlX2Z1
bmMgPSB0aXRsZVVwZGF0ZTsKKyAgICBld2tDb250ZXh0LT5oaXN0b3J5Q2xpZW50LnBvcHVsYXRl
X3Zpc2l0ZWRfbGlua3NfZnVuYyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworICAgIGV3a0NvbnRl
eHQtPmhpc3RvcnlDbGllbnQudXNlcl9kYXRhID0gZGF0YTsKK30KKworY29uc3QgRXdrX0NvbnRl
eHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBF
d2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gJmV3a0NvbnRleHQtPmhpc3RvcnlD
bGllbnQ7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfdmlzaXRlZF9saW5rX2FkZChFd2tfQ29udGV4
dCogZXdrQ29udGV4dCwgY29uc3QgY2hhciogdmlzaXRlZFVSTCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTih2aXNpdGVkVVJMKTsKKworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1Zpc2l0
ZWRVUkwoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodmlzaXRlZFVSTCkp
OworICAgIFdLQ29udGV4dEFkZFZpc2l0ZWRMaW5rKGV3a0NvbnRleHQtPmNvbnRleHQuZ2V0KCks
IHdrVmlzaXRlZFVSTC5nZXQoKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBiZjgyN2NkLi4zZjQ2ZDQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAgLTM4LDYgKzM4LDcg
QEAKICNkZWZpbmUgZXdrX2NvbnRleHRfaAogCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2Vy
LmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YS5oIgogI2luY2x1ZGUgImV3a191cmxf
c2NoZW1lX3JlcXVlc3QuaCIKICNpbmNsdWRlIDxFdmFzLmg+CiAKQEAgLTY5LDYgKzcwLDM4IEBA
IHR5cGVkZWYgdm9pZCAoKkV3a19WaWJyYXRpb25fQ2xpZW50X1ZpYnJhdGVfQ2IpKHVpbnQ2NF90
IHZpYnJhdGlvbl90aW1lLCB2b2lkICp1CiB0eXBlZGVmIHZvaWQgKCpFd2tfVmlicmF0aW9uX0Ns
aWVudF9WaWJyYXRpb25fQ2FuY2VsX0NiKSh2b2lkICp1c2VyX2RhdGEpOwogCiAvKioKKyAqIEB0
eXBlZGVmIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgRXdrX0hpc3RvcnlfTmF2aWdhdGlvbl9D
YgorICogQGJyaWVmIFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUg
Y2FsbGVkIGJhY2sgd2hlbiBAYSB2aWV3IGRpZCBuYXZpZ2F0aW9uIChsb2FkZWQgbmV3IFVSTCku
CisgKi8KK3R5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IpKGNvbnN0IEV2
YXNfT2JqZWN0ICp2aWV3LCBFd2tfTmF2aWdhdGlvbl9EYXRhICpuYXZpZ2F0aW9uX2RhdGEsIHZv
aWQgKnVzZXJfZGF0YSk7CisKKy8qKgorICogQHR5cGVkZWYgRXdrX0hpc3RvcnlfQ2xpZW50X1Jl
ZGlyZWN0aW9uX0NiIEV3a19IaXN0b3J5X0NsaWVudF9SZWRpcmVjdGlvbl9DYgorICogQGJyaWVm
IFR5cGUgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGJhY2sg
d2hlbiBAYSB2aWV3IHBlcmZvcm1lZCBhIGNsaWVudCByZWRpcmVjdC4KKyAqLwordHlwZWRlZiB2
b2lkICgqRXdrX0hpc3RvcnlfQ2xpZW50X1JlZGlyZWN0aW9uX0NiKShjb25zdCBFdmFzX09iamVj
dCAqdmlldywgY29uc3QgY2hhciAqc291cmNlX3VybCwgY29uc3QgY2hhciAqZGVzdGluYXRpb25f
dXJsLCB2b2lkICp1c2VyX2RhdGEpOworCisvKioKKyAqIEB0eXBlZGVmIEV3a19IaXN0b3J5X1Nl
cnZlcl9SZWRpcmVjdGlvbl9DYiBFd2tfSGlzdG9yeV9TZXJ2ZXJfUmVkaXJlY3Rpb25fQ2IKKyAq
IEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxl
ZCBiYWNrIHdoZW4gQGEgdmlldyBwZXJmb3JtZWQgYSBzZXJ2ZXIgcmVkaXJlY3QuCisgKi8KK3R5
cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X1NlcnZlcl9SZWRpcmVjdGlvbl9DYikoY29uc3QgRXZh
c19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIgKnNvdXJjZV91cmwsIGNvbnN0IGNoYXIgKmRlc3Rp
bmF0aW9uX3VybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisgKiBAdHlwZWRlZiBFd2tfSGlz
dG9yeV9UaXRsZV9VcGRhdGVfQ2IgRXdrX0hpc3RvcnlfVGl0bGVfVXBkYXRlX0NiCisgKiBAYnJp
ZWYgVHlwZSBkZWZpbml0aW9uIGZvciBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgYmFj
ayB3aGVuIGhpc3RvcnkgdGl0bGUgaXMgdXBkYXRlZC4KKyAqLwordHlwZWRlZiB2b2lkICgqRXdr
X0hpc3RvcnlfVGl0bGVfVXBkYXRlX0NiKShjb25zdCBFdmFzX09iamVjdCAqdmlldywgY29uc3Qg
Y2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnVybCwgdm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCisg
KiBAdHlwZWRlZiBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudF9WaXNpdGVkX0xpbmtzX1BvcHVs
YXRlX0NiIEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50X1Zpc2l0ZWRfTGlua3NfUG9wdWxhdGVf
Q2IKKyAqIEBicmllZiBUeXBlIGRlZmluaXRpb24gZm9yIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGJl
IGNhbGxlZCBiYWNrIHdoZW4gY2xpZW50IGlzIGFza2VkIHRvIHByb3ZpZGUgdmlzaXRlZCBsaW5r
cyBmcm9tIGEgY2xpZW50LW1hbmFnZWQgc3RvcmFnZS4KKyAqCisgKiBAc2VlIGV3a19jb250ZXh0
X3Zpc2l0ZWRfbGlua19hZGQKKyAqLwordHlwZWRlZiB2b2lkICgqRXdrX0hpc3RvcnlfUG9wdWxh
dGVfVmlzaXRlZF9MaW5rc19DYikodm9pZCAqdXNlcl9kYXRhKTsKKworLyoqCiAgKiBJbmNyZWFz
ZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICoKICAqIEBwYXJh
bSBjb250ZXh0IGNvbnRleHQgb2JqZWN0IHRvIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQK
QEAgLTE5MCw2ICsyMjMsNDEgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfdXJsX3NjaGVt
ZV9yZWdpc3RlcihFd2tfQ29udGV4dCAqY29udGV4dCwgY29uc3QgY2hhcgogICovCiBFQVBJIHZv
aWQgZXdrX2NvbnRleHRfdmlicmF0aW9uX2NsaWVudF9jYWxsYmFja3Nfc2V0KEV3a19Db250ZXh0
ICpjb250ZXh0LCBFd2tfVmlicmF0aW9uX0NsaWVudF9WaWJyYXRlX0NiIHZpYnJhdGUsIEV3a19W
aWJyYXRpb25fQ2xpZW50X1ZpYnJhdGlvbl9DYW5jZWxfQ2IgY2FuY2VsLCB2b2lkICpkYXRhKTsK
IAorLyoqCisgKiBTZXRzIGhpc3RvcnkgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gQGEgY29udGV4
dC4KKyAqCisgKiBUbyBzdG9wIGxpc3RlbmluZyBmb3IgaGlzdG9yeSBldmVudHMsIHlvdSBtYXkg
Y2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggQGMKKyAqIE5VTEwgZm9yIHRoZSBjYWxsYmFja3MuCisg
KgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmplY3QgdG8gc2V0IGhpc3RvcnkgY2FsbGJh
Y2tzCisgKiBAcGFyYW0gbmF2aWdhdGVfZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIEBj
IGV3a192aWV3IGRpZCBuYXZpZ2F0aW9uIChtYXkgYmUgQGMgTlVMTCkuCisgKiBAcGFyYW0gY2xp
ZW50X3JlZGlyZWN0X2Z1bmMgVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiBAYyBld2tfdmlldyBw
ZXJmb3JtZWQgYSBjbGllbnQgcmVkaXJlY3QgKG1heSBiZSBAYyBOVUxMKS4KKyAqIEBwYXJhbSBz
ZXJ2ZXJfcmVkaXJlY3RfZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIEBjIGV3a192aWV3
IHBlcmZvcm1lZCBhIHNlcnZlciByZWRpcmVjdCAobWF5IGJlIEBjIE5VTEwpLgorICogQHBhcmFt
IHRpdGxlX3VwZGF0ZV9mdW5jIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gaGlzdG9yeSB0aXRs
ZSBpcyB1cGRhdGVkIChtYXkgYmUgQGMgTlVMTCkuCisgKiBAcGFyYW0gcG9wdWxhdGVfdmlzaXRl
ZF9saW5rc19mdW5jIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiBjbGllbnQgaXMgYXNrZWQg
dG8gcHJvdmlkZSB2aXNpdGVkIGxpbmtzIGZyb20gYQorICogICAgICAgIGNsaWVudC1tYW5hZ2Vk
IHN0b3JhZ2UgKG1heSBiZSBAYyBOVUxMKS4KKyAqIEBwYXJhbSBkYXRhIFVzZXIgZGF0YSAobWF5
IGJlIEBjIE5VTEwpLgorICovCitFQVBJIHZvaWQgZXdrX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFj
a3Nfc2V0KEV3a19Db250ZXh0ICpjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9OYXZpZ2F0aW9uX0NiIG5hdmlnYXRlX2Z1bmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV3a19IaXN0b3J5
X0NsaWVudF9SZWRpcmVjdGlvbl9DYiBjbGllbnRfcmVkaXJlY3RfZnVuYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGly
ZWN0aW9uX0NiIHNlcnZlcl9yZWRpcmVjdF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBFd2tfSGlzdG9yeV9UaXRsZV9VcGRhdGVfQ2IgdGl0bGVfdXBk
YXRlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV3
a19IaXN0b3J5X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2IgcG9wdWxhdGVfdmlzaXRlZF9saW5r
c19mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk
ICpkYXRhKTsKKworLyoqCisgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIEBhIHZpc2l0ZWRfdXJsIGFz
IHZpc2l0ZWQgbGluayBpbiBAYSBjb250ZXh0IHZpc2l0ZWQgbGluayBjYWNoZS4KKyAqCisgKiBU
aGlzIGZ1bmN0aW9uIHNoYWxsIGJlIGludm9rZWQgYXMgYSByZXNwb25zZSB0byBAYyBwb3B1bGF0
ZVZpc2l0ZWRMaW5rcyBjYWxsYmFjayBvZiB0aGUgaGlzdG9yeSBjaWVudC4KKyAqCisgKiBAcGFy
YW0gY29udGV4dCBjb250ZXh0IG9iamVjdCB0byBhZGQgdmlzaXRlZCBsaW5rIGRhdGEKKyAqIEBw
YXJhbSB2aXNpdGVkX3VybCB2aXNpdGVkIHVybAorICoKKyAqIEBzZWUgRXdrX0NvbnRleHRfSGlz
dG9yeV9DbGllbnQKKyAqLworRUFQSSB2b2lkIGV3a19jb250ZXh0X3Zpc2l0ZWRfbGlua19hZGQo
RXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIgKnZpc2l0ZWRfdXJsKTsKKwogI2lmZGVm
IF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWI5NWU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9j
bGllbnQuY3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElu
dGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKworI2luY2x1ZGUgIkRvd25s
b2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0NvbnRleHQu
aCIKKyNpbmNsdWRlICJXS0VpbmFTaGFyZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5o
IgorI2luY2x1ZGUgImV3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCIKKyNpbmNs
dWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX25hdmlnYXRpb25fZGF0
YS5oIgorI2luY2x1ZGUgImV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGdl
dEV3a0hpc3RvcnlEZWxlZ2F0ZShjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEFTU0VS
VChjbGllbnRJbmZvKTsKKyAgICByZXR1cm4gZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfZ2V0
KHN0YXRpY19jYXN0PGNvbnN0IEV3a19Db250ZXh0Kj4oY2xpZW50SW5mbykpOworfQorCitzdGF0
aWMgdm9pZCBkaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YShXS0NvbnRleHRSZWYsIFdLUGFn
ZVJlZiBwYWdlLCBXS05hdmlnYXRpb25EYXRhUmVmIG5hdmlnYXRpb25EYXRhLCBXS0ZyYW1lUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50
SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlE
ZWxlZ2F0ZS0+bmF2aWdhdGVfZnVuYykKKyAgICAgICAgcmV0dXJuOworCisgICAgRXdrX05hdmln
YXRpb25fRGF0YSogbmF2aWdhdGlvbkRhdGFFd2sgPSBld2tfbmF2aWdhdGlvbl9kYXRhX25ldyhu
YXZpZ2F0aW9uRGF0YSk7CisgICAgaGlzdG9yeURlbGVnYXRlLT5uYXZpZ2F0ZV9mdW5jKGV3a192
aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgbmF2aWdhdGlvbkRhdGFFd2ssIGhpc3Rv
cnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKKyAgICBld2tfbmF2aWdhdGlvbl9kYXRhX3VucmVmKG5h
dmlnYXRpb25EYXRhRXdrKTsKK30KKworc3RhdGljIHZvaWQgZGlkUGVyZm9ybUNsaWVudFJlZGly
ZWN0KFdLQ29udGV4dFJlZiwgV0tQYWdlUmVmIHBhZ2UsIFdLVVJMUmVmIHNvdXJjZVVSTCwgV0tV
UkxSZWYgZGVzdGluYXRpb25VUkwsIFdLRnJhbWVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
Cit7CisgICAgY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGhpc3RvcnlEZWxlZ2F0
ZSA9IGdldEV3a0hpc3RvcnlEZWxlZ2F0ZShjbGllbnRJbmZvKTsKKyAgICBBU1NFUlQoaGlzdG9y
eURlbGVnYXRlKTsKKworICAgIGlmICghaGlzdG9yeURlbGVnYXRlLT5jbGllbnRfcmVkaXJlY3Rf
ZnVuYykKKyAgICAgICAgcmV0dXJuOworCisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHNvdXJjZVVS
TFN0cmluZyhzb3VyY2VVUkwpOworICAgIFdLRWluYVNoYXJlZFN0cmluZyBkZXN0aW5hdGlvblVS
TFN0cmluZyhkZXN0aW5hdGlvblVSTCk7CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPmNsaWVudF9y
ZWRpcmVjdF9mdW5jKGV3a192aWV3X2Zyb21fcGFnZV9nZXQodG9JbXBsKHBhZ2UpKSwgc291cmNl
VVJMU3RyaW5nLCBkZXN0aW5hdGlvblVSTFN0cmluZywgaGlzdG9yeURlbGVnYXRlLT51c2VyX2Rh
dGEpOworfQorCitzdGF0aWMgdm9pZCBkaWRQZXJmb3JtU2VydmVyUmVkaXJlY3QoV0tDb250ZXh0
UmVmLCBXS1BhZ2VSZWYgcGFnZSwgV0tVUkxSZWYgc291cmNlVVJMLCBXS1VSTFJlZiBkZXN0aW5h
dGlvblVSTCwgV0tGcmFtZVJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBjb25z
dCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCogaGlzdG9yeURlbGVnYXRlID0gZ2V0RXdrSGlz
dG9yeURlbGVnYXRlKGNsaWVudEluZm8pOworICAgIEFTU0VSVChoaXN0b3J5RGVsZWdhdGUpOwor
CisgICAgaWYgKCFoaXN0b3J5RGVsZWdhdGUtPnNlcnZlcl9yZWRpcmVjdF9mdW5jKQorICAgICAg
ICByZXR1cm47CisKKyAgICBXS0VpbmFTaGFyZWRTdHJpbmcgc291cmNlVVJMU3RyaW5nKHNvdXJj
ZVVSTCk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIGRlc3RpbmF0aW9uVVJMU3RyaW5nKGRlc3Rp
bmF0aW9uVVJMKTsKKworICAgIGhpc3RvcnlEZWxlZ2F0ZS0+c2VydmVyX3JlZGlyZWN0X2Z1bmMo
ZXdrX3ZpZXdfZnJvbV9wYWdlX2dldCh0b0ltcGwocGFnZSkpLCBzb3VyY2VVUkxTdHJpbmcsIGRl
c3RpbmF0aW9uVVJMU3RyaW5nLCBoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3N0
YXRpYyB2b2lkIGRpZFVwZGF0ZUhpc3RvcnlUaXRsZShXS0NvbnRleHRSZWYsIFdLUGFnZVJlZiBw
YWdlLCBXS1N0cmluZ1JlZiB0aXRsZSwgV0tVUkxSZWYgVVJMLCBXS0ZyYW1lUmVmLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNvbnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50
KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tIaXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7Cisg
ICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+
dGl0bGVfdXBkYXRlX2Z1bmMpCisgICAgICAgIHJldHVybjsKKworICAgIFdLRWluYVNoYXJlZFN0
cmluZyB0aXRsZVN0cmluZyh0aXRsZSk7CisgICAgV0tFaW5hU2hhcmVkU3RyaW5nIHN0cmluZ1VS
TChVUkwpOworCisgICAgaGlzdG9yeURlbGVnYXRlLT50aXRsZV91cGRhdGVfZnVuYyhld2tfdmll
d19mcm9tX3BhZ2VfZ2V0KHRvSW1wbChwYWdlKSksIHRpdGxlU3RyaW5nLCBzdHJpbmdVUkwsIGhp
c3RvcnlEZWxlZ2F0ZS0+dXNlcl9kYXRhKTsKK30KKworc3RhdGljIHZvaWQgcG9wdWxhdGVWaXNp
dGVkTGlua3MoV0tDb250ZXh0UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIGNv
bnN0IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50KiBoaXN0b3J5RGVsZWdhdGUgPSBnZXRFd2tI
aXN0b3J5RGVsZWdhdGUoY2xpZW50SW5mbyk7CisgICAgQVNTRVJUKGhpc3RvcnlEZWxlZ2F0ZSk7
CisKKyAgICBpZiAoIWhpc3RvcnlEZWxlZ2F0ZS0+cG9wdWxhdGVfdmlzaXRlZF9saW5rc19mdW5j
KQorICAgICAgICByZXR1cm47CisKKyAgICBoaXN0b3J5RGVsZWdhdGUtPnBvcHVsYXRlX3Zpc2l0
ZWRfbGlua3NfZnVuYyhoaXN0b3J5RGVsZWdhdGUtPnVzZXJfZGF0YSk7Cit9CisKK3ZvaWQgZXdr
X2NvbnRleHRfaGlzdG9yeV9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQor
eworICAgIFdLQ29udGV4dEhpc3RvcnlDbGllbnQgd2tIaXN0b3J5Q2xpZW50OworICAgIG1lbXNl
dCgmd2tIaXN0b3J5Q2xpZW50LCAwLCBzaXplb2YoV0tDb250ZXh0SGlzdG9yeUNsaWVudCkpOwor
CisgICAgd2tIaXN0b3J5Q2xpZW50LnZlcnNpb24gPSBrV0tDb250ZXh0SGlzdG9yeUNsaWVudEN1
cnJlbnRWZXJzaW9uOworICAgIHdrSGlzdG9yeUNsaWVudC5jbGllbnRJbmZvID0gZXdrQ29udGV4
dDsKKworICAgIHdrSGlzdG9yeUNsaWVudC5kaWROYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSA9
IGRpZE5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhOworICAgIHdrSGlzdG9yeUNsaWVudC5kaWRQ
ZXJmb3JtQ2xpZW50UmVkaXJlY3QgPSBkaWRQZXJmb3JtQ2xpZW50UmVkaXJlY3Q7CisgICAgd2tI
aXN0b3J5Q2xpZW50LmRpZFBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCA9IGRpZFBlcmZvcm1TZXJ2ZXJS
ZWRpcmVjdDsKKyAgICB3a0hpc3RvcnlDbGllbnQuZGlkVXBkYXRlSGlzdG9yeVRpdGxlID0gZGlk
VXBkYXRlSGlzdG9yeVRpdGxlOworICAgIHdrSGlzdG9yeUNsaWVudC5wb3B1bGF0ZVZpc2l0ZWRM
aW5rcyA9IHBvcHVsYXRlVmlzaXRlZExpbmtzOworCisgICAgV0tDb250ZXh0U2V0SGlzdG9yeUNs
aWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGV3a0NvbnRleHQpLCAmd2tIaXN0b3J5Q2xp
ZW50KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUxOGNlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfaGlzdG9yeV9jbGll
bnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgZXdrX2NvbnRleHRfaGlzdG9yeV9jbGllbnRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19jb250
ZXh0X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaAorCisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIK
Kworc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudCB7CisgICAgdm9pZCogdXNlcl9k
YXRhOworICAgIEV3a19IaXN0b3J5X05hdmlnYXRpb25fQ2IgbmF2aWdhdGVfZnVuYzsKKyAgICBF
d2tfSGlzdG9yeV9DbGllbnRfUmVkaXJlY3Rpb25fQ2IgY2xpZW50X3JlZGlyZWN0X2Z1bmM7Cisg
ICAgRXdrX0hpc3RvcnlfU2VydmVyX1JlZGlyZWN0aW9uX0NiIHNlcnZlcl9yZWRpcmVjdF9mdW5j
OworICAgIEV3a19IaXN0b3J5X1RpdGxlX1VwZGF0ZV9DYiB0aXRsZV91cGRhdGVfZnVuYzsKKyAg
ICBFd2tfSGlzdG9yeV9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiIHBvcHVsYXRlX3Zpc2l0ZWRf
bGlua3NfZnVuYzsKK307CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dF9IaXN0b3J5X0Ns
aWVudCBFd2tfQ29udGV4dF9IaXN0b3J5X0NsaWVudDsKKwordm9pZCBld2tfY29udGV4dF9oaXN0
b3J5X2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqKTsKKworI2VuZGlmIC8vIGV3a19jb250ZXh0
X2hpc3RvcnlfY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGQxYjY5NWUuLmYyYzMy
MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9wcml2YXRlLmgKQEAgLTI1LDYgKzI1LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9Fd2tf
Q29udGV4dCBFd2tfQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWRfSm9iIEV3
a19Eb3dubG9hZF9Kb2I7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9TY2hlbWVfUmVxdWVzdCBF
d2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0X0hpc3Rv
cnlfQ2xpZW50IEV3a19Db250ZXh0X0hpc3RvcnlfQ2xpZW50OwogCiBXS0NvbnRleHRSZWYgZXdr
X2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCopOwogRXdrX0NvbnRleHQq
IGV3a19jb250ZXh0X25ld19mcm9tX1dLQ29udGV4dChXS0NvbnRleHRSZWYpOwpAQCAtMzUsNCAr
MzYsNiBAQCB2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9hZGQoRXdrX0NvbnRleHQqLCBF
d2tfRG93bmxvYWRfSm9iKik7CiBFd2tfRG93bmxvYWRfSm9iKiBld2tfY29udGV4dF9kb3dubG9h
ZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7CiB2b2lk
IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqLCB1aW50NjRfdCBk
b3dubG9hZElkKTsKIAorY29uc3QgRXdrX0NvbnRleHRfSGlzdG9yeV9DbGllbnQqIGV3a19jb250
ZXh0X2hpc3RvcnlfY2xpZW50X2dldChjb25zdCBFd2tfQ29udGV4dCopOworCiAjZW5kaWYgLy8g
ZXdrX2NvbnRleHRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUzNjdmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9kYXRhLmNwcApAQCAtMCwwICsxLDEx
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
ImV3a19uYXZpZ2F0aW9uX2RhdGEuaCIKKworI2luY2x1ZGUgIldLQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIldLRWluYVNoYXJlZFN0cmluZy5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5j
bHVkZSAiZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ByaXZh
dGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfTmF2aWdhdGlvbl9EYXRhCisg
KiBAYnJpZWYgICBDb250YWlucyB0aGUgbmF2aWdhdGlvbiBkYXRhIGRldGFpbHMuCisgKi8KK3N0
cnVjdCBfRXdrX05hdmlnYXRpb25fRGF0YSB7CisgICAgdW5zaWduZWQgX19yZWY7IC8qKjwgdGhl
IHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgV0tFaW5hU2hhcmVkU3RyaW5n
IHRpdGxlOworICAgIFdLRWluYVNoYXJlZFN0cmluZyB1cmw7CisgICAgRXdrX1VybF9SZXF1ZXN0
KiByZXF1ZXN0OworCisgICAgX0V3a19OYXZpZ2F0aW9uX0RhdGEoV0tOYXZpZ2F0aW9uRGF0YVJl
ZiBkYXRhUmVmKQorICAgICAgICA6IF9fcmVmKDEpCisgICAgICAgICwgdGl0bGUoQWRvcHRXSywg
V0tOYXZpZ2F0aW9uRGF0YUNvcHlUaXRsZShkYXRhUmVmKSkKKyAgICAgICAgLCB1cmwoQWRvcHRX
SywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlVUkwoZGF0YVJlZikpCisgICAgICAgICwgcmVxdWVzdCgw
KQorICAgIHsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiByZXF1ZXN0V0so
QWRvcHRXSywgV0tOYXZpZ2F0aW9uRGF0YUNvcHlPcmlnaW5hbFJlcXVlc3QoZGF0YVJlZikpOwor
ICAgICAgICByZXF1ZXN0ID0gZXdrX3VybF9yZXF1ZXN0X25ldyhyZXF1ZXN0V0suZ2V0KCkpOwor
ICAgIH0KKworICAgIH5fRXdrX05hdmlnYXRpb25fRGF0YSgpCisgICAgeworICAgICAgICBBU1NF
UlQoIV9fcmVmKTsKKyAgICAgICAgZXdrX3VybF9yZXF1ZXN0X3VucmVmKHJlcXVlc3QpOworICAg
IH0KK307CisKK0V3a19OYXZpZ2F0aW9uX0RhdGEqIGV3a19uYXZpZ2F0aW9uX2RhdGFfcmVmKEV3
a19OYXZpZ2F0aW9uX0RhdGEqIGRhdGEpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRhdGEsIDApOworCisgICAgKytkYXRhLT5fX3JlZjsKKworICAgIHJldHVybiBkYXRh
OworfQorCit2b2lkIGV3a19uYXZpZ2F0aW9uX2RhdGFfdW5yZWYoRXdrX05hdmlnYXRpb25fRGF0
YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkYXRhKTsKKworICAg
IGlmICgtLWRhdGEtPl9fcmVmKQorICAgICAgICByZXR1cm47CisKKyAgICBkZWxldGUgZGF0YTsK
K30KKworY29uc3QgY2hhciogZXdrX25hdmlnYXRpb25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdr
X05hdmlnYXRpb25fRGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZGF0YSwgMCk7CisKKyAgICByZXR1cm4gZGF0YS0+dGl0bGU7Cit9CisKK0V3a19Vcmxf
UmVxdWVzdCogZXdrX25hdmlnYXRpb25fZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBF
d2tfTmF2aWdhdGlvbl9EYXRhKiBkYXRhKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkYXRhLCAwKTsKKworICAgIHJldHVybiBkYXRhLT5yZXF1ZXN0OworfQorCitjb25z
dCBjaGFyKiBld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25f
RGF0YSogZGF0YSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZGF0YSwg
MCk7CisKKyAgICByZXR1cm4gZGF0YS0+dXJsOworfQorCitFd2tfTmF2aWdhdGlvbl9EYXRhKiBl
d2tfbmF2aWdhdGlvbl9kYXRhX25ldyhXS05hdmlnYXRpb25EYXRhUmVmIGRhdGFSZWYpCit7Cisg
ICAgQVNTRVJUKGRhdGFSZWYpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
YXRhUmVmLCAwKTsKKworICAgIHJldHVybiBuZXcgRXdrX05hdmlnYXRpb25fRGF0YShkYXRhUmVm
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19u
YXZpZ2F0aW9uX2RhdGEuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19u
YXZpZ2F0aW9uX2RhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTFl
NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX25hdmlnYXRpb25fZGF0YS5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvKioKKyAqIEBmaWxlICAgIGV3a19uYXZpZ2F0aW9uX2RhdGEuaAorICogQGJyaWVmICAg
RGVzY3JpYmVzIHRoZSBFd2sgbmF2aWdhdGlvbiBkYXRhIEFQSS4KKyAqLworCisjaWZuZGVmIGV3
a19uYXZpZ2F0aW9uX2RhdGFfaAorI2RlZmluZSBld2tfbmF2aWdhdGlvbl9kYXRhX2gKKworI2lu
Y2x1ZGUgImV3a191cmxfcmVxdWVzdC5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFt
ZSBmb3IgX0V3a19OYXZpZ2F0aW9uX0RhdGEgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfTmF2aWdh
dGlvbl9EYXRhIEV3a19OYXZpZ2F0aW9uX0RhdGE7CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSBy
ZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0gZGF0YSB0
aGUgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50
CisgKgorICogQHJldHVybiBhIHBvaW50ZXIgdG8gdGhlIG9iamVjdCBvbiBzdWNjZXNzLCBAYyBO
VUxMIG90aGVyd2lzZS4KKyAqLworRUFQSSBFd2tfTmF2aWdhdGlvbl9EYXRhICpld2tfbmF2aWdh
dGlvbl9kYXRhX3JlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKworLyoqCisgKiBEZWNy
ZWFzZXMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBm
cmVlaW5nIGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRo
ZSBvYmplY3QgaXMgZnJlZWQuCisgKgorICogQHBhcmFtIGRhdGEgdGhlIG5hdmlnYXRpb24gZGF0
YSBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQg
ZXdrX25hdmlnYXRpb25fZGF0YV91bnJlZihFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRhKTsKKwor
LyoqCisgKiBSZXR1cm5zIHRpdGxlIGZvciB0aGlzIG5hdmlnYXRpb24gZGF0YS4KKyAqCisgKiBU
aGUgdGl0bGUgb2YgdGhlIG5hdmlnYXRlZCBwYWdlLgorICoKKyAqIEBwYXJhbSBkYXRhIG5hdmln
YXRpb24gZGF0YSBvYmplY3QgdG8gcXVlcnkKKyAqCisgKiBAcmV0dXJuIHRoZSB0aXRsZSBvciBA
YyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFy
YW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAg
ICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAg
ZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkg
b3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX25hdmln
YXRpb25fZGF0YV90aXRsZV9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0YSAqZGF0YSk7CisK
Ky8qKgorICogUmV0dXJucyB0aGUgb3JpZ2luYWwgcmVxdWVzdCBmb3IgdGhpcyBuYXZpZ2F0aW9u
IGRhdGEuCisgKgorICogQHBhcmFtIGRhdGEgbmF2aWdhdGlvbiBkYXRhIG9iamVjdCB0byBxdWVy
eQorICoKKyAqIEByZXR1cm4gVGhlIFVSTCByZXF1ZXN0IHBvaW50ZXIgb3IgQGMgTlVMTCBpbiBj
YXNlIG9mIGVycm9yLgorICovCitFQVBJIEV3a19VcmxfUmVxdWVzdCAqZXdrX25hdmlnYXRpb25f
ZGF0YV9vcmlnaW5hbF9yZXF1ZXN0X2dldChjb25zdCBFd2tfTmF2aWdhdGlvbl9EYXRhICpkYXRh
KTsKKworLyoqCisgKiBSZXR1cm5zIFVSTCBmb3IgdGhpcyBuYXZpZ2F0aW9uIGRhdGEuCisgKgor
ICogVGhlIFVSTCBvZiB0aGUgbmF2aWdhdGVkIHBhZ2UuCisgKgorICogQHBhcmFtIGRhdGEgbmF2
aWdhdGlvbiBkYXRhIG9iamVjdCB0byBxdWVyeQorICoKKyAqIEByZXR1cm4gdGhlIFVSTCBvZiB0
aGUgQGEgZGF0YSBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuIFRoaXMgcG9pbnRlciBpcwor
ICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVy
IHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1
c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkKKyAqLworRUFQSSBjb25zdCBj
aGFyICpld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQoY29uc3QgRXdrX05hdmlnYXRpb25fRGF0
YSAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvLyBl
d2tfbmF2aWdhdGlvbl9kYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX25hdmlnYXRpb25fZGF0YV9wcml2YXRlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMwYzYxNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0
ZS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX25h
dmlnYXRpb25fZGF0YV9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX25hdmlnYXRpb25fZGF0YV9wcml2
YXRlX2gKKworI2luY2x1ZGUgIldLTmF2aWdhdGlvbkRhdGEuaCIKKwordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19OYXZpZ2F0aW9uX0RhdGEgRXdrX05hdmlnYXRpb25fRGF0YTsKKworRXdrX05hdmlnYXRp
b25fRGF0YSogZXdrX25hdmlnYXRpb25fZGF0YV9uZXcoV0tOYXZpZ2F0aW9uRGF0YVJlZiBkYXRh
UmVmKTsKKworI2VuZGlmIC8vIGV3a19uYXZpZ2F0aW9uX2RhdGFfcHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggYzRiNTEyNy4u
ZGJiY2E0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcApAQCAtODIsNiArODIsMzAgQEAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q3Vyc29yU2l6
ZSA9IDE2OwogdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfUmVzb3VyY2UqPiBMb2FkaW5n
UmVzb3VyY2VzTWFwOwogc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfbG9hZGluZ19yZXNvdXJj
ZXNfY2xlYXIoTG9hZGluZ1Jlc291cmNlc01hcCYgbG9hZGluZ1Jlc291cmNlc01hcCk7CiAKK3R5
cGVkZWYgSGFzaE1hcDxjb25zdCBXZWJQYWdlUHJveHkqLCBjb25zdCBFdmFzX09iamVjdCo+IFBh
Z2VWaWV3TWFwOworCitzdGF0aWMgaW5saW5lIFBhZ2VWaWV3TWFwJiBwYWdlVmlld01hcCgpCit7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChQYWdlVmlld01hcCwgbWFwLCAoKSk7CisgICAgcmV0
dXJuIG1hcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFkZFRvUGFnZVZpZXdNYXAoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAgQVNTRVJUKGV3a1ZpZXcpOworICAgIEFTU0VS
VChld2tfdmlld19wYWdlX2dldChld2tWaWV3KSk7CisgICAgUGFnZVZpZXdNYXA6OkFkZFJlc3Vs
dCByZXN1bHQgPSBwYWdlVmlld01hcCgpLmFkZChld2tfdmlld19wYWdlX2dldChld2tWaWV3KSwg
ZXdrVmlldyk7CisgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsK
K30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUZyb21QYWdlVmlld01hcChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKK3sKKyAgICBBU1NFUlQoZXdrVmlldyk7CisgICAgQVNTRVJUKGV3
a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKKyAgICBBU1NFUlQocGFnZVZpZXdNYXAoKS5jb250
YWlucyhld2tfdmlld19wYWdlX2dldChld2tWaWV3KSkpOworICAgIHBhZ2VWaWV3TWFwKCkucmVt
b3ZlKGV3a192aWV3X3BhZ2VfZ2V0KGV3a1ZpZXcpKTsKK30KKwogc3RydWN0IF9Fd2tfVmlld19Q
cml2YXRlX0RhdGEgewogICAgIE93blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKICNp
ZiBVU0UoQ09PUkRJTkFURURfR1JBUEhJQ1MpCkBAIC01MDYsNiArNTMwLDcgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKKyAgICByZW1v
dmVGcm9tUGFnZVZpZXdNYXAoZXdrVmlldyk7CiAgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7CiAgICAgaWYgKHNtYXJ0RGF0YSAmJiBzbWFydERhdGEtPnByaXYpCiAgICAg
ICAgIF9ld2tfdmlld19wcml2X2RlbChzbWFydERhdGEtPnByaXYpOwpAQCAtNzc1LDYgKzgwMCw5
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19pbml0aWFsaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFd2tfQ29udGV4dCogY29udGV4dCwgV0tQCiAgICAgICAgIHByaXYtPnBhZ2VQcm94eSA9IHRv
SW1wbChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnRleHQpKS0+Y3JlYXRlV2ViUGFnZShw
cml2LT5wYWdlQ2xpZW50LmdldCgpLCB0b0ltcGwocGFnZUdyb3VwUmVmKSk7CiAgICAgZWxzZQog
ICAgICAgICBwcml2LT5wYWdlUHJveHkgPSB0b0ltcGwoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dl
dChjb250ZXh0KSktPmNyZWF0ZVdlYlBhZ2UocHJpdi0+cGFnZUNsaWVudC5nZXQoKSwgV2ViUGFn
ZUdyb3VwOjpjcmVhdGUoKS5nZXQoKSk7CisKKyAgICBhZGRUb1BhZ2VWaWV3TWFwKGV3a1ZpZXcp
OworCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNTKQogICAgIHByaXYtPnBhZ2VQcm94eS0+
cGFnZUdyb3VwKCktPnByZWZlcmVuY2VzKCktPnNldEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdFbmFi
bGVkKHRydWUpOwogICAgIHByaXYtPnBhZ2VQcm94eS0+cGFnZUdyb3VwKCktPnByZWZlcmVuY2Vz
KCktPnNldEZvcmNlQ29tcG9zaXRpbmdNb2RlKHRydWUpOwpAQCAtMTU0MSw2ICsxNTY5LDEzIEBA
IHZvaWQgZXdrX3ZpZXdfaW50ZW50X3NlcnZpY2VfcmVnaXN0ZXIoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IEV3a19JbnRlbnRfU2VyCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9JTlRFTlRT
X1RBRykKIAorY29uc3QgRXZhc19PYmplY3QqIGV3a192aWV3X2Zyb21fcGFnZV9nZXQoY29uc3Qg
V2ViS2l0OjpXZWJQYWdlUHJveHkqIHBhZ2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHBhZ2UsIDApOworCisgICAgcmV0dXJuIHBhZ2VWaWV3TWFwKCkuZ2V0KHBhZ2Up
OworfQorCiBXZWJQYWdlUHJveHkqIGV3a192aWV3X3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3X3ByaXZhdGUuaAppbmRleCAwZTQ4MThmLi45ZmUzMDEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC05NCw2
ICs5NCw3IEBAIHZvaWQgZXdrX3ZpZXdfaW50ZW50X3JlcXVlc3RfbmV3KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBjb25zdCBFd2tfSW50ZW50KiBld2tJbnRlCiB2b2lkIGV3a192aWV3X2ludGVudF9z
ZXJ2aWNlX3JlZ2lzdGVyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfSW50ZW50X1Nl
cnZpY2UqIGV3a0ludGVudFNlcnZpY2UpOwogI2VuZGlmCiAKK2NvbnN0IEV2YXNfT2JqZWN0KiBl
d2tfdmlld19mcm9tX3BhZ2VfZ2V0KGNvbnN0IFdlYktpdDo6V2ViUGFnZVByb3h5Kik7CiBXZWJL
aXQ6OldlYlBhZ2VQcm94eSogZXdrX3ZpZXdfcGFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpOwogV2ViQ29yZTo6SW50U2l6ZSBld2tfdmlld19zaXplX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9jb250ZXh0X2hp
c3RvcnlfY2FsbGJhY2tzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
NjBhMTZjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHRfaGlzdG9yeV9jYWxsYmFja3MuY3BwCkBAIC0wLDAg
KzEsMTgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0
VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RV
dGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1
ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNl
IEVXSzJVbml0VGVzdDsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9u
bWVudDsKKworc3RhdGljIGNvbnN0IGNoYXIgZGVmYXVsdFRpdGxlW10gPSAiRGVmYXVsdCBUZXN0
aW5nIFdlYiBQYWdlIjsKKworc3RhdGljIGNvbnN0IGNoYXIgdG9CZVJlZGlyZWN0ZWRQYXRoW10g
PSAiL3NvbWVfcGFnZV90b19iZV9yZWRpcmVjdGVkIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJlZGly
ZWN0aW9uVGFyZ2V0UGF0aFtdID0gIi9yZWRpcmVjdGlvbl90YXJnZXQiOworCitzdGF0aWMgRVdL
MlVuaXRUZXN0U2VydmVyKiBodHRwU2VydmVyKCkKK3sKKyAgICBzdGF0aWMgRVdLMlVuaXRUZXN0
U2VydmVyKiBzZXJ2ZXIgPSAwOworCisgICAgaWYgKCFzZXJ2ZXIpCisgICAgICAgIHNlcnZlciA9
IG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXI7CisKKyAgICByZXR1cm4gc2VydmVyOworfQorCisjZGVm
aW5lIERFQ0xBUkVfSU5WT0tFX0ZMQUcoZnVuY3Rpb25OYW1lKSBcCisgICAgc3RhdGljIGJvb2wg
ZnVuY3Rpb25OYW1lIyNJbnZva2VkID0gZmFsc2U7CisKKyNkZWZpbmUgV0FTX0lOVk9LRUQoZnVu
Y3Rpb25OYW1lKSBcCisgICAgaWYgKGZ1bmN0aW9uTmFtZSMjSW52b2tlZCkgICAgXAorICAgICAg
ICByZXR1cm47ICAgICAgICAgICAgICAgICAgIFwKKyAgICBmdW5jdGlvbk5hbWUjI0ludm9rZWQg
PSB0cnVlCisKKyNkZWZpbmUgQ0hFQ0tfV0FTX0lOVk9LRUQoZnVuY3Rpb25OYW1lKSBcCisgICAg
QVNTRVJUX1RSVUUoZnVuY3Rpb25OYW1lIyNJbnZva2VkKQorCitERUNMQVJFX0lOVk9LRV9GTEFH
KG5hdmlnYXRlV2l0aE5hdmlnYXRpb25EYXRhKQorREVDTEFSRV9JTlZPS0VfRkxBRyhwZXJmb3Jt
Q2xpZW50UmVkaXJlY3QpCitERUNMQVJFX0lOVk9LRV9GTEFHKHBlcmZvcm1TZXJ2ZXJSZWRpcmVj
dCkKK0RFQ0xBUkVfSU5WT0tFX0ZMQUcodXBkYXRlSGlzdG9yeVRpdGxlKQorREVDTEFSRV9JTlZP
S0VfRkxBRyhwb3B1bGF0ZVZpc2l0ZWRMaW5rcykKKworc3RhdGljIHZvaWQgbmF2aWdhdGVXaXRo
TmF2aWdhdGlvbkRhdGEoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIEV3a19OYXZpZ2F0aW9uX0Rh
dGEqIG5hdmlnYXRpb25EYXRhLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRChu
YXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0YSk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0
VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNT
RVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygpLCB2
aWV3KTsKKyAgICAvLyBGSVhNRTogV2ViRnJhbWVMb2FkZXJDbGllbnQgc2VuZHMgZW1wdHkgdGl0
bGUuCisgICAgLy8gQVNTRVJUX1NUUkVRKGRlZmF1bHRUaXRsZSwgZXdrX25hdmlnYXRpb25fZGF0
YV90aXRsZV9nZXQobmF2aWdhdGlvbkRhdGEpKTsKKyAgICBBU1NFUlRfU1RSRVEoZW52aXJvbm1l
bnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpLCBld2tfbmF2aWdhdGlvbl9kYXRhX3VybF9nZXQobmF2
aWdhdGlvbkRhdGEpKTsKKworICAgIEV3a19VcmxfUmVxdWVzdCogcmVxdWVzdCA9IGV3a19uYXZp
Z2F0aW9uX2RhdGFfb3JpZ2luYWxfcmVxdWVzdF9nZXQobmF2aWdhdGlvbkRhdGEpOworICAgIEFT
U0VSVF9TVFJFUSgiR0VUIiwgZXdrX3VybF9yZXF1ZXN0X2h0dHBfbWV0aG9kX2dldChyZXF1ZXN0
KSk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwoKSwg
ZXdrX3VybF9yZXF1ZXN0X3VybF9nZXQocmVxdWVzdCkpOworICAgIEFTU0VSVF9FUSgwLCBld2tf
cmVxdWVzdF9jb29raWVzX2ZpcnN0X3BhcnR5X2dldChyZXF1ZXN0KSk7Cit9CisKK3N0YXRpYyB2
b2lkIHBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBFdmFzX09iamVjdCogdmlldywgY29uc3Qg
Y2hhciogc291cmNlVXJsLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvblVybCwgdm9pZCogdXNlckRh
dGEpCit7CisgICAgV0FTX0lOVk9LRUQocGVyZm9ybUNsaWVudFJlZGlyZWN0KTsKKworICAgIEVX
SzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVuaXRUZXN0QmFzZSo+
KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7CisgICAgQVNTRVJUX0VRKHVu
aXRUZXN0LT53ZWJWaWV3KCksIHZpZXcpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+
dXJsRm9yUmVzb3VyY2UoInJlZGlyZWN0X3VybF90b19kZWZhdWx0Lmh0bWwiKS5kYXRhKCksIHNv
dXJjZVVybCk7CisgICAgQVNTRVJUX1NUUkVRKGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VV
cmwoKSwgZGVzdGluYXRpb25VcmwpOworfQorCitzdGF0aWMgdm9pZCBwZXJmb3JtU2VydmVyUmVk
aXJlY3QoY29uc3QgRXZhc19PYmplY3QqIHZpZXcsIGNvbnN0IGNoYXIqIHNvdXJjZVVybCwgY29u
c3QgY2hhciogZGVzdGluYXRpb25VcmwsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZP
S0VEKHBlcmZvcm1TZXJ2ZXJSZWRpcmVjdCk7CisKKyAgICBFV0syVW5pdFRlc3RCYXNlKiB1bml0
VGVzdCA9IHN0YXRpY19jYXN0PEVXSzJVbml0VGVzdEJhc2UqPih1c2VyRGF0YSk7CisgICAgQVNT
RVJUX1RSVUUodW5pdFRlc3QpOworICAgIEFTU0VSVF9FUSh1bml0VGVzdC0+d2ViVmlldygpLCB2
aWV3KTsKKyAgICBBU1NFUlRfU1RSRVEoaHR0cFNlcnZlcigpLT5nZXRVUkxGb3JQYXRoKHRvQmVS
ZWRpcmVjdGVkUGF0aCkuZGF0YSgpLCBzb3VyY2VVcmwpOworICAgIEFTU0VSVF9TVFJFUShodHRw
U2VydmVyKCktPmdldFVSTEZvclBhdGgocmVkaXJlY3Rpb25UYXJnZXRQYXRoKS5kYXRhKCksIGRl
c3RpbmF0aW9uVXJsKTsKK30KKworc3RhdGljIHZvaWQgdXBkYXRlSGlzdG9yeVRpdGxlKGNvbnN0
IEV2YXNfT2JqZWN0KiB2aWV3LCBjb25zdCBjaGFyKiB0aXRsZSwgY29uc3QgY2hhciogdXJsLCB2
b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBXQVNfSU5WT0tFRCh1cGRhdGVIaXN0b3J5VGl0bGUpOwor
CisgICAgRVdLMlVuaXRUZXN0QmFzZSogdW5pdFRlc3QgPSBzdGF0aWNfY2FzdDxFV0syVW5pdFRl
c3RCYXNlKj4odXNlckRhdGEpOworICAgIEFTU0VSVF9UUlVFKHVuaXRUZXN0KTsKKyAgICBBU1NF
UlRfRVEodW5pdFRlc3QtPndlYlZpZXcoKSwgdmlldyk7CisgICAgQVNTRVJUX1NUUkVRKGRlZmF1
bHRUaXRsZSwgdGl0bGUpOworICAgIEFTU0VSVF9TVFJFUShlbnZpcm9ubWVudC0+ZGVmYXVsdFRl
c3RQYWdlVXJsKCksIHVybCk7Cit9CisKK3N0YXRpYyB2b2lkIHBvcHVsYXRlVmlzaXRlZExpbmtz
KHZvaWQqIHVzZXJEYXRhKQoreworICAgIFdBU19JTlZPS0VEKHBvcHVsYXRlVmlzaXRlZExpbmtz
KTsKKworICAgIEVXSzJVbml0VGVzdEJhc2UqIHVuaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RVdLMlVu
aXRUZXN0QmFzZSo+KHVzZXJEYXRhKTsKKyAgICBBU1NFUlRfVFJVRSh1bml0VGVzdCk7Cit9CisK
K3N0YXRpYyB2b2lkIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24odm9pZCogdXNlckRhdGEs
IEV2YXNfT2JqZWN0Kiwgdm9pZCopCit7CisgICAgaW50KiBjb3VudExvYWRGaW5pc2hlZCA9IHN0
YXRpY19jYXN0PGludCo+KHVzZXJEYXRhKTsKKyAgICAtLSgqY291bnRMb2FkRmluaXNoZWQpOwor
fQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFja1JlZGlyZWN0aW9uKFNvdXBTZXJ2ZXIqLCBT
b3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBD
bGllbnRDb250ZXh0KiwgZ3BvaW50ZXIpCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBT
T1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChzdHJjbXAocGF0aCwgcmVkaXJlY3Rpb25UYXJnZXRQYXRoKSkgeyAvLyBSZWRp
cmVjdCBpZiAncGF0aCcgaXMgbm90IGVxdWFsIHRvICdyZWRpcmVjdGlvblRhcmdldFBhdGgnLgor
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19URU1Q
T1JBUllfUkVESVJFQ1QpOworICAgICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkxvY2F0aW9uIiwgaHR0cFNlcnZlcigpLT5nZXRVUkxG
b3JQYXRoKHJlZGlyZWN0aW9uVGFyZ2V0UGF0aCkuZGF0YSgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVT
X09LKTsKKyAgICBFaW5hX1N0cmJ1ZiogYm9keSA9IGVpbmFfc3RyYnVmX25ldygpOworICAgIGVp
bmFfc3RyYnVmX2FwcGVuZF9wcmludGYoYm9keSwgIjxodG1sPjx0aXRsZT5SZWRpcmVjdGlvbiBU
YXJnZXQ8L3RpdGxlPjwvaHRtbD4iKTsKKyAgICBjb25zdCBzaXplX3QgYm9keUxlbmd0aCA9IGVp
bmFfc3RyYnVmX2xlbmd0aF9nZXQoYm9keSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5k
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGVpbmFfc3RyYnVmX3N0
cmluZ19zdGVhbChib2R5KSwgYm9keUxlbmd0aCk7CisgICAgZWluYV9zdHJidWZfZnJlZShib2R5
KTsKKworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2Jv
ZHkpOworfQorCitURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2NvbnRleHRfaGlzdG9yeV9j
YWxsYmFja3Nfc2V0KQoreworICAgIGV3a19jb250ZXh0X2hpc3RvcnlfY2FsbGJhY2tzX3NldChl
d2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpLCBuYXZpZ2F0ZVdpdGhOYXZpZ2F0aW9uRGF0
YSwgcGVyZm9ybUNsaWVudFJlZGlyZWN0LCBwZXJmb3JtU2VydmVyUmVkaXJlY3QsIHVwZGF0ZUhp
c3RvcnlUaXRsZSwgcG9wdWxhdGVWaXNpdGVkTGlua3MsIHRoaXMpOworCisgICAgLy8gVGVzdCBu
YXZpZ2F0aW9uLgorICAgIEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGVudmlyb25tZW50LT5kZWZh
dWx0VGVzdFBhZ2VVcmwoKSkpOworICAgIENIRUNLX1dBU19JTlZPS0VEKG5hdmlnYXRlV2l0aE5h
dmlnYXRpb25EYXRhKTsKKyAgICBDSEVDS19XQVNfSU5WT0tFRCh1cGRhdGVIaXN0b3J5VGl0bGUp
OworICAgIENIRUNLX1dBU19JTlZPS0VEKHBvcHVsYXRlVmlzaXRlZExpbmtzKTsKKworICAgIC8v
IFRlc3QgY2xpZW50IHJlZGlyZWN0LgorICAgIGludCBjb3VudExvYWRGaW5pc2hlZCA9IDI7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImxvYWQsZmluaXNo
ZWQiLCBvbkxvYWRGaW5pc2hlZEZvclJlZGlyZWN0aW9uLCAmY291bnRMb2FkRmluaXNoZWQpOwor
ICAgIGV3a192aWV3X3VybF9zZXQod2ViVmlldygpLCBlbnZpcm9ubWVudC0+dXJsRm9yUmVzb3Vy
Y2UoInJlZGlyZWN0X3VybF90b19kZWZhdWx0Lmh0bWwiKS5kYXRhKCkpOworICAgIHdoaWxlIChj
b3VudExvYWRGaW5pc2hlZCkKKyAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAibG9hZCxmaW5pc2hl
ZCIsIG9uTG9hZEZpbmlzaGVkRm9yUmVkaXJlY3Rpb24pOworICAgIENIRUNLX1dBU19JTlZPS0VE
KHBlcmZvcm1DbGllbnRSZWRpcmVjdCk7CisKKyAgICAvLyBUZXN0IHNlcnZlciByZWRpcmVjdC4K
KyAgICBodHRwU2VydmVyKCktPnJ1bihzZXJ2ZXJDYWxsYmFja1JlZGlyZWN0aW9uKTsKKworICAg
IEFTU0VSVF9UUlVFKGxvYWRVcmxTeW5jKGh0dHBTZXJ2ZXIoKS0+Z2V0VVJMRm9yUGF0aCh0b0Jl
UmVkaXJlY3RlZFBhdGgpLmRhdGEoKSkpOworICAgIENIRUNLX1dBU19JTlZPS0VEKHBlcmZvcm1T
ZXJ2ZXJSZWRpcmVjdCk7Cit9CisK
</data>

          </attachment>
      

    </bug>

</bugzilla>