<?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>108598</bug_id>
          
          <creation_ts>2013-02-01 01:44:32 -0800</creation_ts>
          <short_desc>[EFL][WK2] Refactor Ewk_Favicon code and stop relying on internal C++ API</short_desc>
          <delta_ts>2013-02-18 03:26:22 -0800</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>
          
          <blocked>107657</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>benjamin</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>mikhail.pozdnyakov</cc>
    
    <cc>rakuco</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>822494</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 01:44:32 -0800</bug_when>
    <thetext>The Ewk_Favicon code still relies on internal C++ API that has no C API equivalent. We likely need to refactor the code to stop relying on this internal API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822532</commentid>
    <comment_count>1</comment_count>
      <attachid>185989</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 02:21:38 -0800</bug_when>
    <thetext>Created attachment 185989
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822599</commentid>
    <comment_count>2</comment_count>
      <attachid>185989</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-01 04:09:44 -0800</bug_when>
    <thetext>Comment on attachment 185989
Patch

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

LGTM, but changelog could be improved

&gt; Source/WebKit2/ChangeLog:9
&gt; +        Refactor the Ewk_Favicon code so that it no longer relies on internal
&gt; +        C++ API and so that it is based solely on the C API.

Here you say it is a refactor, but below you detail behavior changes. I would add that here as well, which leads me to the question, how is this tested?

&gt; Source/WebKit2/ChangeLog:21
&gt; +        * UIProcess/API/efl/ewk_favicon_database.cpp: Client are now notified
&gt; +        of favicon changes only when the favicon data becomes available and
&gt; +        make API to retrieve a favicon synchronous. NULL is returned if the
&gt; +        favicon data is not available.

Not a needed change, but I prefer some spacing here... that makes it easier to read using the review tool

&gt; Source/WebKit2/ChangeLog:36
&gt; +        * UIProcess/API/efl/tests/test_ewk2_favicon_database.cpp: Update API
&gt; +        tests to use the new favicon API.

You should detail the testing further up. Before all the details

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:896
&gt; +    smartCallback&lt;FaviconChanged&gt;().call();
&gt; +}
&gt; +
&gt; +Evas_Object* EwkView::createFavicon() const
&gt; +{

why is the above informURLChange not const?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:111
&gt; +Evas_Object* ewk_favicon_database_icon_get(Ewk_Favicon_Database* ewkIconDatabase, const char* page_url, Evas* evas)

why the inconsistency? page_url vs ewkIconDatabase

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:122
&gt; -    return true;
&gt; +    return WebCore::evasObjectFromCairoImageSurface(evas, surface.get()).leakRef();
&gt;  }

it is a get method but it needs to be freed. Is this documented?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h:57
&gt; + * The returned Evas_Object needs to be freed after use.

apparently :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822607</commentid>
    <comment_count>3</comment_count>
      <attachid>185989</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 04:17:11 -0800</bug_when>
    <thetext>Comment on attachment 185989
Patch

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

&gt;&gt; Source/WebKit2/ChangeLog:21
&gt;&gt; +        favicon data is not available.
&gt; 
&gt; Not a needed change, but I prefer some spacing here... that makes it easier to read using the review tool

Ok.

&gt;&gt; Source/WebKit2/ChangeLog:36
&gt;&gt; +        tests to use the new favicon API.
&gt; 
&gt; You should detail the testing further up. Before all the details

Ok will do.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:896
&gt;&gt; +{
&gt; 
&gt; why is the above informURLChange not const?

You are right, it can probably be const now. I&apos;ll update.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:111
&gt;&gt; +Evas_Object* ewk_favicon_database_icon_get(Ewk_Favicon_Database* ewkIconDatabase, const char* page_url, Evas* evas)
&gt; 
&gt; why the inconsistency? page_url vs ewkIconDatabase

Right, my bad. Should be pageURL in the implementation.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.cpp:122
&gt;&gt;  }
&gt; 
&gt; it is a get method but it needs to be freed. Is this documented?

Yes, I updated the doc. Unfortunately, we don&apos;t seem to have a naming convention to distinguish those cases, we rely solely on the doc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822646</commentid>
    <comment_count>4</comment_count>
      <attachid>185989</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 05:06:37 -0800</bug_when>
    <thetext>Comment on attachment 185989
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:895
&gt; +Evas_Object* EwkView::createFavicon() const

mmm.. const method returning mutable pointer?

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:131
&gt; +    Evas_Object* createFavicon() const;

either const Evas_Object* or non const member</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822648</commentid>
    <comment_count>5</comment_count>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-01 05:09:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 185989 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185989&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:895
&gt; &gt; +Evas_Object* EwkView::createFavicon() const
&gt; 
&gt; mmm.. const method returning mutable pointer?
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/EwkView.h:131
&gt; &gt; +    Evas_Object* createFavicon() const;
&gt; 
&gt; either const Evas_Object* or non const member

oops, it&apos;s not returning a member, so I think it&apos;s OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822661</commentid>
    <comment_count>6</comment_count>
      <attachid>185989</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 05:20:51 -0800</bug_when>
    <thetext>Comment on attachment 185989
Patch

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

&gt;&gt;&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:896
&gt;&gt;&gt; +{
&gt;&gt; 
&gt;&gt; why is the above informURLChange not const?
&gt; 
&gt; You are right, it can probably be const now. I&apos;ll update.

informURLChange() is not const because it updates m_url member which is not mutable. We could mark m_url as mutable but since there is not strictly related to my change I would prefer not to do this in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822665</commentid>
    <comment_count>7</comment_count>
      <attachid>185989</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 05:27:53 -0800</bug_when>
    <thetext>Comment on attachment 185989
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:383
&gt; +EAPI Evas_Object *ewk_view_favicon_get(const Evas_Object *o);

I propose to rename this one to ewk_view_favicon_new(const Evas_Object *o) so that memory management is clear to the caller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822723</commentid>
    <comment_count>8</comment_count>
      <attachid>186033</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 06:42:25 -0800</bug_when>
    <thetext>Created attachment 186033
Patch

Take Kenneth&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823260</commentid>
    <comment_count>9</comment_count>
      <attachid>186033</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-01 14:19:54 -0800</bug_when>
    <thetext>Comment on attachment 186033
Patch

Attachment 186033 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16333096</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823576</commentid>
    <comment_count>10</comment_count>
      <attachid>186033</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-01 23:47:56 -0800</bug_when>
    <thetext>Comment on attachment 186033
Patch

It seems win-ews is in a bad state. The warning seems unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830000</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-11 12:47:23 -0800</bug_when>
    <thetext>Could I get (informal) review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830837</commentid>
    <comment_count>12</comment_count>
      <attachid>186033</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-12 05:47:44 -0800</bug_when>
    <thetext>Comment on attachment 186033
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:580
&gt; +Evas_Object* ewk_view_favicon_new(const Evas_Object *ewkView)

pointer star alignment? inconsistent in this line

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:52
&gt; + * - &quot;favicon,changed&quot;, void: reports that the view&apos;s favicon has changed. The favicon can be queried using
&gt; + *   ewk_view_favicon_new().

I would split that line a bit before

&gt; Tools/MiniBrowser/efl/main.c:569
&gt; +    Evas_Object* favicon = ewk_view_favicon_new(ewk_view);
&gt; +    update_view_favicon(window, favicon);
&gt; +
&gt; +    if (favicon)
&gt; +        evas_object_unref(favicon);

so if it can be null does calling update_view_favicon make sense? is it safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830847</commentid>
    <comment_count>13</comment_count>
      <attachid>186033</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-12 05:53:04 -0800</bug_when>
    <thetext>Comment on attachment 186033
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:580
&gt;&gt; +Evas_Object* ewk_view_favicon_new(const Evas_Object *ewkView)
&gt; 
&gt; pointer star alignment? inconsistent in this line

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:52
&gt;&gt; + *   ewk_view_favicon_new().
&gt; 
&gt; I would split that line a bit before

OK.

&gt;&gt; Tools/MiniBrowser/efl/main.c:569
&gt;&gt; +        evas_object_unref(favicon);
&gt; 
&gt; so if it can be null does calling update_view_favicon make sense? is it safe?

Yes, it is safe and it is needed to make sure the previous favicon actually gets removed. Otherwise, you may move from a page that has a favicon, to a page that doesn&apos;t have one and still display the previous page&apos;s favicon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830937</commentid>
    <comment_count>14</comment_count>
      <attachid>187865</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-12 07:38:40 -0800</bug_when>
    <thetext>Created attachment 187865
Patch

Take kenneth&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830944</commentid>
    <comment_count>15</comment_count>
      <attachid>187865</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-12 07:51:15 -0800</bug_when>
    <thetext>Comment on attachment 187865
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830968</commentid>
    <comment_count>16</comment_count>
      <attachid>187865</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-12 08:31:11 -0800</bug_when>
    <thetext>Comment on attachment 187865
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:-758
&gt; -void EwkView::informIconChange()

nice that we don&apos;t have this method anymore

&gt; Source/WebKit2/UIProcess/API/efl/EwkView.cpp:1021
&gt; +    return ewk_favicon_database_icon_get(iconDatabase, m_url, sd-&gt;base.evas);

smartData()-&gt;base.evas

It&apos;s looks a bit weird to have &quot;ewk_favicon_database_icon_get&quot; in &quot;create&quot; function..are you sure the naming is fully OK?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831196</commentid>
    <comment_count>17</comment_count>
      <attachid>187919</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-12 13:24:45 -0800</bug_when>
    <thetext>Created attachment 187919
Patch

Take Mikhail&apos;s feedback into consideration. Note that I renamed ewk_view_favicon_new() to ewk_view_favicon_get() since it seems to be according to EFL style and it is documented that the returned value needs to be freed. Also, it is consistent with ewk_favicon_database_icon_get().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831720</commentid>
    <comment_count>18</comment_count>
      <attachid>187919</attachid>
    <who name="Mikhail Pozdnyakov">mikhail.pozdnyakov</who>
    <bug_when>2013-02-13 01:26:05 -0800</bug_when>
    <thetext>Comment on attachment 187919
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832125</commentid>
    <comment_count>19</comment_count>
      <attachid>188136</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 11:47:18 -0800</bug_when>
    <thetext>Created attachment 188136
Patch

Rebase on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832774</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-13 23:55:25 -0800</bug_when>
    <thetext>Brady, could you please take a look at this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834387</commentid>
    <comment_count>21</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-02-15 14:44:27 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Brady, could you please take a look at this patch?

It&apos;s 100% efl/ewk stuff, not sure I feel qualified to make any judgements.

Looks fine, without having a deep understanding of how EFL works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834389</commentid>
    <comment_count>22</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-02-15 14:45:24 -0800</bug_when>
    <thetext>This is fine for another reviewer to take a look at.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834399</commentid>
    <comment_count>23</comment_count>
      <attachid>188648</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 14:56:13 -0800</bug_when>
    <thetext>Created attachment 188648
Patch

Rebase on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834698</commentid>
    <comment_count>24</comment_count>
      <attachid>188648</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-16 04:38:29 -0800</bug_when>
    <thetext>Comment on attachment 188648
Patch

Kenneth, could you please review it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834993</commentid>
    <comment_count>25</comment_count>
      <attachid>188648</attachid>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2013-02-17 08:36:25 -0800</bug_when>
    <thetext>Comment on attachment 188648
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h:51
&gt;   * Retrieves asynchronously from the database the favicon for the given @a page_url

Should this be synchronous instead ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835003</commentid>
    <comment_count>26</comment_count>
      <attachid>188648</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-17 10:47:32 -0800</bug_when>
    <thetext>Comment on attachment 188648
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_favicon_database.h:51
&gt;&gt;   * Retrieves asynchronously from the database the favicon for the given @a page_url
&gt; 
&gt; Should this be synchronous instead ?

Right, good catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835004</commentid>
    <comment_count>27</comment_count>
      <attachid>188768</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-17 10:48:10 -0800</bug_when>
    <thetext>Created attachment 188768
Patch

Take Laszlo&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835272</commentid>
    <comment_count>28</comment_count>
      <attachid>188768</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2013-02-18 02:46:01 -0800</bug_when>
    <thetext>Comment on attachment 188768
Patch

r=me as signed off by Brady</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835300</commentid>
    <comment_count>29</comment_count>
      <attachid>188768</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 03:26:16 -0800</bug_when>
    <thetext>Comment on attachment 188768
Patch

Clearing flags on attachment: 188768

Committed r143190: &lt;http://trac.webkit.org/changeset/143190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835301</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-18 03:26:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185989</attachid>
            <date>2013-02-01 02:21:38 -0800</date>
            <delta_ts>2013-02-01 06:42:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>29004</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA0NTM3ZGY4Li42MjE0ZjcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxkY2hyaXNAZ21haWwuY29tPgorCisg
ICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQgc3RvcCByZWx5
aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNvIHRoYXQgaXQg
bm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFuZCBzbyB0aGF0
IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSk6
CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAgICAgICAgKEV3a1ZpZXc6Om9u
RmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaDoK
KyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdD
YWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRh
YmFzZS5jcHA6IENsaWVudCBhcmUgbm93IG5vdGlmaWVkCisgICAgICAgIG9mIGZhdmljb24gY2hh
bmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YSBiZWNvbWVzIGF2YWlsYWJsZSBhbmQKKyAg
ICAgICAgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5bmNocm9ub3VzLiBOVUxMIGlz
IHJldHVybmVkIGlmIHRoZQorICAgICAgICBmYXZpY29uIGRhdGEgaXMgbm90IGF2YWlsYWJsZS4K
KyAgICAgICAgKEV3a0Zhdmljb25EYXRhYmFzZTo6RXdrRmF2aWNvbkRhdGFiYXNlKToKKyAgICAg
ICAgKEV3a0Zhdmljb25EYXRhYmFzZTo6Z2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KToKKyAg
ICAgICAgKEV3a0Zhdmljb25EYXRhYmFzZTo6aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwpOgorICAg
ICAgICAoZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oOgorICAgICAgICAoRXdrRmF2aWNv
bkRhdGFiYXNlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6Cisg
ICAgICAgIChld2tfdmlld19mYXZpY29uX2dldCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaDogUmVuYW1lICdpY29uLGNoYW5nZWQnIHNpZ25hbCB0bworICAgICAgICAn
ZmF2aWNvbixjaGFuZ2VkJyBmb3IgY2xhcml0eSBhbmQgY29uc2lzdGVuY3kgd2l0aCB0aGUgcmVz
dCBvZiB0aGUKKyAgICAgICAgZmF2aWNvbiBBUEkuIFJlbW92ZSBBUEkgdG8gcmV0cmlldmUgdGhl
IGZhdmljb24gVVJMIGFuZCByZXBsYWNlIGl0IGJ5CisgICAgICAgIG9uZSB0byByZXRyaWV2ZSB0
aGUgZmF2aWNvbiBpbWFnZSBhcyBhbiBFdmFzX09iamVjdCBpbnN0ZWFkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcDogVXBk
YXRlIEFQSQorICAgICAgICB0ZXN0cyB0byB1c2UgdGhlIG5ldyBmYXZpY29uIEFQSS4KKyAgICAg
ICAgKHJlcXVlc3RGYXZpY29uRGF0YSk6CisgICAgICAgIChURVNUX0YpOgorCiAyMDEzLTAxLTMx
ICBSYWZhZWwgQnJhbmRhbyAgPHJhZmFlbC5sb2JvQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAg
W1F0XVtXSzJdIEFub3RoZXIgYXR0ZW1wdCB0byBmaXggYnVpbGQgYWZ0ZXIgcmVjZW50IFdlYktp
dDIgY2hhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNw
cAppbmRleCA1YmI0NDY0Li5lZTg3YzA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtNjIwLDIzICs2MjAsNiBAQCB2b2lkIEV3a1ZpZXc6OnNl
dFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQpCiB9CiAjZW5kaWYKIAotLyoqCi0gKiBA
aW50ZXJuYWwKLSAqIFVwZGF0ZSB0aGUgdmlldydzIGZhdmljb24gYW5kIGVtaXRzIGEgImljb24s
Y2hhbmdlZCIgc2lnbmFsIGlmIGl0IGhhcwotICogY2hhbmdlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0
aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgVVJMIGhhcyBjaGFuZ2VkIG9yIHdoZW4gdGhlIGlj
b24gZm9yCi0gKiB0aGUgY3VycmVudCBwYWdlIFVSTCBoYXMgY2hhbmdlZC4KLSAqLwotdm9pZCBF
d2tWaWV3OjppbmZvcm1JY29uQ2hhbmdlKCkKLXsKLSAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGlj
b25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7Ci0gICAgQVNTRVJUKGlj
b25EYXRhYmFzZSk7Ci0KLSAgICBtX2Zhdmljb25VUkwgPSBld2tfZmF2aWNvbl9kYXRhYmFzZV9p
Y29uX3VybF9nZXQoaWNvbkRhdGFiYXNlLCBtX3VybCk7Ci0gICAgc21hcnRDYWxsYmFjazxJY29u
Q2hhbmdlZD4oKS5jYWxsKCk7Ci19Ci0KICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CiBib29sIEV3a1ZpZXc6OmNyZWF0ZUdMU3VyZmFjZShjb25zdCBJbnRTaXplJiB2aWV3U2l6ZSkK
IHsKQEAgLTkwNiw3ICs4ODksMTYgQEAgdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQog
ICAgIHNtYXJ0Q2FsbGJhY2s8VVJMQ2hhbmdlZD4oKS5jYWxsKG1fdXJsKTsKIAogICAgIC8vIFVw
ZGF0ZSB0aGUgdmlldydzIGZhdmljb24uCi0gICAgaW5mb3JtSWNvbkNoYW5nZSgpOworICAgIHNt
YXJ0Q2FsbGJhY2s8RmF2aWNvbkNoYW5nZWQ+KCkuY2FsbCgpOworfQorCitFdmFzX09iamVjdCog
RXdrVmlldzo6Y3JlYXRlRmF2aWNvbigpIGNvbnN0Cit7CisgICAgRXdrRmF2aWNvbkRhdGFiYXNl
KiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOworICAgIEFTU0VS
VChpY29uRGF0YWJhc2UpOworCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzbWFydERh
dGEoKTsKKyAgICByZXR1cm4gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQoaWNvbkRhdGFi
YXNlLCBtX3VybCwgc2QtPmJhc2UuZXZhcyk7CiB9CiAKIEV3a1dpbmRvd0ZlYXR1cmVzKiBFd2tW
aWV3Ojp3aW5kb3dGZWF0dXJlcygpCkBAIC0xMDI4LDcgKzEwMjAsNyBAQCB2b2lkIEV3a1ZpZXc6
Om9uRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKQog
ICAgIGlmICghdmlldy0+dXJsKCkgfHwgc3RyY2FzZWNtcCh2aWV3LT51cmwoKSwgcGFnZVVSTCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHZpZXctPmluZm9ybUljb25DaGFuZ2UoKTsKKyAgICB2
aWV3LT5zbWFydENhbGxiYWNrPEZhdmljb25DaGFuZ2VkPigpLmNhbGwoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggMzdhOGQxYi4uNzEyNDQ3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMTI4LDcg
KzEyOCw3IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3Jt
VG9TY3JlZW4oKSBjb25zdDsKIAogICAgIGNvbnN0IGNoYXIqIHVybCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJsOyB9Ci0gICAgY29uc3QgY2hhciogZmF2aWNvblVSTCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmF2aWNvblVSTDsgfQorICAgIEV2YXNfT2JqZWN0KiBjcmVhdGVGYXZpY29uKCkgY29uc3Q7CiAg
ICAgY29uc3QgY2hhciogdGl0bGUoKSBjb25zdDsKICAgICBXZWJLaXQ6OklucHV0TWV0aG9kQ29u
dGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0KCk7CiAKQEAgLTIyMiw4ICsyMjIsNiBAQCBwcml2
YXRlOgogICAgIFdlYktpdDo6TGF5ZXJUcmVlUmVuZGVyZXIqIGxheWVyVHJlZVJlbmRlcmVyKCk7
CiAjZW5kaWYKIAotICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwotCiAgICAgc3RhdGljIHZv
aWQgb25Nb3VzZURvd24odm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZl
bnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBvbk1vdXNlVXAodm9pZCogZGF0YSwgRXZhcyosIEV2
YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBvbk1vdXNlTW92
ZSh2b2lkKiBkYXRhLCBFdmFzKiwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pOwpAQCAt
MjYzLDcgKzI2MSw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEV3a1NldHRpbmdzPiBtX3NldHRp
bmdzOwogICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsKICAg
ICBjb25zdCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywg
ZG8gbm90IGZyZWUgaXQuCi0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2aWNvblVSTDsKICAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgbV91cmw7CiAgICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJp
bmcgbV90aXRsZTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV90aGVtZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAppbmRleCAw
ZTc2M2EzLi4wMGQwZDM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCkBAIC01Niw3ICs1Niw3IEBAIGVudW0gQ2FsbGJhY2tU
eXBlIHsKICAgICBEb3dubG9hZEpvYlJlcXVlc3RlZCwKICAgICBGaWxlQ2hvb3NlclJlcXVlc3Qs
CiAgICAgTmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LAotICAgIEljb25DaGFuZ2VkLAorICAgIEZh
dmljb25DaGFuZ2VkLAogICAgIExvYWRFcnJvciwKICAgICBMb2FkRmluaXNoZWQsCiAgICAgTG9h
ZFByb2dyZXNzLApAQCAtMTY2LDcgKzE2Niw3IEBAIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
RG93bmxvYWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkCiBE
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iUmVxdWVzdGVkLCAiZG93bmxvYWQs
cmVxdWVzdCIsIEV3a19Eb3dubG9hZF9Kb2IqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
RmlsZUNob29zZXJSZXF1ZXN0LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBFd2tfRmlsZV9DaG9v
c2VyX1JlcXVlc3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTmV3Rm9ybVN1Ym1pc3Np
b25SZXF1ZXN0LCAiZm9ybSxzdWJtaXNzaW9uLHJlcXVlc3QiLCBFd2tfRm9ybV9TdWJtaXNzaW9u
X1JlcXVlc3QqKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soSWNvbkNoYW5nZWQsICJpY29u
LGNoYW5nZWQiLCB2b2lkKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRmF2aWNvbkNoYW5n
ZWQsICJmYXZpY29uLGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0so
TG9hZEVycm9yLCAibG9hZCxlcnJvciIsIEV3a19FcnJvciopOwogREVDTEFSRV9FV0tfVklFV19D
QUxMQkFDSyhMb2FkRmluaXNoZWQsICJsb2FkLGZpbmlzaGVkIiwgdm9pZCk7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKExvYWRQcm9ncmVzcywgImxvYWQscHJvZ3Jlc3MiLCBkb3VibGUqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29u
X2RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZp
Y29uX2RhdGFiYXNlLmNwcAppbmRleCA0NWE3M2ZiNS4uNzkxMDgyYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNl
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiV0tJY29uRGF0YWJhc2VDYWlyby5oIgogI2luY2x1ZGUgIldLVVJMLmgiCi0jaW5jbHVk
ZSAiV2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJp
dmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXNFZmwuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CkBAIC00Niw3ICs0NSw2IEBAIEV3a0Zhdmljb25EYXRh
YmFzZTo6RXdrRmF2aWNvbkRhdGFiYXNlKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSkK
ICAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdLSWNvbkRhdGFiYXNl
Q2xpZW50KSk7CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBrV0tJY29uRGF0YWJh
c2VDbGllbnRDdXJyZW50VmVyc2lvbjsKICAgICBpY29uRGF0YWJhc2VDbGllbnQuY2xpZW50SW5m
byA9IHRoaXM7Ci0gICAgaWNvbkRhdGFiYXNlQ2xpZW50LmRpZENoYW5nZUljb25Gb3JQYWdlVVJM
ID0gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkw7CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50Lmljb25E
YXRhUmVhZHlGb3JQYWdlVVJMID0gaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkw7CiAgICAgV0tJY29u
RGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGllbnQobV9pY29uRGF0YWJhc2UuZ2V0KCksICZpY29u
RGF0YWJhc2VDbGllbnQpOwogfQpAQCAtNTYsMTQgKzU0LDYgQEAgRXdrRmF2aWNvbkRhdGFiYXNl
Ojp+RXdrRmF2aWNvbkRhdGFiYXNlKCkKICAgICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFz
ZUNsaWVudChtX2ljb25EYXRhYmFzZS5nZXQoKSwgMCk7CiB9CiAKLVN0cmluZyBFd2tGYXZpY29u
RGF0YWJhc2U6Omljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkgY29uc3QK
LXsKLSAgICBTdHJpbmcgaWNvblVSTDsKLSAgICB0b0ltcGwobV9pY29uRGF0YWJhc2UuZ2V0KCkp
LT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwsIGljb25VUkwpOwotCi0gICAg
cmV0dXJuIGljb25VUkw7Ci19Ci0KIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjp3YXRjaENoYW5n
ZXMoY29uc3QgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKQogewogICAgIEFT
U0VSVChjYWxsYmFja0RhdGEuY2FsbGJhY2spOwpAQCAtNzksNTUgKzY5LDYgQEAgdm9pZCBFd2tG
YXZpY29uRGF0YWJhc2U6OnVud2F0Y2hDaGFuZ2VzKEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25f
Q2hhbmdlX0NiIGNhbGwKICAgICBtX2NoYW5nZUxpc3RlbmVycy5yZW1vdmUoY2FsbGJhY2spOwog
fQogCi1zdHJ1Y3QgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlIHsKLSAgICBTdHJpbmcgcGFnZVVS
TDsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlOwotICAgIEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhIGNhbGxiYWNrRGF0YTsKLQotICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25z
ZShjb25zdCBTdHJpbmcmIHBhZ2VVUkwsIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJm
YWNlLCBjb25zdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKQotICAgICAg
ICA6IHBhZ2VVUkwocGFnZVVSTCkKLSAgICAgICAgLCBzdXJmYWNlKHN1cmZhY2UpCi0gICAgICAg
ICwgY2FsbGJhY2tEYXRhKGNhbGxiYWNrRGF0YSkKLSAgICB7IH0KLX07Ci0KLXN0YXRpYyBFaW5h
X0Jvb2wgcmVzcG9uZF9pY29uX3JlcXVlc3RfaWRsZSh2b2lkKiBkYXRhKQotewotICAgIEFzeW5j
SWNvblJlcXVlc3RSZXNwb25zZSogcmVzcG9uc2UgPSBzdGF0aWNfY2FzdDxBc3luY0ljb25SZXF1
ZXN0UmVzcG9uc2UqPihkYXRhKTsKLQotICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9IHJl
c3BvbnNlLT5zdXJmYWNlID8gV2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3VyZmFj
ZShyZXNwb25zZS0+Y2FsbGJhY2tEYXRhLmV2YXMsIHJlc3BvbnNlLT5zdXJmYWNlLmdldCgpKSA6
IDA7Ci0gICAgcmVzcG9uc2UtPmNhbGxiYWNrRGF0YS5jYWxsYmFjayhyZXNwb25zZS0+cGFnZVVS
TC51dGY4KCkuZGF0YSgpLCBpY29uLmdldCgpLCByZXNwb25zZS0+Y2FsbGJhY2tEYXRhLnVzZXJE
YXRhKTsKLQotICAgIGRlbGV0ZSByZXNwb25zZTsKLQotICAgIHJldHVybiBFQ09SRV9DQUxMQkFD
S19ET05FOwotfQotCi12b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwoY29u
c3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNr
RGF0YSkKLXsKLSAgICAvLyBXZSBhc2sgZm9yIHRoZSBpY29uIGRpcmVjdGx5LiBJZiB3ZSBkb24n
dCBnZXQgdGhlIGljb24gZGF0YSBub3csCi0gICAgLy8gd2UnbGwgYmUgbm90aWZpZWQgbGF0ZXIg
KGV2ZW4gaWYgdGhlIGRhdGFiYXNlIGlzIHN0aWxsIGltcG9ydGluZyBpY29ucykuCi0gICAgV0tS
ZXRhaW5QdHI8V0tVUkxSZWY+IHdrUGFnZVVSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4
Q1N0cmluZyhwYWdlVVJMKSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9
IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSh3a1BhZ2VVUkwuZ2V0KCkpOwotCi0gICAgLy8g
SWYgdGhlcmUncyBubyB2YWxpZCBpY29uLCBidXQgdGhlcmUncyBhbiBpY29uVVJMIHJlZ2lzdGVy
ZWQsCi0gICAgLy8gb3IgaXQncyBzdGlsbCBub3QgcmVnaXN0ZXJlZCBidXQgdGhlIGltcG9ydCBw
cm9jZXNzIGhhc24ndAotICAgIC8vIGZpbmlzaGVkIHlldCwgd2UgbmVlZCB0byB3YWl0IGZvciBp
Y29uRGF0YVJlYWR5Rm9yUGFnZVVSTCB0byBiZQotICAgIC8vIGNhbGxlZCBiZWZvcmUgbWFraW5n
IGFuZCBpbmZvcm1lZCBkZWNpc2lvbi4KLSAgICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IFN0cmlu
Zzo6ZnJvbVVURjgocGFnZVVSTCk7Ci0gICAgU3RyaW5nIGljb25VUkwgPSBpY29uVVJMRm9yUGFn
ZVVSTChwYWdlVVJMU3RyaW5nKTsKLSAgICBpZiAoIXN1cmZhY2UgJiYgKCFpY29uVVJMLmlzRW1w
dHkoKSB8fCAhdG9JbXBsKG1faWNvbkRhdGFiYXNlLmdldCgpKS0+aXNVcmxJbXBvcnRDb21wbGV0
ZWQoKSkpIHsKLSAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzID0gbV9p
Y29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkxTdHJpbmcpOwotICAgICAgICByZXF1ZXN0cy5hcHBlbmQo
Y2FsbGJhY2tEYXRhKTsKLSAgICAgICAgbV9pY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkxTdHJpbmcs
IHJlcXVlc3RzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJlc3BvbmQgd2hl
biBpZGxlLgotICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSogcmVzcG9uc2UgPSBuZXcgQXN5
bmNJY29uUmVxdWVzdFJlc3BvbnNlKHBhZ2VVUkxTdHJpbmcsIHN1cmZhY2UucmVsZWFzZSgpLCBj
YWxsYmFja0RhdGEpOwotICAgIGVjb3JlX2lkbGVyX2FkZChyZXNwb25kX2ljb25fcmVxdWVzdF9p
ZGxlLCByZXNwb25zZSk7Ci19Ci0KIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFnZVVSTFJlZiwgY29u
c3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBjb25zdCBFd2tGYXZpY29uRGF0YWJhc2UqIGV3
a0ljb25EYXRhYmFzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEV3a0Zhdmljb25EYXRhYmFzZSo+KGNs
aWVudEluZm8pOwpAQCAtMTQzLDE1ICs4NCwxMyBAQCB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6
ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZwog
ICAgICAgICBpdC0+dmFsdWUuY2FsbGJhY2socGFnZVVSTC5kYXRhKCksIGl0LT52YWx1ZS51c2Vy
RGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tGYXZpY29uRGF0YWJh
c2U6OmdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShXS1VSTFJlZiBwYWdlVVJMKSBjb25zdAor
UGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a0Zhdmljb25EYXRhYmFzZTo6Z2V0SWNvblN1
cmZhY2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBhZ2VVUkwpIGNvbnN0CiB7Ci0gICAgV0tJ
Y29uRGF0YWJhc2VSZXRhaW5JY29uRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCBwYWdlVVJM
KTsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tQYWdlVVJMKEFkb3B0V0ssIFdLVVJMQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKHBhZ2VVUkwpKTsKIAotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHN1cmZhY2UgPSBXS0ljb25EYXRhYmFzZVRyeUdldENhaXJvU3VyZmFjZUZvclVSTChtX2lj
b25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7Ci0gICAgaWYgKCFzdXJmYWNlKSB7Ci0gICAgICAg
IFdLSWNvbkRhdGFiYXNlUmVsZWFzZUljb25Gb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHBh
Z2VVUkwpOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBXS0ljb25EYXRh
YmFzZVRyeUdldENhaXJvU3VyZmFjZUZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgd2tQYWdl
VVJMLmdldCgpKTsKKyAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0K
IAogICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKIH0KQEAgLTE2MCw0MSArOTksMjYgQEAg
dm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6Omljb25EYXRhUmVhZHlGb3JQYWdlVVJMKFdLSWNvbkRh
dGFiYXNlUmVmLCBXS1VSTFJlZiBwYWcKIHsKICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGV3a0lj
b25EYXRhYmFzZSA9IGNvbnN0X2Nhc3Q8RXdrRmF2aWNvbkRhdGFiYXNlKj4oc3RhdGljX2Nhc3Q8
Y29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKj4oY2xpZW50SW5mbykpOwogCi0gICAgU3RyaW5nIHVy
bFN0cmluZyA9IHRvV1RGU3RyaW5nKHBhZ2VVUkwpOwotICAgIGlmICghZXdrSWNvbkRhdGFiYXNl
LT5tX2ljb25SZXF1ZXN0cy5jb250YWlucyh1cmxTdHJpbmcpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZXdrSWNvbkRhdGFiYXNlLT5n
ZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkocGFnZVVSTCk7CisgICAgV0tJY29uRGF0YWJhc2VS
ZXRhaW5JY29uRm9yVVJMKGV3a0ljb25EYXRhYmFzZS0+bV9pY29uRGF0YWJhc2UuZ2V0KCksIHBh
Z2VVUkwpOwogCi0gICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzRm9yVVJMID0g
ZXdrSWNvbkRhdGFiYXNlLT5tX2ljb25SZXF1ZXN0cy50YWtlKHVybFN0cmluZyk7Ci0gICAgc2l6
ZV90IHJlcXVlc3RDb3VudCA9IHJlcXVlc3RzRm9yVVJMLnNpemUoKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlcXVlc3RDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEljb25SZXF1
ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEgPSByZXF1ZXN0c0ZvclVSTFtpXTsKLSAgICAg
ICAgUmVmUHRyPEV2YXNfT2JqZWN0PiBpY29uID0gc3VyZmFjZSA/IFdlYkNvcmU6OmV2YXNPYmpl
Y3RGcm9tQ2Fpcm9JbWFnZVN1cmZhY2UoY2FsbGJhY2tEYXRhLmV2YXMsIHN1cmZhY2UuZ2V0KCkp
IDogMDsKLSAgICAgICAgY2FsbGJhY2tEYXRhLmNhbGxiYWNrKHVybFN0cmluZy51dGY4KCkuZGF0
YSgpLCBpY29uLmdldCgpLCBjYWxsYmFja0RhdGEudXNlckRhdGEpOwotICAgIH0KKyAgICBDU3Ry
aW5nIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKHBhZ2VVUkwpLnV0ZjgoKTsKKyAgICBDaGFuZ2VM
aXN0ZW5lck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBld2tJY29uRGF0YWJhc2UtPm1fY2hhbmdl
TGlzdGVuZXJzLmJlZ2luKCk7CisgICAgQ2hhbmdlTGlzdGVuZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGV3a0ljb25EYXRhYmFzZS0+bV9jaGFuZ2VMaXN0ZW5lcnMuZW5kKCk7CisgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmNhbGxiYWNrKHVybFN0cmlu
Zy5kYXRhKCksIGl0LT52YWx1ZS51c2VyRGF0YSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mYXZp
Y29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRh
dGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJMKQorRXZhc19PYmplY3QqIGV3a19mYXZpY29uX2Rh
dGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNv
bnN0IGNoYXIqIHBhZ2VfdXJsLCBFdmFzKiBldmFzKQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwYWdlVVJMLCAwKTsKLQotICAgIFN0cmluZyBpY29uVVJMID0gZXdrSWNv
bkRhdGFiYXNlLT5pY29uVVJMRm9yUGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkwpKTsK
LQotICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZChpY29uVVJMLnV0ZjgoKS5kYXRhKCkp
OwotfQorICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwYWdlX3VybCwgMCk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXMsIDApOwogCi1FaW5hX0Jvb2wg
ZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2Uq
IGV3a0ljb25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXMqIGV2YXMsIEV3a19G
YXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0
YSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrSWNvbkRhdGFiYXNl
LCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBhZ2VfdXJsLCBm
YWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXMsIGZhbHNlKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKLQot
ICAgIGV3a0ljb25EYXRhYmFzZS0+aWNvbkZvclBhZ2VVUkwocGFnZV91cmwsIEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwgZXZhcykpOworICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBld2tJY29uRGF0YWJhc2UtPmdldEljb25TdXJmYWNlU3lu
Y2hyb25vdXNseShwYWdlX3VybCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4g
MDsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXZWJDb3JlOjpldmFzT2JqZWN0RnJv
bUNhaXJvSW1hZ2VTdXJmYWNlKGV2YXMsIHN1cmZhY2UuZ2V0KCkpLmxlYWtSZWYoKTsKIH0KIAog
dm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19hZGQoRXdrX0Zh
dmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNv
bl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgKaW5kZXgg
YjY2YTY3Yi4uNDJjMDlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCkBAIC00Nyw0MCArNDcsMTYgQEAgdHlw
ZWRlZiBzdHJ1Y3QgRXdrRmF2aWNvbkRhdGFiYXNlIEV3a19GYXZpY29uX0RhdGFiYXNlOwogdHlw
ZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IpKGNvbnN0IGNo
YXIgKnBhZ2VfdXJsLCB2b2lkICpldmVudF9pbmZvKTsKIAogLyoqCi0gKiBAdHlwZWRlZiBFd2tf
RmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBFd2tfRmF2aWNvbl9EYXRhYmFzZV9B
c3luY19JY29uX0dldF9DYgotICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3aXRoIGV3
a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0Ci0gKgotICogVGhlIEBhIGljb24gbWF5
IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gZmF2aWNvbiBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBA
YSBwYWdlX3VybC4KLSAqCi0gKiBZb3UgbmVlZCB0byBjYWxsIGV2YXNfb2JqZWN0X3JlZigpIG9u
IHRoZSBAYSBpY29uIGlmIHlvdSB3aXNoIHRvIGtlZXAgaXQgYWZ0ZXIgdGhlCi0gKiBjYWxsYmFj
ayBpcyBleGVjdXRlZC4KLSAqLwotdHlwZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0YWJhc2Vf
QXN5bmNfSWNvbl9HZXRfQ2IpKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzX09iamVjdCAqaWNv
biwgdm9pZCAqZXZlbnRfaW5mbyk7Ci0KLS8qKgotICogUmV0cmlldmVzIGZyb20gdGhlIGRhdGFi
YXNlIHRoZSBmYXZpY29uIFVSTCBmb3IgdGhlIGdpdmVuIEBhIHBhZ2VfdXJsCi0gKgotICogQHBh
cmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0byBxdWVyeQotICogQHBhcmFtIHBhZ2VfdXJs
IFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZhdmljb24gVVJMIGZvcgotICoKLSAqIEByZXR1
cm4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdz
aGFyZQotICogICAgICAgICBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3Igb3IgaWYgdGhlIGtl
eSBkb2VzIG5vdCBleGlzdC4KLSAqICAgICAgICAgWW91IG5lZWQgdG8gY2FsbCBlaW5hX3N0cmlu
Z3NoYXJlX2RlbCgpIGFmdGVyIHVzZS4KLSAqLwotRUFQSSBjb25zdCBjaGFyICpld2tfZmF2aWNv
bl9kYXRhYmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UgKmRhdGFiYXNlLCBj
b25zdCBjaGFyICpwYWdlX3VybCk7Ci0KLS8qKgogICogUmV0cmlldmVzIGFzeW5jaHJvbm91c2x5
IGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gQGEgcGFnZV91cmwK
ICAqCiAgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5CiAgKiBAcGFy
YW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBmb3IKICAqIEBw
YXJhbSBldmFzIFRoZSBjYW52YXMgdG8gYWRkIHRoZSBmYXZpY29uIHRvCi0gKiBAcGFyYW0gY2Fs
bGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGljb24gaXMgcmV0
cmlldmVkCi0gKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBwb2ludGVyIHRoYXQgd2FzIHRvIGJlIHBh
c3NlZCB0byB0aGUgY2FsbGJhY2sKICAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGUg
aWNvbiB3YXMgc3VjY2Vzc2Z1bHkgcmVxdWVzdGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQor
ICogQHJldHVybiBUaGUgZmF2aWNvbiBhcyBhbiBFdmFzX09iamVjdCBpZiBzdWNjZXNzZnVsLCBA
YyBOVUxMIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFzX09iamVjdCBuZWVkcyB0byBi
ZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgRWluYV9Cb29sIGV3a19mYXZpY29uX2RhdGFi
YXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgY29uc3Qg
Y2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMsIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0lj
b25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK0VBUEkgRXZhc19PYmplY3QgKmV3a19m
YXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwg
Y29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMpOwogCiAvKioKICAqIEFkZCAocmVnaXN0
ZXIpIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBpY29uIGNoYW5nZSBldmVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2Vf
cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25f
ZGF0YWJhc2VfcHJpdmF0ZS5oCmluZGV4IDc1MzViZGQuLmVmYjVlN2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9k
YXRhYmFzZV9wcml2YXRlLmgKQEAgLTQ2LDI3ICs0Niw3IEBAIHN0cnVjdCBJY29uQ2hhbmdlQ2Fs
bGJhY2tEYXRhIHsKICAgICB7IH0KIH07CiAKLXN0cnVjdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0
YSB7Ci0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2s7
Ci0gICAgdm9pZCogdXNlckRhdGE7Ci0gICAgRXZhcyogZXZhczsKLQotICAgIEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhKCkKLSAgICAgICAgOiBjYWxsYmFjaygwKQotICAgICAgICAsIHVzZXJEYXRh
KDApCi0gICAgICAgICwgZXZhcygwKQotICAgIHsgfQotCi0gICAgSWNvblJlcXVlc3RDYWxsYmFj
a0RhdGEoRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgX2NhbGxiYWNrLCB2
b2lkKiBfdXNlckRhdGEsIEV2YXMqIF9ldmFzKQotICAgICAgICA6IGNhbGxiYWNrKF9jYWxsYmFj
aykKLSAgICAgICAgLCB1c2VyRGF0YShfdXNlckRhdGEpCi0gICAgICAgICwgZXZhcyhfZXZhcykK
LSAgICB7IH0KLX07Ci0KIHR5cGVkZWYgSGFzaE1hcDxFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29u
X0NoYW5nZV9DYiwgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YT4gQ2hhbmdlTGlzdGVuZXJNYXA7Ci10
eXBlZGVmIFZlY3RvcjxJY29uUmVxdWVzdENhbGxiYWNrRGF0YT4gUGVuZGluZ0ljb25SZXF1ZXN0
VmVjdG9yOwotdHlwZWRlZiBIYXNoTWFwPFN0cmluZyAvKiBwYWdlVVJMICovLCBQZW5kaW5nSWNv
blJlcXVlc3RWZWN0b3I+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKIAogY2xhc3MgRXdrRmF2aWNv
bkRhdGFiYXNlIHsKIHB1YmxpYzoKQEAgLTc2LDIzICs1NiwxOCBAQCBwdWJsaWM6CiAgICAgfQog
ICAgIH5Fd2tGYXZpY29uRGF0YWJhc2UoKTsKIAotICAgIFN0cmluZyBpY29uVVJMRm9yUGFnZVVS
TChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0OwotICAgIHZvaWQgaWNvbkZvclBhZ2VVUkwo
Y29uc3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxi
YWNrRGF0YSk7Ci0KKyAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZh
Y2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBhZ2VVUkwpIGNvbnN0OwogICAgIHZvaWQgd2F0
Y2hDaGFuZ2VzKGNvbnN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSk7CiAg
ICAgdm9pZCB1bndhdGNoQ2hhbmdlcyhFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9D
YiBjYWxsYmFjayk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXdrRmF2aWNvbkRhdGFiYXNl
KFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSk7CiAKLSAgICBQYXNzUmVmUHRyPGNhaXJv
X3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdLVVJMUmVmIHBhZ2VVUkwp
IGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29u
RGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0lj
b25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pOwogCiAgICAgV0tSZXRhaW5QdHI8V0tJY29uRGF0YWJhc2VSZWY+IG1faWNv
bkRhdGFiYXNlOwogICAgIENoYW5nZUxpc3RlbmVyTWFwIG1fY2hhbmdlTGlzdGVuZXJzOwotICAg
IFBlbmRpbmdJY29uUmVxdWVzdE1hcCBtX2ljb25SZXF1ZXN0czsKIH07CiAKICNlbmRpZiAvLyBl
d2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCAyMzJjYzBmLi43ZTdjODkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC01NzcsMTEgKzU3
NywxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogICAgIHJldHVybiBpbXBsLT51cmwoKTsKIH0KIAotY29uc3QgY2hhciAqZXdrX3Zp
ZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KQorRXZhc19PYmplY3Qq
IGV3a192aWV3X2Zhdmljb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KQogewogICAg
IEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKIAotICAgIHJl
dHVybiBpbXBsLT5mYXZpY29uVVJMKCk7CisgICAgcmV0dXJuIGltcGwtPmNyZWF0ZUZhdmljb24o
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCogZXdrVmlldykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDExYmVi
OTQuLjNjNDg3YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuaApAQCAtNDgsNyArNDgsOCBAQAogICogICB3aGVuIGRvbmUgdG8gY29udGludWUgd2l0aCB0
aGUgZm9ybSBzdWJtaXNzaW9uLiBJZiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVtb3ZlZCBvbiBh
CiAgKiAgICNFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgYW5kIHRoZSBmb3JtIGhhcyBub3Qg
YmVlbiBzdWJtaXR0ZWQgeWV0LAogICogICBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3Vi
bWl0KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseS4KLSAqIC0gImljb24sY2hhbmdlZCIs
IHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGZhdmljb24gaGFzIGNoYW5nZWQuCisgKiAt
ICJmYXZpY29uLGNoYW5nZWQiLCB2b2lkOiByZXBvcnRzIHRoYXQgdGhlIHZpZXcncyBmYXZpY29u
IGhhcyBjaGFuZ2VkLiBUaGUgZmF2aWNvbiBjYW4gYmUgcXVlcmllZCB1c2luZworICogICBld2tf
dmlld19mYXZpY29uX2dldCgpLgogICogLSAibG9hZCxlcnJvciIsIGNvbnN0IEV3a19FcnJvcio6
IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxlZC4KICAqIC0gImxvYWQsZmluaXNoZWQiLCB2
b2lkOiByZXBvcnRzIGxvYWQgZmluaXNoZWQuCiAgKiAtICJsb2FkLHByb2dyZXNzIiwgZG91Ymxl
KjogbG9hZCBwcm9ncmVzcyBoYXMgY2hhbmdlZCAodmFsdWUgZnJvbSAwLjAgdG8gMS4wKS4KQEAg
LTM3MiwxNiArMzczLDE0IEBAIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X3VybF9zZXQoRXZhc19P
YmplY3QgKm8sIGNvbnN0IGNoYXIgKnVybCk7CiBFQVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X3Vy
bF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCiAvKioKLSAqIFJldHVybnMgdGhlIGN1cnJl
bnQgaWNvbiBVUkwgb2YgdmlldyBvYmplY3QuCi0gKgotICogSXQgcmV0dXJucyBhbiBpbnRlcm5h
bCBzdHJpbmcgYW5kIHNob3VsZCBub3QKLSAqIGJlIG1vZGlmaWVkLiBUaGUgc3RyaW5nIGlzIGd1
YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgorICogUmV0dXJucyB0aGUgY3VycmVudCBmYXZp
Y29uIG9mIHZpZXcgb2JqZWN0LgogICoKICAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBj
dXJyZW50IGljb24gVVJMCiAgKgotICogQHJldHVybiBjdXJyZW50IGljb24gVVJMIG9uIHN1Y2Nl
c3Mgb3IgQGMgTlVMTCBpZiB1bmF2YWlsYWJsZSBvciBvbiBmYWlsdXJlCisgKiBAcmV0dXJuIGN1
cnJlbnQgZmF2aWNvbiBvbiBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24g
ZmFpbHVyZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFzX09iamVjdCBuZWVkcyB0byBiZSBmcmVlZCBh
ZnRlciB1c2UuCiAgKi8KLUVBUEkgY29uc3QgY2hhciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRXZhc19PYmplY3QgKmV3a192aWV3X2Zhdmljb25f
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCiAgKiBBc2tzIHRoZSBtYWluIGZyYW1l
IHRvIHJlbG9hZCB0aGUgY3VycmVudCBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZp
Y29uX2RhdGFiYXNlLmNwcAppbmRleCAwZmYxZGYwLi5jMGNmMjE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBAIC03NSw1NCArNzUsNiBAQCBzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBodHRwU2VydmVyLCBTb3VwTWVzc2FnZSogbWVz
c2FnZSwgY29uc3QgYwogICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJl
c3BvbnNlX2JvZHkpOwogfQogCi1zdGF0aWMgdm9pZCBvbkljb25DaGFuZ2VkKHZvaWQqIHVzZXJE
YXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBib29sKiBpY29uQ2hh
bmdlZCA9IHN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSk7Ci0gICAgKmljb25DaGFuZ2VkID0g
dHJ1ZTsKLX0KLQotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNl
X3VybF9nZXQpCi17Ci0gICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9
IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOwotICAgIGh0dHBTZXJ2ZXItPnJ1bihz
ZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICAvLyBTZXQgZmF2aWNvbiBkYXRhYmFzZSBwYXRoIGFuZCBl
bmFibGUgZnVuY3Rpb25hbGl0eS4KLSAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3
X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7Ci0gICAgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFz
ZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwotCi0gICAgYm9vbCBpY29uQ2hhbmdlZCA9IGZh
bHNlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJpY29u
LGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkLCAmaWNvbkNoYW5nZWQpOwotCi0gICAgLy8gV2UgbmVl
ZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUK
LSAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2
aWNvbi4KLSAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQ
YXRoKCIvIikuZGF0YSgpKSk7Ci0KLSAgICB3aGlsZSAoIWljb25DaGFuZ2VkKQotICAgICAgICBl
Y29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotCi0gICAgQVNTRVJUX1RSVUUoaWNvbkNoYW5nZWQp
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNo
YW5nZWQiLCBvbkljb25DaGFuZ2VkKTsKLQotICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmlu
ZyBhIGZhdmljb24gVVJMLgotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJh
c2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKLSAgICBBU1NF
UlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOwotCi0gICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25V
UkwgPSBodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvZmF2aWNvbi5pY28iKTsKLSAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgaWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dl
dChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQod2ViVmlldygpKSk7Ci0gICAgRVhQ
RUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5kYXRhKCksIGljb25VUkwpOwotCi0gICAgY29u
c3QgY2hhciogdmlld0ljb25VUkwgPSBld2tfdmlld19pY29uX3VybF9nZXQod2ViVmlldygpKTsK
LSAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZpY29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwp
OwotfQotCi1zdGF0aWMgdm9pZCBvbkljb25EYXRhUmVhZHkoY29uc3QgY2hhciogcGFnZV91cmws
IEV2YXNfT2JqZWN0KiBpY29uLCB2b2lkKiBldmVudF9pbmZvKQotewotICAgIEV2YXNfT2JqZWN0
KiogcmV0dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOwot
ICAgIGlmIChpY29uKQotICAgICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7Ci0gICAgKnJldHVy
bkljb24gPSBpY29uOwotfQotCiBzdHJ1Y3QgSWNvblJlcXVlc3REYXRhIHsKICAgICBFdmFzX09i
amVjdCogdmlldzsKICAgICBFdmFzX09iamVjdCogaWNvbjsKQEAgLTEzMiwxMyArODQsMTMgQEAg
c3RhdGljIHZvaWQgcmVxdWVzdEZhdmljb25EYXRhKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVj
dCosIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBJY29uUmVxdWVzdERhdGEqIGRhdGEgPSBzdGF0
aWNfY2FzdDxJY29uUmVxdWVzdERhdGEqPih1c2VyRGF0YSk7CiAKLSAgICAvLyBDaGVjayB0aGUg
QVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgorICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0
cmlldmluZyBhIHZhbGlkIGZhdmljb24gZnJvbSBpY29uIGRhdGFiYXNlLgogICAgIEV3a19Db250
ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQoZGF0YS0+dmlldyk7CiAgICAgRXdr
X0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25f
ZGF0YWJhc2VfZ2V0KGNvbnRleHQpOwogICAgIEFTU0VSVF9UUlVFKGZhdmljb25EYXRhYmFzZSk7
CiAKICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQoZGF0YS0+dmlldyk7Ci0g
ICAgQVNTRVJUX1RSVUUoZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoZmF2aWNv
bkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KGRhdGEtPnZpZXcpLCBldmFzLCBvbkljb25EYXRh
UmVhZHksICZkYXRhLT5pY29uKSk7CisgICAgZGF0YS0+aWNvbiA9IGV3a19mYXZpY29uX2RhdGFi
YXNlX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3
KSwgZXZhcyk7CiB9CiAKIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRh
YmFzZV9hc3luY19pY29uX2dldCkKQEAgLTE1MSw3ICsxMDMsNyBAQCBURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpCiAgICAgZXdrX2Nv
bnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwogCiAgICAg
SWNvblJlcXVlc3REYXRhIGRhdGEgPSB7IHdlYlZpZXcoKSwgMCB9OwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0RmF2
aWNvbkRhdGEsICZkYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2Vi
VmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhLCAmZGF0YSk7CiAK
ICAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29u
IGRhdGEgd2lsbCBiZQogICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4g
YXNzb2NpYXRlZCBmYXZpY29uLgpAQCAtMTYxLDEzICsxMTMsMjAgQEAgVEVTVF9GKEVXSzJVbml0
VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KQogICAgICAgICBl
Y29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwogCiAgICAgQVNTRVJUX1RSVUUoZGF0YS5pY29uKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiaWNvbixjaGFu
Z2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19kZWwod2ViVmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsK
IAogICAgIC8vIEl0IGlzIGEgMTZ4MTYgZmF2aWNvbi4KICAgICBpbnQgd2lkdGgsIGhlaWdodDsK
ICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChkYXRhLmljb24sICZ3aWR0aCwgJmhlaWdo
dCk7CiAgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7CiAgICAgRVhQRUNUX0VRKDE2LCBoZWlnaHQp
OwotCiAgICAgZXZhc19vYmplY3RfdW5yZWYoZGF0YS5pY29uKTsKKworICAgIC8vIFRlc3QgQVBJ
IHRvIHJlcXVlc3QgZmF2aWNvbiBmcm9tIHRoZSB2aWV3CisgICAgRXZhc19PYmplY3QqIGZhdmlj
b24gPSBld2tfdmlld19mYXZpY29uX2dldCh3ZWJWaWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGZh
dmljb24pOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGZhdmljb24sICZ3aWR0aCwg
JmhlaWdodCk7CisgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7CisgICAgRVhQRUNUX0VRKDE2LCBo
ZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3VucmVmKGZhdmljb24pOwogfQpkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU2YTBiZjMuLmU0ZjJmMGEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0wMi0wMSAgQ2hyaXN0b3BoZSBEdW1leiAgPGRjaHJpc0BnbWFpbC5j
b20+CisKKyAgICAgICAgW0VGTF1bV0syXSBSZWZhY3RvciBFd2tfRmF2aWNvbiBjb2RlIGFuZCBz
dG9wIHJlbHlpbmcgb24gaW50ZXJuYWwgQysrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEVGTCdzIE1pbmlCcm93c2VyIHRvIG1ha2Ug
dXNlIG9mIG5ldyBFd2tfRmF2aWNvbiBBUEkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwv
bWFpbi5jOgorICAgICAgICAodXBkYXRlX3ZpZXdfZmF2aWNvbik6CisgICAgICAgIChvbl92aWV3
X2Zhdmljb25fY2hhbmdlZCk6CisgICAgICAgICh3aW5kb3dfY3JlYXRlKToKKwogMjAxMy0wMS0z
MSAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHJvdmlkZSBh
IHNlbnNpYmxlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIHdoZW4gYnVpbGRpbmcgb24gaU9TIFNES3MK
ZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMgYi9Ub29scy9NaW5pQnJv
d3Nlci9lZmwvbWFpbi5jCmluZGV4IGMwM2MwOGYuLmQ0ZDhjYzggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L01pbmlCcm93c2VyL2VmbC9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4u
YwpAQCAtNTM2LDEyICs1MzYsOCBAQCBvbl9kb3dubG9hZF9mYWlsZWQodm9pZCAqdXNlcl9kYXRh
LCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB9CiAKIHN0YXRpYyB2
b2lkCi1vbl9mYXZpY29uX3JlY2VpdmVkKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzX09iamVj
dCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbykKK3VwZGF0ZV92aWV3X2Zhdmljb24oQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdywgRXZhc19PYmplY3QgKmljb24pCiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cg
KndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKWV2ZW50X2luZm87Ci0gICAgaWYgKHN0cmNtcChw
YWdlX3VybCwgZXdrX3ZpZXdfdXJsX2dldCh3aW5kb3ctPmV3a192aWV3KSkpCi0gICAgICAgIHJl
dHVybjsKLQogICAgIC8qIFJlbW92ZSBwcmV2aW91cyBpY29uIGZyb20gVVJMIGJhciAqLwogICAg
IEV2YXNfT2JqZWN0ICpvbGRfaWNvbiA9IGVsbV9vYmplY3RfcGFydF9jb250ZW50X3Vuc2V0KHdp
bmRvdy0+dXJsX2JhciwgImljb24iKTsKICAgICBpZiAob2xkX2ljb24pIHsKQEAgLTU2MiwxNiAr
NTU4LDE1IEBAIG9uX2Zhdmljb25fcmVjZWl2ZWQoY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXNf
T2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZvKQogfQogCiBzdGF0aWMgdm9pZAotb25fdmll
d19pY29uX2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZv
aWQgKmV2ZW50X2luZm8pCitvbl92aWV3X2Zhdmljb25fY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKICAgICBCcm93c2Vy
X1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIC8qIFJl
dHJpZXZlIHRoZSB2aWV3J3MgZmF2aWNvbiAqLwotICAgIEV3a19Db250ZXh0ICpjb250ZXh0ID0g
ZXdrX3ZpZXdfY29udGV4dF9nZXQoZXdrX3ZpZXcpOwotICAgIEV3a19GYXZpY29uX0RhdGFiYXNl
ICppY29uX2RhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4
dCk7CiAKLSAgICBjb25zdCBjaGFyICpwYWdlX3VybCA9IGV3a192aWV3X3VybF9nZXQoZXdrX3Zp
ZXcpOwotICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChld2tfdmlldyk7Ci0g
ICAgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoaWNvbl9kYXRhYmFzZSwgcGFn
ZV91cmwsIGV2YXMsIG9uX2Zhdmljb25fcmVjZWl2ZWQsIHdpbmRvdyk7CisgICAgRXZhc19PYmpl
Y3QqIGZhdmljb24gPSBld2tfdmlld19mYXZpY29uX2dldChld2tfdmlldyk7CisgICAgdXBkYXRl
X3ZpZXdfZmF2aWNvbih3aW5kb3csIGZhdmljb24pOworCisgICAgaWYgKGZhdmljb24pCisgICAg
ICAgIGV2YXNfb2JqZWN0X3VucmVmKGZhdmljb24pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjE0
LDcgKzEyMDksNyBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXZhc19P
YmplY3QgKm9wZW5lciwgY29uc3QgY2hhciAqdXJsLCBpbnQgdwogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBv
bl9kb3dubG9hZF9maW5pc2hlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9h
ZF9yZXF1ZXN0LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3
aW5kb3ctPmV3a192aWV3LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbl9maWxlX2Nob29zZXJf
cmVxdWVzdCwgd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2lu
ZG93LT5ld2tfdmlldywgImljb24sY2hhbmdlZCIsIG9uX3ZpZXdfaWNvbl9jaGFuZ2VkLCB3aW5k
b3cpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCAiZmF2aWNvbixjaGFuZ2VkIiwgb25fdmlld19mYXZpY29uX2NoYW5nZWQsIHdpbmRvdyk7CiAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2Fk
LGVycm9yIiwgb25fZXJyb3IsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2FkLHByb2dyZXNzIiwgb25fcHJvZ3Jlc3MsIHdp
bmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsICJ0aXRsZSxjaGFuZ2VkIiwgb25fdGl0bGVfY2hhbmdlZCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186033</attachid>
            <date>2013-02-01 06:42:25 -0800</date>
            <delta_ts>2013-02-12 07:38:40 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>29295</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlNjNkM2ZiLi42ZTlmYzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxkY2hyaXNAZ21haWwuY29tPgorCisg
ICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQgc3RvcCByZWx5
aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNvIHRoYXQgaXQg
bm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFuZCBzbyB0aGF0
IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hhbmdlZAorICAg
ICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlzIG5vIGxvbmdl
ciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVudCBpcyBub3cg
b25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAgZmF2aWNvbiBk
YXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlzIGNvdmVyZWQg
YnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBhcmUKKyAgICAg
ICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6OmluZm9ybVVS
TENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAgICAgICAgKEV3
a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0V3
a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2
aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlmaWVkIG9mIGZh
dmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAgICBiZWNvbWVz
IGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5bmNocm9ub3Vz
LiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEgaXMgbm90IGF2
YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZpY29uRGF0YWJh
c2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFjZVN5bmNocm9u
b3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJlYWR5Rm9yUGFn
ZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6CisgICAgICAg
IChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fbmV3KToKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24sY2hhbmdlZCcg
c2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAgICAgICBjb25z
aXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3ZlIEFQSSB0byBy
ZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQgYnkgb25lIHRv
IHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNfT2JqZWN0IGlu
c3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2
aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8gdXNlIHRoZSBu
ZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMDEgIEphZSBIeXVuIFBhcmsgIDxqYWUucGFya0Bj
b21wYW55MTAwLm5ldD4KIAogICAgICAgICBDb29yZGluYXRlZCBHcmFwaGljcyA6IFNvcnQgVGFy
Z2V0LnByaSBhbmQgY2xhc3MgZGVjbGFyYXRpb25zIGluIGFscGhhYmV0aWNhbCBvcmRlci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKaW5kZXggYWEzNTBm
NC4uMDE0MDE0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5jcHAKQEAgLTYyMCwyMyArNjIwLDYgQEAgdm9pZCBFd2tWaWV3OjpzZXRUb3VjaEV2ZW50c0Vu
YWJsZWQoYm9vbCBlbmFibGVkKQogfQogI2VuZGlmCiAKLS8qKgotICogQGludGVybmFsCi0gKiBV
cGRhdGUgdGhlIHZpZXcncyBmYXZpY29uIGFuZCBlbWl0cyBhICJpY29uLGNoYW5nZWQiIHNpZ25h
bCBpZiBpdCBoYXMKLSAqIGNoYW5nZWQuCi0gKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
d2hlbmV2ZXIgdGhlIFVSTCBoYXMgY2hhbmdlZCBvciB3aGVuIHRoZSBpY29uIGZvcgotICogdGhl
IGN1cnJlbnQgcGFnZSBVUkwgaGFzIGNoYW5nZWQuCi0gKi8KLXZvaWQgRXdrVmlldzo6aW5mb3Jt
SWNvbkNoYW5nZSgpCi17Ci0gICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBt
X2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOwotICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwot
Ci0gICAgbV9mYXZpY29uVVJMID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGlj
b25EYXRhYmFzZSwgbV91cmwpOwotICAgIHNtYXJ0Q2FsbGJhY2s8SWNvbkNoYW5nZWQ+KCkuY2Fs
bCgpOwotfQotCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogYm9vbCBFd2tWaWV3
OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgdmlld1NpemUpCiB7CkBAIC05MDYsNyAr
ODg5LDE2IEBAIHZvaWQgRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBzbWFydENhbGxi
YWNrPFVSTENoYW5nZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcn
cyBmYXZpY29uLgotICAgIGluZm9ybUljb25DaGFuZ2UoKTsKKyAgICBzbWFydENhbGxiYWNrPEZh
dmljb25DaGFuZ2VkPigpLmNhbGwoKTsKK30KKworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0
ZUZhdmljb24oKSBjb25zdAoreworICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNl
ID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoaWNvbkRhdGFiYXNl
KTsKKworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc21hcnREYXRhKCk7CisgICAgcmV0
dXJuIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KGljb25EYXRhYmFzZSwgbV91cmwsIHNk
LT5iYXNlLmV2YXMpOwogfQogCiBFd2tXaW5kb3dGZWF0dXJlcyogRXdrVmlldzo6d2luZG93RmVh
dHVyZXMoKQpAQCAtMTAyOCw3ICsxMDIwLDcgQEAgdm9pZCBFd2tWaWV3OjpvbkZhdmljb25DaGFu
Z2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZvaWQqIGV2ZW50SW5mbykKICAgICBpZiAoIXZpZXct
PnVybCgpIHx8IHN0cmNhc2VjbXAodmlldy0+dXJsKCksIHBhZ2VVUkwpKQogICAgICAgICByZXR1
cm47CiAKLSAgICB2aWV3LT5pbmZvcm1JY29uQ2hhbmdlKCk7CisgICAgdmlldy0+c21hcnRDYWxs
YmFjazxGYXZpY29uQ2hhbmdlZD4oKS5jYWxsKCk7CiB9CiAKIFBhc3NSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNob3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IDk5Y2U4ZWQuLjRmNDM1OWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKQEAgLTEyNyw3ICsxMjcsNyBAQCBwdWJs
aWM6CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybVRvU2NyZWVuKCkgY29u
c3Q7CiAKICAgICBjb25zdCBjaGFyKiB1cmwoKSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAg
IGNvbnN0IGNoYXIqIGZhdmljb25VUkwoKSBjb25zdCB7IHJldHVybiBtX2Zhdmljb25VUkw7IH0K
KyAgICBFdmFzX09iamVjdCogY3JlYXRlRmF2aWNvbigpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIq
IHRpdGxlKCkgY29uc3Q7CiAgICAgV2ViS2l0OjpJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0
TWV0aG9kQ29udGV4dCgpOwogCkBAIC0yMjEsOCArMjIxLDYgQEAgcHJpdmF0ZToKICAgICBXZWJD
b3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2NlbmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgp
OwogI2VuZGlmCiAKLSAgICB2b2lkIGluZm9ybUljb25DaGFuZ2UoKTsKLQogICAgIHN0YXRpYyB2
b2lkIG9uTW91c2VEb3duKHZvaWQqIGRhdGEsIEV2YXMqLCBFdmFzX09iamVjdCosIHZvaWQqIGV2
ZW50SW5mbyk7CiAgICAgc3RhdGljIHZvaWQgb25Nb3VzZVVwKHZvaWQqIGRhdGEsIEV2YXMqLCBF
dmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbyk7CiAgICAgc3RhdGljIHZvaWQgb25Nb3VzZU1v
dmUodm9pZCogZGF0YSwgRXZhcyosIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKTsKQEAg
LTI2Miw3ICsyNjAsNiBAQCBwcml2YXRlOgogICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0
aW5nczsKICAgICBSZWZQdHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAg
ICAgY29uc3Qgdm9pZCogbV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3Ms
IGRvIG5vdCBmcmVlIGl0LgotICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAg
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdXJsOwogICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3Ry
aW5nIG1fdGl0bGU7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGhlbWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXgg
MGU3NjNhMy4uMDBkMGQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApAQCAtNTYsNyArNTYsNyBAQCBlbnVtIENhbGxiYWNr
VHlwZSB7CiAgICAgRG93bmxvYWRKb2JSZXF1ZXN0ZWQsCiAgICAgRmlsZUNob29zZXJSZXF1ZXN0
LAogICAgIE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVzdCwKLSAgICBJY29uQ2hhbmdlZCwKKyAgICBG
YXZpY29uQ2hhbmdlZCwKICAgICBMb2FkRXJyb3IsCiAgICAgTG9hZEZpbmlzaGVkLAogICAgIExv
YWRQcm9ncmVzcywKQEAgLTE2Niw3ICsxNjYsNyBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KERvd25sb2FkSm9iRmluaXNoZWQsICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZAog
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYlJlcXVlc3RlZCwgImRvd25sb2Fk
LHJlcXVlc3QiLCBFd2tfRG93bmxvYWRfSm9iKik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KEZpbGVDaG9vc2VyUmVxdWVzdCwgImZpbGUsY2hvb3NlcixyZXF1ZXN0IiwgRXdrX0ZpbGVfQ2hv
b3Nlcl9SZXF1ZXN0Kik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld0Zvcm1TdWJtaXNz
aW9uUmVxdWVzdCwgImZvcm0sc3VibWlzc2lvbixyZXF1ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lv
bl9SZXF1ZXN0Kik7Ci1ERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEljb25DaGFuZ2VkLCAiaWNv
bixjaGFuZ2VkIiwgdm9pZCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEZhdmljb25DaGFu
Z2VkLCAiZmF2aWNvbixjaGFuZ2VkIiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNL
KExvYWRFcnJvciwgImxvYWQsZXJyb3IiLCBFd2tfRXJyb3IqKTsKIERFQ0xBUkVfRVdLX1ZJRVdf
Q0FMTEJBQ0soTG9hZEZpbmlzaGVkLCAibG9hZCxmaW5pc2hlZCIsIHZvaWQpOwogREVDTEFSRV9F
V0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNv
bl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2
aWNvbl9kYXRhYmFzZS5jcHAKaW5kZXggNDVhNzNmYjUuLjhhZjhmMWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFz
ZS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgogI2lu
Y2x1ZGUgIldLSWNvbkRhdGFiYXNlQ2Fpcm8uaCIKICNpbmNsdWRlICJXS1VSTC5oIgotI2luY2x1
ZGUgIldlYkljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3By
aXZhdGUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZWZQdHJDYWlyby5oPgpAQCAtNDYsNyArNDUsNiBAQCBFd2tGYXZpY29uRGF0
YWJhc2U6OkV3a0Zhdmljb25EYXRhYmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2Up
CiAgICAgbWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRhYmFz
ZUNsaWVudCkpOwogICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9uID0ga1dLSWNvbkRhdGFi
YXNlQ2xpZW50Q3VycmVudFZlcnNpb247CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVudElu
Zm8gPSB0aGlzOwotICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVS
TCA9IGRpZENoYW5nZUljb25Gb3JQYWdlVVJMOwogICAgIGljb25EYXRhYmFzZUNsaWVudC5pY29u
RGF0YVJlYWR5Rm9yUGFnZVVSTCA9IGljb25EYXRhUmVhZHlGb3JQYWdlVVJMOwogICAgIFdLSWNv
bkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KG1faWNvbkRhdGFiYXNlLmdldCgpLCAmaWNv
bkRhdGFiYXNlQ2xpZW50KTsKIH0KQEAgLTU2LDE0ICs1NCw2IEBAIEV3a0Zhdmljb25EYXRhYmFz
ZTo6fkV3a0Zhdmljb25EYXRhYmFzZSgpCiAgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0YWJh
c2VDbGllbnQobV9pY29uRGF0YWJhc2UuZ2V0KCksIDApOwogfQogCi1TdHJpbmcgRXdrRmF2aWNv
bkRhdGFiYXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0
Ci17Ci0gICAgU3RyaW5nIGljb25VUkw7Ci0gICAgdG9JbXBsKG1faWNvbkRhdGFiYXNlLmdldCgp
KS0+c3luY2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKLQotICAg
IHJldHVybiBpY29uVVJMOwotfQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6d2F0Y2hDaGFu
Z2VzKGNvbnN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKIHsKICAgICBB
U1NFUlQoY2FsbGJhY2tEYXRhLmNhbGxiYWNrKTsKQEAgLTc5LDU1ICs2OSw2IEBAIHZvaWQgRXdr
RmF2aWNvbkRhdGFiYXNlOjp1bndhdGNoQ2hhbmdlcyhFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29u
X0NoYW5nZV9DYiBjYWxsCiAgICAgbV9jaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKGNhbGxiYWNrKTsK
IH0KIAotc3RydWN0IEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSB7Ci0gICAgU3RyaW5nIHBhZ2VV
Ukw7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKLSAgICBJY29uUmVxdWVz
dENhbGxiYWNrRGF0YSBjYWxsYmFja0RhdGE7Ci0KLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9u
c2UoY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3Vy
ZmFjZSwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKLSAgICAg
ICAgOiBwYWdlVVJMKHBhZ2VVUkwpCi0gICAgICAgICwgc3VyZmFjZShzdXJmYWNlKQotICAgICAg
ICAsIGNhbGxiYWNrRGF0YShjYWxsYmFja0RhdGEpCi0gICAgeyB9Ci19OwotCi1zdGF0aWMgRWlu
YV9Cb29sIHJlc3BvbmRfaWNvbl9yZXF1ZXN0X2lkbGUodm9pZCogZGF0YSkKLXsKLSAgICBBc3lu
Y0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gc3RhdGljX2Nhc3Q8QXN5bmNJY29uUmVx
dWVzdFJlc3BvbnNlKj4oZGF0YSk7Ci0KLSAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGljb24gPSBy
ZXNwb25zZS0+c3VyZmFjZSA/IFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fpcm9JbWFnZVN1cmZh
Y2UocmVzcG9uc2UtPmNhbGxiYWNrRGF0YS5ldmFzLCByZXNwb25zZS0+c3VyZmFjZS5nZXQoKSkg
OiAwOwotICAgIHJlc3BvbnNlLT5jYWxsYmFja0RhdGEuY2FsbGJhY2socmVzcG9uc2UtPnBhZ2VV
UkwudXRmOCgpLmRhdGEoKSwgaWNvbi5nZXQoKSwgcmVzcG9uc2UtPmNhbGxiYWNrRGF0YS51c2Vy
RGF0YSk7Ci0KLSAgICBkZWxldGUgcmVzcG9uc2U7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJB
Q0tfRE9ORTsKLX0KLQotdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6Omljb25Gb3JQYWdlVVJMKGNv
bnN0IGNoYXIqIHBhZ2VVUkwsIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFj
a0RhdGEpCi17Ci0gICAgLy8gV2UgYXNrIGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9u
J3QgZ2V0IHRoZSBpY29uIGRhdGEgbm93LAotICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVy
IChldmVuIGlmIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgotICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a1BhZ2VVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcocGFnZVVSTCkpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2Ug
PSBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkod2tQYWdlVVJMLmdldCgpKTsKLQotICAgIC8v
IElmIHRoZXJlJ3Mgbm8gdmFsaWQgaWNvbiwgYnV0IHRoZXJlJ3MgYW4gaWNvblVSTCByZWdpc3Rl
cmVkLAotICAgIC8vIG9yIGl0J3Mgc3RpbGwgbm90IHJlZ2lzdGVyZWQgYnV0IHRoZSBpbXBvcnQg
cHJvY2VzcyBoYXNuJ3QKLSAgICAvLyBmaW5pc2hlZCB5ZXQsIHdlIG5lZWQgdG8gd2FpdCBmb3Ig
aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwgdG8gYmUKLSAgICAvLyBjYWxsZWQgYmVmb3JlIG1ha2lu
ZyBhbmQgaW5mb3JtZWQgZGVjaXNpb24uCi0gICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBTdHJp
bmc6OmZyb21VVEY4KHBhZ2VVUkwpOwotICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVSTEZvclBh
Z2VVUkwocGFnZVVSTFN0cmluZyk7Ci0gICAgaWYgKCFzdXJmYWNlICYmICghaWNvblVSTC5pc0Vt
cHR5KCkgfHwgIXRvSW1wbChtX2ljb25EYXRhYmFzZS5nZXQoKSktPmlzVXJsSW1wb3J0Q29tcGxl
dGVkKCkpKSB7Ci0gICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciByZXF1ZXN0cyA9IG1f
aWNvblJlcXVlc3RzLmdldChwYWdlVVJMU3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdHMuYXBwZW5k
KGNhbGxiYWNrRGF0YSk7Ci0gICAgICAgIG1faWNvblJlcXVlc3RzLnNldChwYWdlVVJMU3RyaW5n
LCByZXF1ZXN0cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXNwb25kIHdo
ZW4gaWRsZS4KLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gbmV3IEFz
eW5jSWNvblJlcXVlc3RSZXNwb25zZShwYWdlVVJMU3RyaW5nLCBzdXJmYWNlLnJlbGVhc2UoKSwg
Y2FsbGJhY2tEYXRhKTsKLSAgICBlY29yZV9pZGxlcl9hZGQocmVzcG9uZF9pY29uX3JlcXVlc3Rf
aWRsZSwgcmVzcG9uc2UpOwotfQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6ZGlkQ2hhbmdl
SWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkxSZWYsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCiB7CiAgICAgY29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKiBl
d2tJY29uRGF0YWJhc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBFd2tGYXZpY29uRGF0YWJhc2UqPihj
bGllbnRJbmZvKTsKQEAgLTE0MywxNSArODQsMTMgQEAgdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6
OmRpZENoYW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWcK
ICAgICAgICAgaXQtPnZhbHVlLmNhbGxiYWNrKHBhZ2VVUkwuZGF0YSgpLCBpdC0+dmFsdWUudXNl
ckRhdGEpOwogfQogCi1QYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrRmF2aWNvbkRhdGFi
YXNlOjpnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoV0tVUkxSZWYgcGFnZVVSTCkgY29uc3QK
K1Bhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tGYXZpY29uRGF0YWJhc2U6OmdldEljb25T
dXJmYWNlU3luY2hyb25vdXNseShjb25zdCBjaGFyKiBwYWdlVVJMKSBjb25zdAogewotICAgIFdL
SWNvbkRhdGFiYXNlUmV0YWluSWNvbkZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVS
TCk7CisgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrUGFnZVVSTChBZG9wdFdLLCBXS1VSTENy
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYWdlVVJMKSk7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBzdXJmYWNlID0gV0tJY29uRGF0YWJhc2VUcnlHZXRDYWlyb1N1cmZhY2VGb3JVUkwobV9p
Y29uRGF0YWJhc2UuZ2V0KCksIHBhZ2VVUkwpOwotICAgIGlmICghc3VyZmFjZSkgewotICAgICAg
ICBXS0ljb25EYXRhYmFzZVJlbGVhc2VJY29uRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCBw
YWdlVVJMKTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gV0tJY29uRGF0
YWJhc2VUcnlHZXRDYWlyb1N1cmZhY2VGb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHdrUGFn
ZVVSTC5nZXQoKSk7CisgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9
CiAKICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiB9CkBAIC0xNjAsNDEgKzk5LDI2IEBA
IHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0ljb25E
YXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFnCiB7CiAgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBld2tJ
Y29uRGF0YWJhc2UgPSBjb25zdF9jYXN0PEV3a0Zhdmljb25EYXRhYmFzZSo+KHN0YXRpY19jYXN0
PGNvbnN0IEV3a0Zhdmljb25EYXRhYmFzZSo+KGNsaWVudEluZm8pKTsKIAotICAgIFN0cmluZyB1
cmxTdHJpbmcgPSB0b1dURlN0cmluZyhwYWdlVVJMKTsKLSAgICBpZiAoIWV3a0ljb25EYXRhYmFz
ZS0+bV9pY29uUmVxdWVzdHMuY29udGFpbnModXJsU3RyaW5nKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGV3a0ljb25EYXRhYmFzZS0+
Z2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KHBhZ2VVUkwpOworICAgIFdLSWNvbkRhdGFiYXNl
UmV0YWluSWNvbkZvclVSTChld2tJY29uRGF0YWJhc2UtPm1faWNvbkRhdGFiYXNlLmdldCgpLCBw
YWdlVVJMKTsKIAotICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciByZXF1ZXN0c0ZvclVSTCA9
IGV3a0ljb25EYXRhYmFzZS0+bV9pY29uUmVxdWVzdHMudGFrZSh1cmxTdHJpbmcpOwotICAgIHNp
emVfdCByZXF1ZXN0Q291bnQgPSByZXF1ZXN0c0ZvclVSTC5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZXF1ZXN0Q291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBJY29uUmVx
dWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhID0gcmVxdWVzdHNGb3JVUkxbaV07Ci0gICAg
ICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9IHN1cmZhY2UgPyBXZWJDb3JlOjpldmFzT2Jq
ZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGNhbGxiYWNrRGF0YS5ldmFzLCBzdXJmYWNlLmdldCgp
KSA6IDA7Ci0gICAgICAgIGNhbGxiYWNrRGF0YS5jYWxsYmFjayh1cmxTdHJpbmcudXRmOCgpLmRh
dGEoKSwgaWNvbi5nZXQoKSwgY2FsbGJhY2tEYXRhLnVzZXJEYXRhKTsKLSAgICB9CisgICAgQ1N0
cmluZyB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhwYWdlVVJMKS51dGY4KCk7CisgICAgQ2hhbmdl
TGlzdGVuZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXdrSWNvbkRhdGFiYXNlLT5tX2NoYW5n
ZUxpc3RlbmVycy5iZWdpbigpOworICAgIENoYW5nZUxpc3RlbmVyTWFwOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSBld2tJY29uRGF0YWJhc2UtPm1fY2hhbmdlTGlzdGVuZXJzLmVuZCgpOworICAgIGZv
ciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS5jYWxsYmFjayh1cmxTdHJp
bmcuZGF0YSgpLCBpdC0+dmFsdWUudXNlckRhdGEpOwogfQogCi1jb25zdCBjaGFyKiBld2tfZmF2
aWNvbl9kYXRhYmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25E
YXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSTCkKK0V2YXNfT2JqZWN0KiBld2tfZmF2aWNvbl9k
YXRhYmFzZV9pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBj
b25zdCBjaGFyKiBwYWdlVVJMLCBFdmFzKiBldmFzKQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwYWdlVVJMLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXZhcywgMCk7CiAKLSAgICBTdHJpbmcgaWNvblVSTCA9IGV3a0ljb25EYXRhYmFzZS0+
aWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMKSk7Ci0KLSAgICByZXR1
cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQoaWNvblVSTC51dGY4KCkuZGF0YSgpKTsKLX0KLQotRWlu
YV9Cb29sIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0Rh
dGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VfdXJsLCBFdmFzKiBldmFz
LCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBjYWxsYmFjaywgdm9pZCog
dXNlckRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0ljb25E
YXRhYmFzZSwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwYWdl
X3VybCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFzLCBm
YWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbGxiYWNrLCBmYWxz
ZSk7Ci0KLSAgICBld2tJY29uRGF0YWJhc2UtPmljb25Gb3JQYWdlVVJMKHBhZ2VfdXJsLCBJY29u
UmVxdWVzdENhbGxiYWNrRGF0YShjYWxsYmFjaywgdXNlckRhdGEsIGV2YXMpKTsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZXdrSWNvbkRhdGFiYXNlLT5nZXRJY29uU3Vy
ZmFjZVN5bmNocm9ub3VzbHkocGFnZVVSTCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gMDsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXZWJDb3JlOjpldmFzT2Jq
ZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGV2YXMsIHN1cmZhY2UuZ2V0KCkpLmxlYWtSZWYoKTsK
IH0KIAogdm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19hZGQo
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0YWJh
c2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgK
aW5kZXggYjY2YTY3Yi4uNDJjMDlhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCkBAIC00Nyw0MCArNDcsMTYg
QEAgdHlwZWRlZiBzdHJ1Y3QgRXdrRmF2aWNvbkRhdGFiYXNlIEV3a19GYXZpY29uX0RhdGFiYXNl
OwogdHlwZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IpKGNv
bnN0IGNoYXIgKnBhZ2VfdXJsLCB2b2lkICpldmVudF9pbmZvKTsKIAogLyoqCi0gKiBAdHlwZWRl
ZiBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBFd2tfRmF2aWNvbl9EYXRh
YmFzZV9Bc3luY19JY29uX0dldF9DYgotICogQGJyaWVmIENhbGxiYWNrIHR5cGUgZm9yIHVzZSB3
aXRoIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0Ci0gKgotICogVGhlIEBhIGlj
b24gbWF5IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gZmF2aWNvbiBhc3NvY2lhdGVkIHRvIHRoZSBn
aXZlbiBAYSBwYWdlX3VybC4KLSAqCi0gKiBZb3UgbmVlZCB0byBjYWxsIGV2YXNfb2JqZWN0X3Jl
ZigpIG9uIHRoZSBAYSBpY29uIGlmIHlvdSB3aXNoIHRvIGtlZXAgaXQgYWZ0ZXIgdGhlCi0gKiBj
YWxsYmFjayBpcyBleGVjdXRlZC4KLSAqLwotdHlwZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0
YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IpKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzX09iamVj
dCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbyk7Ci0KLS8qKgotICogUmV0cmlldmVzIGZyb20gdGhl
IGRhdGFiYXNlIHRoZSBmYXZpY29uIFVSTCBmb3IgdGhlIGdpdmVuIEBhIHBhZ2VfdXJsCi0gKgot
ICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0byBxdWVyeQotICogQHBhcmFtIHBh
Z2VfdXJsIFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZhdmljb24gVVJMIGZvcgotICoKLSAq
IEByZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9z
dHJpbmdzaGFyZQotICogICAgICAgICBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3Igb3IgaWYg
dGhlIGtleSBkb2VzIG5vdCBleGlzdC4KLSAqICAgICAgICAgWW91IG5lZWQgdG8gY2FsbCBlaW5h
X3N0cmluZ3NoYXJlX2RlbCgpIGFmdGVyIHVzZS4KLSAqLwotRUFQSSBjb25zdCBjaGFyICpld2tf
ZmF2aWNvbl9kYXRhYmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UgKmRhdGFi
YXNlLCBjb25zdCBjaGFyICpwYWdlX3VybCk7Ci0KLS8qKgogICogUmV0cmlldmVzIGFzeW5jaHJv
bm91c2x5IGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIGZvciB0aGUgZ2l2ZW4gQGEgcGFn
ZV91cmwKICAqCiAgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5CiAg
KiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBmb3IK
ICAqIEBwYXJhbSBldmFzIFRoZSBjYW52YXMgdG8gYWRkIHRoZSBmYXZpY29uIHRvCi0gKiBAcGFy
YW0gY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIGljb24g
aXMgcmV0cmlldmVkCi0gKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBwb2ludGVyIHRoYXQgd2FzIHRv
IGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKICAqCi0gKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBp
ZiB0aGUgaWNvbiB3YXMgc3VjY2Vzc2Z1bHkgcmVxdWVzdGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVy
d2lzZQorICogQHJldHVybiBUaGUgZmF2aWNvbiBhcyBhbiBFdmFzX09iamVjdCBpZiBzdWNjZXNz
ZnVsLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFzX09iamVjdCBuZWVk
cyB0byBiZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgRWluYV9Cb29sIGV3a19mYXZpY29u
X2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwg
Y29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMsIEV3a19GYXZpY29uX0RhdGFiYXNlX0Fz
eW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK0VBUEkgRXZhc19PYmplY3Qg
KmV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRh
YmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMpOwogCiAvKioKICAqIEFkZCAo
cmVnaXN0ZXIpIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBpY29uIGNoYW5nZSBldmVudApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0
YWJhc2VfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zh
dmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCmluZGV4IDc1MzViZGQuLmVmYjVlN2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNl
X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2
aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKQEAgLTQ2LDI3ICs0Niw3IEBAIHN0cnVjdCBJY29uQ2hh
bmdlQ2FsbGJhY2tEYXRhIHsKICAgICB7IH0KIH07CiAKLXN0cnVjdCBJY29uUmVxdWVzdENhbGxi
YWNrRGF0YSB7Ci0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2Fs
bGJhY2s7Ci0gICAgdm9pZCogdXNlckRhdGE7Ci0gICAgRXZhcyogZXZhczsKLQotICAgIEljb25S
ZXF1ZXN0Q2FsbGJhY2tEYXRhKCkKLSAgICAgICAgOiBjYWxsYmFjaygwKQotICAgICAgICAsIHVz
ZXJEYXRhKDApCi0gICAgICAgICwgZXZhcygwKQotICAgIHsgfQotCi0gICAgSWNvblJlcXVlc3RD
YWxsYmFja0RhdGEoRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgX2NhbGxi
YWNrLCB2b2lkKiBfdXNlckRhdGEsIEV2YXMqIF9ldmFzKQotICAgICAgICA6IGNhbGxiYWNrKF9j
YWxsYmFjaykKLSAgICAgICAgLCB1c2VyRGF0YShfdXNlckRhdGEpCi0gICAgICAgICwgZXZhcyhf
ZXZhcykKLSAgICB7IH0KLX07Ci0KIHR5cGVkZWYgSGFzaE1hcDxFd2tfRmF2aWNvbl9EYXRhYmFz
ZV9JY29uX0NoYW5nZV9DYiwgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YT4gQ2hhbmdlTGlzdGVuZXJN
YXA7Ci10eXBlZGVmIFZlY3RvcjxJY29uUmVxdWVzdENhbGxiYWNrRGF0YT4gUGVuZGluZ0ljb25S
ZXF1ZXN0VmVjdG9yOwotdHlwZWRlZiBIYXNoTWFwPFN0cmluZyAvKiBwYWdlVVJMICovLCBQZW5k
aW5nSWNvblJlcXVlc3RWZWN0b3I+IFBlbmRpbmdJY29uUmVxdWVzdE1hcDsKIAogY2xhc3MgRXdr
RmF2aWNvbkRhdGFiYXNlIHsKIHB1YmxpYzoKQEAgLTc2LDIzICs1NiwxOCBAQCBwdWJsaWM6CiAg
ICAgfQogICAgIH5Fd2tGYXZpY29uRGF0YWJhc2UoKTsKIAotICAgIFN0cmluZyBpY29uVVJMRm9y
UGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0OwotICAgIHZvaWQgaWNvbkZvclBh
Z2VVUkwoY29uc3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEm
IGNhbGxiYWNrRGF0YSk7Ci0KKyAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZ2V0SWNv
blN1cmZhY2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBhZ2VVUkwpIGNvbnN0OwogICAgIHZv
aWQgd2F0Y2hDaGFuZ2VzKGNvbnN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0
YSk7CiAgICAgdm9pZCB1bndhdGNoQ2hhbmdlcyhFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0No
YW5nZV9DYiBjYWxsYmFjayk7CiAKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgRXdrRmF2aWNvbkRh
dGFiYXNlKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSk7CiAKLSAgICBQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdLVVJMUmVmIHBh
Z2VVUkwpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwo
V0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBpY29uRGF0YVJlYWR5Rm9yUGFnZVVS
TChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdLVVJMUmVmIHBhZ2VVUkwsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pOwogCiAgICAgV0tSZXRhaW5QdHI8V0tJY29uRGF0YWJhc2VSZWY+
IG1faWNvbkRhdGFiYXNlOwogICAgIENoYW5nZUxpc3RlbmVyTWFwIG1fY2hhbmdlTGlzdGVuZXJz
OwotICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBtX2ljb25SZXF1ZXN0czsKIH07CiAKICNlbmRp
ZiAvLyBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCAyMzJjYzBmLi5iYzhhZDQ4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC01Nzcs
MTEgKzU3NywxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBpbXBsLT51cmwoKTsKIH0KIAotY29uc3QgY2hhciAq
ZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KQorRXZhc19P
YmplY3QqIGV3a192aWV3X2Zhdmljb25fbmV3KGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3KQog
ewogICAgIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihld2tWaWV3LCBpbXBsLCAwKTsKIAot
ICAgIHJldHVybiBpbXBsLT5mYXZpY29uVVJMKCk7CisgICAgcmV0dXJuIGltcGwtPmNyZWF0ZUZh
dmljb24oKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCogZXdr
VmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4
IDExYmViOTQuLmFkZDQ1YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaApAQCAtNDgsNyArNDgsOCBAQAogICogICB3aGVuIGRvbmUgdG8gY29udGludWUg
d2l0aCB0aGUgZm9ybSBzdWJtaXNzaW9uLiBJZiB0aGUgbGFzdCByZWZlcmVuY2UgaXMgcmVtb3Zl
ZCBvbiBhCiAgKiAgICNFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgYW5kIHRoZSBmb3JtIGhh
cyBub3QgYmVlbiBzdWJtaXR0ZWQgeWV0LAogICogICBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVl
c3Rfc3VibWl0KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseS4KLSAqIC0gImljb24sY2hh
bmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydzIGZhdmljb24gaGFzIGNoYW5nZWQu
CisgKiAtICJmYXZpY29uLGNoYW5nZWQiLCB2b2lkOiByZXBvcnRzIHRoYXQgdGhlIHZpZXcncyBm
YXZpY29uIGhhcyBjaGFuZ2VkLiBUaGUgZmF2aWNvbiBjYW4gYmUgcXVlcmllZCB1c2luZworICog
ICBld2tfdmlld19mYXZpY29uX25ldygpLgogICogLSAibG9hZCxlcnJvciIsIGNvbnN0IEV3a19F
cnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxlZC4KICAqIC0gImxvYWQsZmluaXNo
ZWQiLCB2b2lkOiByZXBvcnRzIGxvYWQgZmluaXNoZWQuCiAgKiAtICJsb2FkLHByb2dyZXNzIiwg
ZG91YmxlKjogbG9hZCBwcm9ncmVzcyBoYXMgY2hhbmdlZCAodmFsdWUgZnJvbSAwLjAgdG8gMS4w
KS4KQEAgLTM3MiwxNiArMzczLDE0IEBAIEVBUEkgRWluYV9Cb29sIGV3a192aWV3X3VybF9zZXQo
RXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnVybCk7CiBFQVBJIGNvbnN0IGNoYXIgKmV3a192
aWV3X3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwogCiAvKioKLSAqIFJldHVybnMgdGhl
IGN1cnJlbnQgaWNvbiBVUkwgb2YgdmlldyBvYmplY3QuCi0gKgotICogSXQgcmV0dXJucyBhbiBp
bnRlcm5hbCBzdHJpbmcgYW5kIHNob3VsZCBub3QKLSAqIGJlIG1vZGlmaWVkLiBUaGUgc3RyaW5n
IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgorICogUmV0dXJucyB0aGUgY3VycmVu
dCBmYXZpY29uIG9mIHZpZXcgb2JqZWN0LgogICoKICAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHRv
IGdldCBjdXJyZW50IGljb24gVVJMCiAgKgotICogQHJldHVybiBjdXJyZW50IGljb24gVVJMIG9u
IHN1Y2Nlc3Mgb3IgQGMgTlVMTCBpZiB1bmF2YWlsYWJsZSBvciBvbiBmYWlsdXJlCisgKiBAcmV0
dXJuIGN1cnJlbnQgZmF2aWNvbiBvbiBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFibGUg
b3Igb24gZmFpbHVyZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFzX09iamVjdCBuZWVkcyB0byBiZSBm
cmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgY29uc3QgY2hhciAqZXdrX3ZpZXdfaWNvbl91cmxf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRXZhc19PYmplY3QgKmV3a192aWV3X2Zh
dmljb25fbmV3KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCiAgKiBBc2tzIHRoZSBtYWlu
IGZyYW1lIHRvIHJlbG9hZCB0aGUgY3VycmVudCBkb2N1bWVudC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9mYXZpY29uX2RhdGFiYXNlLmNwcAppbmRleCAwZmYxZGYwLi5lN2JlYjZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNv
bl9kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBAIC03NSw1NCArNzUsNiBAQCBzdGF0
aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBodHRwU2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgYwogICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3Nh
Z2UtPnJlc3BvbnNlX2JvZHkpOwogfQogCi1zdGF0aWMgdm9pZCBvbkljb25DaGFuZ2VkKHZvaWQq
IHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKLXsKLSAgICBib29sKiBp
Y29uQ2hhbmdlZCA9IHN0YXRpY19jYXN0PGJvb2wqPih1c2VyRGF0YSk7Ci0gICAgKmljb25DaGFu
Z2VkID0gdHJ1ZTsKLX0KLQotVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2Rh
dGFiYXNlX3VybF9nZXQpCi17Ci0gICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZlcj4gaHR0cFNl
cnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOwotICAgIGh0dHBTZXJ2ZXIt
PnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICAvLyBTZXQgZmF2aWNvbiBkYXRhYmFzZSBwYXRo
IGFuZCBlbmFibGUgZnVuY3Rpb25hbGl0eS4KLSAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3
a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7Ci0gICAgZXdrX2NvbnRleHRfZmF2aWNvbl9k
YXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwotCi0gICAgYm9vbCBpY29uQ2hhbmdl
ZCA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCks
ICJpY29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkLCAmaWNvbkNoYW5nZWQpOwotCi0gICAgLy8g
V2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdp
bGwgYmUKLSAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0
ZWQgZmF2aWNvbi4KLSAgICBBU1NFUlRfVFJVRShsb2FkVXJsU3luYyhodHRwU2VydmVyLT5nZXRV
UkxGb3JQYXRoKCIvIikuZGF0YSgpKSk7Ci0KLSAgICB3aGlsZSAoIWljb25DaGFuZ2VkKQotICAg
ICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotCi0gICAgQVNTRVJUX1RSVUUoaWNvbkNo
YW5nZWQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJp
Y29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkKTsKLQotICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0
cmlldmluZyBhIGZhdmljb24gVVJMLgotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29u
RGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKLSAg
ICBBU1NFUlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOwotCi0gICAgQ1N0cmluZyBleHBlY3RlZEZh
dmljb25VUkwgPSBodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvZmF2aWNvbi5pY28iKTsKLSAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgaWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25f
dXJsX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQod2ViVmlldygpKSk7Ci0g
ICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5kYXRhKCksIGljb25VUkwpOwotCi0g
ICAgY29uc3QgY2hhciogdmlld0ljb25VUkwgPSBld2tfdmlld19pY29uX3VybF9nZXQod2ViVmll
dygpKTsKLSAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZpY29uVVJMLmRhdGEoKSwgdmlld0lj
b25VUkwpOwotfQotCi1zdGF0aWMgdm9pZCBvbkljb25EYXRhUmVhZHkoY29uc3QgY2hhciogcGFn
ZV91cmwsIEV2YXNfT2JqZWN0KiBpY29uLCB2b2lkKiBldmVudF9pbmZvKQotewotICAgIEV2YXNf
T2JqZWN0KiogcmV0dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2YXNfT2JqZWN0Kio+KGV2ZW50X2lu
Zm8pOwotICAgIGlmIChpY29uKQotICAgICAgICBldmFzX29iamVjdF9yZWYoaWNvbik7Ci0gICAg
KnJldHVybkljb24gPSBpY29uOwotfQotCiBzdHJ1Y3QgSWNvblJlcXVlc3REYXRhIHsKICAgICBF
dmFzX09iamVjdCogdmlldzsKICAgICBFdmFzX09iamVjdCogaWNvbjsKQEAgLTEzMiwxMyArODQs
MTMgQEAgc3RhdGljIHZvaWQgcmVxdWVzdEZhdmljb25EYXRhKHZvaWQqIHVzZXJEYXRhLCBFdmFz
X09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBJY29uUmVxdWVzdERhdGEqIGRhdGEg
PSBzdGF0aWNfY2FzdDxJY29uUmVxdWVzdERhdGEqPih1c2VyRGF0YSk7CiAKLSAgICAvLyBDaGVj
ayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uLgorICAgIC8vIENoZWNrIHRoZSBB
UEkgcmV0cmlldmluZyBhIHZhbGlkIGZhdmljb24gZnJvbSBpY29uIGRhdGFiYXNlLgogICAgIEV3
a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQoZGF0YS0+dmlldyk7CiAg
ICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zh
dmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOwogICAgIEFTU0VSVF9UUlVFKGZhdmljb25EYXRh
YmFzZSk7CiAKICAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQoZGF0YS0+dmll
dyk7Ci0gICAgQVNTRVJUX1RSVUUoZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQo
ZmF2aWNvbkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KGRhdGEtPnZpZXcpLCBldmFzLCBvbklj
b25EYXRhUmVhZHksICZkYXRhLT5pY29uKSk7CisgICAgZGF0YS0+aWNvbiA9IGV3a19mYXZpY29u
X2RhdGFiYXNlX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRh
LT52aWV3KSwgZXZhcyk7CiB9CiAKIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNv
bl9kYXRhYmFzZV9hc3luY19pY29uX2dldCkKQEAgLTE1MSw3ICsxMDMsNyBAQCBURVNUX0YoRVdL
MlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpCiAgICAg
ZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwog
CiAgICAgSWNvblJlcXVlc3REYXRhIGRhdGEgPSB7IHdlYlZpZXcoKSwgMCB9OwotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCByZXF1
ZXN0RmF2aWNvbkRhdGEsICZkYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2ViVmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhLCAmZGF0
YSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8gZW5zdXJlIHRo
ZSBpY29uIGRhdGEgd2lsbCBiZQogICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBjYXNlIHRoZXJl
J3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgpAQCAtMTYxLDEzICsxMTMsMjAgQEAgVEVTVF9GKEVX
SzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KQogICAg
ICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwogCiAgICAgQVNTRVJUX1RSVUUoZGF0YS5p
Y29uKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiaWNv
bixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19kZWwod2ViVmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25E
YXRhKTsKIAogICAgIC8vIEl0IGlzIGEgMTZ4MTYgZmF2aWNvbi4KICAgICBpbnQgd2lkdGgsIGhl
aWdodDsKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChkYXRhLmljb24sICZ3aWR0aCwg
JmhlaWdodCk7CiAgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7CiAgICAgRVhQRUNUX0VRKDE2LCBo
ZWlnaHQpOwotCiAgICAgZXZhc19vYmplY3RfdW5yZWYoZGF0YS5pY29uKTsKKworICAgIC8vIFRl
c3QgQVBJIHRvIHJlcXVlc3QgZmF2aWNvbiBmcm9tIHRoZSB2aWV3CisgICAgRXZhc19PYmplY3Qq
IGZhdmljb24gPSBld2tfdmlld19mYXZpY29uX25ldyh3ZWJWaWV3KCkpOworICAgIEFTU0VSVF9U
UlVFKGZhdmljb24pOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KGZhdmljb24sICZ3
aWR0aCwgJmhlaWdodCk7CisgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7CisgICAgRVhQRUNUX0VR
KDE2LCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3VucmVmKGZhdmljb24pOwogfQpkaWZmIC0t
Z2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU2YTBiZjMuLmU0
ZjJmMGEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0wMSAgQ2hyaXN0b3BoZSBEdW1leiAgPGRjaHJpc0Bn
bWFpbC5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBSZWZhY3RvciBFd2tfRmF2aWNvbiBjb2Rl
IGFuZCBzdG9wIHJlbHlpbmcgb24gaW50ZXJuYWwgQysrIEFQSQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA4NTk4CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIEVGTCdzIE1pbmlCcm93c2VyIHRv
IG1ha2UgdXNlIG9mIG5ldyBFd2tfRmF2aWNvbiBBUEkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nl
ci9lZmwvbWFpbi5jOgorICAgICAgICAodXBkYXRlX3ZpZXdfZmF2aWNvbik6CisgICAgICAgIChv
bl92aWV3X2Zhdmljb25fY2hhbmdlZCk6CisgICAgICAgICh3aW5kb3dfY3JlYXRlKToKKwogMjAx
My0wMS0zMSAgRGF2aWQgRmFybGVyICA8ZGZhcmxlckBhcHBsZS5jb20+CiAKICAgICAgICAgUHJv
dmlkZSBhIHNlbnNpYmxlIGRlZmF1bHQgYXJjaGl0ZWN0dXJlIHdoZW4gYnVpbGRpbmcgb24gaU9T
IFNES3MKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMgYi9Ub29scy9N
aW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4IGMwM2MwOGYuLjM4NDNiMmMgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZs
L21haW4uYwpAQCAtNTM2LDEyICs1MzYsOCBAQCBvbl9kb3dubG9hZF9mYWlsZWQodm9pZCAqdXNl
cl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB9CiAKIHN0
YXRpYyB2b2lkCi1vbl9mYXZpY29uX3JlY2VpdmVkKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFz
X09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbykKK3VwZGF0ZV92aWV3X2Zhdmljb24oQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdywgRXZhc19PYmplY3QgKmljb24pCiB7Ci0gICAgQnJvd3Nlcl9X
aW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKWV2ZW50X2luZm87Ci0gICAgaWYgKHN0
cmNtcChwYWdlX3VybCwgZXdrX3ZpZXdfdXJsX2dldCh3aW5kb3ctPmV3a192aWV3KSkpCi0gICAg
ICAgIHJldHVybjsKLQogICAgIC8qIFJlbW92ZSBwcmV2aW91cyBpY29uIGZyb20gVVJMIGJhciAq
LwogICAgIEV2YXNfT2JqZWN0ICpvbGRfaWNvbiA9IGVsbV9vYmplY3RfcGFydF9jb250ZW50X3Vu
c2V0KHdpbmRvdy0+dXJsX2JhciwgImljb24iKTsKICAgICBpZiAob2xkX2ljb24pIHsKQEAgLTU2
MiwxNiArNTU4LDE1IEBAIG9uX2Zhdmljb25fcmVjZWl2ZWQoY29uc3QgY2hhciAqcGFnZV91cmws
IEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZvKQogfQogCiBzdGF0aWMgdm9pZAot
b25fdmlld19pY29uX2NoYW5nZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3Zp
ZXcsIHZvaWQgKmV2ZW50X2luZm8pCitvbl92aWV3X2Zhdmljb25fY2hhbmdlZCh2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKIHsKICAgICBC
cm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAg
IC8qIFJldHJpZXZlIHRoZSB2aWV3J3MgZmF2aWNvbiAqLwotICAgIEV3a19Db250ZXh0ICpjb250
ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQoZXdrX3ZpZXcpOwotICAgIEV3a19GYXZpY29uX0Rh
dGFiYXNlICppY29uX2RhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQo
Y29udGV4dCk7CiAKLSAgICBjb25zdCBjaGFyICpwYWdlX3VybCA9IGV3a192aWV3X3VybF9nZXQo
ZXdrX3ZpZXcpOwotICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChld2tfdmll
dyk7Ci0gICAgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoaWNvbl9kYXRhYmFz
ZSwgcGFnZV91cmwsIGV2YXMsIG9uX2Zhdmljb25fcmVjZWl2ZWQsIHdpbmRvdyk7CisgICAgRXZh
c19PYmplY3QqIGZhdmljb24gPSBld2tfdmlld19mYXZpY29uX25ldyhld2tfdmlldyk7CisgICAg
dXBkYXRlX3ZpZXdfZmF2aWNvbih3aW5kb3csIGZhdmljb24pOworCisgICAgaWYgKGZhdmljb24p
CisgICAgICAgIGV2YXNfb2JqZWN0X3VucmVmKGZhdmljb24pOwogfQogCiBzdGF0aWMgaW50CkBA
IC0xMjE0LDcgKzEyMDksNyBAQCBzdGF0aWMgQnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUo
RXZhc19PYmplY3QgKm9wZW5lciwgY29uc3QgY2hhciAqdXJsLCBpbnQgdwogICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNo
ZWQiLCBvbl9kb3dubG9hZF9maW5pc2hlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9k
b3dubG9hZF9yZXF1ZXN0LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBvbl9maWxlX2No
b29zZXJfcmVxdWVzdCwgd2luZG93KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImljb24sY2hhbmdlZCIsIG9uX3ZpZXdfaWNvbl9jaGFuZ2Vk
LCB3aW5kb3cpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3
a192aWV3LCAiZmF2aWNvbixjaGFuZ2VkIiwgb25fdmlld19mYXZpY29uX2NoYW5nZWQsIHdpbmRv
dyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcs
ICJsb2FkLGVycm9yIiwgb25fZXJyb3IsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2FkLHByb2dyZXNzIiwgb25fcHJvZ3Jl
c3MsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+
ZXdrX3ZpZXcsICJ0aXRsZSxjaGFuZ2VkIiwgb25fdGl0bGVfY2hhbmdlZCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187865</attachid>
            <date>2013-02-12 07:38:40 -0800</date>
            <delta_ts>2013-02-12 13:24:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>30097</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NjYyNDc3Li4wOTAxMTRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQg
c3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNv
IHRoYXQgaXQgbm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFu
ZCBzbyB0aGF0IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hh
bmdlZAorICAgICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlz
IG5vIGxvbmdlciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVu
dCBpcyBub3cgb25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAg
ZmF2aWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBh
cmUKKyAgICAgICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlm
aWVkIG9mIGZhdmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAg
ICBiZWNvbWVzIGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5
bmNocm9ub3VzLiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEg
aXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZp
Y29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6
CisgICAgICAgIChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fbmV3KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24s
Y2hhbmdlZCcgc2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAg
ICAgICBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3Zl
IEFQSSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQg
Ynkgb25lIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNf
T2JqZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8g
dXNlIHRoZSBuZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMTEgIEh1YW5nIERvbmdzdW5nICA8
bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6
IE1ha2UgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIG5vdCBrbm93IGNvbnRlbnRzIHNpemUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGM0NTMz
MTMuLmMxY2ZkMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCkBAIC03NDcsMjMgKzc0Nyw2IEBAIHZvaWQgRXdrVmlldzo6c2V0VG91Y2hFdmVudHNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIH0KICNlbmRpZgogCi0vKioKLSAqIEBpbnRlcm5hbAotICog
VXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbiBhbmQgZW1pdHMgYSAiaWNvbixjaGFuZ2VkIiBzaWdu
YWwgaWYgaXQgaGFzCi0gKiBjaGFuZ2VkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW5ldmVyIHRoZSBVUkwgaGFzIGNoYW5nZWQgb3Igd2hlbiB0aGUgaWNvbiBmb3IKLSAqIHRo
ZSBjdXJyZW50IHBhZ2UgVVJMIGhhcyBjaGFuZ2VkLgotICovCi12b2lkIEV3a1ZpZXc6OmluZm9y
bUljb25DaGFuZ2UoKQotewotICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0g
bV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKLSAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsK
LQotICAgIG1fZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChp
Y29uRGF0YWJhc2UsIG1fdXJsKTsKLSAgICBzbWFydENhbGxiYWNrPEljb25DaGFuZ2VkPigpLmNh
bGwoKTsKLX0KLQogYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYg
dmlld1NpemUpCiB7CiAgICAgaWYgKCFtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkKQEAgLTEwMjYs
NyArMTAwOSwxNiBAQCB2b2lkIEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSgpCiAgICAgc21hcnRD
YWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2
aWV3J3MgZmF2aWNvbi4KLSAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CisgICAgc21hcnRDYWxsYmFj
azxGYXZpY29uQ2hhbmdlZD4oKS5jYWxsKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBFd2tWaWV3Ojpj
cmVhdGVGYXZpY29uKCkgY29uc3QKK3sKKyAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRh
YmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGljb25EYXRh
YmFzZSk7CisKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHNtYXJ0RGF0YSgpOworICAg
IHJldHVybiBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldChpY29uRGF0YWJhc2UsIG1fdXJs
LCBzZC0+YmFzZS5ldmFzKTsKIH0KIAogRXdrV2luZG93RmVhdHVyZXMqIEV3a1ZpZXc6OndpbmRv
d0ZlYXR1cmVzKCkKQEAgLTEzMjIsNyArMTMxNCw3IEBAIHZvaWQgRXdrVmlldzo6aGFuZGxlRmF2
aWNvbkNoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZlbnRJbmZvKQogICAgIGlm
ICghdmlldy0+dXJsKCkgfHwgc3RyY2FzZWNtcCh2aWV3LT51cmwoKSwgcGFnZVVSTCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHZpZXctPmluZm9ybUljb25DaGFuZ2UoKTsKKyAgICB2aWV3LT5z
bWFydENhbGxiYWNrPEZhdmljb25DaGFuZ2VkPigpLmNhbGwoKTsKIH0KIAogUGFzc1JlZlB0cjxj
YWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggOWFkZmIwZi4uNzhhOGVlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApAQCAtMTM0LDcgKzEzNCw3
IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtVG9TY3Jl
ZW4oKSBjb25zdDsKIAogICAgIGNvbnN0IGNoYXIqIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJs
OyB9Ci0gICAgY29uc3QgY2hhciogZmF2aWNvblVSTCgpIGNvbnN0IHsgcmV0dXJuIG1fZmF2aWNv
blVSTDsgfQorICAgIEV2YXNfT2JqZWN0KiBjcmVhdGVGYXZpY29uKCkgY29uc3Q7CiAgICAgY29u
c3QgY2hhciogdGl0bGUoKSBjb25zdDsKICAgICBXZWJLaXQ6OklucHV0TWV0aG9kQ29udGV4dEVm
bCogaW5wdXRNZXRob2RDb250ZXh0KCk7CiAKQEAgLTIyMSw4ICsyMjEsNiBAQCBwcml2YXRlOgog
CiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29yZGluYXRlZEdyYXBo
aWNzU2NlbmUoKTsKIAotICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwotCiAgICAgLy8gRXZh
c19TbWFydF9DbGFzcyBjYWxsYmFjayBpbnRlcmZhY2U6CiAgICAgc3RhdGljIHZvaWQgaGFuZGxl
RXZhc09iamVjdEFkZChFdmFzX09iamVjdCopOwogICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNP
YmplY3REZWxldGUoRXZhc19PYmplY3QqKTsKQEAgLTI3Niw3ICsyNzQsNiBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICBSZWZQdHI8RXdrV2luZG93
RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCogbV9jdXJzb3JJZGVu
dGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0LgotICAgIFdLRWlu
YVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdXJs
OwogICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGl0bGU7CiAgICAgV0tFaW5hU2hh
cmVkU3RyaW5nIG1fdGhlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXggMGU3NjNhMy4uMDBkMGQzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaApA
QCAtNTYsNyArNTYsNyBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgRG93bmxvYWRKb2JSZXF1
ZXN0ZWQsCiAgICAgRmlsZUNob29zZXJSZXF1ZXN0LAogICAgIE5ld0Zvcm1TdWJtaXNzaW9uUmVx
dWVzdCwKLSAgICBJY29uQ2hhbmdlZCwKKyAgICBGYXZpY29uQ2hhbmdlZCwKICAgICBMb2FkRXJy
b3IsCiAgICAgTG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9ncmVzcywKQEAgLTE2Niw3ICsxNjYs
NyBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iRmluaXNoZWQsICJkb3du
bG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZAogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhE
b3dubG9hZEpvYlJlcXVlc3RlZCwgImRvd25sb2FkLHJlcXVlc3QiLCBFd2tfRG93bmxvYWRfSm9i
Kik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEZpbGVDaG9vc2VyUmVxdWVzdCwgImZpbGUs
Y2hvb3NlcixyZXF1ZXN0IiwgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Kik7CiBERUNMQVJFX0VX
S19WSUVXX0NBTExCQUNLKE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVzdCwgImZvcm0sc3VibWlzc2lv
bixyZXF1ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0Kik7Ci1ERUNMQVJFX0VXS19W
SUVXX0NBTExCQUNLKEljb25DaGFuZ2VkLCAiaWNvbixjaGFuZ2VkIiwgdm9pZCk7CitERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKEZhdmljb25DaGFuZ2VkLCAiZmF2aWNvbixjaGFuZ2VkIiwgdm9p
ZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRFcnJvciwgImxvYWQsZXJyb3IiLCBF
d2tfRXJyb3IqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTG9hZEZpbmlzaGVkLCAibG9h
ZCxmaW5pc2hlZCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2FkUHJvZ3Jl
c3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKaW5kZXggNDVh
NzNmYjUuLjYzMDBhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIldLSWNvbkRhdGFi
YXNlQ2Fpcm8uaCIKICNpbmNsdWRlICJXS1VSTC5oIgotI2luY2x1ZGUgIldlYkljb25EYXRhYmFz
ZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZWZQdHJD
YWlyby5oPgpAQCAtNDYsNyArNDYsNiBAQCBFd2tGYXZpY29uRGF0YWJhc2U6OkV3a0Zhdmljb25E
YXRhYmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UpCiAgICAgbWVtc2V0KCZpY29u
RGF0YWJhc2VDbGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVudCkpOwogICAgIGlj
b25EYXRhYmFzZUNsaWVudC52ZXJzaW9uID0ga1dLSWNvbkRhdGFiYXNlQ2xpZW50Q3VycmVudFZl
cnNpb247CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVudEluZm8gPSB0aGlzOwotICAgIGlj
b25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRpZENoYW5nZUljb25G
b3JQYWdlVVJMOwogICAgIGljb25EYXRhYmFzZUNsaWVudC5pY29uRGF0YVJlYWR5Rm9yUGFnZVVS
TCA9IGljb25EYXRhUmVhZHlGb3JQYWdlVVJMOwogICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRh
dGFiYXNlQ2xpZW50KG1faWNvbkRhdGFiYXNlLmdldCgpLCAmaWNvbkRhdGFiYXNlQ2xpZW50KTsK
IH0KQEAgLTU2LDE0ICs1NSw2IEBAIEV3a0Zhdmljb25EYXRhYmFzZTo6fkV3a0Zhdmljb25EYXRh
YmFzZSgpCiAgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGllbnQobV9pY29uRGF0
YWJhc2UuZ2V0KCksIDApOwogfQogCi1TdHJpbmcgRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uVVJM
Rm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0Ci17Ci0gICAgU3RyaW5nIGlj
b25VUkw7Ci0gICAgdG9JbXBsKG1faWNvbkRhdGFiYXNlLmdldCgpKS0+c3luY2hyb25vdXNJY29u
VVJMRm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKLQotICAgIHJldHVybiBpY29uVVJMOwot
fQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6d2F0Y2hDaGFuZ2VzKGNvbnN0IEljb25DaGFu
Z2VDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKIHsKICAgICBBU1NFUlQoY2FsbGJhY2tEYXRh
LmNhbGxiYWNrKTsKQEAgLTc5LDU1ICs3MCw2IEBAIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjp1
bndhdGNoQ2hhbmdlcyhFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiBjYWxsCiAg
ICAgbV9jaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKGNhbGxiYWNrKTsKIH0KIAotc3RydWN0IEFzeW5j
SWNvblJlcXVlc3RSZXNwb25zZSB7Ci0gICAgU3RyaW5nIHBhZ2VVUkw7Ci0gICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKLSAgICBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSBjYWxs
YmFja0RhdGE7Ci0KLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UoY29uc3QgU3RyaW5nJiBw
YWdlVVJMLCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSwgY29uc3QgSWNvblJl
cXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKLSAgICAgICAgOiBwYWdlVVJMKHBhZ2VV
UkwpCi0gICAgICAgICwgc3VyZmFjZShzdXJmYWNlKQotICAgICAgICAsIGNhbGxiYWNrRGF0YShj
YWxsYmFja0RhdGEpCi0gICAgeyB9Ci19OwotCi1zdGF0aWMgRWluYV9Cb29sIHJlc3BvbmRfaWNv
bl9yZXF1ZXN0X2lkbGUodm9pZCogZGF0YSkKLXsKLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9u
c2UqIHJlc3BvbnNlID0gc3RhdGljX2Nhc3Q8QXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKj4oZGF0
YSk7Ci0KLSAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGljb24gPSByZXNwb25zZS0+c3VyZmFjZSA/
IFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fpcm9JbWFnZVN1cmZhY2UocmVzcG9uc2UtPmNhbGxi
YWNrRGF0YS5ldmFzLCByZXNwb25zZS0+c3VyZmFjZS5nZXQoKSkgOiAwOwotICAgIHJlc3BvbnNl
LT5jYWxsYmFja0RhdGEuY2FsbGJhY2socmVzcG9uc2UtPnBhZ2VVUkwudXRmOCgpLmRhdGEoKSwg
aWNvbi5nZXQoKSwgcmVzcG9uc2UtPmNhbGxiYWNrRGF0YS51c2VyRGF0YSk7Ci0KLSAgICBkZWxl
dGUgcmVzcG9uc2U7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfRE9ORTsKLX0KLQotdm9p
ZCBFd2tGYXZpY29uRGF0YWJhc2U6Omljb25Gb3JQYWdlVVJMKGNvbnN0IGNoYXIqIHBhZ2VVUkws
IGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpCi17Ci0gICAgLy8g
V2UgYXNrIGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0IHRoZSBpY29uIGRh
dGEgbm93LAotICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVuIGlmIHRoZSBkYXRh
YmFzZSBpcyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVm
PiB3a1BhZ2VVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcocGFnZVVSTCkp
OwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBnZXRJY29uU3VyZmFjZVN5
bmNocm9ub3VzbHkod2tQYWdlVVJMLmdldCgpKTsKLQotICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmFs
aWQgaWNvbiwgYnV0IHRoZXJlJ3MgYW4gaWNvblVSTCByZWdpc3RlcmVkLAotICAgIC8vIG9yIGl0
J3Mgc3RpbGwgbm90IHJlZ2lzdGVyZWQgYnV0IHRoZSBpbXBvcnQgcHJvY2VzcyBoYXNuJ3QKLSAg
ICAvLyBmaW5pc2hlZCB5ZXQsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaWNvbkRhdGFSZWFkeUZvclBh
Z2VVUkwgdG8gYmUKLSAgICAvLyBjYWxsZWQgYmVmb3JlIG1ha2luZyBhbmQgaW5mb3JtZWQgZGVj
aXNpb24uCi0gICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KHBhZ2VV
UkwpOwotICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTFN0cmlu
Zyk7Ci0gICAgaWYgKCFzdXJmYWNlICYmICghaWNvblVSTC5pc0VtcHR5KCkgfHwgIXRvSW1wbCht
X2ljb25EYXRhYmFzZS5nZXQoKSktPmlzVXJsSW1wb3J0Q29tcGxldGVkKCkpKSB7Ci0gICAgICAg
IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciByZXF1ZXN0cyA9IG1faWNvblJlcXVlc3RzLmdldChw
YWdlVVJMU3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdHMuYXBwZW5kKGNhbGxiYWNrRGF0YSk7Ci0g
ICAgICAgIG1faWNvblJlcXVlc3RzLnNldChwYWdlVVJMU3RyaW5nLCByZXF1ZXN0cyk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXNwb25kIHdoZW4gaWRsZS4KLSAgICBBc3lu
Y0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gbmV3IEFzeW5jSWNvblJlcXVlc3RSZXNw
b25zZShwYWdlVVJMU3RyaW5nLCBzdXJmYWNlLnJlbGVhc2UoKSwgY2FsbGJhY2tEYXRhKTsKLSAg
ICBlY29yZV9pZGxlcl9hZGQocmVzcG9uZF9pY29uX3JlcXVlc3RfaWRsZSwgcmVzcG9uc2UpOwot
fQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJ
Y29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkxSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CiAgICAgY29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UgPSBz
dGF0aWNfY2FzdDxjb25zdCBFd2tGYXZpY29uRGF0YWJhc2UqPihjbGllbnRJbmZvKTsKQEAgLTE0
MywxNSArODUsMTMgQEAgdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OmRpZENoYW5nZUljb25Gb3JQ
YWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWcKICAgICAgICAgaXQtPnZhbHVl
LmNhbGxiYWNrKHBhZ2VVUkwuZGF0YSgpLCBpdC0+dmFsdWUudXNlckRhdGEpOwogfQogCi1QYXNz
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkoV0tVUkxSZWYgcGFnZVVSTCkgY29uc3QKK1Bhc3NSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBFd2tGYXZpY29uRGF0YWJhc2U6OmdldEljb25TdXJmYWNlU3luY2hyb25vdXNs
eShjb25zdCBjaGFyKiBwYWdlVVJMKSBjb25zdAogewotICAgIFdLSWNvbkRhdGFiYXNlUmV0YWlu
SWNvbkZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7CisgICAgV0tSZXRhaW5Q
dHI8V0tVUkxSZWY+IHdrUGFnZVVSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhwYWdlVVJMKSk7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gV0tJ
Y29uRGF0YWJhc2VUcnlHZXRDYWlyb1N1cmZhY2VGb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCks
IHBhZ2VVUkwpOwotICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBXS0ljb25EYXRhYmFzZVJl
bGVhc2VJY29uRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCBwYWdlVVJMKTsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gV0tJY29uRGF0YWJhc2VUcnlHZXRDYWlyb1N1
cmZhY2VGb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHdrUGFnZVVSTC5nZXQoKSk7CisgICAg
aWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAgICByZXR1cm4gc3Vy
ZmFjZS5yZWxlYXNlKCk7CiB9CkBAIC0xNjAsNDEgKzEwMCwyNiBAQCB2b2lkIEV3a0Zhdmljb25E
YXRhYmFzZTo6aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJM
UmVmIHBhZwogewogICAgIEV3a0Zhdmljb25EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlID0gY29u
c3RfY2FzdDxFd2tGYXZpY29uRGF0YWJhc2UqPihzdGF0aWNfY2FzdDxjb25zdCBFd2tGYXZpY29u
RGF0YWJhc2UqPihjbGllbnRJbmZvKSk7CiAKLSAgICBTdHJpbmcgdXJsU3RyaW5nID0gdG9XVEZT
dHJpbmcocGFnZVVSTCk7Ci0gICAgaWYgKCFld2tJY29uRGF0YWJhc2UtPm1faWNvblJlcXVlc3Rz
LmNvbnRhaW5zKHVybFN0cmluZykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBld2tJY29uRGF0YWJhc2UtPmdldEljb25TdXJmYWNlU3lu
Y2hyb25vdXNseShwYWdlVVJMKTsKKyAgICBXS0ljb25EYXRhYmFzZVJldGFpbkljb25Gb3JVUkwo
ZXdrSWNvbkRhdGFiYXNlLT5tX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7CiAKLSAgICBQ
ZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHNGb3JVUkwgPSBld2tJY29uRGF0YWJhc2Ut
Pm1faWNvblJlcXVlc3RzLnRha2UodXJsU3RyaW5nKTsKLSAgICBzaXplX3QgcmVxdWVzdENvdW50
ID0gcmVxdWVzdHNGb3JVUkwuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVx
dWVzdENvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEm
IGNhbGxiYWNrRGF0YSA9IHJlcXVlc3RzRm9yVVJMW2ldOwotICAgICAgICBSZWZQdHI8RXZhc19P
YmplY3Q+IGljb24gPSBzdXJmYWNlID8gV2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdl
U3VyZmFjZShjYWxsYmFja0RhdGEuZXZhcywgc3VyZmFjZS5nZXQoKSkgOiAwOwotICAgICAgICBj
YWxsYmFja0RhdGEuY2FsbGJhY2sodXJsU3RyaW5nLnV0ZjgoKS5kYXRhKCksIGljb24uZ2V0KCks
IGNhbGxiYWNrRGF0YS51c2VyRGF0YSk7Ci0gICAgfQorICAgIENTdHJpbmcgdXJsU3RyaW5nID0g
dG9XVEZTdHJpbmcocGFnZVVSTCkudXRmOCgpOworICAgIENoYW5nZUxpc3RlbmVyTWFwOjpjb25z
dF9pdGVyYXRvciBpdCA9IGV3a0ljb25EYXRhYmFzZS0+bV9jaGFuZ2VMaXN0ZW5lcnMuYmVnaW4o
KTsKKyAgICBDaGFuZ2VMaXN0ZW5lck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gZXdrSWNvbkRh
dGFiYXNlLT5tX2NoYW5nZUxpc3RlbmVycy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBpdC0+dmFsdWUuY2FsbGJhY2sodXJsU3RyaW5nLmRhdGEoKSwgaXQtPnZh
bHVlLnVzZXJEYXRhKTsKIH0KIAotY29uc3QgY2hhciogZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNv
bl91cmxfZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNvbnN0IGNo
YXIqIHBhZ2VVUkwpCitFdmFzX09iamVjdCogZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQo
RXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVS
TCwgRXZhcyogZXZhcykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdr
SWNvbkRhdGFiYXNlLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFn
ZVVSTCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXMsIDApOwog
Ci0gICAgU3RyaW5nIGljb25VUkwgPSBld2tJY29uRGF0YWJhc2UtPmljb25VUkxGb3JQYWdlVVJM
KFN0cmluZzo6ZnJvbVVURjgocGFnZVVSTCkpOwotCi0gICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hh
cmVfYWRkKGljb25VUkwudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUVpbmFfQm9vbCBld2tfZmF2aWNv
bl9kYXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRh
dGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlX3VybCwgRXZhcyogZXZhcywgRXdrX0Zhdmljb25fRGF0
YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQotewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIGZhbHNlKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFnZV91cmwsIGZhbHNlKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhcywgZmFsc2UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOwotCi0gICAgZXdrSWNv
bkRhdGFiYXNlLT5pY29uRm9yUGFnZVVSTChwYWdlX3VybCwgSWNvblJlcXVlc3RDYWxsYmFja0Rh
dGEoY2FsbGJhY2ssIHVzZXJEYXRhLCBldmFzKSk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2Vf
dD4gc3VyZmFjZSA9IGV3a0ljb25EYXRhYmFzZS0+Z2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5
KHBhZ2VVUkwpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdl
U3VyZmFjZShldmFzLCBzdXJmYWNlLmdldCgpKS5sZWFrUmVmKCk7CiB9CiAKIHZvaWQgZXdrX2Zh
dmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tfYWRkKEV3a19GYXZpY29uX0RhdGFi
YXNlKiBld2tJY29uRGF0YWJhc2UsIEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0Ni
IGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCmluZGV4IGI2NmE2N2IuLjhm
OGJhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19m
YXZpY29uX2RhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Zhdmljb25fZGF0YWJhc2UuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNDAgKzQ4LDE2IEBAIHR5cGVk
ZWYgc3RydWN0IEV3a0Zhdmljb25EYXRhYmFzZSBFd2tfRmF2aWNvbl9EYXRhYmFzZTsKIHR5cGVk
ZWYgdm9pZCAoKkV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiKShjb25zdCBjaGFy
ICpwYWdlX3VybCwgdm9pZCAqZXZlbnRfaW5mbyk7CiAKIC8qKgotICogQHR5cGVkZWYgRXdrX0Zh
dmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5
bmNfSWNvbl9HZXRfQ2IKLSAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1c2Ugd2l0aCBld2tf
ZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldAotICoKLSAqIFRoZSBAYSBpY29uIG1heSBi
ZSBOVUxMIGlmIHRoZXJlIGlzIG5vIGZhdmljb24gYXNzb2NpYXRlZCB0byB0aGUgZ2l2ZW4gQGEg
cGFnZV91cmwuCi0gKgotICogWW91IG5lZWQgdG8gY2FsbCBldmFzX29iamVjdF9yZWYoKSBvbiB0
aGUgQGEgaWNvbiBpZiB5b3Ugd2lzaCB0byBrZWVwIGl0IGFmdGVyIHRoZQotICogY2FsbGJhY2sg
aXMgZXhlY3V0ZWQuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkV3a19GYXZpY29uX0RhdGFiYXNlX0Fz
eW5jX0ljb25fR2V0X0NiKShjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhc19PYmplY3QgKmljb24s
IHZvaWQgKmV2ZW50X2luZm8pOwotCi0vKioKLSAqIFJldHJpZXZlcyBmcm9tIHRoZSBkYXRhYmFz
ZSB0aGUgZmF2aWNvbiBVUkwgZm9yIHRoZSBnaXZlbiBAYSBwYWdlX3VybAotICoKLSAqIEBwYXJh
bSBkYXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkKLSAqIEBwYXJhbSBwYWdlX3VybCBV
Ukwgb2YgdGhlIHBhZ2UgdG8gZ2V0IHRoZSBmYXZpY29uIFVSTCBmb3IKLSAqCi0gKiBAcmV0dXJu
IGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hh
cmUKLSAqICAgICAgICAgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yIG9yIGlmIHRoZSBrZXkg
ZG9lcyBub3QgZXhpc3QuCi0gKiAgICAgICAgIFlvdSBuZWVkIHRvIGNhbGwgZWluYV9zdHJpbmdz
aGFyZV9kZWwoKSBhZnRlciB1c2UuCi0gKi8KLUVBUEkgY29uc3QgY2hhciAqZXdrX2Zhdmljb25f
ZGF0YWJhc2VfaWNvbl91cmxfZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpkYXRhYmFzZSwgY29u
c3QgY2hhciAqcGFnZV91cmwpOwotCi0vKioKICAqIFJldHJpZXZlcyBhc3luY2hyb25vdXNseSBm
cm9tIHRoZSBkYXRhYmFzZSB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIEBhIHBhZ2VfdXJsCiAg
KgogICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0byBxdWVyeQogICogQHBhcmFt
IHBhZ2VfdXJsIFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZhdmljb24gZm9yCiAgKiBAcGFy
YW0gZXZhcyBUaGUgY2FudmFzIHRvIGFkZCB0aGUgZmF2aWNvbiB0bwotICogQHBhcmFtIGNhbGxi
YWNrIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBpY29uIGlzIHJldHJp
ZXZlZAotICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgcG9pbnRlciB0aGF0IHdhcyB0byBiZSBwYXNz
ZWQgdG8gdGhlIGNhbGxiYWNrCiAgKgotICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIGlj
b24gd2FzIHN1Y2Nlc3NmdWx5IHJlcXVlc3RlZCwgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKKyAq
IEByZXR1cm4gVGhlIGZhdmljb24gYXMgYW4gRXZhc19PYmplY3QgaWYgc3VjY2Vzc2Z1bCwgQGMg
TlVMTCBvdGhlcndpc2UuCisgKiBUaGUgcmV0dXJuZWQgRXZhc19PYmplY3QgbmVlZHMgdG8gYmUg
ZnJlZWQgYWZ0ZXIgdXNlLgogICovCi1FQVBJIEVpbmFfQm9vbCBld2tfZmF2aWNvbl9kYXRhYmFz
ZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNo
YXIgKnBhZ2VfdXJsLCBFdmFzICpldmFzLCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29u
X0dldF9DYiBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitFQVBJIEV2YXNfT2JqZWN0ICpld2tfZmF2
aWNvbl9kYXRhYmFzZV9pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJhc2UsIGNv
bnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzICpldmFzKTsKIAogLyoqCiAgKiBBZGQgKHJlZ2lzdGVy
KSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgaWNvbiBjaGFuZ2UgZXZlbnQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlX3By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2Rh
dGFiYXNlX3ByaXZhdGUuaAppbmRleCA3NTM1YmRkLi4xY2M3NzIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0
YWJhc2VfcHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwyNyArNDcsNyBAQCBzdHJ1Y3QgSWNvbkNo
YW5nZUNhbGxiYWNrRGF0YSB7CiAgICAgeyB9CiB9OwogCi1zdHJ1Y3QgSWNvblJlcXVlc3RDYWxs
YmFja0RhdGEgewotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNh
bGxiYWNrOwotICAgIHZvaWQqIHVzZXJEYXRhOwotICAgIEV2YXMqIGV2YXM7Ci0KLSAgICBJY29u
UmVxdWVzdENhbGxiYWNrRGF0YSgpCi0gICAgICAgIDogY2FsbGJhY2soMCkKLSAgICAgICAgLCB1
c2VyRGF0YSgwKQotICAgICAgICAsIGV2YXMoMCkKLSAgICB7IH0KLQotICAgIEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhKEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIF9jYWxs
YmFjaywgdm9pZCogX3VzZXJEYXRhLCBFdmFzKiBfZXZhcykKLSAgICAgICAgOiBjYWxsYmFjayhf
Y2FsbGJhY2spCi0gICAgICAgICwgdXNlckRhdGEoX3VzZXJEYXRhKQotICAgICAgICAsIGV2YXMo
X2V2YXMpCi0gICAgeyB9Ci19OwotCiB0eXBlZGVmIEhhc2hNYXA8RXdrX0Zhdmljb25fRGF0YWJh
c2VfSWNvbl9DaGFuZ2VfQ2IsIEljb25DaGFuZ2VDYWxsYmFja0RhdGE+IENoYW5nZUxpc3RlbmVy
TWFwOwotdHlwZWRlZiBWZWN0b3I8SWNvblJlcXVlc3RDYWxsYmFja0RhdGE+IFBlbmRpbmdJY29u
UmVxdWVzdFZlY3RvcjsKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcgLyogcGFnZVVSTCAqLywgUGVu
ZGluZ0ljb25SZXF1ZXN0VmVjdG9yPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7CiAKIGNsYXNzIEV3
a0Zhdmljb25EYXRhYmFzZSB7CiBwdWJsaWM6CkBAIC03NiwyMyArNTcsMTggQEAgcHVibGljOgog
ICAgIH0KICAgICB+RXdrRmF2aWNvbkRhdGFiYXNlKCk7CiAKLSAgICBTdHJpbmcgaWNvblVSTEZv
clBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKSBjb25zdDsKLSAgICB2b2lkIGljb25Gb3JQ
YWdlVVJMKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRh
JiBjYWxsYmFja0RhdGEpOwotCisgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGdldElj
b25TdXJmYWNlU3luY2hyb25vdXNseShjb25zdCBjaGFyKiBwYWdlVVJMKSBjb25zdDsKICAgICB2
b2lkIHdhdGNoQ2hhbmdlcyhjb25zdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhJiBjYWxsYmFja0Rh
dGEpOwogICAgIHZvaWQgdW53YXRjaENoYW5nZXMoRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9D
aGFuZ2VfQ2IgY2FsbGJhY2spOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEV3a0Zhdmljb25E
YXRhYmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UpOwogCi0gICAgUGFzc1JlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShXS1VSTFJlZiBw
YWdlVVJMKSBjb25zdDsKLQogICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZUljb25Gb3JQYWdlVVJM
KFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbyk7CiAgICAgc3RhdGljIHZvaWQgaWNvbkRhdGFSZWFkeUZvclBhZ2VV
UkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBwYWdlVVJMLCBjb25z
dCB2b2lkKiBjbGllbnRJbmZvKTsKIAogICAgIFdLUmV0YWluUHRyPFdLSWNvbkRhdGFiYXNlUmVm
PiBtX2ljb25EYXRhYmFzZTsKICAgICBDaGFuZ2VMaXN0ZW5lck1hcCBtX2NoYW5nZUxpc3RlbmVy
czsKLSAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXAgbV9pY29uUmVxdWVzdHM7CiB9OwogCiAjZW5k
aWYgLy8gZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggODYzYmU0OC4uNjY2MTJjOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcApAQCAtMTIw
LDExICsxMjAsMTEgQEAgY29uc3QgY2hhciogZXdrX3ZpZXdfdXJsX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKICAgICByZXR1cm4gaW1wbC0+dXJsKCk7CiB9CiAKLWNvbnN0IGNoYXIg
KmV3a192aWV3X2ljb25fdXJsX2dldChjb25zdCBFdmFzX09iamVjdCAqZXdrVmlldykKK0V2YXNf
T2JqZWN0KiBld2tfdmlld19mYXZpY29uX25ldyhjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKICAgICBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgaW1wbCwgMCk7CiAK
LSAgICByZXR1cm4gaW1wbC0+ZmF2aWNvblVSTCgpOworICAgIHJldHVybiBpbXBsLT5jcmVhdGVG
YXZpY29uKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRl
eCAxMWJlYjk0Li5mMTQxZjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3LmgKQEAgLTQ4LDcgKzQ4LDggQEAKICAqICAgd2hlbiBkb25lIHRvIGNvbnRpbnVl
IHdpdGggdGhlIGZvcm0gc3VibWlzc2lvbi4gSWYgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92
ZWQgb24gYQogICogICAjRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0IGFuZCB0aGUgZm9ybSBo
YXMgbm90IGJlZW4gc3VibWl0dGVkIHlldCwKICAqICAgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1
ZXN0X3N1Ym1pdCgpIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCi0gKiAtICJpY29uLGNo
YW5nZWQiLCB2b2lkOiByZXBvcnRzIHRoYXQgdGhlIHZpZXcncyBmYXZpY29uIGhhcyBjaGFuZ2Vk
LgorICogLSAiZmF2aWNvbixjaGFuZ2VkIiwgdm9pZDogcmVwb3J0cyB0aGF0IHRoZSB2aWV3J3Mg
ZmF2aWNvbiBoYXMgY2hhbmdlZC4KKyAqICAgVGhlIGZhdmljb24gY2FuIGJlIHF1ZXJpZWQgdXNp
bmcgZXdrX3ZpZXdfZmF2aWNvbl9uZXcoKS4KICAqIC0gImxvYWQsZXJyb3IiLCBjb25zdCBFd2tf
RXJyb3IqOiByZXBvcnRzIG1haW4gZnJhbWUgbG9hZCBmYWlsZWQuCiAgKiAtICJsb2FkLGZpbmlz
aGVkIiwgdm9pZDogcmVwb3J0cyBsb2FkIGZpbmlzaGVkLgogICogLSAibG9hZCxwcm9ncmVzcyIs
IGRvdWJsZSo6IGxvYWQgcHJvZ3Jlc3MgaGFzIGNoYW5nZWQgKHZhbHVlIGZyb20gMC4wIHRvIDEu
MCkuCkBAIC0zNzIsMTYgKzM3MywxNCBAQCBFQVBJIEVpbmFfQm9vbCBld2tfdmlld191cmxfc2V0
KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmwpOwogRUFQSSBjb25zdCBjaGFyICpld2tf
dmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCi0gKiBSZXR1cm5zIHRo
ZSBjdXJyZW50IGljb24gVVJMIG9mIHZpZXcgb2JqZWN0LgotICoKLSAqIEl0IHJldHVybnMgYW4g
aW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90Ci0gKiBiZSBtb2RpZmllZC4gVGhlIHN0cmlu
ZyBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqIFJldHVybnMgdGhlIGN1cnJl
bnQgZmF2aWNvbiBvZiB2aWV3IG9iamVjdC4KICAqCiAgKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB0
byBnZXQgY3VycmVudCBpY29uIFVSTAogICoKLSAqIEByZXR1cm4gY3VycmVudCBpY29uIFVSTCBv
biBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24gZmFpbHVyZQorICogQHJl
dHVybiBjdXJyZW50IGZhdmljb24gb24gc3VjY2VzcyBvciBAYyBOVUxMIGlmIHVuYXZhaWxhYmxl
IG9yIG9uIGZhaWx1cmUuCisgKiBUaGUgcmV0dXJuZWQgRXZhc19PYmplY3QgbmVlZHMgdG8gYmUg
ZnJlZWQgYWZ0ZXIgdXNlLgogICovCi1FQVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X2ljb25fdXJs
X2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEV2YXNfT2JqZWN0ICpld2tfdmlld19m
YXZpY29uX25ldyhjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgogICogQXNrcyB0aGUgbWFp
biBmcmFtZSB0byByZWxvYWQgdGhlIGN1cnJlbnQgZG9jdW1lbnQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRh
YmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKaW5kZXggMGZmMWRmMC4uZTdiZWI2ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmlj
b25fZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcApAQCAtNzUsNTQgKzc1LDYgQEAgc3Rh
dGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogaHR0cFNlcnZlciwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIGNvbnN0IGMKICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNz
YWdlLT5yZXNwb25zZV9ib2R5KTsKIH0KIAotc3RhdGljIHZvaWQgb25JY29uQ2hhbmdlZCh2b2lk
KiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17Ci0gICAgYm9vbCog
aWNvbkNoYW5nZWQgPSBzdGF0aWNfY2FzdDxib29sKj4odXNlckRhdGEpOwotICAgICppY29uQ2hh
bmdlZCA9IHRydWU7Ci19Ci0KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNvbl9k
YXRhYmFzZV91cmxfZ2V0KQotewotICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2ZXI+IGh0dHBT
ZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKLSAgICBodHRwU2VydmVy
LT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgLy8gU2V0IGZhdmljb24gZGF0YWJhc2UgcGF0
aCBhbmQgZW5hYmxlIGZ1bmN0aW9uYWxpdHkuCi0gICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBl
d2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwotICAgIGV3a19jb250ZXh0X2Zhdmljb25f
ZGF0YWJhc2VfZGlyZWN0b3J5X3NldChjb250ZXh0LCAwKTsKLQotICAgIGJvb2wgaWNvbkNoYW5n
ZWQgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygp
LCAiaWNvbixjaGFuZ2VkIiwgb25JY29uQ2hhbmdlZCwgJmljb25DaGFuZ2VkKTsKLQotICAgIC8v
IFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3
aWxsIGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lh
dGVkIGZhdmljb24uCi0gICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoaHR0cFNlcnZlci0+Z2V0
VVJMRm9yUGF0aCgiLyIpLmRhdGEoKSkpOwotCi0gICAgd2hpbGUgKCFpY29uQ2hhbmdlZCkKLSAg
ICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKLQotICAgIEFTU0VSVF9UUlVFKGljb25D
aGFuZ2VkKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAi
aWNvbixjaGFuZ2VkIiwgb25JY29uQ2hhbmdlZCk7Ci0KLSAgICAvLyBDaGVjayB0aGUgQVBJIHJl
dHJpZXZpbmcgYSBmYXZpY29uIFVSTC4KLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZmF2aWNv
bkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7Ci0g
ICAgQVNTRVJUX1RSVUUoZmF2aWNvbkRhdGFiYXNlKTsKLQotICAgIENTdHJpbmcgZXhwZWN0ZWRG
YXZpY29uVVJMID0gaHR0cFNlcnZlci0+Z2V0VVJMRm9yUGF0aCgiL2Zhdmljb24uaWNvIik7Ci0g
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIGljb25VUkwgPSBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29u
X3VybF9nZXQoZmF2aWNvbkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KHdlYlZpZXcoKSkpOwot
ICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZEZhdmljb25VUkwuZGF0YSgpLCBpY29uVVJMKTsKLQot
ICAgIGNvbnN0IGNoYXIqIHZpZXdJY29uVVJMID0gZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KHdlYlZp
ZXcoKSk7Ci0gICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5kYXRhKCksIHZpZXdJ
Y29uVVJMKTsKLX0KLQotc3RhdGljIHZvaWQgb25JY29uRGF0YVJlYWR5KGNvbnN0IGNoYXIqIHBh
Z2VfdXJsLCBFdmFzX09iamVjdCogaWNvbiwgdm9pZCogZXZlbnRfaW5mbykKLXsKLSAgICBFdmFz
X09iamVjdCoqIHJldHVybkljb24gPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCoqPihldmVudF9p
bmZvKTsKLSAgICBpZiAoaWNvbikKLSAgICAgICAgZXZhc19vYmplY3RfcmVmKGljb24pOwotICAg
ICpyZXR1cm5JY29uID0gaWNvbjsKLX0KLQogc3RydWN0IEljb25SZXF1ZXN0RGF0YSB7CiAgICAg
RXZhc19PYmplY3QqIHZpZXc7CiAgICAgRXZhc19PYmplY3QqIGljb247CkBAIC0xMzIsMTMgKzg0
LDEzIEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RGYXZpY29uRGF0YSh2b2lkKiB1c2VyRGF0YSwgRXZh
c19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7CiAgICAgSWNvblJlcXVlc3REYXRhKiBkYXRh
ID0gc3RhdGljX2Nhc3Q8SWNvblJlcXVlc3REYXRhKj4odXNlckRhdGEpOwogCi0gICAgLy8gQ2hl
Y2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFsaWQgZmF2aWNvbi4KKyAgICAvLyBDaGVjayB0aGUg
QVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uIGZyb20gaWNvbiBkYXRhYmFzZS4KICAgICBF
d2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KGRhdGEtPnZpZXcpOwog
ICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9m
YXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKICAgICBBU1NFUlRfVFJVRShmYXZpY29uRGF0
YWJhc2UpOwogCiAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGRhdGEtPnZp
ZXcpOwotICAgIEFTU0VSVF9UUlVFKGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0
KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3KSwgZXZhcywgb25J
Y29uRGF0YVJlYWR5LCAmZGF0YS0+aWNvbikpOworICAgIGRhdGEtPmljb24gPSBld2tfZmF2aWNv
bl9kYXRhYmFzZV9pY29uX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQoZGF0
YS0+dmlldyksIGV2YXMpOwogfQogCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmlj
b25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpCkBAIC0xNTEsNyArMTAzLDcgQEAgVEVTVF9GKEVX
SzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KQogICAg
IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5X3NldChjb250ZXh0LCAwKTsK
IAogICAgIEljb25SZXF1ZXN0RGF0YSBkYXRhID0geyB3ZWJWaWV3KCksIDAgfTsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgcmVx
dWVzdEZhdmljb25EYXRhLCAmZGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKHdlYlZpZXcoKSwgImZhdmljb24sY2hhbmdlZCIsIHJlcXVlc3RGYXZpY29uRGF0YSwgJmRh
dGEpOwogCiAgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVuc3VyZSB0
aGUgaWNvbiBkYXRhIHdpbGwgYmUKICAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2FzZSB0aGVy
ZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KQEAgLTE2MSwxMyArMTEzLDIwIEBAIFRFU1RfRihF
V0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldCkKICAg
ICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKIAogICAgIEFTU0VSVF9UUlVFKGRhdGEu
aWNvbik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImlj
b24sY2hhbmdlZCIsIHJlcXVlc3RGYXZpY29uRGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImZhdmljb24sY2hhbmdlZCIsIHJlcXVlc3RGYXZpY29u
RGF0YSk7CiAKICAgICAvLyBJdCBpcyBhIDE2eDE2IGZhdmljb24uCiAgICAgaW50IHdpZHRoLCBo
ZWlnaHQ7CiAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoZGF0YS5pY29uLCAmd2lkdGgs
ICZoZWlnaHQpOwogICAgIEVYUEVDVF9FUSgxNiwgd2lkdGgpOwogICAgIEVYUEVDVF9FUSgxNiwg
aGVpZ2h0KTsKLQogICAgIGV2YXNfb2JqZWN0X3VucmVmKGRhdGEuaWNvbik7CisKKyAgICAvLyBU
ZXN0IEFQSSB0byByZXF1ZXN0IGZhdmljb24gZnJvbSB0aGUgdmlldworICAgIEV2YXNfT2JqZWN0
KiBmYXZpY29uID0gZXdrX3ZpZXdfZmF2aWNvbl9uZXcod2ViVmlldygpKTsKKyAgICBBU1NFUlRf
VFJVRShmYXZpY29uKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChmYXZpY29uLCAm
d2lkdGgsICZoZWlnaHQpOworICAgIEVYUEVDVF9FUSgxNiwgd2lkdGgpOworICAgIEVYUEVDVF9F
USgxNiwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF91bnJlZihmYXZpY29uKTsKIH0KZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAwOGJmNWYwLi5l
NDhlNDc1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1l
ekBzaXNhLnNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zh
dmljb24gY29kZSBhbmQgc3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBFRkwncyBNaW5p
QnJvd3NlciB0byBtYWtlIHVzZSBvZiBuZXcgRXdrX0Zhdmljb24gQVBJLgorCisgICAgICAgICog
TWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKHVwZGF0ZV92aWV3X2Zhdmljb24pOgor
ICAgICAgICAob25fdmlld19mYXZpY29uX2NoYW5nZWQpOgorICAgICAgICAod2luZG93X2NyZWF0
ZSk6CisKIDIwMTMtMDItMTIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIEVuYWJsZSBDU1MgaW1hZ2Utc2V0IHN1cHBvcnQgaW4gZGV2ZWxvcG1l
bnQgYnVpbGRzCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jIGIvVG9v
bHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA3YmNhOTUzLi42YTVkZTllIDEwMDY0NAot
LS0gYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2Vy
L2VmbC9tYWluLmMKQEAgLTUzOSwxMiArNTM5LDggQEAgb25fZG93bmxvYWRfZmFpbGVkKHZvaWQg
KnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogfQog
CiBzdGF0aWMgdm9pZAotb25fZmF2aWNvbl9yZWNlaXZlZChjb25zdCBjaGFyICpwYWdlX3VybCwg
RXZhc19PYmplY3QgKmljb24sIHZvaWQgKmV2ZW50X2luZm8pCit1cGRhdGVfdmlld19mYXZpY29u
KEJyb3dzZXJfV2luZG93ICp3aW5kb3csIEV2YXNfT2JqZWN0ICppY29uKQogewotICAgIEJyb3dz
ZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKilldmVudF9pbmZvOwotICAgIGlm
IChzdHJjbXAocGFnZV91cmwsIGV3a192aWV3X3VybF9nZXQod2luZG93LT5ld2tfdmlldykpKQot
ICAgICAgICByZXR1cm47Ci0KICAgICAvKiBSZW1vdmUgcHJldmlvdXMgaWNvbiBmcm9tIFVSTCBi
YXIgKi8KICAgICBFdmFzX09iamVjdCAqb2xkX2ljb24gPSBlbG1fb2JqZWN0X3BhcnRfY29udGVu
dF91bnNldCh3aW5kb3ctPnVybF9iYXIsICJpY29uIik7CiAgICAgaWYgKG9sZF9pY29uKSB7CkBA
IC01NjUsMTYgKzU2MSwxNSBAQCBvbl9mYXZpY29uX3JlY2VpdmVkKGNvbnN0IGNoYXIgKnBhZ2Vf
dXJsLCBFdmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbykKIH0KIAogc3RhdGljIHZv
aWQKLW9uX3ZpZXdfaWNvbl9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3
a192aWV3LCB2b2lkICpldmVudF9pbmZvKQorb25fdmlld19mYXZpY29uX2NoYW5nZWQodm9pZCAq
dXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CiAg
ICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsK
LSAgICAvKiBSZXRyaWV2ZSB0aGUgdmlldydzIGZhdmljb24gKi8KLSAgICBFd2tfQ29udGV4dCAq
Y29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KGV3a192aWV3KTsKLSAgICBFd2tfRmF2aWNv
bl9EYXRhYmFzZSAqaWNvbl9kYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2Vf
Z2V0KGNvbnRleHQpOwogCi0gICAgY29uc3QgY2hhciAqcGFnZV91cmwgPSBld2tfdmlld191cmxf
Z2V0KGV3a192aWV3KTsKLSAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQoZXdr
X3ZpZXcpOwotICAgIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KGljb25fZGF0
YWJhc2UsIHBhZ2VfdXJsLCBldmFzLCBvbl9mYXZpY29uX3JlY2VpdmVkLCB3aW5kb3cpOworICAg
IEV2YXNfT2JqZWN0KiBmYXZpY29uID0gZXdrX3ZpZXdfZmF2aWNvbl9uZXcoZXdrX3ZpZXcpOwor
ICAgIHVwZGF0ZV92aWV3X2Zhdmljb24od2luZG93LCBmYXZpY29uKTsKKworICAgIGlmIChmYXZp
Y29uKQorICAgICAgICBldmFzX29iamVjdF91bnJlZihmYXZpY29uKTsKIH0KIAogc3RhdGljIGlu
dApAQCAtMTIxOCw3ICsxMjEzLDcgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3Jl
YXRlKEV2YXNfT2JqZWN0ICpvcGVuZXIsIGNvbnN0IGNoYXIgKnVybCwgaW50IHcKICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZp
bmlzaGVkIiwgb25fZG93bmxvYWRfZmluaXNoZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0Iiwg
b25fZG93bmxvYWRfcmVxdWVzdCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQod2luZG93LT5ld2tfdmlldywgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25fZmls
ZV9jaG9vc2VyX3JlcXVlc3QsIHdpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJpY29uLGNoYW5nZWQiLCBvbl92aWV3X2ljb25fY2hh
bmdlZCwgd2luZG93KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93
LT5ld2tfdmlldywgImZhdmljb24sY2hhbmdlZCIsIG9uX3ZpZXdfZmF2aWNvbl9jaGFuZ2VkLCB3
aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192
aWV3LCAibG9hZCxlcnJvciIsIG9uX2Vycm9yLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAibG9hZCxwcm9ncmVzcyIsIG9uX3By
b2dyZXNzLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmV3a192aWV3LCAidGl0bGUsY2hhbmdlZCIsIG9uX3RpdGxlX2NoYW5nZWQsIHdpbmRvdyk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187919</attachid>
            <date>2013-02-12 13:24:45 -0800</date>
            <delta_ts>2013-02-13 11:47:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>30062</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5NjYyNDc3Li5hMzlkNGIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQg
c3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNv
IHRoYXQgaXQgbm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFu
ZCBzbyB0aGF0IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hh
bmdlZAorICAgICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlz
IG5vIGxvbmdlciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVu
dCBpcyBub3cgb25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAg
ZmF2aWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBh
cmUKKyAgICAgICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlm
aWVkIG9mIGZhdmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAg
ICBiZWNvbWVzIGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5
bmNocm9ub3VzLiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEg
aXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZp
Y29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6
CisgICAgICAgIChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fZ2V0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24s
Y2hhbmdlZCcgc2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAg
ICAgICBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3Zl
IEFQSSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQg
Ynkgb25lIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNf
T2JqZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8g
dXNlIHRoZSBuZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMTEgIEh1YW5nIERvbmdzdW5nICA8
bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAgICAgICAgQ29vcmRpbmF0ZWQgR3JhcGhpY3M6
IE1ha2UgQ29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lIG5vdCBrbm93IGNvbnRlbnRzIHNpemUuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IGM0NTMz
MTMuLjI5MDU0OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1Zp
ZXcuY3BwCkBAIC03NDcsMjMgKzc0Nyw2IEBAIHZvaWQgRXdrVmlldzo6c2V0VG91Y2hFdmVudHNF
bmFibGVkKGJvb2wgZW5hYmxlZCkKIH0KICNlbmRpZgogCi0vKioKLSAqIEBpbnRlcm5hbAotICog
VXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbiBhbmQgZW1pdHMgYSAiaWNvbixjaGFuZ2VkIiBzaWdu
YWwgaWYgaXQgaGFzCi0gKiBjaGFuZ2VkLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IHdoZW5ldmVyIHRoZSBVUkwgaGFzIGNoYW5nZWQgb3Igd2hlbiB0aGUgaWNvbiBmb3IKLSAqIHRo
ZSBjdXJyZW50IHBhZ2UgVVJMIGhhcyBjaGFuZ2VkLgotICovCi12b2lkIEV3a1ZpZXc6OmluZm9y
bUljb25DaGFuZ2UoKQotewotICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0g
bV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKLSAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsK
LQotICAgIG1fZmF2aWNvblVSTCA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChp
Y29uRGF0YWJhc2UsIG1fdXJsKTsKLSAgICBzbWFydENhbGxiYWNrPEljb25DaGFuZ2VkPigpLmNh
bGwoKTsKLX0KLQogYm9vbCBFd2tWaWV3OjpjcmVhdGVHTFN1cmZhY2UoY29uc3QgSW50U2l6ZSYg
dmlld1NpemUpCiB7CiAgICAgaWYgKCFtX2lzSGFyZHdhcmVBY2NlbGVyYXRlZCkKQEAgLTEwMjYs
NyArMTAwOSwxNSBAQCB2b2lkIEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSgpCiAgICAgc21hcnRD
YWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRlIHRoZSB2
aWV3J3MgZmF2aWNvbi4KLSAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CisgICAgc21hcnRDYWxsYmFj
azxGYXZpY29uQ2hhbmdlZD4oKS5jYWxsKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBFd2tWaWV3Ojpj
cmVhdGVGYXZpY29uKCkgY29uc3QKK3sKKyAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRh
YmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGljb25EYXRh
YmFzZSk7CisKKyAgICByZXR1cm4gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQoaWNvbkRh
dGFiYXNlLCBtX3VybCwgc21hcnREYXRhKCktPmJhc2UuZXZhcyk7CiB9CiAKIEV3a1dpbmRvd0Zl
YXR1cmVzKiBFd2tWaWV3Ojp3aW5kb3dGZWF0dXJlcygpCkBAIC0xMzIyLDcgKzEzMTMsNyBAQCB2
b2lkIEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIHZv
aWQqIGV2ZW50SW5mbykKICAgICBpZiAoIXZpZXctPnVybCgpIHx8IHN0cmNhc2VjbXAodmlldy0+
dXJsKCksIHBhZ2VVUkwpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2aWV3LT5pbmZvcm1JY29u
Q2hhbmdlKCk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxGYXZpY29uQ2hhbmdlZD4oKS5jYWxs
KCk7CiB9CiAKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtlU25hcHNo
b3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmluZGV4IDlh
ZGZiMGYuLjc4YThlZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tW
aWV3LmgKQEAgLTEzNCw3ICsxMzQsNyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6QWZmaW5lVHJh
bnNmb3JtIHRyYW5zZm9ybVRvU2NyZWVuKCkgY29uc3Q7CiAKICAgICBjb25zdCBjaGFyKiB1cmwo
KSBjb25zdCB7IHJldHVybiBtX3VybDsgfQotICAgIGNvbnN0IGNoYXIqIGZhdmljb25VUkwoKSBj
b25zdCB7IHJldHVybiBtX2Zhdmljb25VUkw7IH0KKyAgICBFdmFzX09iamVjdCogY3JlYXRlRmF2
aWNvbigpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIqIHRpdGxlKCkgY29uc3Q7CiAgICAgV2ViS2l0
OjpJbnB1dE1ldGhvZENvbnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCgpOwogCkBAIC0yMjEs
OCArMjIxLDYgQEAgcHJpdmF0ZToKIAogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NT
Y2VuZSogY29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKCk7CiAKLSAgICB2b2lkIGluZm9ybUljb25D
aGFuZ2UoKTsKLQogICAgIC8vIEV2YXNfU21hcnRfQ2xhc3MgY2FsbGJhY2sgaW50ZXJmYWNlOgog
ICAgIHN0YXRpYyB2b2lkIGhhbmRsZUV2YXNPYmplY3RBZGQoRXZhc19PYmplY3QqKTsKICAgICBz
dGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0RGVsZXRlKEV2YXNfT2JqZWN0Kik7CkBAIC0yNzYs
NyArMjc0LDYgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8RXdrU2V0dGluZ3M+IG1fc2V0dGluZ3M7
CiAgICAgUmVmUHRyPEV3a1dpbmRvd0ZlYXR1cmVzPiBtX3dpbmRvd0ZlYXR1cmVzOwogICAgIGNv
bnN0IHZvaWQqIG1fY3Vyc29ySWRlbnRpZmllcjsgLy8gVGhpcyBpcyBhbiBhZGRyZXNzLCBkbyBu
b3QgZnJlZSBpdC4KLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV9mYXZpY29uVVJMOwogICAgIFdL
RWluYVNoYXJlZFN0cmluZyBtX3VybDsKICAgICBtdXRhYmxlIFdLRWluYVNoYXJlZFN0cmluZyBt
X3RpdGxlOwogICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX3RoZW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IDBlNzYz
YTMuLjAwZDBkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0V3a1ZpZXdDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3Q2FsbGJhY2tzLmgKQEAgLTU2LDcgKzU2LDcgQEAgZW51bSBDYWxsYmFja1R5cGUg
ewogICAgIERvd25sb2FkSm9iUmVxdWVzdGVkLAogICAgIEZpbGVDaG9vc2VyUmVxdWVzdCwKICAg
ICBOZXdGb3JtU3VibWlzc2lvblJlcXVlc3QsCi0gICAgSWNvbkNoYW5nZWQsCisgICAgRmF2aWNv
bkNoYW5nZWQsCiAgICAgTG9hZEVycm9yLAogICAgIExvYWRGaW5pc2hlZCwKICAgICBMb2FkUHJv
Z3Jlc3MsCkBAIC0xNjYsNyArMTY2LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3du
bG9hZEpvYkZpbmlzaGVkLCAiZG93bmxvYWQsZmluaXNoZWQiLCBFd2tfRG93bmxvYWQKIERFQ0xB
UkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxvYWRKb2JSZXF1ZXN0ZWQsICJkb3dubG9hZCxyZXF1
ZXN0IiwgRXdrX0Rvd25sb2FkX0pvYiopOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhGaWxl
Q2hvb3NlclJlcXVlc3QsICJmaWxlLGNob29zZXIscmVxdWVzdCIsIEV3a19GaWxlX0Nob29zZXJf
UmVxdWVzdCopOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhOZXdGb3JtU3VibWlzc2lvblJl
cXVlc3QsICJmb3JtLHN1Ym1pc3Npb24scmVxdWVzdCIsIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVx
dWVzdCopOwotREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhJY29uQ2hhbmdlZCwgImljb24sY2hh
bmdlZCIsIHZvaWQpOworREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhGYXZpY29uQ2hhbmdlZCwg
ImZhdmljb24sY2hhbmdlZCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2Fk
RXJyb3IsICJsb2FkLGVycm9yIiwgRXdrX0Vycm9yKik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExC
QUNLKExvYWRGaW5pc2hlZCwgImxvYWQsZmluaXNoZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJ
RVdfQ0FMTEJBQ0soTG9hZFByb2dyZXNzLCAibG9hZCxwcm9ncmVzcyIsIGRvdWJsZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0
YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25f
ZGF0YWJhc2UuY3BwCmluZGV4IDQ1YTczZmI1Li42MzAwYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3Bw
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5n
IEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0zMCw3ICszMSw2IEBACiAjaW5jbHVkZSAiV0tJY29uRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJXS0ljb25EYXRhYmFzZUNhaXJvLmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKLSNp
bmNsdWRlICJXZWJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFz
ZV9wcml2YXRlLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllc0VmbC5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KQEAgLTQ2LDcgKzQ2LDYgQEAgRXdrRmF2aWNv
bkRhdGFiYXNlOjpFd2tGYXZpY29uRGF0YWJhc2UoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFi
YXNlKQogICAgIG1lbXNldCgmaWNvbkRhdGFiYXNlQ2xpZW50LCAwLCBzaXplb2YoV0tJY29uRGF0
YWJhc2VDbGllbnQpKTsKICAgICBpY29uRGF0YWJhc2VDbGllbnQudmVyc2lvbiA9IGtXS0ljb25E
YXRhYmFzZUNsaWVudEN1cnJlbnRWZXJzaW9uOwogICAgIGljb25EYXRhYmFzZUNsaWVudC5jbGll
bnRJbmZvID0gdGhpczsKLSAgICBpY29uRGF0YWJhc2VDbGllbnQuZGlkQ2hhbmdlSWNvbkZvclBh
Z2VVUkwgPSBkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTDsKICAgICBpY29uRGF0YWJhc2VDbGllbnQu
aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwgPSBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTDsKICAgICBX
S0ljb25EYXRhYmFzZVNldEljb25EYXRhYmFzZUNsaWVudChtX2ljb25EYXRhYmFzZS5nZXQoKSwg
Jmljb25EYXRhYmFzZUNsaWVudCk7CiB9CkBAIC01NiwxNCArNTUsNiBAQCBFd2tGYXZpY29uRGF0
YWJhc2U6On5Fd2tGYXZpY29uRGF0YWJhc2UoKQogICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRh
dGFiYXNlQ2xpZW50KG1faWNvbkRhdGFiYXNlLmdldCgpLCAwKTsKIH0KIAotU3RyaW5nIEV3a0Zh
dmljb25EYXRhYmFzZTo6aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKSBj
b25zdAotewotICAgIFN0cmluZyBpY29uVVJMOwotICAgIHRvSW1wbChtX2ljb25EYXRhYmFzZS5n
ZXQoKSktPnN5bmNocm9ub3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblVSTCk7Ci0K
LSAgICByZXR1cm4gaWNvblVSTDsKLX0KLQogdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OndhdGNo
Q2hhbmdlcyhjb25zdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpCiB7CiAg
ICAgQVNTRVJUKGNhbGxiYWNrRGF0YS5jYWxsYmFjayk7CkBAIC03OSw1NSArNzAsNiBAQCB2b2lk
IEV3a0Zhdmljb25EYXRhYmFzZTo6dW53YXRjaENoYW5nZXMoRXdrX0Zhdmljb25fRGF0YWJhc2Vf
SWNvbl9DaGFuZ2VfQ2IgY2FsbAogICAgIG1fY2hhbmdlTGlzdGVuZXJzLnJlbW92ZShjYWxsYmFj
ayk7CiB9CiAKLXN0cnVjdCBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UgewotICAgIFN0cmluZyBw
YWdlVVJMOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2U7Ci0gICAgSWNvblJl
cXVlc3RDYWxsYmFja0RhdGEgY2FsbGJhY2tEYXRhOwotCi0gICAgQXN5bmNJY29uUmVxdWVzdFJl
c3BvbnNlKGNvbnN0IFN0cmluZyYgcGFnZVVSTCwgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+
IHN1cmZhY2UsIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpCi0g
ICAgICAgIDogcGFnZVVSTChwYWdlVVJMKQotICAgICAgICAsIHN1cmZhY2Uoc3VyZmFjZSkKLSAg
ICAgICAgLCBjYWxsYmFja0RhdGEoY2FsbGJhY2tEYXRhKQotICAgIHsgfQotfTsKLQotc3RhdGlj
IEVpbmFfQm9vbCByZXNwb25kX2ljb25fcmVxdWVzdF9pZGxlKHZvaWQqIGRhdGEpCi17Ci0gICAg
QXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKiByZXNwb25zZSA9IHN0YXRpY19jYXN0PEFzeW5jSWNv
blJlcXVlc3RSZXNwb25zZSo+KGRhdGEpOwotCi0gICAgUmVmUHRyPEV2YXNfT2JqZWN0PiBpY29u
ID0gcmVzcG9uc2UtPnN1cmZhY2UgPyBXZWJDb3JlOjpldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VT
dXJmYWNlKHJlc3BvbnNlLT5jYWxsYmFja0RhdGEuZXZhcywgcmVzcG9uc2UtPnN1cmZhY2UuZ2V0
KCkpIDogMDsKLSAgICByZXNwb25zZS0+Y2FsbGJhY2tEYXRhLmNhbGxiYWNrKHJlc3BvbnNlLT5w
YWdlVVJMLnV0ZjgoKS5kYXRhKCksIGljb24uZ2V0KCksIHJlc3BvbnNlLT5jYWxsYmFja0RhdGEu
dXNlckRhdGEpOwotCi0gICAgZGVsZXRlIHJlc3BvbnNlOwotCi0gICAgcmV0dXJuIEVDT1JFX0NB
TExCQUNLX0RPTkU7Ci19Ci0KLXZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRm9yUGFnZVVS
TChjb25zdCBjaGFyKiBwYWdlVVJMLCBjb25zdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2Fs
bGJhY2tEYXRhKQotewotICAgIC8vIFdlIGFzayBmb3IgdGhlIGljb24gZGlyZWN0bHkuIElmIHdl
IGRvbid0IGdldCB0aGUgaWNvbiBkYXRhIG5vdywKLSAgICAvLyB3ZSdsbCBiZSBub3RpZmllZCBs
YXRlciAoZXZlbiBpZiB0aGUgZGF0YWJhc2UgaXMgc3RpbGwgaW1wb3J0aW5nIGljb25zKS4KLSAg
ICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tQYWdlVVJMKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHBhZ2VVUkwpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJm
YWNlID0gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KHdrUGFnZVVSTC5nZXQoKSk7Ci0KLSAg
ICAvLyBJZiB0aGVyZSdzIG5vIHZhbGlkIGljb24sIGJ1dCB0aGVyZSdzIGFuIGljb25VUkwgcmVn
aXN0ZXJlZCwKLSAgICAvLyBvciBpdCdzIHN0aWxsIG5vdCByZWdpc3RlcmVkIGJ1dCB0aGUgaW1w
b3J0IHByb2Nlc3MgaGFzbid0Ci0gICAgLy8gZmluaXNoZWQgeWV0LCB3ZSBuZWVkIHRvIHdhaXQg
Zm9yIGljb25EYXRhUmVhZHlGb3JQYWdlVVJMIHRvIGJlCi0gICAgLy8gY2FsbGVkIGJlZm9yZSBt
YWtpbmcgYW5kIGluZm9ybWVkIGRlY2lzaW9uLgotICAgIFN0cmluZyBwYWdlVVJMU3RyaW5nID0g
U3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMKTsKLSAgICBTdHJpbmcgaWNvblVSTCA9IGljb25VUkxG
b3JQYWdlVVJMKHBhZ2VVUkxTdHJpbmcpOwotICAgIGlmICghc3VyZmFjZSAmJiAoIWljb25VUkwu
aXNFbXB0eSgpIHx8ICF0b0ltcGwobV9pY29uRGF0YWJhc2UuZ2V0KCkpLT5pc1VybEltcG9ydENv
bXBsZXRlZCgpKSkgewotICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHMg
PSBtX2ljb25SZXF1ZXN0cy5nZXQocGFnZVVSTFN0cmluZyk7Ci0gICAgICAgIHJlcXVlc3RzLmFw
cGVuZChjYWxsYmFja0RhdGEpOwotICAgICAgICBtX2ljb25SZXF1ZXN0cy5zZXQocGFnZVVSTFN0
cmluZywgcmVxdWVzdHMpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVzcG9u
ZCB3aGVuIGlkbGUuCi0gICAgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKiByZXNwb25zZSA9IG5l
dyBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UocGFnZVVSTFN0cmluZywgc3VyZmFjZS5yZWxlYXNl
KCksIGNhbGxiYWNrRGF0YSk7Ci0gICAgZWNvcmVfaWRsZXJfYWRkKHJlc3BvbmRfaWNvbl9yZXF1
ZXN0X2lkbGUsIHJlc3BvbnNlKTsKLX0KLQogdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OmRpZENo
YW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWdlVVJMUmVm
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQogewogICAgIGNvbnN0IEV3a0Zhdmljb25EYXRhYmFz
ZSogZXdrSWNvbkRhdGFiYXNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXdrRmF2aWNvbkRhdGFiYXNl
Kj4oY2xpZW50SW5mbyk7CkBAIC0xNDMsMTUgKzg1LDEzIEBAIHZvaWQgRXdrRmF2aWNvbkRhdGFi
YXNlOjpkaWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYg
cGFnCiAgICAgICAgIGl0LT52YWx1ZS5jYWxsYmFjayhwYWdlVVJMLmRhdGEoKSwgaXQtPnZhbHVl
LnVzZXJEYXRhKTsKIH0KIAotUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a0Zhdmljb25E
YXRhYmFzZTo6Z2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdLVVJMUmVmIHBhZ2VVUkwpIGNv
bnN0CitQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJ
Y29uU3VyZmFjZVN5bmNocm9ub3VzbHkoY29uc3QgY2hhciogcGFnZVVSTCkgY29uc3QKIHsKLSAg
ICBXS0ljb25EYXRhYmFzZVJldGFpbkljb25Gb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHBh
Z2VVUkwpOworICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1BhZ2VVUkwoQWRvcHRXSywgV0tV
UkxDcmVhdGVXaXRoVVRGOENTdHJpbmcocGFnZVVSTCkpOwogCi0gICAgUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4gc3VyZmFjZSA9IFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q2Fpcm9TdXJmYWNlRm9yVVJM
KG1faWNvbkRhdGFiYXNlLmdldCgpLCBwYWdlVVJMKTsKLSAgICBpZiAoIXN1cmZhY2UpIHsKLSAg
ICAgICAgV0tJY29uRGF0YWJhc2VSZWxlYXNlSWNvbkZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQo
KSwgcGFnZVVSTCk7CisgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IFdLSWNv
bkRhdGFiYXNlVHJ5R2V0Q2Fpcm9TdXJmYWNlRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCB3
a1BhZ2VVUkwuZ2V0KCkpOworICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQogCiAgICAgcmV0dXJuIHN1cmZhY2UucmVsZWFzZSgpOwogfQpAQCAtMTYwLDQxICsxMDAs
MjYgQEAgdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6Omljb25EYXRhUmVhZHlGb3JQYWdlVVJMKFdL
SWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWcKIHsKICAgICBFd2tGYXZpY29uRGF0YWJhc2Uq
IGV3a0ljb25EYXRhYmFzZSA9IGNvbnN0X2Nhc3Q8RXdrRmF2aWNvbkRhdGFiYXNlKj4oc3RhdGlj
X2Nhc3Q8Y29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKj4oY2xpZW50SW5mbykpOwogCi0gICAgU3Ry
aW5nIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKHBhZ2VVUkwpOwotICAgIGlmICghZXdrSWNvbkRh
dGFiYXNlLT5tX2ljb25SZXF1ZXN0cy5jb250YWlucyh1cmxTdHJpbmcpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZXdrSWNvbkRhdGFi
YXNlLT5nZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkocGFnZVVSTCk7CisgICAgV0tJY29uRGF0
YWJhc2VSZXRhaW5JY29uRm9yVVJMKGV3a0ljb25EYXRhYmFzZS0+bV9pY29uRGF0YWJhc2UuZ2V0
KCksIHBhZ2VVUkwpOwogCi0gICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzRm9y
VVJMID0gZXdrSWNvbkRhdGFiYXNlLT5tX2ljb25SZXF1ZXN0cy50YWtlKHVybFN0cmluZyk7Ci0g
ICAgc2l6ZV90IHJlcXVlc3RDb3VudCA9IHJlcXVlc3RzRm9yVVJMLnNpemUoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHJlcXVlc3RDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IElj
b25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEgPSByZXF1ZXN0c0ZvclVSTFtpXTsK
LSAgICAgICAgUmVmUHRyPEV2YXNfT2JqZWN0PiBpY29uID0gc3VyZmFjZSA/IFdlYkNvcmU6OmV2
YXNPYmplY3RGcm9tQ2Fpcm9JbWFnZVN1cmZhY2UoY2FsbGJhY2tEYXRhLmV2YXMsIHN1cmZhY2Uu
Z2V0KCkpIDogMDsKLSAgICAgICAgY2FsbGJhY2tEYXRhLmNhbGxiYWNrKHVybFN0cmluZy51dGY4
KCkuZGF0YSgpLCBpY29uLmdldCgpLCBjYWxsYmFja0RhdGEudXNlckRhdGEpOwotICAgIH0KKyAg
ICBDU3RyaW5nIHVybFN0cmluZyA9IHRvV1RGU3RyaW5nKHBhZ2VVUkwpLnV0ZjgoKTsKKyAgICBD
aGFuZ2VMaXN0ZW5lck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBld2tJY29uRGF0YWJhc2UtPm1f
Y2hhbmdlTGlzdGVuZXJzLmJlZ2luKCk7CisgICAgQ2hhbmdlTGlzdGVuZXJNYXA6OmNvbnN0X2l0
ZXJhdG9yIGVuZCA9IGV3a0ljb25EYXRhYmFzZS0+bV9jaGFuZ2VMaXN0ZW5lcnMuZW5kKCk7Cisg
ICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmNhbGxiYWNrKHVy
bFN0cmluZy5kYXRhKCksIGl0LT52YWx1ZS51c2VyRGF0YSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3
a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdr
SWNvbkRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlVVJMKQorRXZhc19PYmplY3QqIGV3a19mYXZp
Y29uX2RhdGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkwsIEV2YXMqIGV2YXMpCiB7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV3a0ljb25EYXRhYmFzZSwgMCk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHBhZ2VVUkwsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChldmFzLCAwKTsKIAotICAgIFN0cmluZyBpY29uVVJMID0gZXdrSWNvbkRhdGFi
YXNlLT5pY29uVVJMRm9yUGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkwpKTsKLQotICAg
IHJldHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZChpY29uVVJMLnV0ZjgoKS5kYXRhKCkpOwotfQot
Ci1FaW5hX0Jvb2wgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoRXdrX0Zhdmlj
b25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXMq
IGV2YXMsIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2
b2lkKiB1c2VyRGF0YSkKLXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdr
SWNvbkRhdGFiYXNlLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHBhZ2VfdXJsLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2
YXMsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ss
IGZhbHNlKTsKLQotICAgIGV3a0ljb25EYXRhYmFzZS0+aWNvbkZvclBhZ2VVUkwocGFnZV91cmws
IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwgZXZhcykpOworICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBld2tJY29uRGF0YWJhc2UtPmdldElj
b25TdXJmYWNlU3luY2hyb25vdXNseShwYWdlVVJMKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAg
ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdlYkNvcmU6OmV2
YXNPYmplY3RGcm9tQ2Fpcm9JbWFnZVN1cmZhY2UoZXZhcywgc3VyZmFjZS5nZXQoKSkubGVha1Jl
ZigpOwogfQogCiB2b2lkIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNr
X2FkZChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBFd2tfRmF2aWNvbl9E
YXRhYmFzZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFz
ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJh
c2UuaAppbmRleCBiNjZhNjdiLi44ZjhiYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3Mu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ3LDQwICs0OCwxNiBAQCB0eXBlZGVmIHN0cnVjdCBFd2tGYXZpY29uRGF0YWJhc2UgRXdrX0Zh
dmljb25fRGF0YWJhc2U7CiB0eXBlZGVmIHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29u
X0NoYW5nZV9DYikoY29uc3QgY2hhciAqcGFnZV91cmwsIHZvaWQgKmV2ZW50X2luZm8pOwogCiAv
KioKLSAqIEB0eXBlZGVmIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIEV3
a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiCi0gKiBAYnJpZWYgQ2FsbGJhY2sg
dHlwZSBmb3IgdXNlIHdpdGggZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQKLSAq
Ci0gKiBUaGUgQGEgaWNvbiBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBmYXZpY29uIGFzc29j
aWF0ZWQgdG8gdGhlIGdpdmVuIEBhIHBhZ2VfdXJsLgotICoKLSAqIFlvdSBuZWVkIHRvIGNhbGwg
ZXZhc19vYmplY3RfcmVmKCkgb24gdGhlIEBhIGljb24gaWYgeW91IHdpc2ggdG8ga2VlcCBpdCBh
ZnRlciB0aGUKLSAqIGNhbGxiYWNrIGlzIGV4ZWN1dGVkLgotICovCi10eXBlZGVmIHZvaWQgKCpF
d2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYikoY29uc3QgY2hhciAqcGFnZV91
cmwsIEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZvKTsKLQotLyoqCi0gKiBSZXRy
aWV2ZXMgZnJvbSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gVVJMIGZvciB0aGUgZ2l2ZW4gQGEg
cGFnZV91cmwKLSAqCi0gKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5
Ci0gKiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBV
UkwgZm9yCi0gKgotICogQHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgZ3VhcmFudGVl
ZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlCi0gKiAgICAgICAgIG9yIEBjIE5VTEwgaW4gY2FzZSBv
ZiBlcnJvciBvciBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LgotICogICAgICAgICBZb3UgbmVl
ZCB0byBjYWxsIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkgYWZ0ZXIgdXNlLgotICovCi1FQVBJIGNv
bnN0IGNoYXIgKmV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9E
YXRhYmFzZSAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKnBhZ2VfdXJsKTsKLQotLyoqCiAgKiBSZXRy
aWV2ZXMgYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gZm9yIHRo
ZSBnaXZlbiBAYSBwYWdlX3VybAogICoKICAqIEBwYXJhbSBkYXRhYmFzZSBkYXRhYmFzZSBvYmpl
Y3QgdG8gcXVlcnkKICAqIEBwYXJhbSBwYWdlX3VybCBVUkwgb2YgdGhlIHBhZ2UgdG8gZ2V0IHRo
ZSBmYXZpY29uIGZvcgogICogQHBhcmFtIGV2YXMgVGhlIGNhbnZhcyB0byBhZGQgdGhlIGZhdmlj
b24gdG8KLSAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbiB0byBiZSBjYWxsZWQg
d2hlbiB0aGUgaWNvbiBpcyByZXRyaWV2ZWQKLSAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIHBvaW50
ZXIgdGhhdCB3YXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjawogICoKLSAqIEByZXR1cm4g
QGMgRUlOQV9UUlVFIGlmIHRoZSBpY29uIHdhcyBzdWNjZXNzZnVseSByZXF1ZXN0ZWQsIEBjIEVJ
TkFfRkFMU0Ugb3RoZXJ3aXNlCisgKiBAcmV0dXJuIFRoZSBmYXZpY29uIGFzIGFuIEV2YXNfT2Jq
ZWN0IGlmIHN1Y2Nlc3NmdWwsIEBjIE5VTEwgb3RoZXJ3aXNlLgorICogVGhlIHJldHVybmVkIEV2
YXNfT2JqZWN0IG5lZWRzIHRvIGJlIGZyZWVkIGFmdGVyIHVzZS4KICAqLwotRUFQSSBFaW5hX0Jv
b2wgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoRXdrX0Zhdmljb25fRGF0YWJh
c2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhcyAqZXZhcywgRXdrX0Zhdmlj
b25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2ssIHZvaWQgKmRhdGEpOworRUFQ
SSBFdmFzX09iamVjdCAqZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQoRXdrX0Zhdmljb25f
RGF0YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhcyAqZXZhcyk7CiAK
IC8qKgogICogQWRkIChyZWdpc3RlcikgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGljb24gY2hh
bmdlIGV2ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKaW5kZXggNzUzNWJkZC4uMWNj
NzcyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zh
dmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDYsMjcg
KzQ3LDcgQEAgc3RydWN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEgewogICAgIHsgfQogfTsKIAot
c3RydWN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhIHsKLSAgICBFd2tfRmF2aWNvbl9EYXRhYmFz
ZV9Bc3luY19JY29uX0dldF9DYiBjYWxsYmFjazsKLSAgICB2b2lkKiB1c2VyRGF0YTsKLSAgICBF
dmFzKiBldmFzOwotCi0gICAgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoKQotICAgICAgICA6IGNh
bGxiYWNrKDApCi0gICAgICAgICwgdXNlckRhdGEoMCkKLSAgICAgICAgLCBldmFzKDApCi0gICAg
eyB9Ci0KLSAgICBJY29uUmVxdWVzdENhbGxiYWNrRGF0YShFd2tfRmF2aWNvbl9EYXRhYmFzZV9B
c3luY19JY29uX0dldF9DYiBfY2FsbGJhY2ssIHZvaWQqIF91c2VyRGF0YSwgRXZhcyogX2V2YXMp
Ci0gICAgICAgIDogY2FsbGJhY2soX2NhbGxiYWNrKQotICAgICAgICAsIHVzZXJEYXRhKF91c2Vy
RGF0YSkKLSAgICAgICAgLCBldmFzKF9ldmFzKQotICAgIHsgfQotfTsKLQogdHlwZWRlZiBIYXNo
TWFwPEV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiLCBJY29uQ2hhbmdlQ2FsbGJh
Y2tEYXRhPiBDaGFuZ2VMaXN0ZW5lck1hcDsKLXR5cGVkZWYgVmVjdG9yPEljb25SZXF1ZXN0Q2Fs
bGJhY2tEYXRhPiBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I7Ci10eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nIC8qIHBhZ2VVUkwgKi8sIFBlbmRpbmdJY29uUmVxdWVzdFZlY3Rvcj4gUGVuZGluZ0ljb25S
ZXF1ZXN0TWFwOwogCiBjbGFzcyBFd2tGYXZpY29uRGF0YWJhc2UgewogcHVibGljOgpAQCAtNzYs
MjMgKzU3LDE4IEBAIHB1YmxpYzoKICAgICB9CiAgICAgfkV3a0Zhdmljb25EYXRhYmFzZSgpOwog
Ci0gICAgU3RyaW5nIGljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkgY29u
c3Q7Ci0gICAgdm9pZCBpY29uRm9yUGFnZVVSTChjb25zdCBjaGFyKiBwYWdlVVJMLCBjb25zdCBJ
Y29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKTsKLQorICAgIFBhc3NSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoY29uc3QgY2hhciog
cGFnZVVSTCkgY29uc3Q7CiAgICAgdm9pZCB3YXRjaENoYW5nZXMoY29uc3QgSWNvbkNoYW5nZUNh
bGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKTsKICAgICB2b2lkIHVud2F0Y2hDaGFuZ2VzKEV3a19G
YXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0NiIGNhbGxiYWNrKTsKIAogcHJpdmF0ZToKICAg
ICBleHBsaWNpdCBFd2tGYXZpY29uRGF0YWJhc2UoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFi
YXNlKTsKIAotICAgIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBnZXRJY29uU3VyZmFjZVN5
bmNocm9ub3VzbHkoV0tVUkxSZWYgcGFnZVVSTCkgY29uc3Q7Ci0KICAgICBzdGF0aWMgdm9pZCBk
aWRDaGFuZ2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdL
VVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogICAgIHN0YXRpYyB2b2lk
IGljb25EYXRhUmVhZHlGb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwg
V0tVUkxSZWYgcGFnZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAKICAgICBXS1JldGFp
blB0cjxXS0ljb25EYXRhYmFzZVJlZj4gbV9pY29uRGF0YWJhc2U7CiAgICAgQ2hhbmdlTGlzdGVu
ZXJNYXAgbV9jaGFuZ2VMaXN0ZW5lcnM7Ci0gICAgUGVuZGluZ0ljb25SZXF1ZXN0TWFwIG1faWNv
blJlcXVlc3RzOwogfTsKIAogI2VuZGlmIC8vIGV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4
IDg2M2JlNDguLmJjYzRkYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5jcHAKQEAgLTEyMCwxMSArMTIwLDExIEBAIGNvbnN0IGNoYXIqIGV3a192aWV3
X3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcmV0dXJuIGltcGwtPnVy
bCgpOwogfQogCi1jb25zdCBjaGFyICpld2tfdmlld19pY29uX3VybF9nZXQoY29uc3QgRXZhc19P
YmplY3QgKmV3a1ZpZXcpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfZmF2aWNvbl9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJRVdfSU1QTF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIGltcGwsIDApOwogCi0gICAgcmV0dXJuIGltcGwtPmZhdmljb25VUkwoKTsKKyAg
ICByZXR1cm4gaW1wbC0+Y3JlYXRlRmF2aWNvbigpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
cmVsb2FkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmgKaW5kZXggMTFiZWI5NC4uNWI5MjNjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC00OCw3ICs0OCw4IEBACiAgKiAg
IHdoZW4gZG9uZSB0byBjb250aW51ZSB3aXRoIHRoZSBmb3JtIHN1Ym1pc3Npb24uIElmIHRoZSBs
YXN0IHJlZmVyZW5jZSBpcyByZW1vdmVkIG9uIGEKICAqICAgI0V3a19Gb3JtX1N1Ym1pc3Npb25f
UmVxdWVzdCBhbmQgdGhlIGZvcm0gaGFzIG5vdCBiZWVuIHN1Ym1pdHRlZCB5ZXQsCiAgKiAgIGV3
a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJtaXQoKSB3aWxsIGJlIGNhbGxlZCBhdXRvbWF0
aWNhbGx5LgotICogLSAiaWNvbixjaGFuZ2VkIiwgdm9pZDogcmVwb3J0cyB0aGF0IHRoZSB2aWV3
J3MgZmF2aWNvbiBoYXMgY2hhbmdlZC4KKyAqIC0gImZhdmljb24sY2hhbmdlZCIsIHZvaWQ6IHJl
cG9ydHMgdGhhdCB0aGUgdmlldydzIGZhdmljb24gaGFzIGNoYW5nZWQuCisgKiAgIFRoZSBmYXZp
Y29uIGNhbiBiZSBxdWVyaWVkIHVzaW5nIGV3a192aWV3X2Zhdmljb25fZ2V0KCkuCiAgKiAtICJs
b2FkLGVycm9yIiwgY29uc3QgRXdrX0Vycm9yKjogcmVwb3J0cyBtYWluIGZyYW1lIGxvYWQgZmFp
bGVkLgogICogLSAibG9hZCxmaW5pc2hlZCIsIHZvaWQ6IHJlcG9ydHMgbG9hZCBmaW5pc2hlZC4K
ICAqIC0gImxvYWQscHJvZ3Jlc3MiLCBkb3VibGUqOiBsb2FkIHByb2dyZXNzIGhhcyBjaGFuZ2Vk
ICh2YWx1ZSBmcm9tIDAuMCB0byAxLjApLgpAQCAtMzcyLDE2ICszNzMsMTQgQEAgRUFQSSBFaW5h
X0Jvb2wgZXdrX3ZpZXdfdXJsX3NldChFdmFzX09iamVjdCAqbywgY29uc3QgY2hhciAqdXJsKTsK
IEVBUEkgY29uc3QgY2hhciAqZXdrX3ZpZXdfdXJsX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7
CiAKIC8qKgotICogUmV0dXJucyB0aGUgY3VycmVudCBpY29uIFVSTCBvZiB2aWV3IG9iamVjdC4K
LSAqCi0gKiBJdCByZXR1cm5zIGFuIGludGVybmFsIHN0cmluZyBhbmQgc2hvdWxkIG5vdAotICog
YmUgbW9kaWZpZWQuIFRoZSBzdHJpbmcgaXMgZ3VhcmFudGVlZCB0byBiZSBzdHJpbmdzaGFyZWQu
CisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGZhdmljb24gb2YgdmlldyBvYmplY3QuCiAgKgogICog
QHBhcmFtIG8gdmlldyBvYmplY3QgdG8gZ2V0IGN1cnJlbnQgaWNvbiBVUkwKICAqCi0gKiBAcmV0
dXJuIGN1cnJlbnQgaWNvbiBVUkwgb24gc3VjY2VzcyBvciBAYyBOVUxMIGlmIHVuYXZhaWxhYmxl
IG9yIG9uIGZhaWx1cmUKKyAqIEByZXR1cm4gY3VycmVudCBmYXZpY29uIG9uIHN1Y2Nlc3Mgb3Ig
QGMgTlVMTCBpZiB1bmF2YWlsYWJsZSBvciBvbiBmYWlsdXJlLgorICogVGhlIHJldHVybmVkIEV2
YXNfT2JqZWN0IG5lZWRzIHRvIGJlIGZyZWVkIGFmdGVyIHVzZS4KICAqLwotRUFQSSBjb25zdCBj
aGFyICpld2tfdmlld19pY29uX3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOworRUFQSSBF
dmFzX09iamVjdCAqZXdrX3ZpZXdfZmF2aWNvbl9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwog
CiAvKioKICAqIEFza3MgdGhlIG1haW4gZnJhbWUgdG8gcmVsb2FkIHRoZSBjdXJyZW50IGRvY3Vt
ZW50LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCmluZGV4IDBmZjFk
ZjAuLmMwY2YyMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAK
QEAgLTc1LDU0ICs3NSw2IEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIq
IGh0dHBTZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjCiAgICAgc291cF9tZXNz
YWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CiB9CiAKLXN0YXRpYyB2
b2lkIG9uSWNvbkNoYW5nZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZl
bnRJbmZvKQotewotICAgIGJvb2wqIGljb25DaGFuZ2VkID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHVz
ZXJEYXRhKTsKLSAgICAqaWNvbkNoYW5nZWQgPSB0cnVlOwotfQotCi1URVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfdXJsX2dldCkKLXsKLSAgICBPd25QdHI8RVdL
MlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNl
cnZlcik7Ci0gICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKLQotICAgIC8vIFNl
dCBmYXZpY29uIGRhdGFiYXNlIHBhdGggYW5kIGVuYWJsZSBmdW5jdGlvbmFsaXR5LgotICAgIEV3
a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQod2ViVmlldygpKTsKLSAg
ICBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2RpcmVjdG9yeV9zZXQoY29udGV4dCwgMCk7
Ci0KLSAgICBib29sIGljb25DaGFuZ2VkID0gZmFsc2U7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIG9uSWNvbkNoYW5nZWQsICZp
Y29uQ2hhbmdlZCk7Ci0KLSAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBhZ2UgZmlyc3QgdG8g
ZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBiZQotICAgIC8vIGluIHRoZSBkYXRhYmFzZSBpbiBj
YXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgotICAgIEFTU0VSVF9UUlVFKGxvYWRV
cmxTeW5jKGh0dHBTZXJ2ZXItPmdldFVSTEZvclBhdGgoIi8iKS5kYXRhKCkpKTsKLQotICAgIHdo
aWxlICghaWNvbkNoYW5nZWQpCi0gICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7Ci0K
LSAgICBBU1NFUlRfVFJVRShpY29uQ2hhbmdlZCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfZGVsKHdlYlZpZXcoKSwgImljb24sY2hhbmdlZCIsIG9uSWNvbkNoYW5nZWQpOwotCi0g
ICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgZmF2aWNvbiBVUkwuCi0gICAgRXdrX0Zh
dmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0
YWJhc2VfZ2V0KGNvbnRleHQpOwotICAgIEFTU0VSVF9UUlVFKGZhdmljb25EYXRhYmFzZSk7Ci0K
LSAgICBDU3RyaW5nIGV4cGVjdGVkRmF2aWNvblVSTCA9IGh0dHBTZXJ2ZXItPmdldFVSTEZvclBh
dGgoIi9mYXZpY29uLmljbyIpOwotICAgIFdLRWluYVNoYXJlZFN0cmluZyBpY29uVVJMID0gZXdr
X2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdf
dXJsX2dldCh3ZWJWaWV3KCkpKTsKLSAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZpY29uVVJM
LmRhdGEoKSwgaWNvblVSTCk7Ci0KLSAgICBjb25zdCBjaGFyKiB2aWV3SWNvblVSTCA9IGV3a192
aWV3X2ljb25fdXJsX2dldCh3ZWJWaWV3KCkpOwotICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZEZh
dmljb25VUkwuZGF0YSgpLCB2aWV3SWNvblVSTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG9uSWNvbkRh
dGFSZWFkeShjb25zdCBjaGFyKiBwYWdlX3VybCwgRXZhc19PYmplY3QqIGljb24sIHZvaWQqIGV2
ZW50X2luZm8pCi17Ci0gICAgRXZhc19PYmplY3QqKiByZXR1cm5JY29uID0gc3RhdGljX2Nhc3Q8
RXZhc19PYmplY3QqKj4oZXZlbnRfaW5mbyk7Ci0gICAgaWYgKGljb24pCi0gICAgICAgIGV2YXNf
b2JqZWN0X3JlZihpY29uKTsKLSAgICAqcmV0dXJuSWNvbiA9IGljb247Ci19Ci0KIHN0cnVjdCBJ
Y29uUmVxdWVzdERhdGEgewogICAgIEV2YXNfT2JqZWN0KiB2aWV3OwogICAgIEV2YXNfT2JqZWN0
KiBpY29uOwpAQCAtMTMyLDEzICs4NCwxMyBAQCBzdGF0aWMgdm9pZCByZXF1ZXN0RmF2aWNvbkRh
dGEodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0Kiwgdm9pZCogZXZlbnRJbmZvKQogewogICAg
IEljb25SZXF1ZXN0RGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEljb25SZXF1ZXN0RGF0YSo+KHVz
ZXJEYXRhKTsKIAotICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIHZhbGlkIGZhdmlj
b24uCisgICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFsaWQgZmF2aWNvbiBmcm9t
IGljb24gZGF0YWJhc2UuCiAgICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250
ZXh0X2dldChkYXRhLT52aWV3KTsKICAgICBFd2tfRmF2aWNvbl9EYXRhYmFzZSogZmF2aWNvbkRh
dGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7CiAgICAg
QVNTRVJUX1RSVUUoZmF2aWNvbkRhdGFiYXNlKTsKIAogICAgIEV2YXMqIGV2YXMgPSBldmFzX29i
amVjdF9ldmFzX2dldChkYXRhLT52aWV3KTsKLSAgICBBU1NFUlRfVFJVRShld2tfZmF2aWNvbl9k
YXRhYmFzZV9hc3luY19pY29uX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3VybF9nZXQo
ZGF0YS0+dmlldyksIGV2YXMsIG9uSWNvbkRhdGFSZWFkeSwgJmRhdGEtPmljb24pKTsKKyAgICBk
YXRhLT5pY29uID0gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQoZmF2aWNvbkRhdGFiYXNl
LCBld2tfdmlld191cmxfZ2V0KGRhdGEtPnZpZXcpLCBldmFzKTsKIH0KIAogVEVTVF9GKEVXSzJV
bml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KQpAQCAtMTUx
LDcgKzEwMyw3IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRhYmFz
ZV9hc3luY19pY29uX2dldCkKICAgICBld2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2RpcmVj
dG9yeV9zZXQoY29udGV4dCwgMCk7CiAKICAgICBJY29uUmVxdWVzdERhdGEgZGF0YSA9IHsgd2Vi
VmlldygpLCAwIH07Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXco
KSwgImljb24sY2hhbmdlZCIsIHJlcXVlc3RGYXZpY29uRGF0YSwgJmRhdGEpOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJmYXZpY29uLGNoYW5nZWQiLCBy
ZXF1ZXN0RmF2aWNvbkRhdGEsICZkYXRhKTsKIAogICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUg
cGFnZSBmaXJzdCB0byBlbnN1cmUgdGhlIGljb24gZGF0YSB3aWxsIGJlCiAgICAgLy8gaW4gdGhl
IGRhdGFiYXNlIGluIGNhc2UgdGhlcmUncyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCkBAIC0xNjEs
MTMgKzExMywyMCBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJh
c2VfYXN5bmNfaWNvbl9nZXQpCiAgICAgICAgIGVjb3JlX21haW5fbG9vcF9pdGVyYXRlKCk7CiAK
ICAgICBBU1NFUlRfVFJVRShkYXRhLmljb24pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0RmF2aWNvbkRhdGEpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2RlbCh3ZWJWaWV3KCksICJmYXZpY29uLGNo
YW5nZWQiLCByZXF1ZXN0RmF2aWNvbkRhdGEpOwogCiAgICAgLy8gSXQgaXMgYSAxNngxNiBmYXZp
Y29uLgogICAgIGludCB3aWR0aCwgaGVpZ2h0OwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVf
Z2V0KGRhdGEuaWNvbiwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBFWFBFQ1RfRVEoMTYsIHdpZHRo
KTsKICAgICBFWFBFQ1RfRVEoMTYsIGhlaWdodCk7Ci0KICAgICBldmFzX29iamVjdF91bnJlZihk
YXRhLmljb24pOworCisgICAgLy8gVGVzdCBBUEkgdG8gcmVxdWVzdCBmYXZpY29uIGZyb20gdGhl
IHZpZXcKKyAgICBFdmFzX09iamVjdCogZmF2aWNvbiA9IGV3a192aWV3X2Zhdmljb25fZ2V0KHdl
YlZpZXcoKSk7CisgICAgQVNTRVJUX1RSVUUoZmF2aWNvbik7CisgICAgZXZhc19vYmplY3RfaW1h
Z2Vfc2l6ZV9nZXQoZmF2aWNvbiwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBFWFBFQ1RfRVEoMTYs
IHdpZHRoKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGhlaWdodCk7CisgICAgZXZhc19vYmplY3RfdW5y
ZWYoZmF2aWNvbik7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFu
Z2VMb2cKaW5kZXggMDhiZjVmMC4uZTQ4ZTQ3NSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9n
CisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEzLTAyLTAxICBDaHJp
c3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZM
XVtXSzJdIFJlZmFjdG9yIEV3a19GYXZpY29uIGNvZGUgYW5kIHN0b3AgcmVseWluZyBvbiBpbnRl
cm5hbCBDKysgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMDg1OTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGUgRUZMJ3MgTWluaUJyb3dzZXIgdG8gbWFrZSB1c2Ugb2YgbmV3IEV3a19GYXZp
Y29uIEFQSS4KKworICAgICAgICAqIE1pbmlCcm93c2VyL2VmbC9tYWluLmM6CisgICAgICAgICh1
cGRhdGVfdmlld19mYXZpY29uKToKKyAgICAgICAgKG9uX3ZpZXdfZmF2aWNvbl9jaGFuZ2VkKToK
KyAgICAgICAgKHdpbmRvd19jcmVhdGUpOgorCiAyMDEzLTAyLTEyICBaYW4gRG9iZXJzZWsgIDx6
ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBFbmFibGUgQ1NTIGltYWdlLXNl
dCBzdXBwb3J0IGluIGRldmVsb3BtZW50IGJ1aWxkcwpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJy
b3dzZXIvZWZsL21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWluLmMKaW5kZXggN2Jj
YTk1My4uY2U4MTZlZSAxMDA2NDQKLS0tIGEvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwor
KysgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCkBAIC01MzksMTIgKzUzOSw4IEBAIG9u
X2Rvd25sb2FkX2ZhaWxlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywg
dm9pZCAqZXZlbnRfaW5mbykKIH0KIAogc3RhdGljIHZvaWQKLW9uX2Zhdmljb25fcmVjZWl2ZWQo
Y29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpldmVudF9pbmZv
KQordXBkYXRlX3ZpZXdfZmF2aWNvbihCcm93c2VyX1dpbmRvdyAqd2luZG93LCBFdmFzX09iamVj
dCAqaWNvbikKIHsKLSAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJyb3dzZXJfV2luZG93
ICopZXZlbnRfaW5mbzsKLSAgICBpZiAoc3RyY21wKHBhZ2VfdXJsLCBld2tfdmlld191cmxfZ2V0
KHdpbmRvdy0+ZXdrX3ZpZXcpKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgLyogUmVtb3ZlIHBy
ZXZpb3VzIGljb24gZnJvbSBVUkwgYmFyICovCiAgICAgRXZhc19PYmplY3QgKm9sZF9pY29uID0g
ZWxtX29iamVjdF9wYXJ0X2NvbnRlbnRfdW5zZXQod2luZG93LT51cmxfYmFyLCAiaWNvbiIpOwog
ICAgIGlmIChvbGRfaWNvbikgewpAQCAtNTY1LDE2ICs1NjEsMTUgQEAgb25fZmF2aWNvbl9yZWNl
aXZlZChjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhc19PYmplY3QgKmljb24sIHZvaWQgKmV2ZW50
X2luZm8pCiB9CiAKIHN0YXRpYyB2b2lkCi1vbl92aWV3X2ljb25fY2hhbmdlZCh2b2lkICp1c2Vy
X2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmlldywgdm9pZCAqZXZlbnRfaW5mbykKK29uX3ZpZXdf
ZmF2aWNvbl9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2
b2lkICpldmVudF9pbmZvKQogewogICAgIEJyb3dzZXJfV2luZG93ICp3aW5kb3cgPSAoQnJvd3Nl
cl9XaW5kb3cgKil1c2VyX2RhdGE7Ci0gICAgLyogUmV0cmlldmUgdGhlIHZpZXcncyBmYXZpY29u
ICovCi0gICAgRXdrX0NvbnRleHQgKmNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldChld2tf
dmlldyk7Ci0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2UgKmljb25fZGF0YWJhc2UgPSBld2tfY29u
dGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKIAotICAgIGNvbnN0IGNoYXIgKnBh
Z2VfdXJsID0gZXdrX3ZpZXdfdXJsX2dldChld2tfdmlldyk7Ci0gICAgRXZhcyAqZXZhcyA9IGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a192aWV3KTsKLSAgICBld2tfZmF2aWNvbl9kYXRhYmFzZV9h
c3luY19pY29uX2dldChpY29uX2RhdGFiYXNlLCBwYWdlX3VybCwgZXZhcywgb25fZmF2aWNvbl9y
ZWNlaXZlZCwgd2luZG93KTsKKyAgICBFdmFzX09iamVjdCogZmF2aWNvbiA9IGV3a192aWV3X2Zh
dmljb25fZ2V0KGV3a192aWV3KTsKKyAgICB1cGRhdGVfdmlld19mYXZpY29uKHdpbmRvdywgZmF2
aWNvbik7CisKKyAgICBpZiAoZmF2aWNvbikKKyAgICAgICAgZXZhc19vYmplY3RfdW5yZWYoZmF2
aWNvbik7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyMTgsNyArMTIxMyw3IEBAIHN0YXRpYyBCcm93
c2VyX1dpbmRvdyAqd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCAqb3BlbmVyLCBjb25zdCBjaGFy
ICp1cmwsIGludCB3CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+
ZXdrX3ZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCB3aW5k
b3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3
LCAiZG93bmxvYWQscmVxdWVzdCIsIG9uX2Rvd25sb2FkX3JlcXVlc3QsIHdpbmRvdyk7CiAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJmaWxlLGNo
b29zZXIscmVxdWVzdCIsIG9uX2ZpbGVfY2hvb3Nlcl9yZXF1ZXN0LCB3aW5kb3cpOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiaWNvbixjaGFu
Z2VkIiwgb25fdmlld19pY29uX2NoYW5nZWQsIHdpbmRvdyk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJmYXZpY29uLGNoYW5nZWQiLCBvbl92
aWV3X2Zhdmljb25fY2hhbmdlZCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQod2luZG93LT5ld2tfdmlldywgImxvYWQsZXJyb3IiLCBvbl9lcnJvciwgd2luZG93
KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywg
ImxvYWQscHJvZ3Jlc3MiLCBvbl9wcm9ncmVzcywgd2luZG93KTsKICAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgInRpdGxlLGNoYW5nZWQiLCBvbl90
aXRsZV9jaGFuZ2VkLCB3aW5kb3cpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188136</attachid>
            <date>2013-02-13 11:47:18 -0800</date>
            <delta_ts>2013-02-15 14:56:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>29977</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZDY1ODUxLi41YzQ2YTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQg
c3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNv
IHRoYXQgaXQgbm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFu
ZCBzbyB0aGF0IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hh
bmdlZAorICAgICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlz
IG5vIGxvbmdlciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVu
dCBpcyBub3cgb25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAg
ZmF2aWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBh
cmUKKyAgICAgICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlm
aWVkIG9mIGZhdmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAg
ICBiZWNvbWVzIGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5
bmNocm9ub3VzLiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEg
aXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZp
Y29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6
CisgICAgICAgIChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fZ2V0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24s
Y2hhbmdlZCcgc2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAg
ICAgICBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3Zl
IEFQSSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQg
Ynkgb25lIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNf
T2JqZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8g
dXNlIHRoZSBuZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMTMgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFNlY0l0ZW1TaGltUHJveHkgYmUg
YSBXb3JrUXVldWVNZXNzYWdlUmVjZWl2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRXdrVmlldy5jcHAKaW5kZXggZmU5NGExZi4uYTY5MzcwMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5jcHAKQEAgLTc3NCwyMyArNzc0LDYgQEAg
dm9pZCBFd2tWaWV3OjpzZXRUb3VjaEV2ZW50c0VuYWJsZWQoYm9vbCBlbmFibGVkKQogfQogI2Vu
ZGlmCiAKLS8qKgotICogQGludGVybmFsCi0gKiBVcGRhdGUgdGhlIHZpZXcncyBmYXZpY29uIGFu
ZCBlbWl0cyBhICJpY29uLGNoYW5nZWQiIHNpZ25hbCBpZiBpdCBoYXMKLSAqIGNoYW5nZWQuCi0g
KgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIFVSTCBoYXMgY2hhbmdl
ZCBvciB3aGVuIHRoZSBpY29uIGZvcgotICogdGhlIGN1cnJlbnQgcGFnZSBVUkwgaGFzIGNoYW5n
ZWQuCi0gKi8KLXZvaWQgRXdrVmlldzo6aW5mb3JtSWNvbkNoYW5nZSgpCi17Ci0gICAgRXdrRmF2
aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJhc2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgp
OwotICAgIEFTU0VSVChpY29uRGF0YWJhc2UpOwotCi0gICAgbV9mYXZpY29uVVJMID0gZXdrX2Zh
dmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KGljb25EYXRhYmFzZSwgbV91cmwpOwotICAgIHNt
YXJ0Q2FsbGJhY2s8SWNvbkNoYW5nZWQ+KCkuY2FsbCgpOwotfQotCiBib29sIEV3a1ZpZXc6OmNy
ZWF0ZUdMU3VyZmFjZSgpCiB7CiAgICAgaWYgKCFtX2lzQWNjZWxlcmF0ZWQpCkBAIC0xMDM5LDcg
KzEwMjIsMTUgQEAgdm9pZCBFd2tWaWV3OjppbmZvcm1VUkxDaGFuZ2UoKQogICAgIHNtYXJ0Q2Fs
bGJhY2s8VVJMQ2hhbmdlZD4oKS5jYWxsKG1fdXJsKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgdmll
dydzIGZhdmljb24uCi0gICAgaW5mb3JtSWNvbkNoYW5nZSgpOworICAgIHNtYXJ0Q2FsbGJhY2s8
RmF2aWNvbkNoYW5nZWQ+KCkuY2FsbCgpOworfQorCitFdmFzX09iamVjdCogRXdrVmlldzo6Y3Jl
YXRlRmF2aWNvbigpIGNvbnN0Cit7CisgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBpY29uRGF0YWJh
c2UgPSBtX2NvbnRleHQtPmZhdmljb25EYXRhYmFzZSgpOworICAgIEFTU0VSVChpY29uRGF0YWJh
c2UpOworCisgICAgcmV0dXJuIGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KGljb25EYXRh
YmFzZSwgbV91cmwsIHNtYXJ0RGF0YSgpLT5iYXNlLmV2YXMpOwogfQogCiBFd2tXaW5kb3dGZWF0
dXJlcyogRXdrVmlldzo6d2luZG93RmVhdHVyZXMoKQpAQCAtMTMzMyw3ICsxMzI0LDcgQEAgdm9p
ZCBFd2tWaWV3OjpoYW5kbGVGYXZpY29uQ2hhbmdlZChjb25zdCBjaGFyKiBwYWdlVVJMLCB2b2lk
KiBldmVudEluZm8pCiAgICAgaWYgKCF2aWV3LT51cmwoKSB8fCBzdHJjYXNlY21wKHZpZXctPnVy
bCgpLCBwYWdlVVJMKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdmlldy0+aW5mb3JtSWNvbkNo
YW5nZSgpOworICAgIHZpZXctPnNtYXJ0Q2FsbGJhY2s8RmF2aWNvbkNoYW5nZWQ+KCkuY2FsbCgp
OwogfQogCiBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrVmlldzo6dGFrZVNuYXBzaG90
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaAppbmRleCA2ZmNj
NWNjLi5kODE1ZTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmll
dy5oCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRUb0NhaXJvU3Vy
ZmFjZShjYWlyb19zdXJmYWNlX3QqKTsKIAogICAgIGNvbnN0IGNoYXIqIHVybCgpIGNvbnN0IHsg
cmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgY2hhciogZmF2aWNvblVSTCgpIGNvbnN0IHsgcmV0
dXJuIG1fZmF2aWNvblVSTDsgfQorICAgIEV2YXNfT2JqZWN0KiBjcmVhdGVGYXZpY29uKCkgY29u
c3Q7CiAgICAgY29uc3QgY2hhciogdGl0bGUoKSBjb25zdDsKICAgICBXZWJLaXQ6OklucHV0TWV0
aG9kQ29udGV4dEVmbCogaW5wdXRNZXRob2RDb250ZXh0KCk7CiAKQEAgLTIzMiw4ICsyMzIsNiBA
QCBwcml2YXRlOgogCiAgICAgV2ViQ29yZTo6Q29vcmRpbmF0ZWRHcmFwaGljc1NjZW5lKiBjb29y
ZGluYXRlZEdyYXBoaWNzU2NlbmUoKTsKIAotICAgIHZvaWQgaW5mb3JtSWNvbkNoYW5nZSgpOwot
CiAgICAgLy8gRXZhc19TbWFydF9DbGFzcyBjYWxsYmFjayBpbnRlcmZhY2U6CiAgICAgc3RhdGlj
IHZvaWQgaGFuZGxlRXZhc09iamVjdEFkZChFdmFzX09iamVjdCopOwogICAgIHN0YXRpYyB2b2lk
IGhhbmRsZUV2YXNPYmplY3REZWxldGUoRXZhc19PYmplY3QqKTsKQEAgLTI5MCw3ICsyODgsNiBA
QCBwcml2YXRlOgogICAgIE93blB0cjxFd2tTZXR0aW5ncz4gbV9zZXR0aW5nczsKICAgICBSZWZQ
dHI8RXdrV2luZG93RmVhdHVyZXM+IG1fd2luZG93RmVhdHVyZXM7CiAgICAgY29uc3Qgdm9pZCog
bV9jdXJzb3JJZGVudGlmaWVyOyAvLyBUaGlzIGlzIGFuIGFkZHJlc3MsIGRvIG5vdCBmcmVlIGl0
LgotICAgIFdLRWluYVNoYXJlZFN0cmluZyBtX2Zhdmljb25VUkw7CiAgICAgV0tFaW5hU2hhcmVk
U3RyaW5nIG1fdXJsOwogICAgIG11dGFibGUgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGl0bGU7CiAg
ICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fdGhlbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJhY2tzLmgKaW5kZXggNWYxY2IwOC4uOTM2OWVm
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlld0Nh
bGxiYWNrcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdD
YWxsYmFja3MuaApAQCAtNTQsNyArNTQsNyBAQCBlbnVtIENhbGxiYWNrVHlwZSB7CiAgICAgRG93
bmxvYWRKb2JSZXF1ZXN0ZWQsCiAgICAgRmlsZUNob29zZXJSZXF1ZXN0LAogICAgIE5ld0Zvcm1T
dWJtaXNzaW9uUmVxdWVzdCwKLSAgICBJY29uQ2hhbmdlZCwKKyAgICBGYXZpY29uQ2hhbmdlZCwK
ICAgICBMb2FkRXJyb3IsCiAgICAgTG9hZEZpbmlzaGVkLAogICAgIExvYWRQcm9ncmVzcywKQEAg
LTE2NCw3ICsxNjQsNyBAQCBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iRmlu
aXNoZWQsICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZAogREVDTEFSRV9FV0tfVklF
V19DQUxMQkFDSyhEb3dubG9hZEpvYlJlcXVlc3RlZCwgImRvd25sb2FkLHJlcXVlc3QiLCBFd2tf
RG93bmxvYWRfSm9iKik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEZpbGVDaG9vc2VyUmVx
dWVzdCwgImZpbGUsY2hvb3NlcixyZXF1ZXN0IiwgRXdrX0ZpbGVfQ2hvb3Nlcl9SZXF1ZXN0Kik7
CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKE5ld0Zvcm1TdWJtaXNzaW9uUmVxdWVzdCwgImZv
cm0sc3VibWlzc2lvbixyZXF1ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0Kik7Ci1E
RUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEljb25DaGFuZ2VkLCAiaWNvbixjaGFuZ2VkIiwgdm9p
ZCk7CitERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKEZhdmljb25DaGFuZ2VkLCAiZmF2aWNvbixj
aGFuZ2VkIiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRFcnJvciwgImxv
YWQsZXJyb3IiLCBFd2tfRXJyb3IqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTG9hZEZp
bmlzaGVkLCAibG9hZCxmaW5pc2hlZCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhMb2FkUHJvZ3Jlc3MsICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5j
cHAKaW5kZXggNDVhNzNmYjUuLjYzMDBhYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25p
Y3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTMwLDcgKzMxLDYgQEAKICNpbmNsdWRlICJXS0ljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUg
IldLSWNvbkRhdGFiYXNlQ2Fpcm8uaCIKICNpbmNsdWRlICJXS1VSTC5oIgotI2luY2x1ZGUgIldl
Ykljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgImV3a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUu
aCIKICNpbmNsdWRlIDxXZWJDb3JlL0NhaXJvVXRpbGl0aWVzRWZsLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9SZWZQdHJDYWlyby5oPgpAQCAtNDYsNyArNDYsNiBAQCBFd2tGYXZpY29uRGF0YWJhc2U6
OkV3a0Zhdmljb25EYXRhYmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UpCiAgICAg
bWVtc2V0KCZpY29uRGF0YWJhc2VDbGllbnQsIDAsIHNpemVvZihXS0ljb25EYXRhYmFzZUNsaWVu
dCkpOwogICAgIGljb25EYXRhYmFzZUNsaWVudC52ZXJzaW9uID0ga1dLSWNvbkRhdGFiYXNlQ2xp
ZW50Q3VycmVudFZlcnNpb247CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LmNsaWVudEluZm8gPSB0
aGlzOwotICAgIGljb25EYXRhYmFzZUNsaWVudC5kaWRDaGFuZ2VJY29uRm9yUGFnZVVSTCA9IGRp
ZENoYW5nZUljb25Gb3JQYWdlVVJMOwogICAgIGljb25EYXRhYmFzZUNsaWVudC5pY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCA9IGljb25EYXRhUmVhZHlGb3JQYWdlVVJMOwogICAgIFdLSWNvbkRhdGFi
YXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KG1faWNvbkRhdGFiYXNlLmdldCgpLCAmaWNvbkRhdGFi
YXNlQ2xpZW50KTsKIH0KQEAgLTU2LDE0ICs1NSw2IEBAIEV3a0Zhdmljb25EYXRhYmFzZTo6fkV3
a0Zhdmljb25EYXRhYmFzZSgpCiAgICAgV0tJY29uRGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGll
bnQobV9pY29uRGF0YWJhc2UuZ2V0KCksIDApOwogfQogCi1TdHJpbmcgRXdrRmF2aWNvbkRhdGFi
YXNlOjppY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0Ci17Ci0g
ICAgU3RyaW5nIGljb25VUkw7Ci0gICAgdG9JbXBsKG1faWNvbkRhdGFiYXNlLmdldCgpKS0+c3lu
Y2hyb25vdXNJY29uVVJMRm9yUGFnZVVSTChwYWdlVVJMLCBpY29uVVJMKTsKLQotICAgIHJldHVy
biBpY29uVVJMOwotfQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6d2F0Y2hDaGFuZ2VzKGNv
bnN0IEljb25DaGFuZ2VDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKIHsKICAgICBBU1NFUlQo
Y2FsbGJhY2tEYXRhLmNhbGxiYWNrKTsKQEAgLTc5LDU1ICs3MCw2IEBAIHZvaWQgRXdrRmF2aWNv
bkRhdGFiYXNlOjp1bndhdGNoQ2hhbmdlcyhFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5n
ZV9DYiBjYWxsCiAgICAgbV9jaGFuZ2VMaXN0ZW5lcnMucmVtb3ZlKGNhbGxiYWNrKTsKIH0KIAot
c3RydWN0IEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSB7Ci0gICAgU3RyaW5nIHBhZ2VVUkw7Ci0g
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKLSAgICBJY29uUmVxdWVzdENhbGxi
YWNrRGF0YSBjYWxsYmFja0RhdGE7Ci0KLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UoY29u
c3QgU3RyaW5nJiBwYWdlVVJMLCBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSwg
Y29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSkKLSAgICAgICAgOiBw
YWdlVVJMKHBhZ2VVUkwpCi0gICAgICAgICwgc3VyZmFjZShzdXJmYWNlKQotICAgICAgICAsIGNh
bGxiYWNrRGF0YShjYWxsYmFja0RhdGEpCi0gICAgeyB9Ci19OwotCi1zdGF0aWMgRWluYV9Cb29s
IHJlc3BvbmRfaWNvbl9yZXF1ZXN0X2lkbGUodm9pZCogZGF0YSkKLXsKLSAgICBBc3luY0ljb25S
ZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gc3RhdGljX2Nhc3Q8QXN5bmNJY29uUmVxdWVzdFJl
c3BvbnNlKj4oZGF0YSk7Ci0KLSAgICBSZWZQdHI8RXZhc19PYmplY3Q+IGljb24gPSByZXNwb25z
ZS0+c3VyZmFjZSA/IFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fpcm9JbWFnZVN1cmZhY2UocmVz
cG9uc2UtPmNhbGxiYWNrRGF0YS5ldmFzLCByZXNwb25zZS0+c3VyZmFjZS5nZXQoKSkgOiAwOwot
ICAgIHJlc3BvbnNlLT5jYWxsYmFja0RhdGEuY2FsbGJhY2socmVzcG9uc2UtPnBhZ2VVUkwudXRm
OCgpLmRhdGEoKSwgaWNvbi5nZXQoKSwgcmVzcG9uc2UtPmNhbGxiYWNrRGF0YS51c2VyRGF0YSk7
Ci0KLSAgICBkZWxldGUgcmVzcG9uc2U7Ci0KLSAgICByZXR1cm4gRUNPUkVfQ0FMTEJBQ0tfRE9O
RTsKLX0KLQotdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6Omljb25Gb3JQYWdlVVJMKGNvbnN0IGNo
YXIqIHBhZ2VVUkwsIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEp
Ci17Ci0gICAgLy8gV2UgYXNrIGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0
IHRoZSBpY29uIGRhdGEgbm93LAotICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVu
IGlmIHRoZSBkYXRhYmFzZSBpcyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgotICAgIFdLUmV0YWlu
UHRyPFdLVVJMUmVmPiB3a1BhZ2VVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcocGFnZVVSTCkpOwotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBnZXRJ
Y29uU3VyZmFjZVN5bmNocm9ub3VzbHkod2tQYWdlVVJMLmdldCgpKTsKLQotICAgIC8vIElmIHRo
ZXJlJ3Mgbm8gdmFsaWQgaWNvbiwgYnV0IHRoZXJlJ3MgYW4gaWNvblVSTCByZWdpc3RlcmVkLAot
ICAgIC8vIG9yIGl0J3Mgc3RpbGwgbm90IHJlZ2lzdGVyZWQgYnV0IHRoZSBpbXBvcnQgcHJvY2Vz
cyBoYXNuJ3QKLSAgICAvLyBmaW5pc2hlZCB5ZXQsIHdlIG5lZWQgdG8gd2FpdCBmb3IgaWNvbkRh
dGFSZWFkeUZvclBhZ2VVUkwgdG8gYmUKLSAgICAvLyBjYWxsZWQgYmVmb3JlIG1ha2luZyBhbmQg
aW5mb3JtZWQgZGVjaXNpb24uCi0gICAgU3RyaW5nIHBhZ2VVUkxTdHJpbmcgPSBTdHJpbmc6OmZy
b21VVEY4KHBhZ2VVUkwpOwotICAgIFN0cmluZyBpY29uVVJMID0gaWNvblVSTEZvclBhZ2VVUkwo
cGFnZVVSTFN0cmluZyk7Ci0gICAgaWYgKCFzdXJmYWNlICYmICghaWNvblVSTC5pc0VtcHR5KCkg
fHwgIXRvSW1wbChtX2ljb25EYXRhYmFzZS5nZXQoKSktPmlzVXJsSW1wb3J0Q29tcGxldGVkKCkp
KSB7Ci0gICAgICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciByZXF1ZXN0cyA9IG1faWNvblJl
cXVlc3RzLmdldChwYWdlVVJMU3RyaW5nKTsKLSAgICAgICAgcmVxdWVzdHMuYXBwZW5kKGNhbGxi
YWNrRGF0YSk7Ci0gICAgICAgIG1faWNvblJlcXVlc3RzLnNldChwYWdlVVJMU3RyaW5nLCByZXF1
ZXN0cyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBSZXNwb25kIHdoZW4gaWRs
ZS4KLSAgICBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UqIHJlc3BvbnNlID0gbmV3IEFzeW5jSWNv
blJlcXVlc3RSZXNwb25zZShwYWdlVVJMU3RyaW5nLCBzdXJmYWNlLnJlbGVhc2UoKSwgY2FsbGJh
Y2tEYXRhKTsKLSAgICBlY29yZV9pZGxlcl9hZGQocmVzcG9uZF9pY29uX3JlcXVlc3RfaWRsZSwg
cmVzcG9uc2UpOwotfQotCiB2b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6ZGlkQ2hhbmdlSWNvbkZv
clBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBhZ2VVUkxSZWYsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCiB7CiAgICAgY29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKiBld2tJY29u
RGF0YWJhc2UgPSBzdGF0aWNfY2FzdDxjb25zdCBFd2tGYXZpY29uRGF0YWJhc2UqPihjbGllbnRJ
bmZvKTsKQEAgLTE0MywxNSArODUsMTMgQEAgdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OmRpZENo
YW5nZUljb25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWcKICAgICAg
ICAgaXQtPnZhbHVlLmNhbGxiYWNrKHBhZ2VVUkwuZGF0YSgpLCBpdC0+dmFsdWUudXNlckRhdGEp
OwogfQogCi1QYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gRXdrRmF2aWNvbkRhdGFiYXNlOjpn
ZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoV0tVUkxSZWYgcGFnZVVSTCkgY29uc3QKK1Bhc3NS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tGYXZpY29uRGF0YWJhc2U6OmdldEljb25TdXJmYWNl
U3luY2hyb25vdXNseShjb25zdCBjaGFyKiBwYWdlVVJMKSBjb25zdAogewotICAgIFdLSWNvbkRh
dGFiYXNlUmV0YWluSWNvbkZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrUGFnZVVSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdp
dGhVVEY4Q1N0cmluZyhwYWdlVVJMKSk7CiAKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBz
dXJmYWNlID0gV0tJY29uRGF0YWJhc2VUcnlHZXRDYWlyb1N1cmZhY2VGb3JVUkwobV9pY29uRGF0
YWJhc2UuZ2V0KCksIHBhZ2VVUkwpOwotICAgIGlmICghc3VyZmFjZSkgewotICAgICAgICBXS0lj
b25EYXRhYmFzZVJlbGVhc2VJY29uRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCBwYWdlVVJM
KTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gV0tJY29uRGF0YWJhc2VU
cnlHZXRDYWlyb1N1cmZhY2VGb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHdrUGFnZVVSTC5n
ZXQoKSk7CisgICAgaWYgKCFzdXJmYWNlKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9CiAKICAg
ICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7CiB9CkBAIC0xNjAsNDEgKzEwMCwyNiBAQCB2b2lk
IEV3a0Zhdmljb25EYXRhYmFzZTo6aWNvbkRhdGFSZWFkeUZvclBhZ2VVUkwoV0tJY29uRGF0YWJh
c2VSZWYsIFdLVVJMUmVmIHBhZwogewogICAgIEV3a0Zhdmljb25EYXRhYmFzZSogZXdrSWNvbkRh
dGFiYXNlID0gY29uc3RfY2FzdDxFd2tGYXZpY29uRGF0YWJhc2UqPihzdGF0aWNfY2FzdDxjb25z
dCBFd2tGYXZpY29uRGF0YWJhc2UqPihjbGllbnRJbmZvKSk7CiAKLSAgICBTdHJpbmcgdXJsU3Ry
aW5nID0gdG9XVEZTdHJpbmcocGFnZVVSTCk7Ci0gICAgaWYgKCFld2tJY29uRGF0YWJhc2UtPm1f
aWNvblJlcXVlc3RzLmNvbnRhaW5zKHVybFN0cmluZykpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBld2tJY29uRGF0YWJhc2UtPmdldElj
b25TdXJmYWNlU3luY2hyb25vdXNseShwYWdlVVJMKTsKKyAgICBXS0ljb25EYXRhYmFzZVJldGFp
bkljb25Gb3JVUkwoZXdrSWNvbkRhdGFiYXNlLT5tX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVS
TCk7CiAKLSAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHNGb3JVUkwgPSBld2tJ
Y29uRGF0YWJhc2UtPm1faWNvblJlcXVlc3RzLnRha2UodXJsU3RyaW5nKTsKLSAgICBzaXplX3Qg
cmVxdWVzdENvdW50ID0gcmVxdWVzdHNGb3JVUkwuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVxdWVzdENvdW50OyArK2kpIHsKLSAgICAgICAgY29uc3QgSWNvblJlcXVlc3RD
YWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSA9IHJlcXVlc3RzRm9yVVJMW2ldOwotICAgICAgICBS
ZWZQdHI8RXZhc19PYmplY3Q+IGljb24gPSBzdXJmYWNlID8gV2ViQ29yZTo6ZXZhc09iamVjdEZy
b21DYWlyb0ltYWdlU3VyZmFjZShjYWxsYmFja0RhdGEuZXZhcywgc3VyZmFjZS5nZXQoKSkgOiAw
OwotICAgICAgICBjYWxsYmFja0RhdGEuY2FsbGJhY2sodXJsU3RyaW5nLnV0ZjgoKS5kYXRhKCks
IGljb24uZ2V0KCksIGNhbGxiYWNrRGF0YS51c2VyRGF0YSk7Ci0gICAgfQorICAgIENTdHJpbmcg
dXJsU3RyaW5nID0gdG9XVEZTdHJpbmcocGFnZVVSTCkudXRmOCgpOworICAgIENoYW5nZUxpc3Rl
bmVyTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGV3a0ljb25EYXRhYmFzZS0+bV9jaGFuZ2VMaXN0
ZW5lcnMuYmVnaW4oKTsKKyAgICBDaGFuZ2VMaXN0ZW5lck1hcDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gZXdrSWNvbkRhdGFiYXNlLT5tX2NoYW5nZUxpc3RlbmVycy5lbmQoKTsKKyAgICBmb3IgKDsg
aXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUuY2FsbGJhY2sodXJsU3RyaW5nLmRh
dGEoKSwgaXQtPnZhbHVlLnVzZXJEYXRhKTsKIH0KIAotY29uc3QgY2hhciogZXdrX2Zhdmljb25f
ZGF0YWJhc2VfaWNvbl91cmxfZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJh
c2UsIGNvbnN0IGNoYXIqIHBhZ2VVUkwpCitFdmFzX09iamVjdCogZXdrX2Zhdmljb25fZGF0YWJh
c2VfaWNvbl9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgY29uc3Qg
Y2hhciogcGFnZVVSTCwgRXZhcyogZXZhcykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXdrSWNvbkRhdGFiYXNlLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwocGFnZVVSTCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV2YXMsIDApOwogCi0gICAgU3RyaW5nIGljb25VUkwgPSBld2tJY29uRGF0YWJhc2UtPmljb25V
UkxGb3JQYWdlVVJMKFN0cmluZzo6ZnJvbVVURjgocGFnZVVSTCkpOwotCi0gICAgcmV0dXJuIGVp
bmFfc3RyaW5nc2hhcmVfYWRkKGljb25VUkwudXRmOCgpLmRhdGEoKSk7Ci19Ci0KLUVpbmFfQm9v
bCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFz
ZSogZXdrSWNvbkRhdGFiYXNlLCBjb25zdCBjaGFyKiBwYWdlX3VybCwgRXZhcyogZXZhcywgRXdr
X0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJE
YXRhKQotewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJh
c2UsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocGFnZV91cmws
IGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXZhcywgZmFsc2Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjYWxsYmFjaywgZmFsc2UpOwot
Ci0gICAgZXdrSWNvbkRhdGFiYXNlLT5pY29uRm9yUGFnZVVSTChwYWdlX3VybCwgSWNvblJlcXVl
c3RDYWxsYmFja0RhdGEoY2FsbGJhY2ssIHVzZXJEYXRhLCBldmFzKSk7CisgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGV3a0ljb25EYXRhYmFzZS0+Z2V0SWNvblN1cmZhY2VT
eW5jaHJvbm91c2x5KHBhZ2VVUkwpOworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gV2ViQ29yZTo6ZXZhc09iamVjdEZy
b21DYWlyb0ltYWdlU3VyZmFjZShldmFzLCBzdXJmYWNlLmdldCgpKS5sZWFrUmVmKCk7CiB9CiAK
IHZvaWQgZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9jaGFuZ2VfY2FsbGJhY2tfYWRkKEV3a19G
YXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIEV3a19GYXZpY29uX0RhdGFiYXNlX0lj
b25fQ2hhbmdlX0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCmluZGV4
IGI2NmE2N2IuLjhmOGJhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBFbGVjdHJvbmljcy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNDAgKzQ4
LDE2IEBAIHR5cGVkZWYgc3RydWN0IEV3a0Zhdmljb25EYXRhYmFzZSBFd2tfRmF2aWNvbl9EYXRh
YmFzZTsKIHR5cGVkZWYgdm9pZCAoKkV3a19GYXZpY29uX0RhdGFiYXNlX0ljb25fQ2hhbmdlX0Ni
KShjb25zdCBjaGFyICpwYWdlX3VybCwgdm9pZCAqZXZlbnRfaW5mbyk7CiAKIC8qKgotICogQHR5
cGVkZWYgRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IgRXdrX0Zhdmljb25f
RGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IKLSAqIEBicmllZiBDYWxsYmFjayB0eXBlIGZvciB1
c2Ugd2l0aCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldAotICoKLSAqIFRoZSBA
YSBpY29uIG1heSBiZSBOVUxMIGlmIHRoZXJlIGlzIG5vIGZhdmljb24gYXNzb2NpYXRlZCB0byB0
aGUgZ2l2ZW4gQGEgcGFnZV91cmwuCi0gKgotICogWW91IG5lZWQgdG8gY2FsbCBldmFzX29iamVj
dF9yZWYoKSBvbiB0aGUgQGEgaWNvbiBpZiB5b3Ugd2lzaCB0byBrZWVwIGl0IGFmdGVyIHRoZQot
ICogY2FsbGJhY2sgaXMgZXhlY3V0ZWQuCi0gKi8KLXR5cGVkZWYgdm9pZCAoKkV3a19GYXZpY29u
X0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiKShjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhc19P
YmplY3QgKmljb24sIHZvaWQgKmV2ZW50X2luZm8pOwotCi0vKioKLSAqIFJldHJpZXZlcyBmcm9t
IHRoZSBkYXRhYmFzZSB0aGUgZmF2aWNvbiBVUkwgZm9yIHRoZSBnaXZlbiBAYSBwYWdlX3VybAot
ICoKLSAqIEBwYXJhbSBkYXRhYmFzZSBkYXRhYmFzZSBvYmplY3QgdG8gcXVlcnkKLSAqIEBwYXJh
bSBwYWdlX3VybCBVUkwgb2YgdGhlIHBhZ2UgdG8gZ2V0IHRoZSBmYXZpY29uIFVSTCBmb3IKLSAq
Ci0gKiBAcmV0dXJuIGEgbmV3bHkgYWxsb2NhdGVkIHN0cmluZyBndWFyYW50ZWVkIHRvIGJlIGVp
bmFfc3RyaW5nc2hhcmUKLSAqICAgICAgICAgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yIG9y
IGlmIHRoZSBrZXkgZG9lcyBub3QgZXhpc3QuCi0gKiAgICAgICAgIFlvdSBuZWVkIHRvIGNhbGwg
ZWluYV9zdHJpbmdzaGFyZV9kZWwoKSBhZnRlciB1c2UuCi0gKi8KLUVBUEkgY29uc3QgY2hhciAq
ZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl91cmxfZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlICpk
YXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwpOwotCi0vKioKICAqIFJldHJpZXZlcyBhc3lu
Y2hyb25vdXNseSBmcm9tIHRoZSBkYXRhYmFzZSB0aGUgZmF2aWNvbiBmb3IgdGhlIGdpdmVuIEBh
IHBhZ2VfdXJsCiAgKgogICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0byBxdWVy
eQogICogQHBhcmFtIHBhZ2VfdXJsIFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZhdmljb24g
Zm9yCiAgKiBAcGFyYW0gZXZhcyBUaGUgY2FudmFzIHRvIGFkZCB0aGUgZmF2aWNvbiB0bwotICog
QHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBp
Y29uIGlzIHJldHJpZXZlZAotICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgcG9pbnRlciB0aGF0IHdh
cyB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrCiAgKgotICogQHJldHVybiBAYyBFSU5BX1RS
VUUgaWYgdGhlIGljb24gd2FzIHN1Y2Nlc3NmdWx5IHJlcXVlc3RlZCwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UKKyAqIEByZXR1cm4gVGhlIGZhdmljb24gYXMgYW4gRXZhc19PYmplY3QgaWYgc3Vj
Y2Vzc2Z1bCwgQGMgTlVMTCBvdGhlcndpc2UuCisgKiBUaGUgcmV0dXJuZWQgRXZhc19PYmplY3Qg
bmVlZHMgdG8gYmUgZnJlZWQgYWZ0ZXIgdXNlLgogICovCi1FQVBJIEVpbmFfQm9vbCBld2tfZmF2
aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJh
c2UsIGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzICpldmFzLCBFd2tfRmF2aWNvbl9EYXRhYmFz
ZV9Bc3luY19JY29uX0dldF9DYiBjYWxsYmFjaywgdm9pZCAqZGF0YSk7CitFQVBJIEV2YXNfT2Jq
ZWN0ICpld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAq
ZGF0YWJhc2UsIGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzICpldmFzKTsKIAogLyoqCiAgKiBB
ZGQgKHJlZ2lzdGVyKSBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgaWNvbiBjaGFuZ2UgZXZlbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29u
X2RhdGFiYXNlX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19mYXZpY29uX2RhdGFiYXNlX3ByaXZhdGUuaAppbmRleCA3NTM1YmRkLi4xY2M3NzIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRh
YmFzZV9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NiwyNyArNDcsNyBAQCBz
dHJ1Y3QgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YSB7CiAgICAgeyB9CiB9OwogCi1zdHJ1Y3QgSWNv
blJlcXVlc3RDYWxsYmFja0RhdGEgewotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0lj
b25fR2V0X0NiIGNhbGxiYWNrOwotICAgIHZvaWQqIHVzZXJEYXRhOwotICAgIEV2YXMqIGV2YXM7
Ci0KLSAgICBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSgpCi0gICAgICAgIDogY2FsbGJhY2soMCkK
LSAgICAgICAgLCB1c2VyRGF0YSgwKQotICAgICAgICAsIGV2YXMoMCkKLSAgICB7IH0KLQotICAg
IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25f
R2V0X0NiIF9jYWxsYmFjaywgdm9pZCogX3VzZXJEYXRhLCBFdmFzKiBfZXZhcykKLSAgICAgICAg
OiBjYWxsYmFjayhfY2FsbGJhY2spCi0gICAgICAgICwgdXNlckRhdGEoX3VzZXJEYXRhKQotICAg
ICAgICAsIGV2YXMoX2V2YXMpCi0gICAgeyB9Ci19OwotCiB0eXBlZGVmIEhhc2hNYXA8RXdrX0Zh
dmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2IsIEljb25DaGFuZ2VDYWxsYmFja0RhdGE+IENo
YW5nZUxpc3RlbmVyTWFwOwotdHlwZWRlZiBWZWN0b3I8SWNvblJlcXVlc3RDYWxsYmFja0RhdGE+
IFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvcjsKLXR5cGVkZWYgSGFzaE1hcDxTdHJpbmcgLyogcGFn
ZVVSTCAqLywgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yPiBQZW5kaW5nSWNvblJlcXVlc3RNYXA7
CiAKIGNsYXNzIEV3a0Zhdmljb25EYXRhYmFzZSB7CiBwdWJsaWM6CkBAIC03NiwyMyArNTcsMTgg
QEAgcHVibGljOgogICAgIH0KICAgICB+RXdrRmF2aWNvbkRhdGFiYXNlKCk7CiAKLSAgICBTdHJp
bmcgaWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKSBjb25zdDsKLSAgICB2
b2lkIGljb25Gb3JQYWdlVVJMKGNvbnN0IGNoYXIqIHBhZ2VVUkwsIGNvbnN0IEljb25SZXF1ZXN0
Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpOwotCisgICAgUGFzc1JlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShjb25zdCBjaGFyKiBwYWdlVVJMKSBj
b25zdDsKICAgICB2b2lkIHdhdGNoQ2hhbmdlcyhjb25zdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRh
JiBjYWxsYmFja0RhdGEpOwogICAgIHZvaWQgdW53YXRjaENoYW5nZXMoRXdrX0Zhdmljb25fRGF0
YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2spOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IEV3a0Zhdmljb25EYXRhYmFzZShXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UpOwogCi0g
ICAgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNs
eShXS1VSTFJlZiBwYWdlVVJMKSBjb25zdDsKLQogICAgIHN0YXRpYyB2b2lkIGRpZENoYW5nZUlj
b25Gb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZSwgV0tVUkxSZWYgcGFn
ZVVSTCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7CiAgICAgc3RhdGljIHZvaWQgaWNvbkRhdGFS
ZWFkeUZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VSTFJlZiBw
YWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKIAogICAgIFdLUmV0YWluUHRyPFdLSWNv
bkRhdGFiYXNlUmVmPiBtX2ljb25EYXRhYmFzZTsKICAgICBDaGFuZ2VMaXN0ZW5lck1hcCBtX2No
YW5nZUxpc3RlbmVyczsKLSAgICBQZW5kaW5nSWNvblJlcXVlc3RNYXAgbV9pY29uUmVxdWVzdHM7
CiB9OwogCiAjZW5kaWYgLy8gZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggODYzYmU0OC4u
YmNjNGRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcApAQCAtMTIwLDExICsxMjAsMTEgQEAgY29uc3QgY2hhciogZXdrX3ZpZXdfdXJsX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICByZXR1cm4gaW1wbC0+dXJsKCk7CiB9CiAK
LWNvbnN0IGNoYXIgKmV3a192aWV3X2ljb25fdXJsX2dldChjb25zdCBFdmFzX09iamVjdCAqZXdr
VmlldykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19mYXZpY29uX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKICAgICBFV0tfVklFV19JTVBMX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
aW1wbCwgMCk7CiAKLSAgICByZXR1cm4gaW1wbC0+ZmF2aWNvblVSTCgpOworICAgIHJldHVybiBp
bXBsLT5jcmVhdGVGYXZpY29uKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuaAppbmRleCAxMWJlYjk0Li41YjkyM2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAgLTQ4LDcgKzQ4LDggQEAKICAqICAgd2hlbiBkb25l
IHRvIGNvbnRpbnVlIHdpdGggdGhlIGZvcm0gc3VibWlzc2lvbi4gSWYgdGhlIGxhc3QgcmVmZXJl
bmNlIGlzIHJlbW92ZWQgb24gYQogICogICAjRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0IGFu
ZCB0aGUgZm9ybSBoYXMgbm90IGJlZW4gc3VibWl0dGVkIHlldCwKICAqICAgZXdrX2Zvcm1fc3Vi
bWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCgpIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkuCi0g
KiAtICJpY29uLGNoYW5nZWQiLCB2b2lkOiByZXBvcnRzIHRoYXQgdGhlIHZpZXcncyBmYXZpY29u
IGhhcyBjaGFuZ2VkLgorICogLSAiZmF2aWNvbixjaGFuZ2VkIiwgdm9pZDogcmVwb3J0cyB0aGF0
IHRoZSB2aWV3J3MgZmF2aWNvbiBoYXMgY2hhbmdlZC4KKyAqICAgVGhlIGZhdmljb24gY2FuIGJl
IHF1ZXJpZWQgdXNpbmcgZXdrX3ZpZXdfZmF2aWNvbl9nZXQoKS4KICAqIC0gImxvYWQsZXJyb3Ii
LCBjb25zdCBFd2tfRXJyb3IqOiByZXBvcnRzIG1haW4gZnJhbWUgbG9hZCBmYWlsZWQuCiAgKiAt
ICJsb2FkLGZpbmlzaGVkIiwgdm9pZDogcmVwb3J0cyBsb2FkIGZpbmlzaGVkLgogICogLSAibG9h
ZCxwcm9ncmVzcyIsIGRvdWJsZSo6IGxvYWQgcHJvZ3Jlc3MgaGFzIGNoYW5nZWQgKHZhbHVlIGZy
b20gMC4wIHRvIDEuMCkuCkBAIC0zNzIsMTYgKzM3MywxNCBAQCBFQVBJIEVpbmFfQm9vbCBld2tf
dmlld191cmxfc2V0KEV2YXNfT2JqZWN0ICpvLCBjb25zdCBjaGFyICp1cmwpOwogRUFQSSBjb25z
dCBjaGFyICpld2tfdmlld191cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAogLyoqCi0g
KiBSZXR1cm5zIHRoZSBjdXJyZW50IGljb24gVVJMIG9mIHZpZXcgb2JqZWN0LgotICoKLSAqIEl0
IHJldHVybnMgYW4gaW50ZXJuYWwgc3RyaW5nIGFuZCBzaG91bGQgbm90Ci0gKiBiZSBtb2RpZmll
ZC4gVGhlIHN0cmluZyBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4KKyAqIFJldHVy
bnMgdGhlIGN1cnJlbnQgZmF2aWNvbiBvZiB2aWV3IG9iamVjdC4KICAqCiAgKiBAcGFyYW0gbyB2
aWV3IG9iamVjdCB0byBnZXQgY3VycmVudCBpY29uIFVSTAogICoKLSAqIEByZXR1cm4gY3VycmVu
dCBpY29uIFVSTCBvbiBzdWNjZXNzIG9yIEBjIE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24gZmFp
bHVyZQorICogQHJldHVybiBjdXJyZW50IGZhdmljb24gb24gc3VjY2VzcyBvciBAYyBOVUxMIGlm
IHVuYXZhaWxhYmxlIG9yIG9uIGZhaWx1cmUuCisgKiBUaGUgcmV0dXJuZWQgRXZhc19PYmplY3Qg
bmVlZHMgdG8gYmUgZnJlZWQgYWZ0ZXIgdXNlLgogICovCi1FQVBJIGNvbnN0IGNoYXIgKmV3a192
aWV3X2ljb25fdXJsX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CitFQVBJIEV2YXNfT2JqZWN0
ICpld2tfdmlld19mYXZpY29uX2dldChjb25zdCBFdmFzX09iamVjdCAqbyk7CiAKIC8qKgogICog
QXNrcyB0aGUgbWFpbiBmcmFtZSB0byByZWxvYWQgdGhlIGN1cnJlbnQgZG9jdW1lbnQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
ZmF2aWNvbl9kYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKaW5kZXggMGZmMWRmMC4uYzBjZjIx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcApAQCAtNzUsNTQg
Kzc1LDYgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogaHR0cFNlcnZl
ciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGMKICAgICBzb3VwX21lc3NhZ2VfYm9keV9j
b21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKIH0KIAotc3RhdGljIHZvaWQgb25JY29u
Q2hhbmdlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCi17
Ci0gICAgYm9vbCogaWNvbkNoYW5nZWQgPSBzdGF0aWNfY2FzdDxib29sKj4odXNlckRhdGEpOwot
ICAgICppY29uQ2hhbmdlZCA9IHRydWU7Ci19Ci0KLVRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBl
d2tfZmF2aWNvbl9kYXRhYmFzZV91cmxfZ2V0KQotewotICAgIE93blB0cjxFV0syVW5pdFRlc3RT
ZXJ2ZXI+IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKLSAg
ICBodHRwU2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOwotCi0gICAgLy8gU2V0IGZhdmljb24g
ZGF0YWJhc2UgcGF0aCBhbmQgZW5hYmxlIGZ1bmN0aW9uYWxpdHkuCi0gICAgRXdrX0NvbnRleHQq
IGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkpOwotICAgIGV3a19jb250
ZXh0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5X3NldChjb250ZXh0LCAwKTsKLQotICAgIGJv
b2wgaWNvbkNoYW5nZWQgPSBmYWxzZTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgb25JY29uQ2hhbmdlZCwgJmljb25DaGFuZ2Vk
KTsKLQotICAgIC8vIFdlIG5lZWQgdG8gbG9hZCB0aGUgcGFnZSBmaXJzdCB0byBlbnN1cmUgdGhl
IGljb24gZGF0YSB3aWxsIGJlCi0gICAgLy8gaW4gdGhlIGRhdGFiYXNlIGluIGNhc2UgdGhlcmUn
cyBhbiBhc3NvY2lhdGVkIGZhdmljb24uCi0gICAgQVNTRVJUX1RSVUUobG9hZFVybFN5bmMoaHR0
cFNlcnZlci0+Z2V0VVJMRm9yUGF0aCgiLyIpLmRhdGEoKSkpOwotCi0gICAgd2hpbGUgKCFpY29u
Q2hhbmdlZCkKLSAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKLQotICAgIEFTU0VS
VF9UUlVFKGljb25DaGFuZ2VkKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwo
d2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgb25JY29uQ2hhbmdlZCk7Ci0KLSAgICAvLyBDaGVj
ayB0aGUgQVBJIHJldHJpZXZpbmcgYSBmYXZpY29uIFVSTC4KLSAgICBFd2tfRmF2aWNvbl9EYXRh
YmFzZSogZmF2aWNvbkRhdGFiYXNlID0gZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQo
Y29udGV4dCk7Ci0gICAgQVNTRVJUX1RSVUUoZmF2aWNvbkRhdGFiYXNlKTsKLQotICAgIENTdHJp
bmcgZXhwZWN0ZWRGYXZpY29uVVJMID0gaHR0cFNlcnZlci0+Z2V0VVJMRm9yUGF0aCgiL2Zhdmlj
b24uaWNvIik7Ci0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIGljb25VUkwgPSBld2tfZmF2aWNvbl9k
YXRhYmFzZV9pY29uX3VybF9nZXQoZmF2aWNvbkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KHdl
YlZpZXcoKSkpOwotICAgIEVYUEVDVF9TVFJFUShleHBlY3RlZEZhdmljb25VUkwuZGF0YSgpLCBp
Y29uVVJMKTsKLQotICAgIGNvbnN0IGNoYXIqIHZpZXdJY29uVVJMID0gZXdrX3ZpZXdfaWNvbl91
cmxfZ2V0KHdlYlZpZXcoKSk7Ci0gICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5k
YXRhKCksIHZpZXdJY29uVVJMKTsKLX0KLQotc3RhdGljIHZvaWQgb25JY29uRGF0YVJlYWR5KGNv
bnN0IGNoYXIqIHBhZ2VfdXJsLCBFdmFzX09iamVjdCogaWNvbiwgdm9pZCogZXZlbnRfaW5mbykK
LXsKLSAgICBFdmFzX09iamVjdCoqIHJldHVybkljb24gPSBzdGF0aWNfY2FzdDxFdmFzX09iamVj
dCoqPihldmVudF9pbmZvKTsKLSAgICBpZiAoaWNvbikKLSAgICAgICAgZXZhc19vYmplY3RfcmVm
KGljb24pOwotICAgICpyZXR1cm5JY29uID0gaWNvbjsKLX0KLQogc3RydWN0IEljb25SZXF1ZXN0
RGF0YSB7CiAgICAgRXZhc19PYmplY3QqIHZpZXc7CiAgICAgRXZhc19PYmplY3QqIGljb247CkBA
IC0xMzIsMTMgKzg0LDEzIEBAIHN0YXRpYyB2b2lkIHJlcXVlc3RGYXZpY29uRGF0YSh2b2lkKiB1
c2VyRGF0YSwgRXZhc19PYmplY3QqLCB2b2lkKiBldmVudEluZm8pCiB7CiAgICAgSWNvblJlcXVl
c3REYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8SWNvblJlcXVlc3REYXRhKj4odXNlckRhdGEpOwog
Ci0gICAgLy8gQ2hlY2sgdGhlIEFQSSByZXRyaWV2aW5nIGEgdmFsaWQgZmF2aWNvbi4KKyAgICAv
LyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29uIGZyb20gaWNvbiBkYXRh
YmFzZS4KICAgICBFd2tfQ29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KGRh
dGEtPnZpZXcpOwogICAgIEV3a19GYXZpY29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBl
d2tfY29udGV4dF9mYXZpY29uX2RhdGFiYXNlX2dldChjb250ZXh0KTsKICAgICBBU1NFUlRfVFJV
RShmYXZpY29uRGF0YWJhc2UpOwogCiAgICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNf
Z2V0KGRhdGEtPnZpZXcpOwotICAgIEFTU0VSVF9UUlVFKGV3a19mYXZpY29uX2RhdGFiYXNlX2Fz
eW5jX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwgZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3
KSwgZXZhcywgb25JY29uRGF0YVJlYWR5LCAmZGF0YS0+aWNvbikpOworICAgIGRhdGEtPmljb24g
PSBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3
X3VybF9nZXQoZGF0YS0+dmlldyksIGV2YXMpOwogfQogCiBURVNUX0YoRVdLMlVuaXRUZXN0QmFz
ZSwgZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQpCkBAIC0xNTEsNyArMTAzLDcg
QEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2lj
b25fZ2V0KQogICAgIGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZGlyZWN0b3J5X3NldChj
b250ZXh0LCAwKTsKIAogICAgIEljb25SZXF1ZXN0RGF0YSBkYXRhID0geyB3ZWJWaWV3KCksIDAg
fTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiaWNvbixj
aGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhLCAmZGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImZhdmljb24sY2hhbmdlZCIsIHJlcXVlc3RGYXZp
Y29uRGF0YSwgJmRhdGEpOwogCiAgICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0
IHRvIGVuc3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKICAgICAvLyBpbiB0aGUgZGF0YWJhc2Ug
aW4gY2FzZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KQEAgLTE2MSwxMyArMTEzLDIw
IEBAIFRFU1RfRihFV0syVW5pdFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19p
Y29uX2dldCkKICAgICAgICAgZWNvcmVfbWFpbl9sb29wX2l0ZXJhdGUoKTsKIAogICAgIEFTU0VS
VF9UUlVFKGRhdGEuaWNvbik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdl
YlZpZXcoKSwgImljb24sY2hhbmdlZCIsIHJlcXVlc3RGYXZpY29uRGF0YSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfZGVsKHdlYlZpZXcoKSwgImZhdmljb24sY2hhbmdlZCIsIHJl
cXVlc3RGYXZpY29uRGF0YSk7CiAKICAgICAvLyBJdCBpcyBhIDE2eDE2IGZhdmljb24uCiAgICAg
aW50IHdpZHRoLCBoZWlnaHQ7CiAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoZGF0YS5p
Y29uLCAmd2lkdGgsICZoZWlnaHQpOwogICAgIEVYUEVDVF9FUSgxNiwgd2lkdGgpOwogICAgIEVY
UEVDVF9FUSgxNiwgaGVpZ2h0KTsKLQogICAgIGV2YXNfb2JqZWN0X3VucmVmKGRhdGEuaWNvbik7
CisKKyAgICAvLyBUZXN0IEFQSSB0byByZXF1ZXN0IGZhdmljb24gZnJvbSB0aGUgdmlldworICAg
IEV2YXNfT2JqZWN0KiBmYXZpY29uID0gZXdrX3ZpZXdfZmF2aWNvbl9nZXQod2ViVmlldygpKTsK
KyAgICBBU1NFUlRfVFJVRShmYXZpY29uKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dl
dChmYXZpY29uLCAmd2lkdGgsICZoZWlnaHQpOworICAgIEVYUEVDVF9FUSgxNiwgd2lkdGgpOwor
ICAgIEVYUEVDVF9FUSgxNiwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF91bnJlZihmYXZpY29u
KTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAyNmMxODYxLi43YWNkNmY4IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9v
bHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVt
ZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcuY29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVm
YWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQgc3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBB
UEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0
ZSBFRkwncyBNaW5pQnJvd3NlciB0byBtYWtlIHVzZSBvZiBuZXcgRXdrX0Zhdmljb24gQVBJLgor
CisgICAgICAgICogTWluaUJyb3dzZXIvZWZsL21haW4uYzoKKyAgICAgICAgKHVwZGF0ZV92aWV3
X2Zhdmljb24pOgorICAgICAgICAob25fdmlld19mYXZpY29uX2NoYW5nZWQpOgorICAgICAgICAo
d2luZG93X2NyZWF0ZSk6CisKIDIwMTMtMDItMTMgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmll
dy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxNDI3
MzYuCmRpZmYgLS1naXQgYS9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jIGIvVG9vbHMvTWlu
aUJyb3dzZXIvZWZsL21haW4uYwppbmRleCA3YmNhOTUzLi5jZTgxNmVlIDEwMDY0NAotLS0gYS9U
b29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCisrKyBiL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9t
YWluLmMKQEAgLTUzOSwxMiArNTM5LDggQEAgb25fZG93bmxvYWRfZmFpbGVkKHZvaWQgKnVzZXJf
ZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3LCB2b2lkICpldmVudF9pbmZvKQogfQogCiBzdGF0
aWMgdm9pZAotb25fZmF2aWNvbl9yZWNlaXZlZChjb25zdCBjaGFyICpwYWdlX3VybCwgRXZhc19P
YmplY3QgKmljb24sIHZvaWQgKmV2ZW50X2luZm8pCit1cGRhdGVfdmlld19mYXZpY29uKEJyb3dz
ZXJfV2luZG93ICp3aW5kb3csIEV2YXNfT2JqZWN0ICppY29uKQogewotICAgIEJyb3dzZXJfV2lu
ZG93ICp3aW5kb3cgPSAoQnJvd3Nlcl9XaW5kb3cgKilldmVudF9pbmZvOwotICAgIGlmIChzdHJj
bXAocGFnZV91cmwsIGV3a192aWV3X3VybF9nZXQod2luZG93LT5ld2tfdmlldykpKQotICAgICAg
ICByZXR1cm47Ci0KICAgICAvKiBSZW1vdmUgcHJldmlvdXMgaWNvbiBmcm9tIFVSTCBiYXIgKi8K
ICAgICBFdmFzX09iamVjdCAqb2xkX2ljb24gPSBlbG1fb2JqZWN0X3BhcnRfY29udGVudF91bnNl
dCh3aW5kb3ctPnVybF9iYXIsICJpY29uIik7CiAgICAgaWYgKG9sZF9pY29uKSB7CkBAIC01NjUs
MTYgKzU2MSwxNSBAQCBvbl9mYXZpY29uX3JlY2VpdmVkKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBF
dmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbykKIH0KIAogc3RhdGljIHZvaWQKLW9u
X3ZpZXdfaWNvbl9jaGFuZ2VkKHZvaWQgKnVzZXJfZGF0YSwgRXZhc19PYmplY3QgKmV3a192aWV3
LCB2b2lkICpldmVudF9pbmZvKQorb25fdmlld19mYXZpY29uX2NoYW5nZWQodm9pZCAqdXNlcl9k
YXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB7CiAgICAgQnJv
d3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dpbmRvdyAqKXVzZXJfZGF0YTsKLSAgICAv
KiBSZXRyaWV2ZSB0aGUgdmlldydzIGZhdmljb24gKi8KLSAgICBFd2tfQ29udGV4dCAqY29udGV4
dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KGV3a192aWV3KTsKLSAgICBFd2tfRmF2aWNvbl9EYXRh
YmFzZSAqaWNvbl9kYXRhYmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNv
bnRleHQpOwogCi0gICAgY29uc3QgY2hhciAqcGFnZV91cmwgPSBld2tfdmlld191cmxfZ2V0KGV3
a192aWV3KTsKLSAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQoZXdrX3ZpZXcp
OwotICAgIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KGljb25fZGF0YWJhc2Us
IHBhZ2VfdXJsLCBldmFzLCBvbl9mYXZpY29uX3JlY2VpdmVkLCB3aW5kb3cpOworICAgIEV2YXNf
T2JqZWN0KiBmYXZpY29uID0gZXdrX3ZpZXdfZmF2aWNvbl9nZXQoZXdrX3ZpZXcpOworICAgIHVw
ZGF0ZV92aWV3X2Zhdmljb24od2luZG93LCBmYXZpY29uKTsKKworICAgIGlmIChmYXZpY29uKQor
ICAgICAgICBldmFzX29iamVjdF91bnJlZihmYXZpY29uKTsKIH0KIAogc3RhdGljIGludApAQCAt
MTIxOCw3ICsxMjEzLDcgQEAgc3RhdGljIEJyb3dzZXJfV2luZG93ICp3aW5kb3dfY3JlYXRlKEV2
YXNfT2JqZWN0ICpvcGVuZXIsIGNvbnN0IGNoYXIgKnVybCwgaW50IHcKICAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImRvd25sb2FkLGZpbmlzaGVk
Iiwgb25fZG93bmxvYWRfZmluaXNoZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0Iiwgb25fZG93
bmxvYWRfcmVxdWVzdCwgd2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2luZG93LT5ld2tfdmlldywgImZpbGUsY2hvb3NlcixyZXF1ZXN0Iiwgb25fZmlsZV9jaG9v
c2VyX3JlcXVlc3QsIHdpbmRvdyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdpbmRvdy0+ZXdrX3ZpZXcsICJpY29uLGNoYW5nZWQiLCBvbl92aWV3X2ljb25fY2hhbmdlZCwg
d2luZG93KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tf
dmlldywgImZhdmljb24sY2hhbmdlZCIsIG9uX3ZpZXdfZmF2aWNvbl9jaGFuZ2VkLCB3aW5kb3cp
OwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAi
bG9hZCxlcnJvciIsIG9uX2Vycm9yLCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAibG9hZCxwcm9ncmVzcyIsIG9uX3Byb2dyZXNz
LCB3aW5kb3cpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3
a192aWV3LCAidGl0bGUsY2hhbmdlZCIsIG9uX3RpdGxlX2NoYW5nZWQsIHdpbmRvdyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188648</attachid>
            <date>2013-02-15 14:56:13 -0800</date>
            <delta_ts>2013-02-17 10:48:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>30009</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5YzEzOTM0Li44OTI3NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQg
c3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNv
IHRoYXQgaXQgbm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFu
ZCBzbyB0aGF0IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hh
bmdlZAorICAgICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlz
IG5vIGxvbmdlciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVu
dCBpcyBub3cgb25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAg
ZmF2aWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBh
cmUKKyAgICAgICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlm
aWVkIG9mIGZhdmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAg
ICBiZWNvbWVzIGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5
bmNocm9ub3VzLiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEg
aXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZp
Y29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6
CisgICAgICAgIChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fZ2V0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24s
Y2hhbmdlZCcgc2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAg
ICAgICBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3Zl
IEFQSSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQg
Ynkgb25lIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNf
T2JqZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8g
dXNlIHRoZSBuZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMTUgIEFuZGVycyBDYXJsc3NvbiAg
PGFuZGVyc2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIG1vc3QgQXJndW1lbnRFbmNvZGVy
OjplbmNvZGUgbWVtYmVyIGZ1bmN0aW9ucyBwcml2YXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCmluZGV4IDdiNDdjNmRlLi43M2EwY2Y1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcApAQCAtNzc5LDIzICs3
NzksNiBAQCB2b2lkIEV3a1ZpZXc6OnNldFRvdWNoRXZlbnRzRW5hYmxlZChib29sIGVuYWJsZWQp
CiB9CiAjZW5kaWYKIAotLyoqCi0gKiBAaW50ZXJuYWwKLSAqIFVwZGF0ZSB0aGUgdmlldydzIGZh
dmljb24gYW5kIGVtaXRzIGEgImljb24sY2hhbmdlZCIgc2lnbmFsIGlmIGl0IGhhcwotICogY2hh
bmdlZC4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgVVJMIGhh
cyBjaGFuZ2VkIG9yIHdoZW4gdGhlIGljb24gZm9yCi0gKiB0aGUgY3VycmVudCBwYWdlIFVSTCBo
YXMgY2hhbmdlZC4KLSAqLwotdm9pZCBFd2tWaWV3OjppbmZvcm1JY29uQ2hhbmdlKCkKLXsKLSAg
ICBFd2tGYXZpY29uRGF0YWJhc2UqIGljb25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRh
dGFiYXNlKCk7Ci0gICAgQVNTRVJUKGljb25EYXRhYmFzZSk7Ci0KLSAgICBtX2Zhdmljb25VUkwg
PSBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX3VybF9nZXQoaWNvbkRhdGFiYXNlLCBtX3VybCk7
Ci0gICAgc21hcnRDYWxsYmFjazxJY29uQ2hhbmdlZD4oKS5jYWxsKCk7Ci19Ci0KIGJvb2wgRXdr
Vmlldzo6Y3JlYXRlR0xTdXJmYWNlKCkKIHsKICAgICBpZiAoIW1faXNBY2NlbGVyYXRlZCkKQEAg
LTEwNDQsNyArMTAyNywxNSBAQCB2b2lkIEV3a1ZpZXc6OmluZm9ybVVSTENoYW5nZSgpCiAgICAg
c21hcnRDYWxsYmFjazxVUkxDaGFuZ2VkPigpLmNhbGwobV91cmwpOwogCiAgICAgLy8gVXBkYXRl
IHRoZSB2aWV3J3MgZmF2aWNvbi4KLSAgICBpbmZvcm1JY29uQ2hhbmdlKCk7CisgICAgc21hcnRD
YWxsYmFjazxGYXZpY29uQ2hhbmdlZD4oKS5jYWxsKCk7Cit9CisKK0V2YXNfT2JqZWN0KiBFd2tW
aWV3OjpjcmVhdGVGYXZpY29uKCkgY29uc3QKK3sKKyAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGlj
b25EYXRhYmFzZSA9IG1fY29udGV4dC0+ZmF2aWNvbkRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGlj
b25EYXRhYmFzZSk7CisKKyAgICByZXR1cm4gZXdrX2Zhdmljb25fZGF0YWJhc2VfaWNvbl9nZXQo
aWNvbkRhdGFiYXNlLCBtX3VybCwgc21hcnREYXRhKCktPmJhc2UuZXZhcyk7CiB9CiAKIEV3a1dp
bmRvd0ZlYXR1cmVzKiBFd2tWaWV3Ojp3aW5kb3dGZWF0dXJlcygpCkBAIC0xMzM4LDcgKzEzMjks
NyBAQCB2b2lkIEV3a1ZpZXc6OmhhbmRsZUZhdmljb25DaGFuZ2VkKGNvbnN0IGNoYXIqIHBhZ2VV
UkwsIHZvaWQqIGV2ZW50SW5mbykKICAgICBpZiAoIXZpZXctPnVybCgpIHx8IHN0cmNhc2VjbXAo
dmlldy0+dXJsKCksIHBhZ2VVUkwpKQogICAgICAgICByZXR1cm47CiAKLSAgICB2aWV3LT5pbmZv
cm1JY29uQ2hhbmdlKCk7CisgICAgdmlldy0+c21hcnRDYWxsYmFjazxGYXZpY29uQ2hhbmdlZD4o
KS5jYWxsKCk7CiB9CiAKIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tWaWV3Ojp0YWtl
U25hcHNob3QoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdrVmlldy5oCmlu
ZGV4IGY4ZDYzNzMuLjc0Nzk5OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9Fd2tWaWV3LmgKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYWludFRv
Q2Fpcm9TdXJmYWNlKGNhaXJvX3N1cmZhY2VfdCopOwogCiAgICAgY29uc3QgY2hhciogdXJsKCkg
Y29uc3QgeyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBjaGFyKiBmYXZpY29uVVJMKCkgY29u
c3QgeyByZXR1cm4gbV9mYXZpY29uVVJMOyB9CisgICAgRXZhc19PYmplY3QqIGNyZWF0ZUZhdmlj
b24oKSBjb25zdDsKICAgICBjb25zdCBjaGFyKiB0aXRsZSgpIGNvbnN0OwogICAgIFdlYktpdDo6
SW5wdXRNZXRob2RDb250ZXh0RWZsKiBpbnB1dE1ldGhvZENvbnRleHQoKTsKIApAQCAtMjMyLDgg
KzIzMiw2IEBAIHByaXZhdGU6CiAKICAgICBXZWJDb3JlOjpDb29yZGluYXRlZEdyYXBoaWNzU2Nl
bmUqIGNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSgpOwogCi0gICAgdm9pZCBpbmZvcm1JY29uQ2hh
bmdlKCk7Ci0KICAgICAvLyBFdmFzX1NtYXJ0X0NsYXNzIGNhbGxiYWNrIGludGVyZmFjZToKICAg
ICBzdGF0aWMgdm9pZCBoYW5kbGVFdmFzT2JqZWN0QWRkKEV2YXNfT2JqZWN0Kik7CiAgICAgc3Rh
dGljIHZvaWQgaGFuZGxlRXZhc09iamVjdERlbGV0ZShFdmFzX09iamVjdCopOwpAQCAtMjg5LDcg
KzI4Nyw2IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEV3a1NldHRpbmdzPiBtX3NldHRpbmdzOwog
ICAgIFJlZlB0cjxFd2tXaW5kb3dGZWF0dXJlcz4gbV93aW5kb3dGZWF0dXJlczsKICAgICBjb25z
dCB2b2lkKiBtX2N1cnNvcklkZW50aWZpZXI7IC8vIFRoaXMgaXMgYW4gYWRkcmVzcywgZG8gbm90
IGZyZWUgaXQuCi0gICAgV0tFaW5hU2hhcmVkU3RyaW5nIG1fZmF2aWNvblVSTDsKICAgICBXS0Vp
bmFTaGFyZWRTdHJpbmcgbV91cmw7CiAgICAgbXV0YWJsZSBXS0VpbmFTaGFyZWRTdHJpbmcgbV90
aXRsZTsKICAgICBXS0VpbmFTaGFyZWRTdHJpbmcgbV90aGVtZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaAppbmRleCA1ZjFjYjA4
Li45MzY5ZWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
d2tWaWV3Q2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlld0NhbGxiYWNrcy5oCkBAIC01NCw3ICs1NCw3IEBAIGVudW0gQ2FsbGJhY2tUeXBlIHsK
ICAgICBEb3dubG9hZEpvYlJlcXVlc3RlZCwKICAgICBGaWxlQ2hvb3NlclJlcXVlc3QsCiAgICAg
TmV3Rm9ybVN1Ym1pc3Npb25SZXF1ZXN0LAotICAgIEljb25DaGFuZ2VkLAorICAgIEZhdmljb25D
aGFuZ2VkLAogICAgIExvYWRFcnJvciwKICAgICBMb2FkRmluaXNoZWQsCiAgICAgTG9hZFByb2dy
ZXNzLApAQCAtMTY0LDcgKzE2NCw3IEBAIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRG93bmxv
YWRKb2JGaW5pc2hlZCwgImRvd25sb2FkLGZpbmlzaGVkIiwgRXdrX0Rvd25sb2FkCiBERUNMQVJF
X0VXS19WSUVXX0NBTExCQUNLKERvd25sb2FkSm9iUmVxdWVzdGVkLCAiZG93bmxvYWQscmVxdWVz
dCIsIEV3a19Eb3dubG9hZF9Kb2IqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRmlsZUNo
b29zZXJSZXF1ZXN0LCAiZmlsZSxjaG9vc2VyLHJlcXVlc3QiLCBFd2tfRmlsZV9DaG9vc2VyX1Jl
cXVlc3QqKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTmV3Rm9ybVN1Ym1pc3Npb25SZXF1
ZXN0LCAiZm9ybSxzdWJtaXNzaW9uLHJlcXVlc3QiLCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVl
c3QqKTsKLURFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soSWNvbkNoYW5nZWQsICJpY29uLGNoYW5n
ZWQiLCB2b2lkKTsKK0RFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soRmF2aWNvbkNoYW5nZWQsICJm
YXZpY29uLGNoYW5nZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTG9hZEVy
cm9yLCAibG9hZCxlcnJvciIsIEV3a19FcnJvciopOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFD
SyhMb2FkRmluaXNoZWQsICJsb2FkLGZpbmlzaGVkIiwgdm9pZCk7CiBERUNMQVJFX0VXS19WSUVX
X0NBTExCQUNLKExvYWRQcm9ncmVzcywgImxvYWQscHJvZ3Jlc3MiLCBkb3VibGUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFi
YXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2Rh
dGFiYXNlLmNwcAppbmRleCA0NWE3M2ZiNS4uNjMwMGFiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Ftc3VuZyBF
bGVjdHJvbmljcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzAsNyArMzEsNiBAQAogI2luY2x1ZGUgIldLSWNvbkRhdGFiYXNlLmgiCiAj
aW5jbHVkZSAiV0tJY29uRGF0YWJhc2VDYWlyby5oIgogI2luY2x1ZGUgIldLVVJMLmgiCi0jaW5j
bHVkZSAiV2ViSWNvbkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiZXdrX2Zhdmljb25fZGF0YWJhc2Vf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2Fpcm9VdGlsaXRpZXNFZmwuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CkBAIC00Niw3ICs0Niw2IEBAIEV3a0Zhdmljb25E
YXRhYmFzZTo6RXdrRmF2aWNvbkRhdGFiYXNlKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFz
ZSkKICAgICBtZW1zZXQoJmljb25EYXRhYmFzZUNsaWVudCwgMCwgc2l6ZW9mKFdLSWNvbkRhdGFi
YXNlQ2xpZW50KSk7CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50LnZlcnNpb24gPSBrV0tJY29uRGF0
YWJhc2VDbGllbnRDdXJyZW50VmVyc2lvbjsKICAgICBpY29uRGF0YWJhc2VDbGllbnQuY2xpZW50
SW5mbyA9IHRoaXM7Ci0gICAgaWNvbkRhdGFiYXNlQ2xpZW50LmRpZENoYW5nZUljb25Gb3JQYWdl
VVJMID0gZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkw7CiAgICAgaWNvbkRhdGFiYXNlQ2xpZW50Lmlj
b25EYXRhUmVhZHlGb3JQYWdlVVJMID0gaWNvbkRhdGFSZWFkeUZvclBhZ2VVUkw7CiAgICAgV0tJ
Y29uRGF0YWJhc2VTZXRJY29uRGF0YWJhc2VDbGllbnQobV9pY29uRGF0YWJhc2UuZ2V0KCksICZp
Y29uRGF0YWJhc2VDbGllbnQpOwogfQpAQCAtNTYsMTQgKzU1LDYgQEAgRXdrRmF2aWNvbkRhdGFi
YXNlOjp+RXdrRmF2aWNvbkRhdGFiYXNlKCkKICAgICBXS0ljb25EYXRhYmFzZVNldEljb25EYXRh
YmFzZUNsaWVudChtX2ljb25EYXRhYmFzZS5nZXQoKSwgMCk7CiB9CiAKLVN0cmluZyBFd2tGYXZp
Y29uRGF0YWJhc2U6Omljb25VUkxGb3JQYWdlVVJMKGNvbnN0IFN0cmluZyYgcGFnZVVSTCkgY29u
c3QKLXsKLSAgICBTdHJpbmcgaWNvblVSTDsKLSAgICB0b0ltcGwobV9pY29uRGF0YWJhc2UuZ2V0
KCkpLT5zeW5jaHJvbm91c0ljb25VUkxGb3JQYWdlVVJMKHBhZ2VVUkwsIGljb25VUkwpOwotCi0g
ICAgcmV0dXJuIGljb25VUkw7Ci19Ci0KIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjp3YXRjaENo
YW5nZXMoY29uc3QgSWNvbkNoYW5nZUNhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKQogewogICAg
IEFTU0VSVChjYWxsYmFja0RhdGEuY2FsbGJhY2spOwpAQCAtNzksNTUgKzcwLDYgQEAgdm9pZCBF
d2tGYXZpY29uRGF0YWJhc2U6OnVud2F0Y2hDaGFuZ2VzKEV3a19GYXZpY29uX0RhdGFiYXNlX0lj
b25fQ2hhbmdlX0NiIGNhbGwKICAgICBtX2NoYW5nZUxpc3RlbmVycy5yZW1vdmUoY2FsbGJhY2sp
OwogfQogCi1zdHJ1Y3QgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlIHsKLSAgICBTdHJpbmcgcGFn
ZVVSTDsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlOwotICAgIEljb25SZXF1
ZXN0Q2FsbGJhY2tEYXRhIGNhbGxiYWNrRGF0YTsKLQotICAgIEFzeW5jSWNvblJlcXVlc3RSZXNw
b25zZShjb25zdCBTdHJpbmcmIHBhZ2VVUkwsIFBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBz
dXJmYWNlLCBjb25zdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKQotICAg
ICAgICA6IHBhZ2VVUkwocGFnZVVSTCkKLSAgICAgICAgLCBzdXJmYWNlKHN1cmZhY2UpCi0gICAg
ICAgICwgY2FsbGJhY2tEYXRhKGNhbGxiYWNrRGF0YSkKLSAgICB7IH0KLX07Ci0KLXN0YXRpYyBF
aW5hX0Jvb2wgcmVzcG9uZF9pY29uX3JlcXVlc3RfaWRsZSh2b2lkKiBkYXRhKQotewotICAgIEFz
eW5jSWNvblJlcXVlc3RSZXNwb25zZSogcmVzcG9uc2UgPSBzdGF0aWNfY2FzdDxBc3luY0ljb25S
ZXF1ZXN0UmVzcG9uc2UqPihkYXRhKTsKLQotICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9
IHJlc3BvbnNlLT5zdXJmYWNlID8gV2ViQ29yZTo6ZXZhc09iamVjdEZyb21DYWlyb0ltYWdlU3Vy
ZmFjZShyZXNwb25zZS0+Y2FsbGJhY2tEYXRhLmV2YXMsIHJlc3BvbnNlLT5zdXJmYWNlLmdldCgp
KSA6IDA7Ci0gICAgcmVzcG9uc2UtPmNhbGxiYWNrRGF0YS5jYWxsYmFjayhyZXNwb25zZS0+cGFn
ZVVSTC51dGY4KCkuZGF0YSgpLCBpY29uLmdldCgpLCByZXNwb25zZS0+Y2FsbGJhY2tEYXRhLnVz
ZXJEYXRhKTsKLQotICAgIGRlbGV0ZSByZXNwb25zZTsKLQotICAgIHJldHVybiBFQ09SRV9DQUxM
QkFDS19ET05FOwotfQotCi12b2lkIEV3a0Zhdmljb25EYXRhYmFzZTo6aWNvbkZvclBhZ2VVUkwo
Y29uc3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxi
YWNrRGF0YSkKLXsKLSAgICAvLyBXZSBhc2sgZm9yIHRoZSBpY29uIGRpcmVjdGx5LiBJZiB3ZSBk
b24ndCBnZXQgdGhlIGljb24gZGF0YSBub3csCi0gICAgLy8gd2UnbGwgYmUgbm90aWZpZWQgbGF0
ZXIgKGV2ZW4gaWYgdGhlIGRhdGFiYXNlIGlzIHN0aWxsIGltcG9ydGluZyBpY29ucykuCi0gICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrUGFnZVVSTChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhwYWdlVVJMKSk7Ci0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFj
ZSA9IGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseSh3a1BhZ2VVUkwuZ2V0KCkpOwotCi0gICAg
Ly8gSWYgdGhlcmUncyBubyB2YWxpZCBpY29uLCBidXQgdGhlcmUncyBhbiBpY29uVVJMIHJlZ2lz
dGVyZWQsCi0gICAgLy8gb3IgaXQncyBzdGlsbCBub3QgcmVnaXN0ZXJlZCBidXQgdGhlIGltcG9y
dCBwcm9jZXNzIGhhc24ndAotICAgIC8vIGZpbmlzaGVkIHlldCwgd2UgbmVlZCB0byB3YWl0IGZv
ciBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTCB0byBiZQotICAgIC8vIGNhbGxlZCBiZWZvcmUgbWFr
aW5nIGFuZCBpbmZvcm1lZCBkZWNpc2lvbi4KLSAgICBTdHJpbmcgcGFnZVVSTFN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgocGFnZVVSTCk7Ci0gICAgU3RyaW5nIGljb25VUkwgPSBpY29uVVJMRm9y
UGFnZVVSTChwYWdlVVJMU3RyaW5nKTsKLSAgICBpZiAoIXN1cmZhY2UgJiYgKCFpY29uVVJMLmlz
RW1wdHkoKSB8fCAhdG9JbXBsKG1faWNvbkRhdGFiYXNlLmdldCgpKS0+aXNVcmxJbXBvcnRDb21w
bGV0ZWQoKSkpIHsKLSAgICAgICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzID0g
bV9pY29uUmVxdWVzdHMuZ2V0KHBhZ2VVUkxTdHJpbmcpOwotICAgICAgICByZXF1ZXN0cy5hcHBl
bmQoY2FsbGJhY2tEYXRhKTsKLSAgICAgICAgbV9pY29uUmVxdWVzdHMuc2V0KHBhZ2VVUkxTdHJp
bmcsIHJlcXVlc3RzKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIFJlc3BvbmQg
d2hlbiBpZGxlLgotICAgIEFzeW5jSWNvblJlcXVlc3RSZXNwb25zZSogcmVzcG9uc2UgPSBuZXcg
QXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKHBhZ2VVUkxTdHJpbmcsIHN1cmZhY2UucmVsZWFzZSgp
LCBjYWxsYmFja0RhdGEpOwotICAgIGVjb3JlX2lkbGVyX2FkZChyZXNwb25kX2ljb25fcmVxdWVz
dF9pZGxlLCByZXNwb25zZSk7Ci19Ci0KIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjpkaWRDaGFu
Z2VJY29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFnZVVSTFJlZiwg
Y29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKICAgICBjb25zdCBFd2tGYXZpY29uRGF0YWJhc2Uq
IGV3a0ljb25EYXRhYmFzZSA9IHN0YXRpY19jYXN0PGNvbnN0IEV3a0Zhdmljb25EYXRhYmFzZSo+
KGNsaWVudEluZm8pOwpAQCAtMTQzLDE1ICs4NSwxMyBAQCB2b2lkIEV3a0Zhdmljb25EYXRhYmFz
ZTo6ZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHBh
ZwogICAgICAgICBpdC0+dmFsdWUuY2FsbGJhY2socGFnZVVSTC5kYXRhKCksIGl0LT52YWx1ZS51
c2VyRGF0YSk7CiB9CiAKLVBhc3NSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBFd2tGYXZpY29uRGF0
YWJhc2U6OmdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShXS1VSTFJlZiBwYWdlVVJMKSBjb25z
dAorUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a0Zhdmljb25EYXRhYmFzZTo6Z2V0SWNv
blN1cmZhY2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBhZ2VVUkwpIGNvbnN0CiB7Ci0gICAg
V0tJY29uRGF0YWJhc2VSZXRhaW5JY29uRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCBwYWdl
VVJMKTsKKyAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tQYWdlVVJMKEFkb3B0V0ssIFdLVVJM
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKHBhZ2VVUkwpKTsKIAotICAgIFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+IHN1cmZhY2UgPSBXS0ljb25EYXRhYmFzZVRyeUdldENhaXJvU3VyZmFjZUZvclVSTCht
X2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7Ci0gICAgaWYgKCFzdXJmYWNlKSB7Ci0gICAg
ICAgIFdLSWNvbkRhdGFiYXNlUmVsZWFzZUljb25Gb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCks
IHBhZ2VVUkwpOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UgPSBXS0ljb25E
YXRhYmFzZVRyeUdldENhaXJvU3VyZmFjZUZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgd2tQ
YWdlVVJMLmdldCgpKTsKKyAgICBpZiAoIXN1cmZhY2UpCiAgICAgICAgIHJldHVybiAwOwotICAg
IH0KIAogICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKIH0KQEAgLTE2MCw0MSArMTAwLDI2
IEBAIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0lj
b25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFnCiB7CiAgICAgRXdrRmF2aWNvbkRhdGFiYXNlKiBl
d2tJY29uRGF0YWJhc2UgPSBjb25zdF9jYXN0PEV3a0Zhdmljb25EYXRhYmFzZSo+KHN0YXRpY19j
YXN0PGNvbnN0IEV3a0Zhdmljb25EYXRhYmFzZSo+KGNsaWVudEluZm8pKTsKIAotICAgIFN0cmlu
ZyB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhwYWdlVVJMKTsKLSAgICBpZiAoIWV3a0ljb25EYXRh
YmFzZS0+bV9pY29uUmVxdWVzdHMuY29udGFpbnModXJsU3RyaW5nKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IGV3a0ljb25EYXRhYmFz
ZS0+Z2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KHBhZ2VVUkwpOworICAgIFdLSWNvbkRhdGFi
YXNlUmV0YWluSWNvbkZvclVSTChld2tJY29uRGF0YWJhc2UtPm1faWNvbkRhdGFiYXNlLmdldCgp
LCBwYWdlVVJMKTsKIAotICAgIFBlbmRpbmdJY29uUmVxdWVzdFZlY3RvciByZXF1ZXN0c0ZvclVS
TCA9IGV3a0ljb25EYXRhYmFzZS0+bV9pY29uUmVxdWVzdHMudGFrZSh1cmxTdHJpbmcpOwotICAg
IHNpemVfdCByZXF1ZXN0Q291bnQgPSByZXF1ZXN0c0ZvclVSTC5zaXplKCk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0Q291bnQ7ICsraSkgewotICAgICAgICBjb25zdCBJY29u
UmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhID0gcmVxdWVzdHNGb3JVUkxbaV07Ci0g
ICAgICAgIFJlZlB0cjxFdmFzX09iamVjdD4gaWNvbiA9IHN1cmZhY2UgPyBXZWJDb3JlOjpldmFz
T2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGNhbGxiYWNrRGF0YS5ldmFzLCBzdXJmYWNlLmdl
dCgpKSA6IDA7Ci0gICAgICAgIGNhbGxiYWNrRGF0YS5jYWxsYmFjayh1cmxTdHJpbmcudXRmOCgp
LmRhdGEoKSwgaWNvbi5nZXQoKSwgY2FsbGJhY2tEYXRhLnVzZXJEYXRhKTsKLSAgICB9CisgICAg
Q1N0cmluZyB1cmxTdHJpbmcgPSB0b1dURlN0cmluZyhwYWdlVVJMKS51dGY4KCk7CisgICAgQ2hh
bmdlTGlzdGVuZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZXdrSWNvbkRhdGFiYXNlLT5tX2No
YW5nZUxpc3RlbmVycy5iZWdpbigpOworICAgIENoYW5nZUxpc3RlbmVyTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBld2tJY29uRGF0YWJhc2UtPm1fY2hhbmdlTGlzdGVuZXJzLmVuZCgpOworICAg
IGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGl0LT52YWx1ZS5jYWxsYmFjayh1cmxT
dHJpbmcuZGF0YSgpLCBpdC0+dmFsdWUudXNlckRhdGEpOwogfQogCi1jb25zdCBjaGFyKiBld2tf
ZmF2aWNvbl9kYXRhYmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0lj
b25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZVVSTCkKK0V2YXNfT2JqZWN0KiBld2tfZmF2aWNv
bl9kYXRhYmFzZV9pY29uX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNl
LCBjb25zdCBjaGFyKiBwYWdlVVJMLCBFdmFzKiBldmFzKQogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChld2tJY29uRGF0YWJhc2UsIDApOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChwYWdlVVJMLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZXZhcywgMCk7CiAKLSAgICBTdHJpbmcgaWNvblVSTCA9IGV3a0ljb25EYXRhYmFz
ZS0+aWNvblVSTEZvclBhZ2VVUkwoU3RyaW5nOjpmcm9tVVRGOChwYWdlVVJMKSk7Ci0KLSAgICBy
ZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQoaWNvblVSTC51dGY4KCkuZGF0YSgpKTsKLX0KLQot
RWluYV9Cb29sIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29u
X0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNvbnN0IGNoYXIqIHBhZ2VfdXJsLCBFdmFzKiBl
dmFzLCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBjYWxsYmFjaywgdm9p
ZCogdXNlckRhdGEpCi17Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3a0lj
b25EYXRhYmFzZSwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChw
YWdlX3VybCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFz
LCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNhbGxiYWNrLCBm
YWxzZSk7Ci0KLSAgICBld2tJY29uRGF0YWJhc2UtPmljb25Gb3JQYWdlVVJMKHBhZ2VfdXJsLCBJ
Y29uUmVxdWVzdENhbGxiYWNrRGF0YShjYWxsYmFjaywgdXNlckRhdGEsIGV2YXMpKTsKKyAgICBS
ZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZXdrSWNvbkRhdGFiYXNlLT5nZXRJY29u
U3VyZmFjZVN5bmNocm9ub3VzbHkocGFnZVVSTCk7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBXZWJDb3JlOjpldmFz
T2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKGV2YXMsIHN1cmZhY2UuZ2V0KCkpLmxlYWtSZWYo
KTsKIH0KIAogdm9pZCBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2NoYW5nZV9jYWxsYmFja19h
ZGQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFzZSwgRXdrX0Zhdmljb25fRGF0
YWJhc2VfSWNvbl9DaGFuZ2VfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNl
LmgKaW5kZXggYjY2YTY3Yi4uOGY4YmEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00
Nyw0MCArNDgsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgRXdrRmF2aWNvbkRhdGFiYXNlIEV3a19GYXZp
Y29uX0RhdGFiYXNlOwogdHlwZWRlZiB2b2lkICgqRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9D
aGFuZ2VfQ2IpKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCB2b2lkICpldmVudF9pbmZvKTsKIAogLyoq
Ci0gKiBAdHlwZWRlZiBFd2tfRmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYiBFd2tf
RmF2aWNvbl9EYXRhYmFzZV9Bc3luY19JY29uX0dldF9DYgotICogQGJyaWVmIENhbGxiYWNrIHR5
cGUgZm9yIHVzZSB3aXRoIGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0Ci0gKgot
ICogVGhlIEBhIGljb24gbWF5IGJlIE5VTEwgaWYgdGhlcmUgaXMgbm8gZmF2aWNvbiBhc3NvY2lh
dGVkIHRvIHRoZSBnaXZlbiBAYSBwYWdlX3VybC4KLSAqCi0gKiBZb3UgbmVlZCB0byBjYWxsIGV2
YXNfb2JqZWN0X3JlZigpIG9uIHRoZSBAYSBpY29uIGlmIHlvdSB3aXNoIHRvIGtlZXAgaXQgYWZ0
ZXIgdGhlCi0gKiBjYWxsYmFjayBpcyBleGVjdXRlZC4KLSAqLwotdHlwZWRlZiB2b2lkICgqRXdr
X0Zhdmljb25fRGF0YWJhc2VfQXN5bmNfSWNvbl9HZXRfQ2IpKGNvbnN0IGNoYXIgKnBhZ2VfdXJs
LCBFdmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRfaW5mbyk7Ci0KLS8qKgotICogUmV0cmll
dmVzIGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIFVSTCBmb3IgdGhlIGdpdmVuIEBhIHBh
Z2VfdXJsCi0gKgotICogQHBhcmFtIGRhdGFiYXNlIGRhdGFiYXNlIG9iamVjdCB0byBxdWVyeQot
ICogQHBhcmFtIHBhZ2VfdXJsIFVSTCBvZiB0aGUgcGFnZSB0byBnZXQgdGhlIGZhdmljb24gVVJM
IGZvcgotICoKLSAqIEByZXR1cm4gYSBuZXdseSBhbGxvY2F0ZWQgc3RyaW5nIGd1YXJhbnRlZWQg
dG8gYmUgZWluYV9zdHJpbmdzaGFyZQotICogICAgICAgICBvciBAYyBOVUxMIGluIGNhc2Ugb2Yg
ZXJyb3Igb3IgaWYgdGhlIGtleSBkb2VzIG5vdCBleGlzdC4KLSAqICAgICAgICAgWW91IG5lZWQg
dG8gY2FsbCBlaW5hX3N0cmluZ3NoYXJlX2RlbCgpIGFmdGVyIHVzZS4KLSAqLwotRUFQSSBjb25z
dCBjaGFyICpld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX3VybF9nZXQoRXdrX0Zhdmljb25fRGF0
YWJhc2UgKmRhdGFiYXNlLCBjb25zdCBjaGFyICpwYWdlX3VybCk7Ci0KLS8qKgogICogUmV0cmll
dmVzIGFzeW5jaHJvbm91c2x5IGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIGZvciB0aGUg
Z2l2ZW4gQGEgcGFnZV91cmwKICAqCiAgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0
IHRvIHF1ZXJ5CiAgKiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUg
ZmF2aWNvbiBmb3IKICAqIEBwYXJhbSBldmFzIFRoZSBjYW52YXMgdG8gYWRkIHRoZSBmYXZpY29u
IHRvCi0gKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdo
ZW4gdGhlIGljb24gaXMgcmV0cmlldmVkCi0gKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBwb2ludGVy
IHRoYXQgd2FzIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKICAqCi0gKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpZiB0aGUgaWNvbiB3YXMgc3VjY2Vzc2Z1bHkgcmVxdWVzdGVkLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZQorICogQHJldHVybiBUaGUgZmF2aWNvbiBhcyBhbiBFdmFzX09iamVj
dCBpZiBzdWNjZXNzZnVsLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFz
X09iamVjdCBuZWVkcyB0byBiZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgRWluYV9Cb29s
IGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNl
ICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMsIEV3a19GYXZpY29u
X0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK0VBUEkg
RXZhc19PYmplY3QgKmV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0Rh
dGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMpOwogCiAv
KioKICAqIEFkZCAocmVnaXN0ZXIpIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBpY29uIGNoYW5n
ZSBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCmluZGV4IDc1MzViZGQuLjFjYzc3
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZp
Y29uX2RhdGFiYXNlX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDI3ICs0
Nyw3IEBAIHN0cnVjdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhIHsKICAgICB7IH0KIH07CiAKLXN0
cnVjdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSB7Ci0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2Vf
QXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2s7Ci0gICAgdm9pZCogdXNlckRhdGE7Ci0gICAgRXZh
cyogZXZhczsKLQotICAgIEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKCkKLSAgICAgICAgOiBjYWxs
YmFjaygwKQotICAgICAgICAsIHVzZXJEYXRhKDApCi0gICAgICAgICwgZXZhcygwKQotICAgIHsg
fQotCi0gICAgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5
bmNfSWNvbl9HZXRfQ2IgX2NhbGxiYWNrLCB2b2lkKiBfdXNlckRhdGEsIEV2YXMqIF9ldmFzKQot
ICAgICAgICA6IGNhbGxiYWNrKF9jYWxsYmFjaykKLSAgICAgICAgLCB1c2VyRGF0YShfdXNlckRh
dGEpCi0gICAgICAgICwgZXZhcyhfZXZhcykKLSAgICB7IH0KLX07Ci0KIHR5cGVkZWYgSGFzaE1h
cDxFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiwgSWNvbkNoYW5nZUNhbGxiYWNr
RGF0YT4gQ2hhbmdlTGlzdGVuZXJNYXA7Ci10eXBlZGVmIFZlY3RvcjxJY29uUmVxdWVzdENhbGxi
YWNrRGF0YT4gUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOwotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZyAvKiBwYWdlVVJMICovLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I+IFBlbmRpbmdJY29uUmVx
dWVzdE1hcDsKIAogY2xhc3MgRXdrRmF2aWNvbkRhdGFiYXNlIHsKIHB1YmxpYzoKQEAgLTc2LDIz
ICs1NywxOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5Fd2tGYXZpY29uRGF0YWJhc2UoKTsKIAot
ICAgIFN0cmluZyBpY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0
OwotICAgIHZvaWQgaWNvbkZvclBhZ2VVUkwoY29uc3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNv
blJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSk7Ci0KKyAgICBQYXNzUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBh
Z2VVUkwpIGNvbnN0OwogICAgIHZvaWQgd2F0Y2hDaGFuZ2VzKGNvbnN0IEljb25DaGFuZ2VDYWxs
YmFja0RhdGEmIGNhbGxiYWNrRGF0YSk7CiAgICAgdm9pZCB1bndhdGNoQ2hhbmdlcyhFd2tfRmF2
aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjayk7CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgRXdrRmF2aWNvbkRhdGFiYXNlKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFz
ZSk7CiAKLSAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5j
aHJvbm91c2x5KFdLVVJMUmVmIHBhZ2VVUkwpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VS
TFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBp
Y29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdL
VVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCiAgICAgV0tSZXRhaW5Q
dHI8V0tJY29uRGF0YWJhc2VSZWY+IG1faWNvbkRhdGFiYXNlOwogICAgIENoYW5nZUxpc3RlbmVy
TWFwIG1fY2hhbmdlTGlzdGVuZXJzOwotICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBtX2ljb25S
ZXF1ZXN0czsKIH07CiAKICNlbmRpZiAvLyBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBj
M2E1OWM0Li5jOTFkN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld191
cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBpbXBsLT51cmwo
KTsKIH0KIAotY29uc3QgY2hhciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpld2tWaWV3KQorRXZhc19PYmplY3QqIGV3a192aWV3X2Zhdmljb25fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBpbXBsLCAwKTsKIAotICAgIHJldHVybiBpbXBsLT5mYXZpY29uVVJMKCk7CisgICAg
cmV0dXJuIGltcGwtPmNyZWF0ZUZhdmljb24oKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Jl
bG9hZChFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCmluZGV4IDExYmViOTQuLjViOTIzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtNDgsNyArNDgsOCBAQAogICogICB3
aGVuIGRvbmUgdG8gY29udGludWUgd2l0aCB0aGUgZm9ybSBzdWJtaXNzaW9uLiBJZiB0aGUgbGFz
dCByZWZlcmVuY2UgaXMgcmVtb3ZlZCBvbiBhCiAgKiAgICNFd2tfRm9ybV9TdWJtaXNzaW9uX1Jl
cXVlc3QgYW5kIHRoZSBmb3JtIGhhcyBub3QgYmVlbiBzdWJtaXR0ZWQgeWV0LAogICogICBld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGlj
YWxseS4KLSAqIC0gImljb24sY2hhbmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydz
IGZhdmljb24gaGFzIGNoYW5nZWQuCisgKiAtICJmYXZpY29uLGNoYW5nZWQiLCB2b2lkOiByZXBv
cnRzIHRoYXQgdGhlIHZpZXcncyBmYXZpY29uIGhhcyBjaGFuZ2VkLgorICogICBUaGUgZmF2aWNv
biBjYW4gYmUgcXVlcmllZCB1c2luZyBld2tfdmlld19mYXZpY29uX2dldCgpLgogICogLSAibG9h
ZCxlcnJvciIsIGNvbnN0IEV3a19FcnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxl
ZC4KICAqIC0gImxvYWQsZmluaXNoZWQiLCB2b2lkOiByZXBvcnRzIGxvYWQgZmluaXNoZWQuCiAg
KiAtICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKjogbG9hZCBwcm9ncmVzcyBoYXMgY2hhbmdlZCAo
dmFsdWUgZnJvbSAwLjAgdG8gMS4wKS4KQEAgLTM3MiwxNiArMzczLDE0IEBAIEVBUEkgRWluYV9C
b29sIGV3a192aWV3X3VybF9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnVybCk7CiBF
QVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwog
CiAvKioKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgaWNvbiBVUkwgb2YgdmlldyBvYmplY3QuCi0g
KgotICogSXQgcmV0dXJucyBhbiBpbnRlcm5hbCBzdHJpbmcgYW5kIHNob3VsZCBub3QKLSAqIGJl
IG1vZGlmaWVkLiBUaGUgc3RyaW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgor
ICogUmV0dXJucyB0aGUgY3VycmVudCBmYXZpY29uIG9mIHZpZXcgb2JqZWN0LgogICoKICAqIEBw
YXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjdXJyZW50IGljb24gVVJMCiAgKgotICogQHJldHVy
biBjdXJyZW50IGljb24gVVJMIG9uIHN1Y2Nlc3Mgb3IgQGMgTlVMTCBpZiB1bmF2YWlsYWJsZSBv
ciBvbiBmYWlsdXJlCisgKiBAcmV0dXJuIGN1cnJlbnQgZmF2aWNvbiBvbiBzdWNjZXNzIG9yIEBj
IE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24gZmFpbHVyZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFz
X09iamVjdCBuZWVkcyB0byBiZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgY29uc3QgY2hh
ciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRXZh
c19PYmplY3QgKmV3a192aWV3X2Zhdmljb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAog
LyoqCiAgKiBBc2tzIHRoZSBtYWluIGZyYW1lIHRvIHJlbG9hZCB0aGUgY3VycmVudCBkb2N1bWVu
dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcAppbmRleCAwZmYxZGYw
Li5jMGNmMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBA
IC03NSw1NCArNzUsNiBAQCBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBo
dHRwU2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgYwogICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwogfQogCi1zdGF0aWMgdm9p
ZCBvbkljb25DaGFuZ2VkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKLXsKLSAgICBib29sKiBpY29uQ2hhbmdlZCA9IHN0YXRpY19jYXN0PGJvb2wqPih1c2Vy
RGF0YSk7Ci0gICAgKmljb25DaGFuZ2VkID0gdHJ1ZTsKLX0KLQotVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX3VybF9nZXQpCi17Ci0gICAgT3duUHRyPEVXSzJV
bml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2
ZXIpOwotICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICAvLyBTZXQg
ZmF2aWNvbiBkYXRhYmFzZSBwYXRoIGFuZCBlbmFibGUgZnVuY3Rpb25hbGl0eS4KLSAgICBFd2tf
Q29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7Ci0gICAg
ZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwot
Ci0gICAgYm9vbCBpY29uQ2hhbmdlZCA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkLCAmaWNv
bkNoYW5nZWQpOwotCi0gICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVu
c3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKLSAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2Fz
ZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KLSAgICBBU1NFUlRfVFJVRShsb2FkVXJs
U3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvIikuZGF0YSgpKSk7Ci0KLSAgICB3aGls
ZSAoIWljb25DaGFuZ2VkKQotICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotCi0g
ICAgQVNTRVJUX1RSVUUoaWNvbkNoYW5nZWQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkKTsKLQotICAg
IC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIGZhdmljb24gVVJMLgotICAgIEV3a19GYXZp
Y29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFi
YXNlX2dldChjb250ZXh0KTsKLSAgICBBU1NFUlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOwotCi0g
ICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25VUkwgPSBodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRo
KCIvZmF2aWNvbi5pY28iKTsKLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgaWNvblVSTCA9IGV3a19m
YXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3Vy
bF9nZXQod2ViVmlldygpKSk7Ci0gICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5k
YXRhKCksIGljb25VUkwpOwotCi0gICAgY29uc3QgY2hhciogdmlld0ljb25VUkwgPSBld2tfdmll
d19pY29uX3VybF9nZXQod2ViVmlldygpKTsKLSAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZp
Y29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwpOwotfQotCi1zdGF0aWMgdm9pZCBvbkljb25EYXRh
UmVhZHkoY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXNfT2JqZWN0KiBpY29uLCB2b2lkKiBldmVu
dF9pbmZvKQotewotICAgIEV2YXNfT2JqZWN0KiogcmV0dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2
YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOwotICAgIGlmIChpY29uKQotICAgICAgICBldmFzX29i
amVjdF9yZWYoaWNvbik7Ci0gICAgKnJldHVybkljb24gPSBpY29uOwotfQotCiBzdHJ1Y3QgSWNv
blJlcXVlc3REYXRhIHsKICAgICBFdmFzX09iamVjdCogdmlldzsKICAgICBFdmFzX09iamVjdCog
aWNvbjsKQEAgLTEzMiwxMyArODQsMTMgQEAgc3RhdGljIHZvaWQgcmVxdWVzdEZhdmljb25EYXRh
KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBJ
Y29uUmVxdWVzdERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxJY29uUmVxdWVzdERhdGEqPih1c2Vy
RGF0YSk7CiAKLSAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgorICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIHZhbGlkIGZhdmljb24gZnJvbSBp
Y29uIGRhdGFiYXNlLgogICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4
dF9nZXQoZGF0YS0+dmlldyk7CiAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRh
YmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOwogICAgIEFT
U0VSVF9UUlVFKGZhdmljb25EYXRhYmFzZSk7CiAKICAgICBFdmFzKiBldmFzID0gZXZhc19vYmpl
Y3RfZXZhc19nZXQoZGF0YS0+dmlldyk7Ci0gICAgQVNTRVJUX1RSVUUoZXdrX2Zhdmljb25fZGF0
YWJhc2VfYXN5bmNfaWNvbl9nZXQoZmF2aWNvbkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KGRh
dGEtPnZpZXcpLCBldmFzLCBvbkljb25EYXRhUmVhZHksICZkYXRhLT5pY29uKSk7CisgICAgZGF0
YS0+aWNvbiA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwg
ZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3KSwgZXZhcyk7CiB9CiAKIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldCkKQEAgLTE1MSw3
ICsxMDMsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2Vf
YXN5bmNfaWNvbl9nZXQpCiAgICAgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rv
cnlfc2V0KGNvbnRleHQsIDApOwogCiAgICAgSWNvblJlcXVlc3REYXRhIGRhdGEgPSB7IHdlYlZp
ZXcoKSwgMCB9OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCks
ICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0RmF2aWNvbkRhdGEsICZkYXRhKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVx
dWVzdEZhdmljb25EYXRhLCAmZGF0YSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBh
Z2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBiZQogICAgIC8vIGluIHRoZSBk
YXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgpAQCAtMTYxLDEz
ICsxMTMsMjAgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNl
X2FzeW5jX2ljb25fZ2V0KQogICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwogCiAg
ICAgQVNTRVJUX1RSVUUoZGF0YS5pY29uKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19kZWwod2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiZmF2aWNvbixjaGFu
Z2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKIAogICAgIC8vIEl0IGlzIGEgMTZ4MTYgZmF2aWNv
bi4KICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dl
dChkYXRhLmljb24sICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7
CiAgICAgRVhQRUNUX0VRKDE2LCBoZWlnaHQpOwotCiAgICAgZXZhc19vYmplY3RfdW5yZWYoZGF0
YS5pY29uKTsKKworICAgIC8vIFRlc3QgQVBJIHRvIHJlcXVlc3QgZmF2aWNvbiBmcm9tIHRoZSB2
aWV3CisgICAgRXZhc19PYmplY3QqIGZhdmljb24gPSBld2tfdmlld19mYXZpY29uX2dldCh3ZWJW
aWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGZhdmljb24pOworICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3NpemVfZ2V0KGZhdmljb24sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgRVhQRUNUX0VRKDE2LCB3
aWR0aCk7CisgICAgRVhQRUNUX0VRKDE2LCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3VucmVm
KGZhdmljb24pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IDE2NjEzOWYuLmE0ODUxMjIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0wMSAgQ2hyaXN0
b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1b
V0syXSBSZWZhY3RvciBFd2tfRmF2aWNvbiBjb2RlIGFuZCBzdG9wIHJlbHlpbmcgb24gaW50ZXJu
YWwgQysrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA4NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIEVGTCdzIE1pbmlCcm93c2VyIHRvIG1ha2UgdXNlIG9mIG5ldyBFd2tfRmF2aWNv
biBBUEkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAodXBk
YXRlX3ZpZXdfZmF2aWNvbik6CisgICAgICAgIChvbl92aWV3X2Zhdmljb25fY2hhbmdlZCk6Cisg
ICAgICAgICh3aW5kb3dfY3JlYXRlKToKKwogMjAxMy0wMi0xNSAgQ2hyaXN0b3BoZSBEdW1leiAg
PGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQWRkIENTdHJpbmcgb3BlcmF0
b3JzIGZvciBjb21wYXJpc29uIHdpdGggY29uc3QgY2hhcioKZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4
IDdiY2E5NTMuLmNlODE2ZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWlu
LmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpAQCAtNTM5LDEyICs1MzksOCBA
QCBvbl9kb3dubG9hZF9mYWlsZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3Zp
ZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB9CiAKIHN0YXRpYyB2b2lkCi1vbl9mYXZpY29uX3JlY2Vp
dmVkKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRf
aW5mbykKK3VwZGF0ZV92aWV3X2Zhdmljb24oQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywgRXZhc19P
YmplY3QgKmljb24pCiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dp
bmRvdyAqKWV2ZW50X2luZm87Ci0gICAgaWYgKHN0cmNtcChwYWdlX3VybCwgZXdrX3ZpZXdfdXJs
X2dldCh3aW5kb3ctPmV3a192aWV3KSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8qIFJlbW92
ZSBwcmV2aW91cyBpY29uIGZyb20gVVJMIGJhciAqLwogICAgIEV2YXNfT2JqZWN0ICpvbGRfaWNv
biA9IGVsbV9vYmplY3RfcGFydF9jb250ZW50X3Vuc2V0KHdpbmRvdy0+dXJsX2JhciwgImljb24i
KTsKICAgICBpZiAob2xkX2ljb24pIHsKQEAgLTU2NSwxNiArNTYxLDE1IEBAIG9uX2Zhdmljb25f
cmVjZWl2ZWQoY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpl
dmVudF9pbmZvKQogfQogCiBzdGF0aWMgdm9pZAotb25fdmlld19pY29uX2NoYW5nZWQodm9pZCAq
dXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCitvbl92
aWV3X2Zhdmljb25fY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmll
dywgdm9pZCAqZXZlbnRfaW5mbykKIHsKICAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIC8qIFJldHJpZXZlIHRoZSB2aWV3J3MgZmF2
aWNvbiAqLwotICAgIEV3a19Db250ZXh0ICpjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQo
ZXdrX3ZpZXcpOwotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlICppY29uX2RhdGFiYXNlID0gZXdr
X2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7CiAKLSAgICBjb25zdCBjaGFy
ICpwYWdlX3VybCA9IGV3a192aWV3X3VybF9nZXQoZXdrX3ZpZXcpOwotICAgIEV2YXMgKmV2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldChld2tfdmlldyk7Ci0gICAgZXdrX2Zhdmljb25fZGF0YWJh
c2VfYXN5bmNfaWNvbl9nZXQoaWNvbl9kYXRhYmFzZSwgcGFnZV91cmwsIGV2YXMsIG9uX2Zhdmlj
b25fcmVjZWl2ZWQsIHdpbmRvdyk7CisgICAgRXZhc19PYmplY3QqIGZhdmljb24gPSBld2tfdmll
d19mYXZpY29uX2dldChld2tfdmlldyk7CisgICAgdXBkYXRlX3ZpZXdfZmF2aWNvbih3aW5kb3cs
IGZhdmljb24pOworCisgICAgaWYgKGZhdmljb24pCisgICAgICAgIGV2YXNfb2JqZWN0X3VucmVm
KGZhdmljb24pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjE4LDcgKzEyMTMsNyBAQCBzdGF0aWMg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXZhc19PYmplY3QgKm9wZW5lciwgY29uc3Qg
Y2hhciAqdXJsLCBpbnQgdwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9maW5pc2hlZCwg
d2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tf
dmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0LCB3aW5kb3cpOwog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZmls
ZSxjaG9vc2VyLHJlcXVlc3QiLCBvbl9maWxlX2Nob29zZXJfcmVxdWVzdCwgd2luZG93KTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImljb24s
Y2hhbmdlZCIsIG9uX3ZpZXdfaWNvbl9jaGFuZ2VkLCB3aW5kb3cpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZmF2aWNvbixjaGFuZ2VkIiwg
b25fdmlld19mYXZpY29uX2NoYW5nZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2FkLGVycm9yIiwgb25fZXJyb3IsIHdp
bmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsICJsb2FkLHByb2dyZXNzIiwgb25fcHJvZ3Jlc3MsIHdpbmRvdyk7CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJ0aXRsZSxjaGFuZ2VkIiwg
b25fdGl0bGVfY2hhbmdlZCwgd2luZG93KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188768</attachid>
            <date>2013-02-17 10:48:10 -0800</date>
            <delta_ts>2013-02-18 03:26:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>108598_ewk_favicon_refactoring.patch</filename>
            <type>text/plain</type>
            <size>30066</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA5ZjQ3YjFlLi4yOTQ4Yzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMTMtMDItMDEgIENocmlzdG9waGUgRHVtZXogIDxjaC5kdW1lekBzaXNhLnNhbXN1bmcu
Y29tPgorCisgICAgICAgIFtFRkxdW1dLMl0gUmVmYWN0b3IgRXdrX0Zhdmljb24gY29kZSBhbmQg
c3RvcCByZWx5aW5nIG9uIGludGVybmFsIEMrKyBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yIHRoZSBFd2tfRmF2aWNvbiBjb2RlIHNv
IHRoYXQgaXQgbm8gbG9uZ2VyIHJlbGllcyBvbiBpbnRlcm5hbAorICAgICAgICBDKysgQVBJIGFu
ZCBzbyB0aGF0IGl0IGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgQyBBUEkuIFRoZSBBUEkgaXMgY2hh
bmdlZAorICAgICAgICBhIGxpdHRsZSBhcyB3ZWxsIHNvIHRoYXQgdGhlIEZhdmljb24gVVJMIGlz
IG5vIGxvbmdlciBleHBvc2VkIHRvIHRoZQorICAgICAgICBjbGllbnQuIEFsc28gdGhlIGNsaWVu
dCBpcyBub3cgb25seSBub3RpZmllZCBvZiBpY29uIGNoYW5nZXMgb25jZSB0aGUKKyAgICAgICAg
ZmF2aWNvbiBkYXRhIGlzIGFjdHVhbGx5IGF2YWlsYWJsZS4KKworICAgICAgICBUaGUgQVBJIGlz
IGNvdmVyZWQgYnkgZXhpc3RpbmcgQVBJIHRlc3RzIGFuZCBieSBNaW5pQnJvd3NlciB3aGljaCBh
cmUKKyAgICAgICAgYm90aCB1cGRhdGVkIGFjY29yZGluZ2x5IGluIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmNwcDoKKyAgICAgICAgKEV3a1ZpZXc6
OmluZm9ybVVSTENoYW5nZSk6CisgICAgICAgIChFd2tWaWV3OjpjcmVhdGVGYXZpY29uKToKKyAg
ICAgICAgKEV3a1ZpZXc6Om9uRmF2aWNvbkNoYW5nZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0V3a1ZpZXcuaDoKKyAgICAgICAgKEV3a1ZpZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFja3MuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIENsaWVudCBhcmUgbm93IG5vdGlm
aWVkIG9mIGZhdmljb24gY2hhbmdlcyBvbmx5IHdoZW4gdGhlIGZhdmljb24gZGF0YQorICAgICAg
ICBiZWNvbWVzIGF2YWlsYWJsZSBhbmQgbWFrZSBBUEkgdG8gcmV0cmlldmUgYSBmYXZpY29uIHN5
bmNocm9ub3VzLiBOVUxMCisgICAgICAgIGlzIHJldHVybmVkIGlmIHRoZSBmYXZpY29uIGRhdGEg
aXMgbm90IGF2YWlsYWJsZS4KKworICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tGYXZp
Y29uRGF0YWJhc2UpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOgorICAgICAgICAoRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRGF0YVJl
YWR5Rm9yUGFnZVVSTCk6CisgICAgICAgIChld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldCk6
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmg6
CisgICAgICAgIChFd2tGYXZpY29uRGF0YWJhc2UpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Zhdmljb25fZ2V0KToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICBSZW5hbWUgJ2ljb24s
Y2hhbmdlZCcgc2lnbmFsIHRvICdmYXZpY29uLGNoYW5nZWQnIGZvciBjbGFyaXR5IGFuZAorICAg
ICAgICBjb25zaXN0ZW5jeSB3aXRoIHRoZSByZXN0IG9mIHRoZSBmYXZpY29uIEFQSS4gUmVtb3Zl
IEFQSSB0byByZXRyaWV2ZQorICAgICAgICB0aGUgZmF2aWNvbiBVUkwgYW5kIHJlcGxhY2UgaXQg
Ynkgb25lIHRvIHJldHJpZXZlIHRoZSBmYXZpY29uIGltYWdlIGFzCisgICAgICAgIGFuIEV2YXNf
T2JqZWN0IGluc3RlYWQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0
X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHA6CisgICAgICAgIFVwZGF0ZSBBUEkgdGVzdHMgdG8g
dXNlIHRoZSBuZXcgZmF2aWNvbiBBUEkuCisKIDIwMTMtMDItMTYgIEFuZHJlYXMgS2xpbmcgIDxh
a2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBtdWx0aS10aHJlYWRpbmcgZ3VuayBm
cm9tIFBsdWdpbkluZm9TdG9yZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL0V3a1ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
RXdrVmlldy5jcHAKaW5kZXggN2I0N2M2ZGUuLjczYTBjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuY3BwCkBAIC03NzksMjMgKzc3OSw2IEBAIHZvaWQg
RXdrVmlldzo6c2V0VG91Y2hFdmVudHNFbmFibGVkKGJvb2wgZW5hYmxlZCkKIH0KICNlbmRpZgog
Ci0vKioKLSAqIEBpbnRlcm5hbAotICogVXBkYXRlIHRoZSB2aWV3J3MgZmF2aWNvbiBhbmQgZW1p
dHMgYSAiaWNvbixjaGFuZ2VkIiBzaWduYWwgaWYgaXQgaGFzCi0gKiBjaGFuZ2VkLgotICoKLSAq
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBVUkwgaGFzIGNoYW5nZWQgb3Ig
d2hlbiB0aGUgaWNvbiBmb3IKLSAqIHRoZSBjdXJyZW50IHBhZ2UgVVJMIGhhcyBjaGFuZ2VkLgot
ICovCi12b2lkIEV3a1ZpZXc6OmluZm9ybUljb25DaGFuZ2UoKQotewotICAgIEV3a0Zhdmljb25E
YXRhYmFzZSogaWNvbkRhdGFiYXNlID0gbV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKLSAg
ICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsKLQotICAgIG1fZmF2aWNvblVSTCA9IGV3a19mYXZpY29u
X2RhdGFiYXNlX2ljb25fdXJsX2dldChpY29uRGF0YWJhc2UsIG1fdXJsKTsKLSAgICBzbWFydENh
bGxiYWNrPEljb25DaGFuZ2VkPigpLmNhbGwoKTsKLX0KLQogYm9vbCBFd2tWaWV3OjpjcmVhdGVH
TFN1cmZhY2UoKQogewogICAgIGlmICghbV9pc0FjY2VsZXJhdGVkKQpAQCAtMTA0NCw3ICsxMDI3
LDE1IEBAIHZvaWQgRXdrVmlldzo6aW5mb3JtVVJMQ2hhbmdlKCkKICAgICBzbWFydENhbGxiYWNr
PFVSTENoYW5nZWQ+KCkuY2FsbChtX3VybCk7CiAKICAgICAvLyBVcGRhdGUgdGhlIHZpZXcncyBm
YXZpY29uLgotICAgIGluZm9ybUljb25DaGFuZ2UoKTsKKyAgICBzbWFydENhbGxiYWNrPEZhdmlj
b25DaGFuZ2VkPigpLmNhbGwoKTsKK30KKworRXZhc19PYmplY3QqIEV3a1ZpZXc6OmNyZWF0ZUZh
dmljb24oKSBjb25zdAoreworICAgIEV3a0Zhdmljb25EYXRhYmFzZSogaWNvbkRhdGFiYXNlID0g
bV9jb250ZXh0LT5mYXZpY29uRGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoaWNvbkRhdGFiYXNlKTsK
KworICAgIHJldHVybiBld2tfZmF2aWNvbl9kYXRhYmFzZV9pY29uX2dldChpY29uRGF0YWJhc2Us
IG1fdXJsLCBzbWFydERhdGEoKS0+YmFzZS5ldmFzKTsKIH0KIAogRXdrV2luZG93RmVhdHVyZXMq
IEV3a1ZpZXc6OndpbmRvd0ZlYXR1cmVzKCkKQEAgLTEzMzgsNyArMTMyOSw3IEBAIHZvaWQgRXdr
Vmlldzo6aGFuZGxlRmF2aWNvbkNoYW5nZWQoY29uc3QgY2hhciogcGFnZVVSTCwgdm9pZCogZXZl
bnRJbmZvKQogICAgIGlmICghdmlldy0+dXJsKCkgfHwgc3RyY2FzZWNtcCh2aWV3LT51cmwoKSwg
cGFnZVVSTCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHZpZXctPmluZm9ybUljb25DaGFuZ2Uo
KTsKKyAgICB2aWV3LT5zbWFydENhbGxiYWNrPEZhdmljb25DaGFuZ2VkPigpLmNhbGwoKTsKIH0K
IAogUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a1ZpZXc6OnRha2VTbmFwc2hvdCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3LmgKaW5kZXggZjhkNjM3My4u
NzQ3OTk4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRXdr
Vmlldy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXcuaApA
QCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhaW50VG9DYWlyb1N1cmZhY2Uo
Y2Fpcm9fc3VyZmFjZV90Kik7CiAKICAgICBjb25zdCBjaGFyKiB1cmwoKSBjb25zdCB7IHJldHVy
biBtX3VybDsgfQotICAgIGNvbnN0IGNoYXIqIGZhdmljb25VUkwoKSBjb25zdCB7IHJldHVybiBt
X2Zhdmljb25VUkw7IH0KKyAgICBFdmFzX09iamVjdCogY3JlYXRlRmF2aWNvbigpIGNvbnN0Owog
ICAgIGNvbnN0IGNoYXIqIHRpdGxlKCkgY29uc3Q7CiAgICAgV2ViS2l0OjpJbnB1dE1ldGhvZENv
bnRleHRFZmwqIGlucHV0TWV0aG9kQ29udGV4dCgpOwogCkBAIC0yMzIsOCArMjMyLDYgQEAgcHJp
dmF0ZToKIAogICAgIFdlYkNvcmU6OkNvb3JkaW5hdGVkR3JhcGhpY3NTY2VuZSogY29vcmRpbmF0
ZWRHcmFwaGljc1NjZW5lKCk7CiAKLSAgICB2b2lkIGluZm9ybUljb25DaGFuZ2UoKTsKLQogICAg
IC8vIEV2YXNfU21hcnRfQ2xhc3MgY2FsbGJhY2sgaW50ZXJmYWNlOgogICAgIHN0YXRpYyB2b2lk
IGhhbmRsZUV2YXNPYmplY3RBZGQoRXZhc19PYmplY3QqKTsKICAgICBzdGF0aWMgdm9pZCBoYW5k
bGVFdmFzT2JqZWN0RGVsZXRlKEV2YXNfT2JqZWN0Kik7CkBAIC0yODksNyArMjg3LDYgQEAgcHJp
dmF0ZToKICAgICBPd25QdHI8RXdrU2V0dGluZ3M+IG1fc2V0dGluZ3M7CiAgICAgUmVmUHRyPEV3
a1dpbmRvd0ZlYXR1cmVzPiBtX3dpbmRvd0ZlYXR1cmVzOwogICAgIGNvbnN0IHZvaWQqIG1fY3Vy
c29ySWRlbnRpZmllcjsgLy8gVGhpcyBpcyBhbiBhZGRyZXNzLCBkbyBub3QgZnJlZSBpdC4KLSAg
ICBXS0VpbmFTaGFyZWRTdHJpbmcgbV9mYXZpY29uVVJMOwogICAgIFdLRWluYVNoYXJlZFN0cmlu
ZyBtX3VybDsKICAgICBtdXRhYmxlIFdLRWluYVNoYXJlZFN0cmluZyBtX3RpdGxlOwogICAgIFdL
RWluYVNoYXJlZFN0cmluZyBtX3RoZW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvRXdrVmlld0NhbGxiYWNrcy5oCmluZGV4IDVmMWNiMDguLjkzNjllZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0V3a1ZpZXdDYWxsYmFj
a3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Fd2tWaWV3Q2FsbGJh
Y2tzLmgKQEAgLTU0LDcgKzU0LDcgQEAgZW51bSBDYWxsYmFja1R5cGUgewogICAgIERvd25sb2Fk
Sm9iUmVxdWVzdGVkLAogICAgIEZpbGVDaG9vc2VyUmVxdWVzdCwKICAgICBOZXdGb3JtU3VibWlz
c2lvblJlcXVlc3QsCi0gICAgSWNvbkNoYW5nZWQsCisgICAgRmF2aWNvbkNoYW5nZWQsCiAgICAg
TG9hZEVycm9yLAogICAgIExvYWRGaW5pc2hlZCwKICAgICBMb2FkUHJvZ3Jlc3MsCkBAIC0xNjQs
NyArMTY0LDcgQEAgREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhEb3dubG9hZEpvYkZpbmlzaGVk
LCAiZG93bmxvYWQsZmluaXNoZWQiLCBFd2tfRG93bmxvYWQKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FM
TEJBQ0soRG93bmxvYWRKb2JSZXF1ZXN0ZWQsICJkb3dubG9hZCxyZXF1ZXN0IiwgRXdrX0Rvd25s
b2FkX0pvYiopOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhGaWxlQ2hvb3NlclJlcXVlc3Qs
ICJmaWxlLGNob29zZXIscmVxdWVzdCIsIEV3a19GaWxlX0Nob29zZXJfUmVxdWVzdCopOwogREVD
TEFSRV9FV0tfVklFV19DQUxMQkFDSyhOZXdGb3JtU3VibWlzc2lvblJlcXVlc3QsICJmb3JtLHN1
Ym1pc3Npb24scmVxdWVzdCIsIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCopOwotREVDTEFS
RV9FV0tfVklFV19DQUxMQkFDSyhJY29uQ2hhbmdlZCwgImljb24sY2hhbmdlZCIsIHZvaWQpOwor
REVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhGYXZpY29uQ2hhbmdlZCwgImZhdmljb24sY2hhbmdl
ZCIsIHZvaWQpOwogREVDTEFSRV9FV0tfVklFV19DQUxMQkFDSyhMb2FkRXJyb3IsICJsb2FkLGVy
cm9yIiwgRXdrX0Vycm9yKik7CiBERUNMQVJFX0VXS19WSUVXX0NBTExCQUNLKExvYWRGaW5pc2hl
ZCwgImxvYWQsZmluaXNoZWQiLCB2b2lkKTsKIERFQ0xBUkVfRVdLX1ZJRVdfQ0FMTEJBQ0soTG9h
ZFByb2dyZXNzLCAibG9hZCxwcm9ncmVzcyIsIGRvdWJsZSopOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCmlu
ZGV4IDQ1YTczZmI1Li42MzAwYWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBTYW1zdW5nIEVsZWN0cm9uaWNzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0z
MCw3ICszMSw2IEBACiAjaW5jbHVkZSAiV0tJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJXS0lj
b25EYXRhYmFzZUNhaXJvLmgiCiAjaW5jbHVkZSAiV0tVUkwuaCIKLSNpbmNsdWRlICJXZWJJY29u
RGF0YWJhc2UuaCIKICNpbmNsdWRlICJld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgiCiAj
aW5jbHVkZSA8V2ViQ29yZS9DYWlyb1V0aWxpdGllc0VmbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUv
UmVmUHRyQ2Fpcm8uaD4KQEAgLTQ2LDcgKzQ2LDYgQEAgRXdrRmF2aWNvbkRhdGFiYXNlOjpFd2tG
YXZpY29uRGF0YWJhc2UoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlKQogICAgIG1lbXNl
dCgmaWNvbkRhdGFiYXNlQ2xpZW50LCAwLCBzaXplb2YoV0tJY29uRGF0YWJhc2VDbGllbnQpKTsK
ICAgICBpY29uRGF0YWJhc2VDbGllbnQudmVyc2lvbiA9IGtXS0ljb25EYXRhYmFzZUNsaWVudEN1
cnJlbnRWZXJzaW9uOwogICAgIGljb25EYXRhYmFzZUNsaWVudC5jbGllbnRJbmZvID0gdGhpczsK
LSAgICBpY29uRGF0YWJhc2VDbGllbnQuZGlkQ2hhbmdlSWNvbkZvclBhZ2VVUkwgPSBkaWRDaGFu
Z2VJY29uRm9yUGFnZVVSTDsKICAgICBpY29uRGF0YWJhc2VDbGllbnQuaWNvbkRhdGFSZWFkeUZv
clBhZ2VVUkwgPSBpY29uRGF0YVJlYWR5Rm9yUGFnZVVSTDsKICAgICBXS0ljb25EYXRhYmFzZVNl
dEljb25EYXRhYmFzZUNsaWVudChtX2ljb25EYXRhYmFzZS5nZXQoKSwgJmljb25EYXRhYmFzZUNs
aWVudCk7CiB9CkBAIC01NiwxNCArNTUsNiBAQCBFd2tGYXZpY29uRGF0YWJhc2U6On5Fd2tGYXZp
Y29uRGF0YWJhc2UoKQogICAgIFdLSWNvbkRhdGFiYXNlU2V0SWNvbkRhdGFiYXNlQ2xpZW50KG1f
aWNvbkRhdGFiYXNlLmdldCgpLCAwKTsKIH0KIAotU3RyaW5nIEV3a0Zhdmljb25EYXRhYmFzZTo6
aWNvblVSTEZvclBhZ2VVUkwoY29uc3QgU3RyaW5nJiBwYWdlVVJMKSBjb25zdAotewotICAgIFN0
cmluZyBpY29uVVJMOwotICAgIHRvSW1wbChtX2ljb25EYXRhYmFzZS5nZXQoKSktPnN5bmNocm9u
b3VzSWNvblVSTEZvclBhZ2VVUkwocGFnZVVSTCwgaWNvblVSTCk7Ci0KLSAgICByZXR1cm4gaWNv
blVSTDsKLX0KLQogdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OndhdGNoQ2hhbmdlcyhjb25zdCBJ
Y29uQ2hhbmdlQ2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpCiB7CiAgICAgQVNTRVJUKGNhbGxi
YWNrRGF0YS5jYWxsYmFjayk7CkBAIC03OSw1NSArNzAsNiBAQCB2b2lkIEV3a0Zhdmljb25EYXRh
YmFzZTo6dW53YXRjaENoYW5nZXMoRXdrX0Zhdmljb25fRGF0YWJhc2VfSWNvbl9DaGFuZ2VfQ2Ig
Y2FsbAogICAgIG1fY2hhbmdlTGlzdGVuZXJzLnJlbW92ZShjYWxsYmFjayk7CiB9CiAKLXN0cnVj
dCBBc3luY0ljb25SZXF1ZXN0UmVzcG9uc2UgewotICAgIFN0cmluZyBwYWdlVVJMOwotICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2U7Ci0gICAgSWNvblJlcXVlc3RDYWxsYmFja0Rh
dGEgY2FsbGJhY2tEYXRhOwotCi0gICAgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKGNvbnN0IFN0
cmluZyYgcGFnZVVSTCwgUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2UsIGNvbnN0
IEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhJiBjYWxsYmFja0RhdGEpCi0gICAgICAgIDogcGFnZVVS
TChwYWdlVVJMKQotICAgICAgICAsIHN1cmZhY2Uoc3VyZmFjZSkKLSAgICAgICAgLCBjYWxsYmFj
a0RhdGEoY2FsbGJhY2tEYXRhKQotICAgIHsgfQotfTsKLQotc3RhdGljIEVpbmFfQm9vbCByZXNw
b25kX2ljb25fcmVxdWVzdF9pZGxlKHZvaWQqIGRhdGEpCi17Ci0gICAgQXN5bmNJY29uUmVxdWVz
dFJlc3BvbnNlKiByZXNwb25zZSA9IHN0YXRpY19jYXN0PEFzeW5jSWNvblJlcXVlc3RSZXNwb25z
ZSo+KGRhdGEpOwotCi0gICAgUmVmUHRyPEV2YXNfT2JqZWN0PiBpY29uID0gcmVzcG9uc2UtPnN1
cmZhY2UgPyBXZWJDb3JlOjpldmFzT2JqZWN0RnJvbUNhaXJvSW1hZ2VTdXJmYWNlKHJlc3BvbnNl
LT5jYWxsYmFja0RhdGEuZXZhcywgcmVzcG9uc2UtPnN1cmZhY2UuZ2V0KCkpIDogMDsKLSAgICBy
ZXNwb25zZS0+Y2FsbGJhY2tEYXRhLmNhbGxiYWNrKHJlc3BvbnNlLT5wYWdlVVJMLnV0ZjgoKS5k
YXRhKCksIGljb24uZ2V0KCksIHJlc3BvbnNlLT5jYWxsYmFja0RhdGEudXNlckRhdGEpOwotCi0g
ICAgZGVsZXRlIHJlc3BvbnNlOwotCi0gICAgcmV0dXJuIEVDT1JFX0NBTExCQUNLX0RPTkU7Ci19
Ci0KLXZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjppY29uRm9yUGFnZVVSTChjb25zdCBjaGFyKiBw
YWdlVVJMLCBjb25zdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSYgY2FsbGJhY2tEYXRhKQotewot
ICAgIC8vIFdlIGFzayBmb3IgdGhlIGljb24gZGlyZWN0bHkuIElmIHdlIGRvbid0IGdldCB0aGUg
aWNvbiBkYXRhIG5vdywKLSAgICAvLyB3ZSdsbCBiZSBub3RpZmllZCBsYXRlciAoZXZlbiBpZiB0
aGUgZGF0YWJhc2UgaXMgc3RpbGwgaW1wb3J0aW5nIGljb25zKS4KLSAgICBXS1JldGFpblB0cjxX
S1VSTFJlZj4gd2tQYWdlVVJMKEFkb3B0V0ssIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHBh
Z2VVUkwpKTsKLSAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZ2V0SWNvblN1
cmZhY2VTeW5jaHJvbm91c2x5KHdrUGFnZVVSTC5nZXQoKSk7Ci0KLSAgICAvLyBJZiB0aGVyZSdz
IG5vIHZhbGlkIGljb24sIGJ1dCB0aGVyZSdzIGFuIGljb25VUkwgcmVnaXN0ZXJlZCwKLSAgICAv
LyBvciBpdCdzIHN0aWxsIG5vdCByZWdpc3RlcmVkIGJ1dCB0aGUgaW1wb3J0IHByb2Nlc3MgaGFz
bid0Ci0gICAgLy8gZmluaXNoZWQgeWV0LCB3ZSBuZWVkIHRvIHdhaXQgZm9yIGljb25EYXRhUmVh
ZHlGb3JQYWdlVVJMIHRvIGJlCi0gICAgLy8gY2FsbGVkIGJlZm9yZSBtYWtpbmcgYW5kIGluZm9y
bWVkIGRlY2lzaW9uLgotICAgIFN0cmluZyBwYWdlVVJMU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChwYWdlVVJMKTsKLSAgICBTdHJpbmcgaWNvblVSTCA9IGljb25VUkxGb3JQYWdlVVJMKHBhZ2VV
UkxTdHJpbmcpOwotICAgIGlmICghc3VyZmFjZSAmJiAoIWljb25VUkwuaXNFbXB0eSgpIHx8ICF0
b0ltcGwobV9pY29uRGF0YWJhc2UuZ2V0KCkpLT5pc1VybEltcG9ydENvbXBsZXRlZCgpKSkgewot
ICAgICAgICBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3IgcmVxdWVzdHMgPSBtX2ljb25SZXF1ZXN0
cy5nZXQocGFnZVVSTFN0cmluZyk7Ci0gICAgICAgIHJlcXVlc3RzLmFwcGVuZChjYWxsYmFja0Rh
dGEpOwotICAgICAgICBtX2ljb25SZXF1ZXN0cy5zZXQocGFnZVVSTFN0cmluZywgcmVxdWVzdHMp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gUmVzcG9uZCB3aGVuIGlkbGUuCi0g
ICAgQXN5bmNJY29uUmVxdWVzdFJlc3BvbnNlKiByZXNwb25zZSA9IG5ldyBBc3luY0ljb25SZXF1
ZXN0UmVzcG9uc2UocGFnZVVSTFN0cmluZywgc3VyZmFjZS5yZWxlYXNlKCksIGNhbGxiYWNrRGF0
YSk7Ci0gICAgZWNvcmVfaWRsZXJfYWRkKHJlc3BvbmRfaWNvbl9yZXF1ZXN0X2lkbGUsIHJlc3Bv
bnNlKTsKLX0KLQogdm9pZCBFd2tGYXZpY29uRGF0YWJhc2U6OmRpZENoYW5nZUljb25Gb3JQYWdl
VVJMKFdLSWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiBwYWdlVVJMUmVmLCBjb25zdCB2b2lkKiBj
bGllbnRJbmZvKQogewogICAgIGNvbnN0IEV3a0Zhdmljb25EYXRhYmFzZSogZXdrSWNvbkRhdGFi
YXNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgRXdrRmF2aWNvbkRhdGFiYXNlKj4oY2xpZW50SW5mbyk7
CkBAIC0xNDMsMTUgKzg1LDEzIEBAIHZvaWQgRXdrRmF2aWNvbkRhdGFiYXNlOjpkaWRDaGFuZ2VJ
Y29uRm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgcGFnCiAgICAgICAgIGl0
LT52YWx1ZS5jYWxsYmFjayhwYWdlVVJMLmRhdGEoKSwgaXQtPnZhbHVlLnVzZXJEYXRhKTsKIH0K
IAotUGFzc1JlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IEV3a0Zhdmljb25EYXRhYmFzZTo6Z2V0SWNv
blN1cmZhY2VTeW5jaHJvbm91c2x5KFdLVVJMUmVmIHBhZ2VVUkwpIGNvbnN0CitQYXNzUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gRXdrRmF2aWNvbkRhdGFiYXNlOjpnZXRJY29uU3VyZmFjZVN5bmNo
cm9ub3VzbHkoY29uc3QgY2hhciogcGFnZVVSTCkgY29uc3QKIHsKLSAgICBXS0ljb25EYXRhYmFz
ZVJldGFpbkljb25Gb3JVUkwobV9pY29uRGF0YWJhc2UuZ2V0KCksIHBhZ2VVUkwpOworICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a1BhZ2VVUkwoQWRvcHRXSywgV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcocGFnZVVSTCkpOwogCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFj
ZSA9IFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q2Fpcm9TdXJmYWNlRm9yVVJMKG1faWNvbkRhdGFiYXNl
LmdldCgpLCBwYWdlVVJMKTsKLSAgICBpZiAoIXN1cmZhY2UpIHsKLSAgICAgICAgV0tJY29uRGF0
YWJhc2VSZWxlYXNlSWNvbkZvclVSTChtX2ljb25EYXRhYmFzZS5nZXQoKSwgcGFnZVVSTCk7Cisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZSA9IFdLSWNvbkRhdGFiYXNlVHJ5R2V0
Q2Fpcm9TdXJmYWNlRm9yVVJMKG1faWNvbkRhdGFiYXNlLmdldCgpLCB3a1BhZ2VVUkwuZ2V0KCkp
OworICAgIGlmICghc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCiAgICAgcmV0
dXJuIHN1cmZhY2UucmVsZWFzZSgpOwogfQpAQCAtMTYwLDQxICsxMDAsMjYgQEAgdm9pZCBFd2tG
YXZpY29uRGF0YWJhc2U6Omljb25EYXRhUmVhZHlGb3JQYWdlVVJMKFdLSWNvbkRhdGFiYXNlUmVm
LCBXS1VSTFJlZiBwYWcKIHsKICAgICBFd2tGYXZpY29uRGF0YWJhc2UqIGV3a0ljb25EYXRhYmFz
ZSA9IGNvbnN0X2Nhc3Q8RXdrRmF2aWNvbkRhdGFiYXNlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgRXdr
RmF2aWNvbkRhdGFiYXNlKj4oY2xpZW50SW5mbykpOwogCi0gICAgU3RyaW5nIHVybFN0cmluZyA9
IHRvV1RGU3RyaW5nKHBhZ2VVUkwpOwotICAgIGlmICghZXdrSWNvbkRhdGFiYXNlLT5tX2ljb25S
ZXF1ZXN0cy5jb250YWlucyh1cmxTdHJpbmcpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlID0gZXdrSWNvbkRhdGFiYXNlLT5nZXRJY29uU3Vy
ZmFjZVN5bmNocm9ub3VzbHkocGFnZVVSTCk7CisgICAgV0tJY29uRGF0YWJhc2VSZXRhaW5JY29u
Rm9yVVJMKGV3a0ljb25EYXRhYmFzZS0+bV9pY29uRGF0YWJhc2UuZ2V0KCksIHBhZ2VVUkwpOwog
Ci0gICAgUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yIHJlcXVlc3RzRm9yVVJMID0gZXdrSWNvbkRh
dGFiYXNlLT5tX2ljb25SZXF1ZXN0cy50YWtlKHVybFN0cmluZyk7Ci0gICAgc2l6ZV90IHJlcXVl
c3RDb3VudCA9IHJlcXVlc3RzRm9yVVJMLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlcXVlc3RDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEljb25SZXF1ZXN0Q2FsbGJh
Y2tEYXRhJiBjYWxsYmFja0RhdGEgPSByZXF1ZXN0c0ZvclVSTFtpXTsKLSAgICAgICAgUmVmUHRy
PEV2YXNfT2JqZWN0PiBpY29uID0gc3VyZmFjZSA/IFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fp
cm9JbWFnZVN1cmZhY2UoY2FsbGJhY2tEYXRhLmV2YXMsIHN1cmZhY2UuZ2V0KCkpIDogMDsKLSAg
ICAgICAgY2FsbGJhY2tEYXRhLmNhbGxiYWNrKHVybFN0cmluZy51dGY4KCkuZGF0YSgpLCBpY29u
LmdldCgpLCBjYWxsYmFja0RhdGEudXNlckRhdGEpOwotICAgIH0KKyAgICBDU3RyaW5nIHVybFN0
cmluZyA9IHRvV1RGU3RyaW5nKHBhZ2VVUkwpLnV0ZjgoKTsKKyAgICBDaGFuZ2VMaXN0ZW5lck1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBld2tJY29uRGF0YWJhc2UtPm1fY2hhbmdlTGlzdGVuZXJz
LmJlZ2luKCk7CisgICAgQ2hhbmdlTGlzdGVuZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGV3
a0ljb25EYXRhYmFzZS0+bV9jaGFuZ2VMaXN0ZW5lcnMuZW5kKCk7CisgICAgZm9yICg7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmNhbGxiYWNrKHVybFN0cmluZy5kYXRhKCks
IGl0LT52YWx1ZS51c2VyRGF0YSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mYXZpY29uX2RhdGFi
YXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBj
b25zdCBjaGFyKiBwYWdlVVJMKQorRXZhc19PYmplY3QqIGV3a19mYXZpY29uX2RhdGFiYXNlX2lj
b25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNlKiBld2tJY29uRGF0YWJhc2UsIGNvbnN0IGNoYXIq
IHBhZ2VVUkwsIEV2YXMqIGV2YXMpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV3a0ljb25EYXRhYmFzZSwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHBhZ2VVUkwsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldmFz
LCAwKTsKIAotICAgIFN0cmluZyBpY29uVVJMID0gZXdrSWNvbkRhdGFiYXNlLT5pY29uVVJMRm9y
UGFnZVVSTChTdHJpbmc6OmZyb21VVEY4KHBhZ2VVUkwpKTsKLQotICAgIHJldHVybiBlaW5hX3N0
cmluZ3NoYXJlX2FkZChpY29uVVJMLnV0ZjgoKS5kYXRhKCkpOwotfQotCi1FaW5hX0Jvb2wgZXdr
X2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQoRXdrX0Zhdmljb25fRGF0YWJhc2UqIGV3
a0ljb25EYXRhYmFzZSwgY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXMqIGV2YXMsIEV3a19GYXZp
Y29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkK
LXsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrSWNvbkRhdGFiYXNlLCBm
YWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBhZ2VfdXJsLCBmYWxz
ZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2YXMsIGZhbHNlKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY2FsbGJhY2ssIGZhbHNlKTsKLQotICAg
IGV3a0ljb25EYXRhYmFzZS0+aWNvbkZvclBhZ2VVUkwocGFnZV91cmwsIEljb25SZXF1ZXN0Q2Fs
bGJhY2tEYXRhKGNhbGxiYWNrLCB1c2VyRGF0YSwgZXZhcykpOworICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IHN1cmZhY2UgPSBld2tJY29uRGF0YWJhc2UtPmdldEljb25TdXJmYWNlU3luY2hy
b25vdXNseShwYWdlVVJMKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiAwOwog
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIFdlYkNvcmU6OmV2YXNPYmplY3RGcm9tQ2Fp
cm9JbWFnZVN1cmZhY2UoZXZhcywgc3VyZmFjZS5nZXQoKSkubGVha1JlZigpOwogfQogCiB2b2lk
IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fY2hhbmdlX2NhbGxiYWNrX2FkZChFd2tfRmF2aWNv
bl9EYXRhYmFzZSogZXdrSWNvbkRhdGFiYXNlLCBFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0No
YW5nZV9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2UuaAppbmRleCBiNjZh
NjdiLi5kNWNlZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfZmF2aWNvbl9kYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19mYXZpY29uX2RhdGFiYXNlLmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDQwICs0OCwxNiBA
QCB0eXBlZGVmIHN0cnVjdCBFd2tGYXZpY29uRGF0YWJhc2UgRXdrX0Zhdmljb25fRGF0YWJhc2U7
CiB0eXBlZGVmIHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYikoY29u
c3QgY2hhciAqcGFnZV91cmwsIHZvaWQgKmV2ZW50X2luZm8pOwogCiAvKioKLSAqIEB0eXBlZGVm
IEV3a19GYXZpY29uX0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIEV3a19GYXZpY29uX0RhdGFi
YXNlX0FzeW5jX0ljb25fR2V0X0NiCi0gKiBAYnJpZWYgQ2FsbGJhY2sgdHlwZSBmb3IgdXNlIHdp
dGggZXdrX2Zhdmljb25fZGF0YWJhc2VfYXN5bmNfaWNvbl9nZXQKLSAqCi0gKiBUaGUgQGEgaWNv
biBtYXkgYmUgTlVMTCBpZiB0aGVyZSBpcyBubyBmYXZpY29uIGFzc29jaWF0ZWQgdG8gdGhlIGdp
dmVuIEBhIHBhZ2VfdXJsLgotICoKLSAqIFlvdSBuZWVkIHRvIGNhbGwgZXZhc19vYmplY3RfcmVm
KCkgb24gdGhlIEBhIGljb24gaWYgeW91IHdpc2ggdG8ga2VlcCBpdCBhZnRlciB0aGUKLSAqIGNh
bGxiYWNrIGlzIGV4ZWN1dGVkLgotICovCi10eXBlZGVmIHZvaWQgKCpFd2tfRmF2aWNvbl9EYXRh
YmFzZV9Bc3luY19JY29uX0dldF9DYikoY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXNfT2JqZWN0
ICppY29uLCB2b2lkICpldmVudF9pbmZvKTsKLQotLyoqCi0gKiBSZXRyaWV2ZXMgZnJvbSB0aGUg
ZGF0YWJhc2UgdGhlIGZhdmljb24gVVJMIGZvciB0aGUgZ2l2ZW4gQGEgcGFnZV91cmwKLSAqCi0g
KiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0IHRvIHF1ZXJ5Ci0gKiBAcGFyYW0gcGFn
ZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUgZmF2aWNvbiBVUkwgZm9yCi0gKgotICog
QHJldHVybiBhIG5ld2x5IGFsbG9jYXRlZCBzdHJpbmcgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0
cmluZ3NoYXJlCi0gKiAgICAgICAgIG9yIEBjIE5VTEwgaW4gY2FzZSBvZiBlcnJvciBvciBpZiB0
aGUga2V5IGRvZXMgbm90IGV4aXN0LgotICogICAgICAgICBZb3UgbmVlZCB0byBjYWxsIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKCkgYWZ0ZXIgdXNlLgotICovCi1FQVBJIGNvbnN0IGNoYXIgKmV3a19m
YXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChFd2tfRmF2aWNvbl9EYXRhYmFzZSAqZGF0YWJh
c2UsIGNvbnN0IGNoYXIgKnBhZ2VfdXJsKTsKLQotLyoqCi0gKiBSZXRyaWV2ZXMgYXN5bmNocm9u
b3VzbHkgZnJvbSB0aGUgZGF0YWJhc2UgdGhlIGZhdmljb24gZm9yIHRoZSBnaXZlbiBAYSBwYWdl
X3VybAorICogUmV0cmlldmVzIGZyb20gdGhlIGRhdGFiYXNlIHRoZSBmYXZpY29uIGZvciB0aGUg
Z2l2ZW4gQGEgcGFnZV91cmwKICAqCiAgKiBAcGFyYW0gZGF0YWJhc2UgZGF0YWJhc2Ugb2JqZWN0
IHRvIHF1ZXJ5CiAgKiBAcGFyYW0gcGFnZV91cmwgVVJMIG9mIHRoZSBwYWdlIHRvIGdldCB0aGUg
ZmF2aWNvbiBmb3IKICAqIEBwYXJhbSBldmFzIFRoZSBjYW52YXMgdG8gYWRkIHRoZSBmYXZpY29u
IHRvCi0gKiBAcGFyYW0gY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdo
ZW4gdGhlIGljb24gaXMgcmV0cmlldmVkCi0gKiBAcGFyYW0gZGF0YSB0aGUgZGF0YSBwb2ludGVy
IHRoYXQgd2FzIHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sKICAqCi0gKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpZiB0aGUgaWNvbiB3YXMgc3VjY2Vzc2Z1bHkgcmVxdWVzdGVkLCBAYyBFSU5B
X0ZBTFNFIG90aGVyd2lzZQorICogQHJldHVybiBUaGUgZmF2aWNvbiBhcyBhbiBFdmFzX09iamVj
dCBpZiBzdWNjZXNzZnVsLCBAYyBOVUxMIG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFz
X09iamVjdCBuZWVkcyB0byBiZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgRWluYV9Cb29s
IGV3a19mYXZpY29uX2RhdGFiYXNlX2FzeW5jX2ljb25fZ2V0KEV3a19GYXZpY29uX0RhdGFiYXNl
ICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMsIEV3a19GYXZpY29u
X0RhdGFiYXNlX0FzeW5jX0ljb25fR2V0X0NiIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK0VBUEkg
RXZhc19PYmplY3QgKmV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KEV3a19GYXZpY29uX0Rh
dGFiYXNlICpkYXRhYmFzZSwgY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXMgKmV2YXMpOwogCiAv
KioKICAqIEFkZCAocmVnaXN0ZXIpIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBpY29uIGNoYW5n
ZSBldmVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Zhdmljb25fZGF0YWJhc2VfcHJpdmF0ZS5oCmluZGV4IDc1MzViZGQuLjFjYzc3
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mYXZp
Y29uX2RhdGFiYXNlX3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlLmgKQEAgLTEsNSArMSw2IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIFNhbXN1bmcgRWxlY3Ryb25pY3MuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ2LDI3ICs0
Nyw3IEBAIHN0cnVjdCBJY29uQ2hhbmdlQ2FsbGJhY2tEYXRhIHsKICAgICB7IH0KIH07CiAKLXN0
cnVjdCBJY29uUmVxdWVzdENhbGxiYWNrRGF0YSB7Ci0gICAgRXdrX0Zhdmljb25fRGF0YWJhc2Vf
QXN5bmNfSWNvbl9HZXRfQ2IgY2FsbGJhY2s7Ci0gICAgdm9pZCogdXNlckRhdGE7Ci0gICAgRXZh
cyogZXZhczsKLQotICAgIEljb25SZXF1ZXN0Q2FsbGJhY2tEYXRhKCkKLSAgICAgICAgOiBjYWxs
YmFjaygwKQotICAgICAgICAsIHVzZXJEYXRhKDApCi0gICAgICAgICwgZXZhcygwKQotICAgIHsg
fQotCi0gICAgSWNvblJlcXVlc3RDYWxsYmFja0RhdGEoRXdrX0Zhdmljb25fRGF0YWJhc2VfQXN5
bmNfSWNvbl9HZXRfQ2IgX2NhbGxiYWNrLCB2b2lkKiBfdXNlckRhdGEsIEV2YXMqIF9ldmFzKQot
ICAgICAgICA6IGNhbGxiYWNrKF9jYWxsYmFjaykKLSAgICAgICAgLCB1c2VyRGF0YShfdXNlckRh
dGEpCi0gICAgICAgICwgZXZhcyhfZXZhcykKLSAgICB7IH0KLX07Ci0KIHR5cGVkZWYgSGFzaE1h
cDxFd2tfRmF2aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiwgSWNvbkNoYW5nZUNhbGxiYWNr
RGF0YT4gQ2hhbmdlTGlzdGVuZXJNYXA7Ci10eXBlZGVmIFZlY3RvcjxJY29uUmVxdWVzdENhbGxi
YWNrRGF0YT4gUGVuZGluZ0ljb25SZXF1ZXN0VmVjdG9yOwotdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZyAvKiBwYWdlVVJMICovLCBQZW5kaW5nSWNvblJlcXVlc3RWZWN0b3I+IFBlbmRpbmdJY29uUmVx
dWVzdE1hcDsKIAogY2xhc3MgRXdrRmF2aWNvbkRhdGFiYXNlIHsKIHB1YmxpYzoKQEAgLTc2LDIz
ICs1NywxOCBAQCBwdWJsaWM6CiAgICAgfQogICAgIH5Fd2tGYXZpY29uRGF0YWJhc2UoKTsKIAot
ICAgIFN0cmluZyBpY29uVVJMRm9yUGFnZVVSTChjb25zdCBTdHJpbmcmIHBhZ2VVUkwpIGNvbnN0
OwotICAgIHZvaWQgaWNvbkZvclBhZ2VVUkwoY29uc3QgY2hhciogcGFnZVVSTCwgY29uc3QgSWNv
blJlcXVlc3RDYWxsYmFja0RhdGEmIGNhbGxiYWNrRGF0YSk7Ci0KKyAgICBQYXNzUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KGNvbnN0IGNoYXIqIHBh
Z2VVUkwpIGNvbnN0OwogICAgIHZvaWQgd2F0Y2hDaGFuZ2VzKGNvbnN0IEljb25DaGFuZ2VDYWxs
YmFja0RhdGEmIGNhbGxiYWNrRGF0YSk7CiAgICAgdm9pZCB1bndhdGNoQ2hhbmdlcyhFd2tfRmF2
aWNvbl9EYXRhYmFzZV9JY29uX0NoYW5nZV9DYiBjYWxsYmFjayk7CiAKIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgRXdrRmF2aWNvbkRhdGFiYXNlKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFz
ZSk7CiAKLSAgICBQYXNzUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gZ2V0SWNvblN1cmZhY2VTeW5j
aHJvbm91c2x5KFdLVVJMUmVmIHBhZ2VVUkwpIGNvbnN0OwotCiAgICAgc3RhdGljIHZvaWQgZGlk
Q2hhbmdlSWNvbkZvclBhZ2VVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlLCBXS1VS
TFJlZiBwYWdlVVJMLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgdm9pZCBp
Y29uRGF0YVJlYWR5Rm9yUGFnZVVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2UsIFdL
VVJMUmVmIHBhZ2VVUkwsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwogCiAgICAgV0tSZXRhaW5Q
dHI8V0tJY29uRGF0YWJhc2VSZWY+IG1faWNvbkRhdGFiYXNlOwogICAgIENoYW5nZUxpc3RlbmVy
TWFwIG1fY2hhbmdlTGlzdGVuZXJzOwotICAgIFBlbmRpbmdJY29uUmVxdWVzdE1hcCBtX2ljb25S
ZXF1ZXN0czsKIH07CiAKICNlbmRpZiAvLyBld2tfZmF2aWNvbl9kYXRhYmFzZV9wcml2YXRlX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRleCBj
M2E1OWM0Li5jOTFkN2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCkBAIC0xMzEsMTEgKzEzMSwxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld191
cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIHJldHVybiBpbXBsLT51cmwo
KTsKIH0KIAotY29uc3QgY2hhciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0ICpld2tWaWV3KQorRXZhc19PYmplY3QqIGV3a192aWV3X2Zhdmljb25fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX0lNUExfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBpbXBsLCAwKTsKIAotICAgIHJldHVybiBpbXBsLT5mYXZpY29uVVJMKCk7CisgICAg
cmV0dXJuIGltcGwtPmNyZWF0ZUZhdmljb24oKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Jl
bG9hZChFdmFzX09iamVjdCogZXdrVmlldykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCmluZGV4IDExYmViOTQuLjViOTIzYzQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtNDgsNyArNDgsOCBAQAogICogICB3
aGVuIGRvbmUgdG8gY29udGludWUgd2l0aCB0aGUgZm9ybSBzdWJtaXNzaW9uLiBJZiB0aGUgbGFz
dCByZWZlcmVuY2UgaXMgcmVtb3ZlZCBvbiBhCiAgKiAgICNFd2tfRm9ybV9TdWJtaXNzaW9uX1Jl
cXVlc3QgYW5kIHRoZSBmb3JtIGhhcyBub3QgYmVlbiBzdWJtaXR0ZWQgeWV0LAogICogICBld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KCkgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGlj
YWxseS4KLSAqIC0gImljb24sY2hhbmdlZCIsIHZvaWQ6IHJlcG9ydHMgdGhhdCB0aGUgdmlldydz
IGZhdmljb24gaGFzIGNoYW5nZWQuCisgKiAtICJmYXZpY29uLGNoYW5nZWQiLCB2b2lkOiByZXBv
cnRzIHRoYXQgdGhlIHZpZXcncyBmYXZpY29uIGhhcyBjaGFuZ2VkLgorICogICBUaGUgZmF2aWNv
biBjYW4gYmUgcXVlcmllZCB1c2luZyBld2tfdmlld19mYXZpY29uX2dldCgpLgogICogLSAibG9h
ZCxlcnJvciIsIGNvbnN0IEV3a19FcnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxl
ZC4KICAqIC0gImxvYWQsZmluaXNoZWQiLCB2b2lkOiByZXBvcnRzIGxvYWQgZmluaXNoZWQuCiAg
KiAtICJsb2FkLHByb2dyZXNzIiwgZG91YmxlKjogbG9hZCBwcm9ncmVzcyBoYXMgY2hhbmdlZCAo
dmFsdWUgZnJvbSAwLjAgdG8gMS4wKS4KQEAgLTM3MiwxNiArMzczLDE0IEBAIEVBUEkgRWluYV9C
b29sIGV3a192aWV3X3VybF9zZXQoRXZhc19PYmplY3QgKm8sIGNvbnN0IGNoYXIgKnVybCk7CiBF
QVBJIGNvbnN0IGNoYXIgKmV3a192aWV3X3VybF9nZXQoY29uc3QgRXZhc19PYmplY3QgKm8pOwog
CiAvKioKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgaWNvbiBVUkwgb2YgdmlldyBvYmplY3QuCi0g
KgotICogSXQgcmV0dXJucyBhbiBpbnRlcm5hbCBzdHJpbmcgYW5kIHNob3VsZCBub3QKLSAqIGJl
IG1vZGlmaWVkLiBUaGUgc3RyaW5nIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkLgor
ICogUmV0dXJucyB0aGUgY3VycmVudCBmYXZpY29uIG9mIHZpZXcgb2JqZWN0LgogICoKICAqIEBw
YXJhbSBvIHZpZXcgb2JqZWN0IHRvIGdldCBjdXJyZW50IGljb24gVVJMCiAgKgotICogQHJldHVy
biBjdXJyZW50IGljb24gVVJMIG9uIHN1Y2Nlc3Mgb3IgQGMgTlVMTCBpZiB1bmF2YWlsYWJsZSBv
ciBvbiBmYWlsdXJlCisgKiBAcmV0dXJuIGN1cnJlbnQgZmF2aWNvbiBvbiBzdWNjZXNzIG9yIEBj
IE5VTEwgaWYgdW5hdmFpbGFibGUgb3Igb24gZmFpbHVyZS4KKyAqIFRoZSByZXR1cm5lZCBFdmFz
X09iamVjdCBuZWVkcyB0byBiZSBmcmVlZCBhZnRlciB1c2UuCiAgKi8KLUVBUEkgY29uc3QgY2hh
ciAqZXdrX3ZpZXdfaWNvbl91cmxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKK0VBUEkgRXZh
c19PYmplY3QgKmV3a192aWV3X2Zhdmljb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKTsKIAog
LyoqCiAgKiBBc2tzIHRoZSBtYWluIGZyYW1lIHRvIHJlbG9hZCB0aGUgY3VycmVudCBkb2N1bWVu
dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9mYXZpY29uX2RhdGFiYXNlLmNwcAppbmRleCAwZmYxZGYw
Li5jMGNmMjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZmF2aWNvbl9kYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Zhdmljb25fZGF0YWJhc2UuY3BwCkBA
IC03NSw1NCArNzUsNiBAQCBzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBo
dHRwU2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgYwogICAgIHNvdXBfbWVzc2Fn
ZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwogfQogCi1zdGF0aWMgdm9p
ZCBvbkljb25DaGFuZ2VkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50
SW5mbykKLXsKLSAgICBib29sKiBpY29uQ2hhbmdlZCA9IHN0YXRpY19jYXN0PGJvb2wqPih1c2Vy
RGF0YSk7Ci0gICAgKmljb25DaGFuZ2VkID0gdHJ1ZTsKLX0KLQotVEVTVF9GKEVXSzJVbml0VGVz
dEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNlX3VybF9nZXQpCi17Ci0gICAgT3duUHRyPEVXSzJV
bml0VGVzdFNlcnZlcj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2
ZXIpOwotICAgIGh0dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7Ci0KLSAgICAvLyBTZXQg
ZmF2aWNvbiBkYXRhYmFzZSBwYXRoIGFuZCBlbmFibGUgZnVuY3Rpb25hbGl0eS4KLSAgICBFd2tf
Q29udGV4dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7Ci0gICAg
ZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rvcnlfc2V0KGNvbnRleHQsIDApOwot
Ci0gICAgYm9vbCBpY29uQ2hhbmdlZCA9IGZhbHNlOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2FkZCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkLCAmaWNv
bkNoYW5nZWQpOwotCi0gICAgLy8gV2UgbmVlZCB0byBsb2FkIHRoZSBwYWdlIGZpcnN0IHRvIGVu
c3VyZSB0aGUgaWNvbiBkYXRhIHdpbGwgYmUKLSAgICAvLyBpbiB0aGUgZGF0YWJhc2UgaW4gY2Fz
ZSB0aGVyZSdzIGFuIGFzc29jaWF0ZWQgZmF2aWNvbi4KLSAgICBBU1NFUlRfVFJVRShsb2FkVXJs
U3luYyhodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRoKCIvIikuZGF0YSgpKSk7Ci0KLSAgICB3aGls
ZSAoIWljb25DaGFuZ2VkKQotICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwotCi0g
ICAgQVNTRVJUX1RSVUUoaWNvbkNoYW5nZWQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2RlbCh3ZWJWaWV3KCksICJpY29uLGNoYW5nZWQiLCBvbkljb25DaGFuZ2VkKTsKLQotICAg
IC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIGZhdmljb24gVVJMLgotICAgIEV3a19GYXZp
Y29uX0RhdGFiYXNlKiBmYXZpY29uRGF0YWJhc2UgPSBld2tfY29udGV4dF9mYXZpY29uX2RhdGFi
YXNlX2dldChjb250ZXh0KTsKLSAgICBBU1NFUlRfVFJVRShmYXZpY29uRGF0YWJhc2UpOwotCi0g
ICAgQ1N0cmluZyBleHBlY3RlZEZhdmljb25VUkwgPSBodHRwU2VydmVyLT5nZXRVUkxGb3JQYXRo
KCIvZmF2aWNvbi5pY28iKTsKLSAgICBXS0VpbmFTaGFyZWRTdHJpbmcgaWNvblVSTCA9IGV3a19m
YXZpY29uX2RhdGFiYXNlX2ljb25fdXJsX2dldChmYXZpY29uRGF0YWJhc2UsIGV3a192aWV3X3Vy
bF9nZXQod2ViVmlldygpKSk7Ci0gICAgRVhQRUNUX1NUUkVRKGV4cGVjdGVkRmF2aWNvblVSTC5k
YXRhKCksIGljb25VUkwpOwotCi0gICAgY29uc3QgY2hhciogdmlld0ljb25VUkwgPSBld2tfdmll
d19pY29uX3VybF9nZXQod2ViVmlldygpKTsKLSAgICBFWFBFQ1RfU1RSRVEoZXhwZWN0ZWRGYXZp
Y29uVVJMLmRhdGEoKSwgdmlld0ljb25VUkwpOwotfQotCi1zdGF0aWMgdm9pZCBvbkljb25EYXRh
UmVhZHkoY29uc3QgY2hhciogcGFnZV91cmwsIEV2YXNfT2JqZWN0KiBpY29uLCB2b2lkKiBldmVu
dF9pbmZvKQotewotICAgIEV2YXNfT2JqZWN0KiogcmV0dXJuSWNvbiA9IHN0YXRpY19jYXN0PEV2
YXNfT2JqZWN0Kio+KGV2ZW50X2luZm8pOwotICAgIGlmIChpY29uKQotICAgICAgICBldmFzX29i
amVjdF9yZWYoaWNvbik7Ci0gICAgKnJldHVybkljb24gPSBpY29uOwotfQotCiBzdHJ1Y3QgSWNv
blJlcXVlc3REYXRhIHsKICAgICBFdmFzX09iamVjdCogdmlldzsKICAgICBFdmFzX09iamVjdCog
aWNvbjsKQEAgLTEzMiwxMyArODQsMTMgQEAgc3RhdGljIHZvaWQgcmVxdWVzdEZhdmljb25EYXRh
KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCosIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBJ
Y29uUmVxdWVzdERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxJY29uUmVxdWVzdERhdGEqPih1c2Vy
RGF0YSk7CiAKLSAgICAvLyBDaGVjayB0aGUgQVBJIHJldHJpZXZpbmcgYSB2YWxpZCBmYXZpY29u
LgorICAgIC8vIENoZWNrIHRoZSBBUEkgcmV0cmlldmluZyBhIHZhbGlkIGZhdmljb24gZnJvbSBp
Y29uIGRhdGFiYXNlLgogICAgIEV3a19Db250ZXh0KiBjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4
dF9nZXQoZGF0YS0+dmlldyk7CiAgICAgRXdrX0Zhdmljb25fRGF0YWJhc2UqIGZhdmljb25EYXRh
YmFzZSA9IGV3a19jb250ZXh0X2Zhdmljb25fZGF0YWJhc2VfZ2V0KGNvbnRleHQpOwogICAgIEFT
U0VSVF9UUlVFKGZhdmljb25EYXRhYmFzZSk7CiAKICAgICBFdmFzKiBldmFzID0gZXZhc19vYmpl
Y3RfZXZhc19nZXQoZGF0YS0+dmlldyk7Ci0gICAgQVNTRVJUX1RSVUUoZXdrX2Zhdmljb25fZGF0
YWJhc2VfYXN5bmNfaWNvbl9nZXQoZmF2aWNvbkRhdGFiYXNlLCBld2tfdmlld191cmxfZ2V0KGRh
dGEtPnZpZXcpLCBldmFzLCBvbkljb25EYXRhUmVhZHksICZkYXRhLT5pY29uKSk7CisgICAgZGF0
YS0+aWNvbiA9IGV3a19mYXZpY29uX2RhdGFiYXNlX2ljb25fZ2V0KGZhdmljb25EYXRhYmFzZSwg
ZXdrX3ZpZXdfdXJsX2dldChkYXRhLT52aWV3KSwgZXZhcyk7CiB9CiAKIFRFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfZmF2aWNvbl9kYXRhYmFzZV9hc3luY19pY29uX2dldCkKQEAgLTE1MSw3
ICsxMDMsNyBAQCBURVNUX0YoRVdLMlVuaXRUZXN0QmFzZSwgZXdrX2Zhdmljb25fZGF0YWJhc2Vf
YXN5bmNfaWNvbl9nZXQpCiAgICAgZXdrX2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9kaXJlY3Rv
cnlfc2V0KGNvbnRleHQsIDApOwogCiAgICAgSWNvblJlcXVlc3REYXRhIGRhdGEgPSB7IHdlYlZp
ZXcoKSwgMCB9OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCks
ICJpY29uLGNoYW5nZWQiLCByZXF1ZXN0RmF2aWNvbkRhdGEsICZkYXRhKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZmF2aWNvbixjaGFuZ2VkIiwgcmVx
dWVzdEZhdmljb25EYXRhLCAmZGF0YSk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGxvYWQgdGhlIHBh
Z2UgZmlyc3QgdG8gZW5zdXJlIHRoZSBpY29uIGRhdGEgd2lsbCBiZQogICAgIC8vIGluIHRoZSBk
YXRhYmFzZSBpbiBjYXNlIHRoZXJlJ3MgYW4gYXNzb2NpYXRlZCBmYXZpY29uLgpAQCAtMTYxLDEz
ICsxMTMsMjAgQEAgVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19mYXZpY29uX2RhdGFiYXNl
X2FzeW5jX2ljb25fZ2V0KQogICAgICAgICBlY29yZV9tYWluX2xvb3BfaXRlcmF0ZSgpOwogCiAg
ICAgQVNTRVJUX1RSVUUoZGF0YS5pY29uKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19kZWwod2ViVmlldygpLCAiaWNvbixjaGFuZ2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19kZWwod2ViVmlldygpLCAiZmF2aWNvbixjaGFu
Z2VkIiwgcmVxdWVzdEZhdmljb25EYXRhKTsKIAogICAgIC8vIEl0IGlzIGEgMTZ4MTYgZmF2aWNv
bi4KICAgICBpbnQgd2lkdGgsIGhlaWdodDsKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dl
dChkYXRhLmljb24sICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgRVhQRUNUX0VRKDE2LCB3aWR0aCk7
CiAgICAgRVhQRUNUX0VRKDE2LCBoZWlnaHQpOwotCiAgICAgZXZhc19vYmplY3RfdW5yZWYoZGF0
YS5pY29uKTsKKworICAgIC8vIFRlc3QgQVBJIHRvIHJlcXVlc3QgZmF2aWNvbiBmcm9tIHRoZSB2
aWV3CisgICAgRXZhc19PYmplY3QqIGZhdmljb24gPSBld2tfdmlld19mYXZpY29uX2dldCh3ZWJW
aWV3KCkpOworICAgIEFTU0VSVF9UUlVFKGZhdmljb24pOworICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3NpemVfZ2V0KGZhdmljb24sICZ3aWR0aCwgJmhlaWdodCk7CisgICAgRVhQRUNUX0VRKDE2LCB3
aWR0aCk7CisgICAgRVhQRUNUX0VRKDE2LCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3VucmVm
KGZhdmljb24pOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdl
TG9nCmluZGV4IGE0ZTM2MDEuLjA5MGM5OTUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0wMSAgQ2hyaXN0
b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW0VGTF1b
V0syXSBSZWZhY3RvciBFd2tfRmF2aWNvbiBjb2RlIGFuZCBzdG9wIHJlbHlpbmcgb24gaW50ZXJu
YWwgQysrIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA4NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVXBkYXRlIEVGTCdzIE1pbmlCcm93c2VyIHRvIG1ha2UgdXNlIG9mIG5ldyBFd2tfRmF2aWNv
biBBUEkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9lZmwvbWFpbi5jOgorICAgICAgICAodXBk
YXRlX3ZpZXdfZmF2aWNvbik6CisgICAgICAgIChvbl92aWV3X2Zhdmljb25fY2hhbmdlZCk6Cisg
ICAgICAgICh3aW5kb3dfY3JlYXRlKToKKwogMjAxMy0wMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5p
d2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgbmV3LWNvbW1pdC1ib3QgdG8gV0tSIHRv
IGRpc2FtYmlndWF0ZSBpdCBmcm9tIGNvbW1pdC1xdWV1ZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL01p
bmlCcm93c2VyL2VmbC9tYWluLmMgYi9Ub29scy9NaW5pQnJvd3Nlci9lZmwvbWFpbi5jCmluZGV4
IDdiY2E5NTMuLmNlODE2ZWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2VmbC9tYWlu
LmMKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZWZsL21haW4uYwpAQCAtNTM5LDEyICs1MzksOCBA
QCBvbl9kb3dubG9hZF9mYWlsZWQodm9pZCAqdXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3Zp
ZXcsIHZvaWQgKmV2ZW50X2luZm8pCiB9CiAKIHN0YXRpYyB2b2lkCi1vbl9mYXZpY29uX3JlY2Vp
dmVkKGNvbnN0IGNoYXIgKnBhZ2VfdXJsLCBFdmFzX09iamVjdCAqaWNvbiwgdm9pZCAqZXZlbnRf
aW5mbykKK3VwZGF0ZV92aWV3X2Zhdmljb24oQnJvd3Nlcl9XaW5kb3cgKndpbmRvdywgRXZhc19P
YmplY3QgKmljb24pCiB7Ci0gICAgQnJvd3Nlcl9XaW5kb3cgKndpbmRvdyA9IChCcm93c2VyX1dp
bmRvdyAqKWV2ZW50X2luZm87Ci0gICAgaWYgKHN0cmNtcChwYWdlX3VybCwgZXdrX3ZpZXdfdXJs
X2dldCh3aW5kb3ctPmV3a192aWV3KSkpCi0gICAgICAgIHJldHVybjsKLQogICAgIC8qIFJlbW92
ZSBwcmV2aW91cyBpY29uIGZyb20gVVJMIGJhciAqLwogICAgIEV2YXNfT2JqZWN0ICpvbGRfaWNv
biA9IGVsbV9vYmplY3RfcGFydF9jb250ZW50X3Vuc2V0KHdpbmRvdy0+dXJsX2JhciwgImljb24i
KTsKICAgICBpZiAob2xkX2ljb24pIHsKQEAgLTU2NSwxNiArNTYxLDE1IEBAIG9uX2Zhdmljb25f
cmVjZWl2ZWQoY29uc3QgY2hhciAqcGFnZV91cmwsIEV2YXNfT2JqZWN0ICppY29uLCB2b2lkICpl
dmVudF9pbmZvKQogfQogCiBzdGF0aWMgdm9pZAotb25fdmlld19pY29uX2NoYW5nZWQodm9pZCAq
dXNlcl9kYXRhLCBFdmFzX09iamVjdCAqZXdrX3ZpZXcsIHZvaWQgKmV2ZW50X2luZm8pCitvbl92
aWV3X2Zhdmljb25fY2hhbmdlZCh2b2lkICp1c2VyX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tfdmll
dywgdm9pZCAqZXZlbnRfaW5mbykKIHsKICAgICBCcm93c2VyX1dpbmRvdyAqd2luZG93ID0gKEJy
b3dzZXJfV2luZG93ICopdXNlcl9kYXRhOwotICAgIC8qIFJldHJpZXZlIHRoZSB2aWV3J3MgZmF2
aWNvbiAqLwotICAgIEV3a19Db250ZXh0ICpjb250ZXh0ID0gZXdrX3ZpZXdfY29udGV4dF9nZXQo
ZXdrX3ZpZXcpOwotICAgIEV3a19GYXZpY29uX0RhdGFiYXNlICppY29uX2RhdGFiYXNlID0gZXdr
X2NvbnRleHRfZmF2aWNvbl9kYXRhYmFzZV9nZXQoY29udGV4dCk7CiAKLSAgICBjb25zdCBjaGFy
ICpwYWdlX3VybCA9IGV3a192aWV3X3VybF9nZXQoZXdrX3ZpZXcpOwotICAgIEV2YXMgKmV2YXMg
PSBldmFzX29iamVjdF9ldmFzX2dldChld2tfdmlldyk7Ci0gICAgZXdrX2Zhdmljb25fZGF0YWJh
c2VfYXN5bmNfaWNvbl9nZXQoaWNvbl9kYXRhYmFzZSwgcGFnZV91cmwsIGV2YXMsIG9uX2Zhdmlj
b25fcmVjZWl2ZWQsIHdpbmRvdyk7CisgICAgRXZhc19PYmplY3QqIGZhdmljb24gPSBld2tfdmll
d19mYXZpY29uX2dldChld2tfdmlldyk7CisgICAgdXBkYXRlX3ZpZXdfZmF2aWNvbih3aW5kb3cs
IGZhdmljb24pOworCisgICAgaWYgKGZhdmljb24pCisgICAgICAgIGV2YXNfb2JqZWN0X3VucmVm
KGZhdmljb24pOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMjE4LDcgKzEyMTMsNyBAQCBzdGF0aWMg
QnJvd3Nlcl9XaW5kb3cgKndpbmRvd19jcmVhdGUoRXZhc19PYmplY3QgKm9wZW5lciwgY29uc3Qg
Y2hhciAqdXJsLCBpbnQgdwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5k
b3ctPmV3a192aWV3LCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9maW5pc2hlZCwg
d2luZG93KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tf
dmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0LCB3aW5kb3cpOwog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZmls
ZSxjaG9vc2VyLHJlcXVlc3QiLCBvbl9maWxlX2Nob29zZXJfcmVxdWVzdCwgd2luZG93KTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2luZG93LT5ld2tfdmlldywgImljb24s
Y2hhbmdlZCIsIG9uX3ZpZXdfaWNvbl9jaGFuZ2VkLCB3aW5kb3cpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3aW5kb3ctPmV3a192aWV3LCAiZmF2aWNvbixjaGFuZ2VkIiwg
b25fdmlld19mYXZpY29uX2NoYW5nZWQsIHdpbmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJsb2FkLGVycm9yIiwgb25fZXJyb3IsIHdp
bmRvdyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3Zp
ZXcsICJsb2FkLHByb2dyZXNzIiwgb25fcHJvZ3Jlc3MsIHdpbmRvdyk7CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdpbmRvdy0+ZXdrX3ZpZXcsICJ0aXRsZSxjaGFuZ2VkIiwg
b25fdGl0bGVfY2hhbmdlZCwgd2luZG93KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>