<?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>91345</bug_id>
          
          <creation_ts>2012-07-15 07:31:31 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add download client for Ewk_Context</short_desc>
          <delta_ts>2012-07-27 10:25:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          <dependson>91401</dependson>
    
    <dependson>91602</dependson>
    
    <dependson>91639</dependson>
    
    <dependson>92073</dependson>
    
    <dependson>92077</dependson>
          <blocked>61838</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>rakuco</cc>
    
    <cc>sw0524.lee</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>669973</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-15 07:31:31 -0700</bug_when>
    <thetext>We should define a download client and attach it to the Ewk_Context so that we can report information about downloads.

We should also add an API function to Ewk_Context so that the browser can trigger a download.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676596</commentid>
    <comment_count>1</comment_count>
      <attachid>154005</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-24 03:13:31 -0700</bug_when>
    <thetext>Created attachment 154005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676598</commentid>
    <comment_count>2</comment_count>
      <attachid>154006</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-24 03:16:39 -0700</bug_when>
    <thetext>Created attachment 154006
Patch

Regenerate patch with --binary for test PDF.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678412</commentid>
    <comment_count>3</comment_count>
      <attachid>154006</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-07-25 13:44:56 -0700</bug_when>
    <thetext>Comment on attachment 154006
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:150
&gt; +    if (!download)
&gt; +        return;
&gt; +    ewk_download_unref(download);

Nit: how about
  if (download)
      ewk_download_unref(download);

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp:62
&gt; +    String destination = makeString(&quot;file://&quot;, String::fromUTF8(ewk_download_destination_get(download)));

IIRC, makeString() is normally frowned upon: &lt;https://bugs.webkit.org/show_bug.cgi?id=62527#c15&gt;. Is some other code responsible for checking if the destination is valid?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:72
&gt; +        ASSERT(!__ref);

What if you build in Release mode? Is it OK for the de-ref not to happen?

&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download.cpp:45
&gt; +static const char* serverSuggestedFilename = &quot;webkit-downloaded-file&quot;;

Couldn&apos;t this be made as const as testFilePath?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678426</commentid>
    <comment_count>4</comment_count>
      <attachid>154006</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-25 13:54:02 -0700</bug_when>
    <thetext>Comment on attachment 154006
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:150
&gt;&gt; +    ewk_download_unref(download);
&gt; 
&gt; Nit: how about
&gt;   if (download)
&gt;       ewk_download_unref(download);

Sure.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context_download_client.cpp:62
&gt;&gt; +    String destination = makeString(&quot;file://&quot;, String::fromUTF8(ewk_download_destination_get(download)));
&gt; 
&gt; IIRC, makeString() is normally frowned upon: &lt;https://bugs.webkit.org/show_bug.cgi?id=62527#c15&gt;. Is some other code responsible for checking if the destination is valid?

Good to know. Gyuyoung has been pushing me to use makeString() so I followed his advice. I&apos;ll fix it.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:72
&gt;&gt; +        ASSERT(!__ref);
&gt; 
&gt; What if you build in Release mode? Is it OK for the de-ref not to happen?

I&apos;m not sure what you mean. This assertion simply makes sure we are not calling delete on an object that&apos;s still referenced. This would indicate a programming error on our part so I think an assertion is correct here.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/tests/test_ewk2_download.cpp:45
&gt;&gt; +static const char* serverSuggestedFilename = &quot;webkit-downloaded-file&quot;;
&gt; 
&gt; Couldn&apos;t this be made as const as testFilePath?

Could you clarify? if you mean that I should define it as an array instead of a pointer (similarly to testFilePath), then I agree and I&apos;ll fix this.
I don&apos;t really understand the &quot;const&quot; comment since it is already const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678451</commentid>
    <comment_count>5</comment_count>
      <attachid>154440</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-25 14:10:53 -0700</bug_when>
    <thetext>Created attachment 154440
Patch

Take rakuco&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678583</commentid>
    <comment_count>6</comment_count>
      <attachid>154440</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2012-07-25 16:21:06 -0700</bug_when>
    <thetext>Comment on attachment 154440
Patch

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

A few style nits I noticed now. I see that the file names and the URIs are handled as UTF-8. Do you know how that plays out with languages such as Japanese or Korean (I know, if it&apos;s broken here it&apos;s broken in the rest of the API as well)?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:157
&gt; +Eina_Bool ewk_download_destination_set(Ewk_Download *download, const char* destination)

Style nit: &apos;*download&apos; should be &apos;* download&apos;.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:162
&gt; +    eina_stringshare_replace(&amp;download-&gt;destination, destination);

I still wonder whether if some part of this code should check if the destination is a valid path or not.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:167
&gt; +const char *ewk_download_suggested_filename_get(const Ewk_Download *download)

Ditto here.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.h:134
&gt; +EAPI Eina_Bool ewk_download_destination_set(Ewk_Download *download, const char* destination);

s/* destination/*destination/.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678739</commentid>
    <comment_count>7</comment_count>
      <attachid>154440</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-25 19:04:20 -0700</bug_when>
    <thetext>Comment on attachment 154440
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:198
&gt; +    return static_cast&lt;double&gt;(download-&gt;downloaded) / static_cast&lt;double&gt;(contentLength);

Is it enough to use static_cast for one operand ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:203
&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(download, 0);

0 -&gt; 0.0 ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.h:25
&gt; +

Missing file description.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.h:185
&gt; + * @return seconds since the download was started or 0 in case of failure.

ditto.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:30
&gt; + * - &quot;download,new&quot;, Ewk_Download*: reports that a new download has been requested. The client should set the

Wrong alphabetical order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678849</commentid>
    <comment_count>8</comment_count>
      <attachid>154440</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-25 22:11:41 -0700</bug_when>
    <thetext>Comment on attachment 154440
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:162
&gt;&gt; +    eina_stringshare_replace(&amp;download-&gt;destination, destination);
&gt; 
&gt; I still wonder whether if some part of this code should check if the destination is a valid path or not.

I&apos;m not sure what kind of check I can do here really. What will happen is that if the destination path is invalid, we won&apos;t be able to create the file later and the download will fail. Any kind of check I would do here would only be partial because you don&apos;t really know if it&apos;s valid until you try writing to the hard disk (e.g. in case of permission problem).

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:198
&gt;&gt; +    return static_cast&lt;double&gt;(download-&gt;downloaded) / static_cast&lt;double&gt;(contentLength);
&gt; 
&gt; Is it enough to use static_cast for one operand ?

True.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_download.cpp:203
&gt;&gt; +    EINA_SAFETY_ON_NULL_RETURN_VAL(download, 0);
&gt; 
&gt; 0 -&gt; 0.0 ?

This would be against WebKit coding style Gyuyoung :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678850</commentid>
    <comment_count>9</comment_count>
      <attachid>154538</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-25 22:13:02 -0700</bug_when>
    <thetext>Created attachment 154538
Patch

Take Rakuco and Gyuyoung&apos;s feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679599</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 11:49:43 -0700</bug_when>
    <thetext>Kenneth, I know it&apos;s big but can you please find the courage to review this patch? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680064</commentid>
    <comment_count>11</comment_count>
      <attachid>154538</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-26 20:41:33 -0700</bug_when>
    <thetext>Comment on attachment 154538
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_private.h:50
&gt; +void ewk_view_download_new(Evas_Object* ewkView, Ewk_Download*);

Nit : Wrong alphabetical order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680137</commentid>
    <comment_count>12</comment_count>
      <attachid>154846</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 22:51:35 -0700</bug_when>
    <thetext>Created attachment 154846
Patch

Fix nit spotted by Gyuyoung and rebase on master.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680482</commentid>
    <comment_count>13</comment_count>
      <attachid>154846</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-27 05:13:51 -0700</bug_when>
    <thetext>Comment on attachment 154846
Patch

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

&gt; Source/WebKit2/ChangeLog:17
&gt; +        The client application needs to listen for
&gt; +        &quot;download,new&quot; signal on the view and set
&gt; +        the download path for the download in the
&gt; +        callback in order to accept it. If the signal
&gt; +        is ignored or if the download path is not set
&gt; +        the download will fail.

That makes it more of a request then. &quot;download,request&quot; ?

&gt; Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp:285
&gt; +    Ewk_Download* ewkDownload = ewk_download_new(download, m_viewWidget);

ewk_download_request_new ? ewk_download_job_new

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:68
&gt; +    HashMap&lt;uint64_t, Ewk_Download*&gt; downloads;

downloadJobs?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:158
&gt; +    if (download)
&gt; +        ewk_download_unref(download);

why not make these methods accept null pointers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680507</commentid>
    <comment_count>14</comment_count>
      <attachid>154846</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-27 05:58:00 -0700</bug_when>
    <thetext>Comment on attachment 154846
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/PageClientImpl.cpp:285
&gt;&gt; +    Ewk_Download* ewkDownload = ewk_download_new(download, m_viewWidget);
&gt; 
&gt; ewk_download_request_new ? ewk_download_job_new

It is not really a request, except in it initial state, then it&apos;s an ongoing download.
If you prefer Download_Job instead of Download, I don&apos;t mind.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:158
&gt;&gt; +        ewk_download_unref(download);
&gt; 
&gt; why not make these methods accept null pointers?

I think this is would be wrong API usage to call an unref method on NULL pointer. If I&apos;m not mistaken, g_object_unref(NULL) will also cause warnings.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:32
&gt; + * - &quot;download,new&quot;, Ewk_Download*: reports that a new download has been requested. The client should set the

&quot;download,request&quot; is a good idea, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680560</commentid>
    <comment_count>15</comment_count>
      <attachid>154932</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-27 06:41:58 -0700</bug_when>
    <thetext>Created attachment 154932
Patch

Take Kenneth&apos;s feedback into consideration:
- Rename Ewk_Download to Ewk_Download_Job (and all corresponding functions: ewk_download_job_*())
- Rename &quot;download,new&quot; signal to &quot;download,request&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680777</commentid>
    <comment_count>16</comment_count>
      <attachid>154932</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 10:25:06 -0700</bug_when>
    <thetext>Comment on attachment 154932
Patch

Clearing flags on attachment: 154932

Committed r123882: &lt;http://trac.webkit.org/changeset/123882&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680779</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-27 10:25:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154005</attachid>
            <date>2012-07-24 03:13:31 -0700</date>
            <delta_ts>2012-07-24 03:16:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_download_manager.patch</filename>
            <type>text/plain</type>
            <size>56456</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYTUzMTdjLi42MDhlOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEw
IEBACiAyMDEyLTA3LTI0ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLG5l
dyIgc2lnbmFsIG9uIHRoZSB2aWV3IGFuZCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHBhdGgg
Zm9yIHRoZSBkb3dubG9hZCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgaW4gb3JkZXIgdG8gYWNj
ZXB0IGl0LiBJZiB0aGUgc2lnbmFsCisgICAgICAgIGlzIGlnbm9yZWQgb3IgaWYgdGhlIGRvd25s
b2FkIHBhdGggaXMgbm90IHNldAorICAgICAgICB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgorCisg
ICAgICAgIEEgbmV3IEV3a19Eb3dubG9hZCB0eXBlIGlzIGludHJvZHVjZWQgdG8gcHJvdmlkZQor
ICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGRvd25sb2FkIHRvIHRoZSBjbGllbnQK
KyAgICAgICAgYW5kIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCBpdCAoZS5n
LgorICAgICAgICBzZXQgaXRzIGRvd25sb2FkIHBhdGgsIGNhbmNlbCBpdCwgLi4uKS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2FkZCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfcmVtb3ZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvRXdrQ29udGV4dCk6Cisg
ICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgor
ICAgICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChk
aWRDYW5jZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfRG93bmxvYWQp
OgorICAgICAgICAoX0V3a19Eb3dubG9hZDo6X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChfRXdr
X0Rvd25sb2FkOjp+X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChld2tfZG93bmxvYWRfcmVmKToK
KyAgICAgICAgKGV3a19kb3dubG9hZF91bnJlZik6CisgICAgICAgIChld2tfZG93bmxvYWRfaWRf
Z2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF92aWV3X2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfc3RhdGVfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3Nl
dCk6CisgICAgICAgIChld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAg
ICAgIChld2tfZG93bmxvYWRfY2FuY2VsKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3N0YXRlX3NldCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfbmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwOiBBZGQgYSBmdW5jdGlvbiB0bworICAgICAg
ICByZXRyaWV2ZSB0aGUgY29udGVudCBsZW5ndGggb2YgYSBVUkwgcmVzcG9uc2UuCisgICAgICAg
IChld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZCk6
CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGY6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisg
ICAgICAgIHRoZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0
RGF0YSk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKG9uX2Rvd25sb2FkX25ldyk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxs
ZWQpOgorICAgICAgICAob25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisKKzIwMTItMDctMjQgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbRUZM
XVtXSzJdIEZpeCBwb3NzaWJsZSBjcmFzaCBpbiBkaWRTZW5kUmVxdWVzdEZvclJlc291cmNlCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjA3NwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDMxNjAwNmUuLjYzNjA2MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0zOSw4ICszOSwxMCBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9CYXR0ZXJ5UHJvdmlkZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3Rf
bWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5h
Z2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19p
bnRlbnRfc2VydmljZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb24uY3BwCkBAIC0xNzgsNiArMTgwLDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFE
RVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFuYWdlci5oIgorICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
aW50ZW50X3NlcnZpY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5oIgpAQCAtMjM4LDYg
KzI0MSw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJV
bml0VGVzdHNfTElCUkFSSUVTfSkKICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdl
YktpdCAxIHRlc3Qgc3VpdGUuCiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3Rf
ZXdrMl9jb29raWVfbWFuYWdlcgorICAgIHRlc3RfZXdrMl9kb3dubG9hZAogICAgIHRlc3RfZXdr
Ml92aWV3CiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
CmluZGV4IDU5N2NmMjQuLmQyMTY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29r
aWVfbWFuYWdlci5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZC5oIgogI2luY2x1ZGUgImV3a19p
bnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBlNjlmODdkLi42YTU3MTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVu
dEltcGwuY3BwCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMjc2LDQgKzI4MCwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3Vu
dFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAgICBFd2tfRG93bmxv
YWQqIGV3a0Rvd25sb2FkID0gZXdrX2Rvd25sb2FkX25ldyhkb3dubG9hZCwgbV92aWV3V2lkZ2V0
KTsKKyAgICAvLyBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBvbmUgZGVmYXVsdCBjb250ZXh0LCBi
dXQgb25jZSB3ZSBzdXBwb3J0CisgICAgLy8gbXVsdGlwbGUgY29udGV4dHMsIHdlIHdpbGwgbmVl
ZCB0byByZXRyaWV2ZSB0aGUgY29udGV4dCBmcm9tIHRoZQorICAgIC8vIHZpZXcuCisgICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfYWRkKGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCksIGV3a0Rvd25s
b2FkKTsKKyAgICBld2tfZG93bmxvYWRfdW5yZWYoZXdrRG93bmxvYWQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5oCmluZGV4IDQyN2VmNTIuLjdkZmM5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaApAQCAtNzYsNiArNzYs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5k
b3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CisKICAgICB2aXJ0
dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jiwg
Ym9vbCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgZG9uZVdp
dGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFu
ZGxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKaW5kZXggYjg2MDdlNS4uNmQwNTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMjYsOSArMjYsMTIgQEAKICNpbmNs
dWRlICJXS0NvbnRleHRTb3VwLmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRl
ICJXS1N0cmluZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19j
b29raWVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisjaW5j
bHVkZSAiZXdrX2Rvd25sb2FkX3ByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01OCw2ICs2MSw3IEBAIHN0cnVj
dCBfRXdrX0NvbnRleHQgewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICBSZWZQdHI8
QmF0dGVyeVByb3ZpZGVyPiBiYXR0ZXJ5UHJvdmlkZXI7CiAjZW5kaWYKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBFd2tfRG93bmxvYWQqPiBkb3dubG9hZHM7CiAKICAgICBXS1JldGFpblB0cjxXS1Nv
dXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxl
ck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKQEAgLTczLDEyICs3NywxOCBAQCBzdHJ1Y3QgX0V3a19D
b250ZXh0IHsKICNlbmRpZgogCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9j
bGllbnRfYXR0YWNoKHRoaXMpOworICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
YXR0YWNoKHRoaXMpOwogICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQogICAgIHsKICAgICAg
ICAgaWYgKGNvb2tpZU1hbmFnZXIpCiAgICAgICAgICAgICBld2tfY29va2llX21hbmFnZXJfZnJl
ZShjb29raWVNYW5hZ2VyKTsKKworICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxv
YWQqPjo6aXRlcmF0b3IgaXQgPSBkb3dubG9hZHMuYmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDx1
aW50NjRfdCwgRXdrX0Rvd25sb2FkKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2Fkcy5lbmQoKTsK
KyAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfZG93bmxv
YWRfdW5yZWYoaXQtPnNlY29uZCk7CiAgICAgfQogfTsKIApAQCAtOTksNiArMTA5LDQ4IEBAIFdL
Q29udGV4dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBl
d2tDb250ZXh0KQogCiAvKioKICAqIEBpbnRlcm5hbAorICogUmVnaXN0ZXJzIHRoYXQgYSBuZXcg
ZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLgorICovCit2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rvd25sb2FkKiBld2tEb3dubG9h
ZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9hZCk7CisKKyAgICB1aW50NjRfdCBk
b3dubG9hZElkID0gZXdrX2Rvd25sb2FkX2lkX2dldChld2tEb3dubG9hZCk7CisgICAgaWYgKGV3
a0NvbnRleHQtPmRvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElkKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXdrX2Rvd25sb2FkX3JlZihld2tEb3dubG9hZCk7CisgICAgZXdrQ29udGV4dC0+
ZG93bmxvYWRzLmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBSZXR1cm5zIHRoZSAjRXdrX0Rvd25sb2FkIHdpdGggdGhlIGdpdmVuIEBhIGRv
d25sb2FkSWQsIG9yCisgKiBAYyAwIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRXdrX0Rvd25s
b2FkKiBld2tfY29udGV4dF9kb3dubG9hZF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRl
eHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJuIGV3a0NvbnRleHQtPmRvd25sb2Fk
cy5nZXQoZG93bmxvYWRJZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZW1vdmVzIHRo
ZSAjRXdrX0Rvd25sb2FkIHdpdGggdGhlIGdpdmVuIEBhIGRvd25sb2FkSWQgZnJvbSB0aGUgaW50
ZXJuYWwKKyAqIEhhc2hNYXAuCisgKi8KK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3Zl
KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCB1aW50NjRfdCBkb3dubG9hZElkKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworICAgIEV3a19Eb3dubG9hZCog
ZG93bmxvYWQgPSBld2tDb250ZXh0LT5kb3dubG9hZHMudGFrZShkb3dubG9hZElkKTsKKyAgICBp
ZiAoIWRvd25sb2FkKQorICAgICAgICByZXR1cm47CisgICAgZXdrX2Rvd25sb2FkX3VucmVmKGRv
d25sb2FkKTsKK30KKworLyoqCiAgKiBSZXRyaWV2ZSB0aGUgcmVxdWVzdCBtYW5hZ2VyIGZvciBA
YSBld2tDb250ZXh0LgogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNjOGM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dlYl9lcnJv
ci5oIgorI2luY2x1ZGUgImV3a193ZWJfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGlubGluZSBFd2tfQ29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19Db250ZXh0Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYg
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092
ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9h
ZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwg
dG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBXZSBz
ZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2Ug
aGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKKyAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxl
IG5hbWUuCisgICAgZXdrX3ZpZXdfZG93bmxvYWRfbmV3KGV3a19kb3dubG9hZF92aWV3X2dldChk
b3dubG9hZCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBk
ZXN0aW9uYXRpb24gdG8gYmUgYSBVUkkuCisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gbWFrZVN0
cmluZygiZmlsZTovLyIsIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9u
X2dldChkb3dubG9hZCkpKTsKKworICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VS
TFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAg
ICBBU1NFUlQoZG93bmxvYWQpOworICAgIEV3a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlID0gZXdr
X3VybF9yZXNwb25zZV9uZXcodG9JbXBsKHdrUmVzcG9uc2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkp
OworICAgIGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQoZG93bmxvYWQsIHJlc3BvbnNlKTsKKyAg
ICBld2tfdXJsX3Jlc3BvbnNlX3VucmVmKHJlc3BvbnNlKTsKK30KKworc3RhdGljIHZvaWQgZGlk
Q3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IFdLU3RyaW5nUmVmIHBhdGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rv
d25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0NvbnRleHQo
Y2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBBU1NF
UlQoZG93bmxvYWQpOworCisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5HKTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2
ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIHVpbnQ2NF90IGxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRvd25s
b2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7
CisgICAgZXdrX2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoZG93bmxvYWQsIGxlbmd0aCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxv
YWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgdWlu
dDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOworICAg
IEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOwor
CisgICAgRXdrX1dlYl9FcnJvciogZXdrRXJyb3IgPSBld2tfd2ViX2Vycm9yX25ldyhlcnJvcik7
CisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX1NUQVRF
X0ZBSUxFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfZmFpbGVkKGV3a19kb3dubG9hZF92aWV3
X2dldChkb3dubG9hZCksIGRvd25sb2FkLCBld2tFcnJvcik7CisgICAgZXdrX3dlYl9lcnJvcl9m
cmVlKGV3a0Vycm9yKTsKKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9yZW1vdmUodG9Fd2tDb250
ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ2FuY2Vs
KFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQoreworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRf
ZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAg
QVNTRVJUKGRvd25sb2FkKTsKKworICAgIGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoZG93bmxvYWQs
IEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2Nh
bmNlbGxlZChld2tfZG93bmxvYWRfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAg
ZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93
bmxvYWRJZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50
NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisK
KyAgICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVf
RklOSVNIRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKGV3a19kb3dubG9hZF92
aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9y
ZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKK30KKwordm9pZCBl
d2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0
KQoreworICAgIFdLQ29udGV4dERvd25sb2FkQ2xpZW50IHdrRG93bmxvYWRDbGllbnQ7CisgICAg
bWVtc2V0KCZ3a0Rvd25sb2FkQ2xpZW50LCAwLCBzaXplb2YoV0tDb250ZXh0RG93bmxvYWRDbGll
bnQpKTsKKworICAgIHdrRG93bmxvYWRDbGllbnQudmVyc2lvbiA9IGtXS0NvbnRleHREb3dubG9h
ZENsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIHdrRG93bmxvYWRDbGllbnQuY2xpZW50SW5mbyA9
IGV3a0NvbnRleHQ7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRDYW5jZWwgPSBkaWRDYW5jZWw7
CisgICAgd2tEb3dubG9hZENsaWVudC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSA9IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOworICAgIHdrRG93
bmxvYWRDbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBkaWRDcmVhdGVEZXN0aW5hdGlvbjsK
KyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IGRpZFJlY2VpdmVSZXNw
b25zZTsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZFJlY2VpdmVEYXRhID0gZGlkUmVjZWl2ZURh
dGE7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRGYWlsID0gZGlkRmFpbDsKKyAgICB3a0Rvd25s
b2FkQ2xpZW50LmRpZEZpbmlzaCA9IGRpZEZpbmlzaDsKKworICAgIFdLQ29udGV4dFNldERvd25s
b2FkQ2xpZW50KGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksICZ3a0Rvd25s
b2FkQ2xpZW50KTsKK30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAxN2E4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
ZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gKKyNk
ZWZpbmUgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaAorCit0eXBlZGVmIHN0
cnVjdCBfRXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7CisKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCopOworCisjZW5kaWYgLy8gZXdrX2NvbnRleHRf
ZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGQ3OGUxZTkuLjdjYTNh
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9wcml2YXRlLmgKQEAgLTIzLDEwICsyMywxNSBAQAogI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWQgRXdrX0Rvd25sb2FkOwogdHlwZWRlZiBzdHJ1Y3Qg
X0V3a19VcmxfU2NoZW1lX1JlcXVlc3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKIAogV0tDb250
ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKIFdL
U291cFJlcXVlc3RNYW5hZ2VyUmVmIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29u
c3QgRXdrX0NvbnRleHQqKTsKIHZvaWQgZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZXF1ZXN0X3Jl
Y2VpdmVkKEV3a19Db250ZXh0KiwgRXdrX1VybF9TY2hlbWVfUmVxdWVzdCopOwogCit2b2lkIGV3
a19jb250ZXh0X2Rvd25sb2FkX2FkZChFd2tfQ29udGV4dCosIEV3a19Eb3dubG9hZCopOworRXdr
X0Rvd25sb2FkKiBld2tfY29udGV4dF9kb3dubG9hZF9nZXQoY29uc3QgRXdrX0NvbnRleHQqLCB1
aW50NjRfdCBkb3dubG9hZElkKTsKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3ZlKEV3
a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7CisKICNlbmRpZiAvLyBld2tfY29udGV4
dF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzI5YTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisKKyNpbmNsdWRlICJE
b3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tSZXRh
aW5QdHIuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX2Rvd25s
b2FkX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPEVjb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogXHN0
cnVjdCAgX0V3a19Eb3dubG9hZAorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIGRvd25sb2FkIGRh
dGEuCisgKi8KK3N0cnVjdCBfRXdrX0Rvd25sb2FkIHsKKyAgICB1bnNpZ25lZCBpbnQgX19yZWY7
IC8qKjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgRG93bmxvYWRQ
cm94eSogZG93bmxvYWRQcm94eTsKKyAgICBFdmFzX09iamVjdCogdmlldzsKKyAgICBFd2tfRG93
bmxvYWRfU3RhdGUgc3RhdGU7CisgICAgRXdrX1VybF9SZXF1ZXN0KiByZXF1ZXN0OworICAgIEV3
a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlOworICAgIGRvdWJsZSBzdGFydFRpbWU7CisgICAgZG91
YmxlIGVuZFRpbWU7CisgICAgdWludDY0X3QgZG93bmxvYWRlZDsgLyoqPCBsZW5ndGggYWxyZWFk
eSBkb3dubG9hZGVkICovCisgICAgY29uc3QgY2hhciogZGVzdGluYXRpb247CisgICAgY29uc3Qg
Y2hhciogc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICBfRXdrX0Rvd25sb2FkKERvd25sb2FkUHJv
eHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKKyAgICAgICAgOiBfX3JlZigxKQor
ICAgICAgICAsIGRvd25sb2FkUHJveHkoZG93bmxvYWQpCisgICAgICAgICwgdmlldyhld2tWaWV3
KQorICAgICAgICAsIHN0YXRlKEVXS19ET1dOTE9BRF9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAg
ICAgLCByZXF1ZXN0KDApCisgICAgICAgICwgcmVzcG9uc2UoMCkKKyAgICAgICAgLCBzdGFydFRp
bWUoLTEpCisgICAgICAgICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisg
ICAgICAgICwgZGVzdGluYXRpb24oMCkKKyAgICAgICAgLCBzdWdnZXN0ZWRGaWxlbmFtZSgwKQor
ICAgIHsgfQorCisgICAgfl9Fd2tfRG93bmxvYWQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFf
X3JlZik7CisgICAgICAgIGlmIChyZXF1ZXN0KQorICAgICAgICAgICAgZXdrX3VybF9yZXF1ZXN0
X3VucmVmKHJlcXVlc3QpOworICAgICAgICBpZiAocmVzcG9uc2UpCisgICAgICAgICAgICBld2tf
dXJsX3Jlc3BvbnNlX3VucmVmKHJlc3BvbnNlKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwoZGVzdGluYXRpb24pOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdWdnZXN0ZWRG
aWxlbmFtZSk7CisgICAgfQorfTsKKwordm9pZCBld2tfZG93bmxvYWRfcmVmKEV3a19Eb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQp
OworCisgICAgKytkb3dubG9hZC0+X19yZWY7Cit9CisKK3ZvaWQgZXdrX2Rvd25sb2FkX3VucmVm
KEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oZG93bmxvYWQpOworCisgICAgaWYgKC0tZG93bmxvYWQtPl9fcmVmKQorICAgICAgICByZXR1
cm47CisKKyAgICBkZWxldGUgZG93bmxvYWQ7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBR
dWVyaWVzIHRoZSBpZGVudGlmaWVyIGZvciB0aGlzIGRvd25sb2FkCisgKi8KK3VpbnQ2NF90IGV3
a19kb3dubG9hZF9pZF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7CisKKyAg
ICByZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKTsKK30KKworLyoq
CisgKiBAaW50ZXJuYWwKKyAqIFJldHVybnMgdGhlIHZpZXcgdGhpcyBkb3dubG9hZCBpcyBhdHRh
Y2hlZCB0by4KKyAqIFRoZSB2aWV3IGlzIG5lZWRlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBzaWdu
YWxzLgorICovCitFdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGNvbnN0IEV3a19E
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGRvd25sb2FkLCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+dmlldzsKK30KKworRXdrX0Rv
d25sb2FkX1N0YXRlIGV3a19kb3dubG9hZF9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQs
IEVXS19ET1dOTE9BRF9TVEFURV9VTktOT1dOKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+c3Rh
dGU7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogZXdrX2Rvd25sb2FkX3JlcXVlc3RfZ2V0KGNvbnN0
IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIGlmICghZG93bmxvYWQtPnJlcXVlc3QpIHsKKyAg
ICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFBy
b3h5LCAwKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1VSTFJlcXVl
c3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6Y3JlYXRlKGRvd25sb2FkLT5kb3dubG9h
ZFByb3h5LT5yZXF1ZXN0KCkpLmxlYWtSZWYoKSkpOworICAgICAgICBjb25zdF9jYXN0PEV3a19E
b3dubG9hZCo+KGRvd25sb2FkKS0+cmVxdWVzdCA9IGV3a191cmxfcmVxdWVzdF9uZXcod2tVUkxS
ZXF1ZXN0LmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnJlcXVlc3Q7Cit9
CisKK0V3a19VcmxfUmVzcG9uc2UqIGV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXNwb25zZTsKK30KKwor
Y29uc3QgY2hhciogZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
bG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPmRlc3RpbmF0aW9uOworfQorCitFaW5h
X0Jvb2wgZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWQgKmRvd25sb2Fk
LCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKKworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmZG93bmxvYWQtPmRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQo
Y29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5zdWdnZXN0
ZWRGaWxlbmFtZTsKK30KKworRWluYV9Cb29sIGV3a19kb3dubG9hZF9jYW5jZWwoRXdrX0Rvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxv
YWQtPmRvd25sb2FkUHJveHksIGZhbHNlKTsKKworICAgIGlmIChkb3dubG9hZC0+c3RhdGUgIT0g
RVdLX0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5HKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkb3dubG9hZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTElORzsKKyAg
ICBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2RvdWJsZSBld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBFd2tf
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZCwgMCk7CisKKyAgICBpZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGggPSBld2tf
dXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2UpOworICAg
IGlmICghY29udGVudExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGNvbnRlbnRMZW5ndGgpOworfQorCitkb3VibGUgZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGlt
ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgLy8gRG93bmxvYWQgaGFzIG5v
dCBzdGFydGVkIHlldC4KKyAgICBpZiAoZG93bmxvYWQtPnN0YXJ0VGltZSA8IDApCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gRG93bmxvYWQgaGFkIGVuZGVkLCByZXR1cm4gdGhlIHRpbWUg
ZWxhcHNlZCBiZXR3ZWVuIHRoZQorICAgIC8vIGRvd25sb2FkIHN0YXJ0IGFuZCB0aGUgZW5kIGV2
ZW50LgorICAgIGlmIChkb3dubG9hZC0+ZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gZG93
bmxvYWQtPmVuZFRpbWUgLSBkb3dubG9hZC0+c3RhcnRUaW1lOworCisgICAgLy8gRG93bmxvYWQg
aXMgc3RpbGwgZ29pbmcuCisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBkb3dubG9hZC0+
c3RhcnRUaW1lOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogU2V0cyB0aGUgVVJMIEBhIHJl
c3BvbnNlIGZvciB0aGlzIEBhIGRvd25sb2FkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9yZXNw
b25zZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgRXdrX1VybF9SZXNwb25zZSogcmVzcG9u
c2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlc3BvbnNlKTsKKworICAgIGV3a191cmxfcmVzcG9u
c2VfcmVmKHJlc3BvbnNlKTsKKyAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNldHMgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUgZm9y
IHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxl
bmFtZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmls
ZW5hbWUpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisg
ICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWUs
IHN1Z2dlc3RlZEZpbGVuYW1lKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydCBh
IGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KKyAqLwordm9pZCBld2tfZG93bmxv
YWRfcmVjZWl2ZWRfZGF0YShFd2tfRG93bmxvYWQqIGRvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisgICAgZG93
bmxvYWQtPmRvd25sb2FkZWQgKz0gbGVuZ3RoOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
U2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9z
dGF0ZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgRXdrX0Rvd25sb2FkX1N0YXRlIHN0YXRl
KQoreworICAgIGRvd25sb2FkLT5zdGF0ZSA9IHN0YXRlOworCisgICAgLy8gVXBkYXRlIHN0YXJ0
IHRpbWUgaWYgdGhlIGRvd25sb2FkIGhhcyBzdGFydGVkCisgICAgaWYgKHN0YXRlID09IEVXS19E
T1dOTE9BRF9TVEFURV9ET1dOTE9BRElORykKKyAgICAgICAgZG93bmxvYWQtPnN0YXJ0VGltZSA9
IGVjb3JlX3RpbWVfZ2V0KCk7CisKKyAgICAvLyBVcGRhdGUgZW5kIHRpbWUgaWYgdGhlIGRvd25s
b2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkKKyAgICBpZiAoc3RhdGUgPT0g
RVdLX0RPV05MT0FEX1NUQVRFX0ZBSUxFRAorICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxP
QURfU1RBVEVfQ0FOQ0VMTEVECisgICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9TVEFU
RV9GSU5JU0hFRCkKKyAgICAgICAgZG93bmxvYWQtPmVuZFRpbWUgPSBlY29yZV90aW1lX2dldCgp
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29uc3RydWN0cyBhIEV3a19Eb3dubG9hZCBm
cm9tIGEgRG93bmxvYWRQcm94eS4KKyAqLworRXdrX0Rvd25sb2FkKiBld2tfZG93bmxvYWRfbmV3
KERvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tWaWV3LCAwKTsKKworICAgIHJldHVybiBuZXcgX0V3
a19Eb3dubG9hZChkb3dubG9hZCwgZXdrVmlldyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY3ZmJlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBld2tfZG93bmxvYWRfaAorI2RlZmluZSBld2tfZG93bmxvYWRf
aAorCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNw
b25zZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19Eb3dubG9h
ZCAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CisKKy8vLyBE
ZWZpbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9hZC4KK2VudW0gX0V3a19Eb3du
bG9hZF9TdGF0ZSB7CisgICAgLy8vIFRoZSBkb3dubG9hZCBzdGF0ZSBpcyB1bmtub3duCisgICAg
RVdLX0RPV05MT0FEX1NUQVRFX1VOS05PV04gPSAtMSwKKyAgICAvLy8gVGhlIGRvd25sb2FkIGhh
cyBub3Qgc3RhcnRlZCB5ZXQKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfTk9UX1NUQVJURUQsCisg
ICAgLy8vIFRoZSBkb3dubG9hZCBoYXMgc3RhcnRlZAorICAgIEVXS19ET1dOTE9BRF9TVEFURV9E
T1dOTE9BRElORywKKyAgICAvLy8gVGhlIGRvd25sb2FkIHN0b3BwZWQgYmVjYXVzZSBvZiBhIGZh
aWx1cmUKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfRkFJTEVELAorICAgIC8vLyBUaGUgZG93bmxv
YWQgaXMgYmVpbmcgY2FuY2VsbGVkCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0NBTkNFTExJTkcs
CisgICAgLy8vIFRoZSBkb3dubG9hZCBzdG9wcGVkIGJlY2F1c2UgaXQgd2FzIGNhbmNlbGxlZAor
ICAgIEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBj
b21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIEVXS19ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAor
fTsKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBfRXdrX0Rvd25sb2FkX1N0YXRlLgor
dHlwZWRlZiBlbnVtIF9Fd2tfRG93bmxvYWRfU3RhdGUgRXdrX0Rvd25sb2FkX1N0YXRlOworCisv
KioKKyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3Qu
CisgKgorICogQHBhcmFtIGRvd25sb2FkIHRoZSBkb3dubG9hZCBvYmplY3QgdG8gaW5jcmVhc2Ug
dGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Rvd25sb2FkX3JlZihFd2tf
RG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBj
b3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdo
ZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBkb3dubG9hZCBpcyBmcmVlZC4K
KyAqCisgKiBAcGFyYW0gZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVjdCB0byBkZWNyZWFzZSB0
aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93bmxvYWRfdW5yZWYoRXdr
X0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIHN0YXRlIGZvciB0aGlz
IGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQgdG8gcXVl
cnkuCisgKgorICogQHJldHVybiB0aGUgZG93bmxvYWQgc3RhdGUuCisgKi8KK0VBUEkgRXdrX0Rv
d25sb2FkX1N0YXRlIGV3a19kb3dubG9hZF9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpk
b3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSTCByZXF1ZXN0IGZvciB0aGlzIGRvd25s
b2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQgdG8gcXVlcnkuCisg
KgorICogQHJldHVybiB0aGUgI0V3a19VcmxfUmVxdWVzdCBmb3IgdGhpcyBkb3dubG9hZC4KKyAq
LworRUFQSSBFd2tfVXJsX1JlcXVlc3QgKmV3a19kb3dubG9hZF9yZXF1ZXN0X2dldChjb25zdCBF
d2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgVVJMIHJlc3BvbnNl
IGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxv
YWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiB0aGUgI0V3a19VcmxfUmVzcG9uc2UgZm9yIHRo
aXMgZG93bmxvYWQgb3IgQGMgTlVMTCBpZiBpdCB3YXMgbm90IHJlY2VpdmVkIHlldC4KKyAqLwor
RUFQSSBFd2tfVXJsX1Jlc3BvbnNlICpld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBVUkkgdG8gd2hpY2gg
dGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uCisgKgorICogQHBhcmFtIGRvd25s
b2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRoZSBkZXN0aW5h
dGlvbiBwb2ludGVyLCB0aGF0IG1heSBiZSBAYyBOVUxMLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAg
ICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3Nz
aWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisg
KiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3No
YXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIg
KmV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9h
ZCk7CisKKy8qKgorICogU2V0cyB0aGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhpcyBkb3dubG9h
ZC4KKyAqCisgKiBTZXRzIHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZpbGUgd2ls
bCBiZSB3cml0dGVuLgorICoKKyAqIFRoaXMgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZv
cmUgdGhlIGRvd25sb2FkIHRyYW5zZmVyCisgKiBzdGFydHMsIGJ5IGNvbm5lY3RpbmcgdG8gdGhl
ICJkb3dubG9hZCxuZXciIHNpZ25hbCBvbiB0aGUKKyAqIEV3a19WaWV3IGFuZCBzZXR0aW5nIHRo
ZSBkZXN0aW5hdGlvbiBpbiB0aGUgY2FsbGJhY2suIFRvIHNldAorICogdGhlIGRlc3RpbmF0aW9u
IHVzaW5nIHRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYnkgdGhlIHNlcnZlcgorICogdXNlIGV3a19k
b3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KCkuCisgKgorICogQHBhcmFtIGRvd25sb2Fk
ICNFd2tfRG93bmxvYWQgdG8gdXBkYXRlLgorICogQHBhcmFtIGRlc3RpbmF0aW9uIHRoZSBkZXN0
aW5hdGlvbiBwYXRoLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHN1Y2Nlc3NmdWws
IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX2Rvd25sb2FkX3N1Z2dl
c3RlZF9maWxlbmFtZV9nZXQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2Rlc3Rp
bmF0aW9uX3NldChFd2tfRG93bmxvYWQgKmRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlv
bik7CisKKy8qKgorICogUXVlcmllcyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBk
b3dubG9hZC4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZnVsIHRvIHVzZSB0aGUgdmFsdWUgcmV0dXJu
ZWQgYnkgdGhpcyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QKKyAqIHRoZSBkZXN0aW5hdGlvbiBwYXRo
IHRvIHBhc3MgdG8gZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldCgpLgorICoKKyAqIEBwYXJh
bSBkb3dubG9hZCAjRXdrX0Rvd25sb2FkIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gVGhlIHN1
Z2dlc3RlZCBmaWxlIG5hbWUgZm9yIHRoaXMgZG93bmxvYWQuIFRoaXMgcG9pbnRlciBpcworICog
ICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBv
c3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UK
KyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5n
c2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKgorICogQHNlZSBld2tfZG93
bmxvYWRfZGVzdGluYXRpb25fc2V0CisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2Rvd25sb2Fk
X3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisK
Ky8qKgorICogQ2FuY2VscyB0aGUgZG93bmxvYWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogV2hl
biB0aGUgb25nb2luZyBkb3dubG9hZCBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVk
IGEgImRvd25sb2FkLGNhbmNlbGxlZCIKKyAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gdGhl
IHZpZXcuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBjYW5jZWwu
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIGNhbmNlbGxhdGlvbiByZXF1ZXN0
IHdhcyB0YWtlbiBpbnRvIGFjY291bnQsIG9yCisgKiAgICAgICAgIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRfY2FuY2VsKEV3a19Eb3du
bG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBlc3RpbWF0ZWQgcHJvZ3Jlc3Mg
Zm9yIHRoaXMgZG93bmxvYWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9h
ZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBvZiB0aGUgcGVy
Y2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAgICAgICBhcyBhIHJhbmdlIGZyb20g
MC4wIHRvIDEuMC4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2FkX2VzdGltYXRlZF9wcm9n
cmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogR2V0cyB0
aGUgZWxhcHNlZCB0aW1lIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbCBwYXJ0
LgorICoKKyAqIElmIHRoZSBkb3dubG9hZCBmaW5pc2hlZCwgaGFkIGFuIGVycm9yIG9yIHdhcyBj
YW5jZWxsZWQgdGhpcyBpcworICogdGhlIHRpbWUgYmV0d2VlbiBpdHMgc3RhcnQgYW5kIHRoZSBl
dmVudC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkCisgKgorICogQHJl
dHVybiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9hZCB3YXMgc3RhcnRlZCBvciAwIGluIGNhc2Ug
b2YgZmFpbHVyZS4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9n
ZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfZG93bmxvYWRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX3ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9wcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3ZmYxZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9wcml2YXRlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZG93bmxv
YWRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19kb3dubG9hZF9wcml2YXRlX2gKKworI2luY2x1ZGUg
IldLQmFzZS5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZC5oIgorI2luY2x1ZGUgPEV2YXMuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfUmVzcG9uc2UgRXdrX1VybF9SZXNwb25zZTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfV2ViX0Vycm9yIEV3a19XZWJfRXJyb3I7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgRG93bmxvYWRQcm94eTsKK30KKworRXdrX0Rvd25sb2FkKiBld2tfZG93
bmxvYWRfbmV3KFdlYktpdDo6RG93bmxvYWRQcm94eSosIEV2YXNfT2JqZWN0KiBld2tWaWV3KTsK
K3VpbnQ2NF90IGV3a19kb3dubG9hZF9pZF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKik7CitFdmFz
X09iamVjdCogZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCopOworCit2
b2lkIGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkKiwgRXdrX0Rvd25sb2FkX1N0
YXRlKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX2NhbmNlbGxlZChFd2tfRG93bmxvYWQqKTsKK3ZvaWQg
ZXdrX2Rvd25sb2FkX2ZhaWxlZChFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX2Zp
bmlzaGVkKEV3a19Eb3dubG9hZCopOwordm9pZCBld2tfZG93bmxvYWRfc3RhcnRlZChFd2tfRG93
bmxvYWQqKTsKKwordm9pZCBld2tfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShFd2tfRG93bmxvYWQq
LCB1aW50NjRfdCBsZW5ndGgpOwordm9pZCBld2tfZG93bmxvYWRfcmVzcG9uc2Vfc2V0KEV3a19E
b3dubG9hZCosIEV3a19VcmxfUmVzcG9uc2UqKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX3N1Z2dlc3Rl
ZF9maWxlbmFtZV9zZXQoRXdrX0Rvd25sb2FkKiwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5h
bWUpOworCisjZW5kaWYgLy8gZXdrX2Rvd25sb2FkX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAppbmRleCAx
Mzc3NTNkLi44ZjlmNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcApAQCAtOTgsNiArOTgsMTMgQEAgY29uc3QgY2hh
ciogZXdrX3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2Uq
IHJlc3BvbnNlKQogICAgIHJldHVybiByZXNwb25zZS0+bWltZVR5cGU7CiB9CiAKK3Vuc2lnbmVk
IGxvbmcgZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoY29uc3QgRXdrX1VybF9S
ZXNwb25zZSogcmVzcG9uc2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHJlc3BvbnNlLCAwKTsKKworICAgIHJldHVybiByZXNwb25zZS0+Y29yZVJlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCgpOworfQorCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0
cyBhIEV3a19VcmxfUmVzcG9uc2UgZnJvbSBhIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3Bv
bnNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNl
LmgKaW5kZXggYzAyNjIyZC4uMzU2MzFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaApAQCAtOTQsNiArOTQsMTcgQEAgRUFQ
SSBpbnQgZXdrX3VybF9yZXNwb25zZV9zdGF0dXNfY29kZV9nZXQoY29uc3QgRXdrX1VybF9SZXNw
b25zZSAqcmVzcG9uc2UpOwogICovCiBFQVBJIGNvbnN0IGNoYXIgKmV3a191cmxfcmVzcG9uc2Vf
bWltZV90eXBlX2dldChjb25zdCBFd2tfVXJsX1Jlc3BvbnNlICpyZXNwb25zZSk7CiAKKy8qKgor
ICogR2V0IHRoZSBleHBlY3RlZCBjb250ZW50IGxlbmd0aCBvZiB0aGUgI0V3a19VcmxfUmVzcG9u
c2UuCisgKgorICogSXQgY2FuIGJlIDAgaWYgdGhlIHNlcnZlciBwcm92aWRlZCBhbiBpbmNvcnJl
Y3Qgb3IgbWlzc2luZyBDb250ZW50LUxlbmd0aC4KKyAqCisgKiBAcGFyYW0gcmVzcG9uc2UgYSAj
RXdrX1VybF9SZXNwb25zZS4KKyAqCisgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCBjb250ZW50IGxl
bmd0aCBvZiBAYSByZXNwb25zZSBvciAwIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRUFQSSB1
bnNpZ25lZCBsb25nIGV3a191cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGNvbnN0IEV3
a19VcmxfUmVzcG9uc2UgKnJlc3BvbnNlKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRl
eCAzZjgwYWExLi5iN2VlMWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwCkBAIC03NzQsNiArNzc0LDUxIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGxh
eShFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5pbWFnZSwgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCisvKioKKyAqIEBpbnRl
cm5hbAorICogQSBkb3dubG9hZCBmb3IgdGhhdCB2aWV3IHdhcyBjYW5jZWxsZWQuCisgKgorICog
RW1pdHMgc2lnbmFsOiAiZG93bmxvYWQsY2FuY2VsbGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tf
RG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2VsbGVkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLGNhbmNlbGxlZCIsIGRvd25s
b2FkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgbmV3IGRvd25sb2FkIGhhcyBiZWVu
IHJlcXVlc3RlZCBmb3IgdGhhdCB2aWV3LgorICoKKyAqIEVtaXRzIHNpZ25hbDogImRvd25sb2Fk
LG5ldyIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkLgorICovCit2b2lkIGV3a192aWV3
X2Rvd25sb2FkX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93
bmxvYWQsbmV3IiwgZG93bmxvYWQpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBkb3du
bG9hZCBmb3IgdGhhdCB2aWV3IGhhcyBmYWlsZWQuCisgKgorICogRW1pdHMgc2lnbmFsOiAiZG93
bmxvYWQsZmFpbGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxvYWRfRXJyb3IuCisgKi8K
K3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfZmFpbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
RG93bmxvYWQqIGRvd25sb2FkLCBFd2tfV2ViX0Vycm9yKiBlcnJvcikKK3sKKyAgICBFd2tfRG93
bmxvYWRfRXJyb3IgZG93bmxvYWRFcnJvciA9IHsgZG93bmxvYWQsIGVycm9yIH07CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQsZmFpbGVkIiwg
JmRvd25sb2FkRXJyb3IpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBkb3dubG9hZCBm
b3IgdGhhdCB2aWV3IGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBFbWl0cyBzaWduYWw6
ICJkb3dubG9hZCxmaW5pc2hlZCIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkLgorICov
Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIGRvd25sb2FkKTsKK30KKwogRWlu
YV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDkyNGRiY2YuLjg2MmQy
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAt
MjYsNiArMjYsMTEgQEAKICAqCiAgKiBUaGUgZm9sbG93aW5nIHNpZ25hbHMgKHNlZSBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQoKSkgYXJlIGVtaXR0ZWQ6CiAgKgorICogLSAiZG93bmxv
YWQsY2FuY2VsbGVkIiwgRXdrX0Rvd25sb2FkKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgd2Fz
IGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KKyAqIC0gImRvd25sb2FkLG5ldyIsIEV3a19Eb3dubG9h
ZCo6IHJlcG9ydHMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuIFRoZSBj
bGllbnQgc2hvdWxkIHNldCB0aGUKKyAqICAgZGVzdGluYXRpb24gcGF0aCBieSBjYWxsaW5nIGV3
a19kb3dubG9hZF9kZXN0aW5hdGlvbl9zZXQoKSBvciB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgor
ICogLSAiZG93bmxvYWQsZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0Vycm9yKjogcmVwb3J0cyB0aGF0
IGEgZG93bmxvYWQgZmFpbGVkIHdpdGggdGhlIGdpdmVuIGVycm9yLgorICogLSAiZG93bmxvYWQs
ZmluaXNoZWQiLCBFd2tfRG93bmxvYWQqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0
ZWQgc3VjY2Vzc2Z1bGx5LgogICogLSAiaW50ZW50LHJlcXVlc3QsbmV3IiwgRXdrX0ludGVudF9S
ZXF1ZXN0KjogcmVwb3J0cyBuZXcgV2ViIGludGVudCByZXF1ZXN0LgogICogLSAiaW50ZW50LHNl
cnZpY2UscmVnaXN0ZXIiLCBFd2tfSW50ZW50X1NlcnZpY2UqOiByZXBvcnRzIG5ldyBXZWIgaW50
ZW50IHNlcnZpY2UgcmVnaXN0cmF0aW9uLgogICogLSAibG9hZCxlcnJvciIsIGNvbnN0IEV3a19X
ZWJfRXJyb3IqOiByZXBvcnRzIG1haW4gZnJhbWUgbG9hZCBmYWlsZWQuCkBAIC01Miw2ICs1Nyw3
IEBACiAjZGVmaW5lIGV3a192aWV3X2gKIAogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCisjaW5j
bHVkZSAiZXdrX2Rvd25sb2FkLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUg
ImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKQEAgLTE4
OCw2ICsxOTQsMTcgQEAgc3RydWN0IF9Fd2tfV2ViX1Jlc291cmNlX0xvYWRfRXJyb3IgewogICAg
IEV3a19XZWJfRXJyb3IgKmVycm9yOyAvKio8IGxvYWQgZXJyb3IgKi8KIH07CiAKKy8vLyBDcmVh
dGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0Rvd25sb2FkX0Vycm9yLgordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19Eb3dubG9hZF9FcnJvciBFd2tfRG93bmxvYWRfRXJyb3I7CisKKy8qKgorICogQGJyaWVm
IFN0cnVjdHVyZSBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgYSBkb3dubG9hZCBmYWlsdXJlLgor
ICovCitzdHJ1Y3QgX0V3a19Eb3dubG9hZF9FcnJvciB7CisgICAgRXdrX0Rvd25sb2FkICpkb3du
bG9hZDsgLyoqPCBkb3dubG9hZCB0aGF0IGZhaWxlZCAqLworICAgIEV3a19XZWJfRXJyb3IgKmVy
cm9yOyAvKio8IGRvd25sb2FkIGVycm9yICovCit9OworCiAvKioKICAqIENyZWF0ZXMgYSBuZXcg
RUZMIFdlYktpdCB2aWV3IG9iamVjdC4KICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggM2M5Y2U5NC4uYTU3Nzk1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsK
IH0KIAordHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CiB0eXBlZGVm
IHN0cnVjdCBfRXdrX1VybF9SZXF1ZXN0IEV3a19VcmxfUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0
IF9Fd2tfVXJsX1Jlc3BvbnNlIEV3a19VcmxfUmVzcG9uc2U7CiB0eXBlZGVmIHN0cnVjdCBfRXdr
X1dlYl9FcnJvciBFd2tfV2ViX0Vycm9yOwpAQCAtNDMsNiArNDQsMTAgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0V3a19JbnRlbnRfU2VydmljZSBFd2tfSW50ZW50X1NlcnZpY2U7CiAjZW5kaWYKIAogdm9p
ZCBld2tfdmlld19kaXNwbGF5KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KTsKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2VsbGVkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfbmV3
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqLCBFd2tfV2Vi
X0Vycm9yKik7Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKIHZvaWQgZXdrX3ZpZXdfaW1hZ2VfZGF0YV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSk7CiB2b2lkIGV3a192aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IEV3a19XZWJfRXJyb3IqIGVycm9yKTsKIHZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hl
ZChFdmFzX09iamVjdCogZXdrVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyNGMxOQpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBk
ZiBkaWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy90ZXN0X2V3azJfZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmFmMmU4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEs
MTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNs
dWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUg
PEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5o
PgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1l
c3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworZXh0ZXJuIEVXSzJV
bml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIGNvbnN0IGNoYXIqIHNl
cnZlclN1Z2dlc3RlZEZpbGVuYW1lID0gIndlYmtpdC1kb3dubG9hZGVkLWZpbGUiOworc3RhdGlj
IGNvbnN0IGNoYXIgdGVzdEZpbGVQYXRoW10gPSAiL3Rlc3QucGRmIjsKKworc3RydWN0IERvd25s
b2FkVGVzdERhdGEgeworICAgIGNvbnN0IGNoYXIqIGZpbGVVcmw7CisgICAgY29uc3QgY2hhciog
ZGVzdGluYXRpb25QYXRoOworfTsKKworc3RhdGljIGlubGluZSBib29sIGZpbGVFeGlzdHMoY29u
c3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgcmV0dXJuICFzdGF0
KHBhdGgsICZidWYpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVy
KiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRh
YmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lkKikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0
aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1
cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgRWluYV9TdHJidWYqIGZpbGVQYXRoID0gZWluYV9zdHJidWZfbmV3KCk7
CisgICAgZWluYV9zdHJidWZfYXBwZW5kKGZpbGVQYXRoLCBURVNUX1JFU09VUkNFU19ESVIpOwor
ICAgIGVpbmFfc3RyYnVmX2FwcGVuZChmaWxlUGF0aCwgcGF0aCk7CisKKyAgICBFaW5hX0ZpbGUq
IGYgPSBlaW5hX2ZpbGVfb3BlbihlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGZpbGVQYXRoKSwgZmFs
c2UpOworICAgIGVpbmFfc3RyYnVmX2ZyZWUoZmlsZVBhdGgpOworICAgIGlmICghZikgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9V
TkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25z
ZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBmaWxlU2l6ZSA9
IGVpbmFfZmlsZV9zaXplX2dldChmKTsKKworICAgIHZvaWQqIGNvbnRlbnRzID0gZWluYV9maWxl
X21hcF9hbGwoZiwgRUlOQV9GSUxFX1BPUFVMQVRFKTsKKyAgICBpZiAoIWNvbnRlbnRzKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9G
T1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3Nl
dF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgRWluYV9TdHJidWYqIGNv
bnRlbnREaXNwb3NpdGlvbiA9IGVpbmFfc3RyYnVmX25ldygpOworICAgIGVpbmFfc3RyYnVmX2Fw
cGVuZF9wcmludGYoY29udGVudERpc3Bvc2l0aW9uLCAiZmlsZW5hbWU9JXMiLCBzZXJ2ZXJTdWdn
ZXN0ZWRGaWxlbmFtZSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2Ut
PnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgZWluYV9zdHJidWZfc3Ry
aW5nX2dldChjb250ZW50RGlzcG9zaXRpb24pKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGNvbnRl
bnREaXNwb3NpdGlvbik7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+
cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgY29udGVudHMsIGZpbGVTaXplKTsKKyAg
ICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKwor
ICAgIGVpbmFfZmlsZV9tYXBfZnJlZShmLCBjb250ZW50cyk7CisgICAgZWluYV9maWxlX2Nsb3Nl
KGYpOworfQorCitzdGF0aWMgdm9pZCBvbl9kb3dubG9hZF9uZXcodm9pZCogdXNlckRhdGEsIEV2
YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRG93bmxvYWRUZXN0
RGF0YSogdGVzdERhdGEgPSBzdGF0aWNfY2FzdDxEb3dubG9hZFRlc3REYXRhKj4odXNlckRhdGEp
OworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBzdGF0aWNfY2FzdDxFd2tfRG93bmxvYWQq
PihldmVudEluZm8pOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25s
b2FkKSwgRVdLX0RPV05MT0FEX1NUQVRFX05PVF9TVEFSVEVEKTsKKyAgICBBU1NFUlRfRVEoZXdr
X2Rvd25sb2FkX2VzdGltYXRlZF9wcm9ncmVzc19nZXQoZG93bmxvYWQpLCAwKTsKKyAgICBBU1NF
UlRfRVEoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAg
IEV3a19VcmxfUmVxdWVzdCogcmVxdWVzdCA9IGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldChkb3du
bG9hZCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisgICAgRVhQRUNUX1NUUkVRKGV3a191
cmxfcmVxdWVzdF91cmxfZ2V0KHJlcXVlc3QpLCB0ZXN0RGF0YS0+ZmlsZVVybCk7CisKKyAgICBF
d2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSA9IGV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoZG93
bmxvYWQpOworICAgIEFTU0VSVF9UUlVFKHJlc3BvbnNlKTsKKyAgICBFWFBFQ1RfU1RSRVEoZXdr
X3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KHJlc3BvbnNlKSwgImFwcGxpY2F0aW9uL3BkZiIp
OworCisgICAgRVhQRUNUX1NUUkVRKGV3a19kb3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0
KGRvd25sb2FkKSwgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworCisgICAgQVNTRVJUX0ZBTFNF
KGZpbGVFeGlzdHModGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCkpOworICAgIGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIHRlc3REYXRhLT5kZXN0aW5hdGlvblBhdGgpOwor
ICAgIEVYUEVDVF9TVFJFUShld2tfZG93bmxvYWRfZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSwg
dGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2Fk
X2NhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2
ZW50SW5mbykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRvd25sb2FkIHdhcyBjYW5jZWxsZWQu
XG4iKTsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgIEZBSUwoKTsKK30KKworc3Rh
dGljIHZvaWQgb25fZG93bmxvYWRfZmFpbGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCog
d2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZF9FcnJvciogZG93
bmxvYWRFcnJvciA9IHN0YXRpY19jYXN0PEV3a19Eb3dubG9hZF9FcnJvcio+KGV2ZW50SW5mbyk7
CisgICAgZnByaW50ZihzdGRlcnIsICJEb3dubG9hZCBlcnJvcjogJXNcbiIsIGV3a193ZWJfZXJy
b3JfZGVzY3JpcHRpb25fZ2V0KGRvd25sb2FkRXJyb3ItPmVycm9yKSk7CisgICAgZWNvcmVfbWFp
bl9sb29wX3F1aXQoKTsKKyAgICBGQUlMKCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZl
bnRJbmZvKQoreworICAgIERvd25sb2FkVGVzdERhdGEqIHRlc3REYXRhID0gc3RhdGljX2Nhc3Q8
RG93bmxvYWRUZXN0RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2Fk
ID0gc3RhdGljX2Nhc3Q8RXdrX0Rvd25sb2FkKj4oZXZlbnRJbmZvKTsKKworICAgIEFTU0VSVF9F
UShld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChkb3dubG9hZCksIDEpOworICAg
IEFTU0VSVF9FUShld2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FE
X1NUQVRFX0ZJTklTSEVEKTsKKyAgICBBU1NFUlRfR1QoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGlt
ZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAgIEFTU0VSVF9UUlVFKGZpbGVFeGlzdHModGVzdERh
dGEtPmRlc3RpbmF0aW9uUGF0aCkpOworCisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30K
KworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19kb3dubG9hZCkKK3sKKyAgICBPd25QdHI8
RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVz
dFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIC8v
IEdlbmVyYXRlIHVuaXF1ZSBuYW1lIGZvciBkZXN0aW5hdGlvbiBmaWxlLgorICAgIGNoYXIgZGVz
dGluYXRpb25QYXRoW10gPSAiL3RtcC9wZGYtZmlsZS5YWFhYWFgiOworICAgIEFTU0VSVF9UUlVF
KG1rdGVtcChkZXN0aW5hdGlvblBhdGgpKTsKKworICAgIENTdHJpbmcgZmlsZVVybCA9IGh0dHBT
ZXJ2ZXItPmdldFVSSUZvclBhdGgodGVzdEZpbGVQYXRoKTsKKworICAgIERvd25sb2FkVGVzdERh
dGEgdXNlckRhdGEgPSB7IGZpbGVVcmwuZGF0YSgpLCBkZXN0aW5hdGlvblBhdGggfTsKKyAgICBB
U1NFUlRfRkFMU0UoZmlsZUV4aXN0cyhkZXN0aW5hdGlvblBhdGgpKTsKKworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9hZCxuZXciLCBvbl9kb3du
bG9hZF9uZXcsICZ1c2VyRGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRk
KHdlYlZpZXcoKSwgImRvd25sb2FkLGNhbmNlbCIsIG9uX2Rvd25sb2FkX2NhbmNlbGxlZCwgJnVz
ZXJEYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAi
ZG93bmxvYWQsZmFpbGVkIiwgb25fZG93bmxvYWRfZmFpbGVkLCAmdXNlckRhdGEpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9hZCxmaW5pc2hl
ZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCAmdXNlckRhdGEpOworCisgICAgLy8gRG93bmxvYWQg
dGVzdCBwZGYKKyAgICBld2tfdmlld191cmlfc2V0KHdlYlZpZXcoKSwgZmlsZVVybC5kYXRhKCkp
OworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gQ2xlYW4gdXAKKyAgICB1
bmxpbmsoZGVzdGluYXRpb25QYXRoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCmluZGV4IGZjNWQ3NDcuLjUxOGRiOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaApAQCAtMTIxLDEzICsxMjEsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBoYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhv
c3RuYW1lLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJu
YW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGhhbmRsZUNlcnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVzdChjb25zdCBTdHJpbmcm
IGhvc3RuYW1lLCBib29sJiBpZ25vcmVFcnJvcnMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3Ru
YW1lLCB1aW50MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJp
bmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0o
UVQpLgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CisjZW5kaWYgLy8g
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpID0gMDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAzNDRlZDk4
Li5kMmM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtMTIyMSw3ICsxMjIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVj
aXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbiwgV2ViRnJhbWVQcm94eSogZnIKICAgICAgICAgLy8g
Q3JlYXRlIGEgZG93bmxvYWQgcHJveHkuCiAgICAgICAgIERvd25sb2FkUHJveHkqIGRvd25sb2Fk
ID0gbV9wcm9jZXNzLT5jb250ZXh0KCktPmNyZWF0ZURvd25sb2FkUHJveHkoKTsKICAgICAgICAg
ZG93bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7Ci0jaWYgUExBVEZPUk0oUVQpCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgLy8gT3VyIGRlc2lnbiBk
b2VzIG5vdCBzdXBwcG9ydCBkb3dubG9hZHMgd2l0aG91dCBhIFdlYlBhZ2UuCiAgICAgICAgIGhh
bmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiAjZW5kaWYKQEAgLTI2NDIsMTEgKzI2NDIs
NiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRP
YmplY3QoY29uc3QgU3RyaW5nJiBjb250ZW50cwogICAgIG1fcGFnZUNsaWVudC0+ZGlkUmVjZWl2
ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29udGVudHMpOwogfQogCi12b2lkIFdlYlBh
Z2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQot
ewotICAgIG1fcGFnZUNsaWVudC0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKLX0K
LQogdm9pZCBXZWJQYWdlUHJveHk6OmF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1ZXN0KGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNvbnN0IFN0cmluZyYgcHJl
ZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCiB7CiAg
ICAgbV9wYWdlQ2xpZW50LT5oYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChob3N0
bmFtZSwgcmVhbG0sIHByZWZpbGxlZFVzZXJuYW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpOwpAQCAt
MjY2Myw2ICsyNjU4LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjZXJ0aWZpY2F0ZVZlcmlmaWNh
dGlvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYKIH0KICNlbmRpZiAvLyBQ
TEFURk9STShRVCkuCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQordm9pZCBX
ZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9h
ZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7
Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wg
bmVlZFRvdWNoRXZlbnRzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CmluZGV4IDMzYzQ5YTMuLjU2MzNjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFn
ZVByb3h5LmgKQEAgLTYzNSw2ICs2MzUsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oUVQpCiAg
ICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQm
LCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZy
b21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCisjaWYgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChE
b3dubG9hZFByb3h5Kik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154006</attachid>
            <date>2012-07-24 03:16:39 -0700</date>
            <delta_ts>2012-07-25 14:10:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_download_manager.patch</filename>
            <type>text/plain</type>
            <size>65192</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBmYTUzMTdjLi42MDhlOWQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEw
IEBACiAyMDEyLTA3LTI0ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLG5l
dyIgc2lnbmFsIG9uIHRoZSB2aWV3IGFuZCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHBhdGgg
Zm9yIHRoZSBkb3dubG9hZCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgaW4gb3JkZXIgdG8gYWNj
ZXB0IGl0LiBJZiB0aGUgc2lnbmFsCisgICAgICAgIGlzIGlnbm9yZWQgb3IgaWYgdGhlIGRvd25s
b2FkIHBhdGggaXMgbm90IHNldAorICAgICAgICB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgorCisg
ICAgICAgIEEgbmV3IEV3a19Eb3dubG9hZCB0eXBlIGlzIGludHJvZHVjZWQgdG8gcHJvdmlkZQor
ICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGRvd25sb2FkIHRvIHRoZSBjbGllbnQK
KyAgICAgICAgYW5kIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCBpdCAoZS5n
LgorICAgICAgICBzZXQgaXRzIGRvd25sb2FkIHBhdGgsIGNhbmNlbCBpdCwgLi4uKS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2FkZCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfcmVtb3ZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvRXdrQ29udGV4dCk6Cisg
ICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgor
ICAgICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChk
aWRDYW5jZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfRG93bmxvYWQp
OgorICAgICAgICAoX0V3a19Eb3dubG9hZDo6X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChfRXdr
X0Rvd25sb2FkOjp+X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChld2tfZG93bmxvYWRfcmVmKToK
KyAgICAgICAgKGV3a19kb3dubG9hZF91bnJlZik6CisgICAgICAgIChld2tfZG93bmxvYWRfaWRf
Z2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF92aWV3X2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfc3RhdGVfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3Nl
dCk6CisgICAgICAgIChld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAg
ICAgIChld2tfZG93bmxvYWRfY2FuY2VsKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3N0YXRlX3NldCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfbmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwOiBBZGQgYSBmdW5jdGlvbiB0bworICAgICAg
ICByZXRyaWV2ZSB0aGUgY29udGVudCBsZW5ndGggb2YgYSBVUkwgcmVzcG9uc2UuCisgICAgICAg
IChld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZCk6
CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGY6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisg
ICAgICAgIHRoZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0
RGF0YSk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKG9uX2Rvd25sb2FkX25ldyk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxs
ZWQpOgorICAgICAgICAob25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisKKzIwMTItMDctMjQgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbRUZM
XVtXSzJdIEZpeCBwb3NzaWJsZSBjcmFzaCBpbiBkaWRTZW5kUmVxdWVzdEZvclJlc291cmNlCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MjA3NwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDMxNjAwNmUuLjYzNjA2MzQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlCkBAIC0zOSw4ICszOSwxMCBAQCBMSVNUKEFQUEVORCBXZWJLaXQyX1NP
VVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9CYXR0ZXJ5UHJvdmlkZXIuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2NvbnRleHQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3Rf
bWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5h
Z2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19p
bnRlbnRfc2VydmljZS5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfbmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb24uY3BwCkBAIC0xNzgsNiArMTgwLDcgQEAgU0VUIChFV2ViS2l0Ml9IRUFE
RVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFuYWdlci5oIgorICAgICIke0NNQUtFX0NVUlJF
TlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmgiCiAgICAgIiR7
Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50Lmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
aW50ZW50X3NlcnZpY2UuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbi5oIgpAQCAtMjM4LDYg
KzI0MSw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJV
bml0VGVzdHNfTElCUkFSSUVTfSkKICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdl
YktpdCAxIHRlc3Qgc3VpdGUuCiBTRVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3Rf
ZXdrMl9jb29raWVfbWFuYWdlcgorICAgIHRlc3RfZXdrMl9kb3dubG9hZAogICAgIHRlc3RfZXdr
Ml92aWV3CiApCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5o
CmluZGV4IDU5N2NmMjQuLmQyMTY3MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgU2Ftc3VuZyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29r
aWVfbWFuYWdlci5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZC5oIgogI2luY2x1ZGUgImV3a19p
bnRlbnQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBlNjlmODdkLi42YTU3MTJk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVu
dEltcGwuY3BwCkBAIC0zMiw2ICszMiwxMCBAQAogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNp
bmNsdWRlICJXZWJDb250ZXh0TWVudVByb3h5LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX3By
aXZhdGUuaCIKICNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwpAQCAtMjc2LDQgKzI4MCwxNCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3Vu
dFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OmhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAgICBFd2tfRG93bmxv
YWQqIGV3a0Rvd25sb2FkID0gZXdrX2Rvd25sb2FkX25ldyhkb3dubG9hZCwgbV92aWV3V2lkZ2V0
KTsKKyAgICAvLyBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBvbmUgZGVmYXVsdCBjb250ZXh0LCBi
dXQgb25jZSB3ZSBzdXBwb3J0CisgICAgLy8gbXVsdGlwbGUgY29udGV4dHMsIHdlIHdpbGwgbmVl
ZCB0byByZXRyaWV2ZSB0aGUgY29udGV4dCBmcm9tIHRoZQorICAgIC8vIHZpZXcuCisgICAgZXdr
X2NvbnRleHRfZG93bmxvYWRfYWRkKGV3a19jb250ZXh0X2RlZmF1bHRfZ2V0KCksIGV3a0Rvd25s
b2FkKTsKKyAgICBld2tfZG93bmxvYWRfdW5yZWYoZXdrRG93bmxvYWQpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5oCmluZGV4IDQyN2VmNTIuLjdkZmM5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaApAQCAtNzYsNiArNzYs
OCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UG9pbnQgc2NyZWVuVG9XaW5k
b3coY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIFdlYkNvcmU6OkludFJl
Y3Qgd2luZG93VG9TY3JlZW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpOwogCisgICAgdmlydHVh
bCB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CisKICAgICB2aXJ0
dWFsIHZvaWQgZG9uZVdpdGhLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50Jiwg
Ym9vbCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICB2aXJ0dWFsIHZvaWQgZG9uZVdp
dGhUb3VjaEV2ZW50KGNvbnN0IE5hdGl2ZVdlYlRvdWNoRXZlbnQmLCBib29sIHdhc0V2ZW50SGFu
ZGxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKaW5kZXggYjg2MDdlNS4uNmQwNTA0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApAQCAtMjYsOSArMjYsMTIgQEAKICNpbmNs
dWRlICJXS0NvbnRleHRTb3VwLmgiCiAjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKICNpbmNsdWRl
ICJXS1N0cmluZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2
YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a19j
b29raWVfbWFuYWdlcl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisjaW5j
bHVkZSAiZXdrX2Rvd25sb2FkX3ByaXZhdGUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01OCw2ICs2MSw3IEBAIHN0cnVj
dCBfRXdrX0NvbnRleHQgewogI2lmIEVOQUJMRShCQVRURVJZX1NUQVRVUykKICAgICBSZWZQdHI8
QmF0dGVyeVByb3ZpZGVyPiBiYXR0ZXJ5UHJvdmlkZXI7CiAjZW5kaWYKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBFd2tfRG93bmxvYWQqPiBkb3dubG9hZHM7CiAKICAgICBXS1JldGFpblB0cjxXS1Nv
dXBSZXF1ZXN0TWFuYWdlclJlZj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxl
ck1hcCB1cmxTY2hlbWVIYW5kbGVyczsKQEAgLTczLDEyICs3NywxOCBAQCBzdHJ1Y3QgX0V3a19D
b250ZXh0IHsKICNlbmRpZgogCiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9j
bGllbnRfYXR0YWNoKHRoaXMpOworICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRf
YXR0YWNoKHRoaXMpOwogICAgIH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQogICAgIHsKICAgICAg
ICAgaWYgKGNvb2tpZU1hbmFnZXIpCiAgICAgICAgICAgICBld2tfY29va2llX21hbmFnZXJfZnJl
ZShjb29raWVNYW5hZ2VyKTsKKworICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxv
YWQqPjo6aXRlcmF0b3IgaXQgPSBkb3dubG9hZHMuYmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDx1
aW50NjRfdCwgRXdrX0Rvd25sb2FkKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2Fkcy5lbmQoKTsK
KyAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfZG93bmxv
YWRfdW5yZWYoaXQtPnNlY29uZCk7CiAgICAgfQogfTsKIApAQCAtOTksNiArMTA5LDQ4IEBAIFdL
Q29udGV4dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBl
d2tDb250ZXh0KQogCiAvKioKICAqIEBpbnRlcm5hbAorICogUmVnaXN0ZXJzIHRoYXQgYSBuZXcg
ZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLgorICovCit2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2FkZChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0Rvd25sb2FkKiBld2tEb3dubG9h
ZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihld2tEb3dubG9hZCk7CisKKyAgICB1aW50NjRfdCBk
b3dubG9hZElkID0gZXdrX2Rvd25sb2FkX2lkX2dldChld2tEb3dubG9hZCk7CisgICAgaWYgKGV3
a0NvbnRleHQtPmRvd25sb2Fkcy5jb250YWlucyhkb3dubG9hZElkKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZXdrX2Rvd25sb2FkX3JlZihld2tEb3dubG9hZCk7CisgICAgZXdrQ29udGV4dC0+
ZG93bmxvYWRzLmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBSZXR1cm5zIHRoZSAjRXdrX0Rvd25sb2FkIHdpdGggdGhlIGdpdmVuIEBhIGRv
d25sb2FkSWQsIG9yCisgKiBAYyAwIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRXdrX0Rvd25s
b2FkKiBld2tfY29udGV4dF9kb3dubG9hZF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRl
eHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJuIGV3a0NvbnRleHQtPmRvd25sb2Fk
cy5nZXQoZG93bmxvYWRJZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZW1vdmVzIHRo
ZSAjRXdrX0Rvd25sb2FkIHdpdGggdGhlIGdpdmVuIEBhIGRvd25sb2FkSWQgZnJvbSB0aGUgaW50
ZXJuYWwKKyAqIEhhc2hNYXAuCisgKi8KK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3Zl
KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCB1aW50NjRfdCBkb3dubG9hZElkKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0NvbnRleHQpOworICAgIEV3a19Eb3dubG9hZCog
ZG93bmxvYWQgPSBld2tDb250ZXh0LT5kb3dubG9hZHMudGFrZShkb3dubG9hZElkKTsKKyAgICBp
ZiAoIWRvd25sb2FkKQorICAgICAgICByZXR1cm47CisgICAgZXdrX2Rvd25sb2FkX3VucmVmKGRv
d25sb2FkKTsKK30KKworLyoqCiAgKiBSZXRyaWV2ZSB0aGUgcmVxdWVzdCBtYW5hZ2VyIGZvciBA
YSBld2tDb250ZXh0LgogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjNjOGM1MTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dlYl9lcnJv
ci5oIgorI2luY2x1ZGUgImV3a193ZWJfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGlubGluZSBFd2tfQ29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19Db250ZXh0Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYg
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092
ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9h
ZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwg
dG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBXZSBz
ZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2Ug
aGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKKyAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxl
IG5hbWUuCisgICAgZXdrX3ZpZXdfZG93bmxvYWRfbmV3KGV3a19kb3dubG9hZF92aWV3X2dldChk
b3dubG9hZCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBk
ZXN0aW9uYXRpb24gdG8gYmUgYSBVUkkuCisgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gbWFrZVN0
cmluZygiZmlsZTovLyIsIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9u
X2dldChkb3dubG9hZCkpKTsKKworICAgIHJldHVybiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVj
ZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1VS
TFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAg
ICBBU1NFUlQoZG93bmxvYWQpOworICAgIEV3a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlID0gZXdr
X3VybF9yZXNwb25zZV9uZXcodG9JbXBsKHdrUmVzcG9uc2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkp
OworICAgIGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQoZG93bmxvYWQsIHJlc3BvbnNlKTsKKyAg
ICBld2tfdXJsX3Jlc3BvbnNlX3VucmVmKHJlc3BvbnNlKTsKK30KKworc3RhdGljIHZvaWQgZGlk
Q3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQs
IFdLU3RyaW5nUmVmIHBhdGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rv
d25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0NvbnRleHQo
Y2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsKKyAgICBBU1NF
UlQoZG93bmxvYWQpOworCisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5HKTsKK30KKworc3RhdGljIHZvaWQgZGlkUmVjZWl2
ZURhdGEoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIHVpbnQ2NF90IGxl
bmd0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRvd25s
b2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7
CisgICAgZXdrX2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoZG93bmxvYWQsIGxlbmd0aCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZEZhaWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxv
YWQsIFdLRXJyb3JSZWYgZXJyb3IsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgdWlu
dDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOworICAg
IEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9nZXQodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBBU1NFUlQoZG93bmxvYWQpOwor
CisgICAgRXdrX1dlYl9FcnJvciogZXdrRXJyb3IgPSBld2tfd2ViX2Vycm9yX25ldyhlcnJvcik7
CisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX1NUQVRF
X0ZBSUxFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfZmFpbGVkKGV3a19kb3dubG9hZF92aWV3
X2dldChkb3dubG9hZCksIGRvd25sb2FkLCBld2tFcnJvcik7CisgICAgZXdrX3dlYl9lcnJvcl9m
cmVlKGV3a0Vycm9yKTsKKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9yZW1vdmUodG9Fd2tDb250
ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ2FuY2Vs
KFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGll
bnRJbmZvKQoreworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCkt
PmRvd25sb2FkSUQoKTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRf
ZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAg
QVNTRVJUKGRvd25sb2FkKTsKKworICAgIGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoZG93bmxvYWQs
IEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2Nh
bmNlbGxlZChld2tfZG93bmxvYWRfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAg
ZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93
bmxvYWRJZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93
bmxvYWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50
NjRfdCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisK
KyAgICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVf
RklOSVNIRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKGV3a19kb3dubG9hZF92
aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9y
ZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKK30KKwordm9pZCBl
d2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKEV3a19Db250ZXh0KiBld2tDb250ZXh0
KQoreworICAgIFdLQ29udGV4dERvd25sb2FkQ2xpZW50IHdrRG93bmxvYWRDbGllbnQ7CisgICAg
bWVtc2V0KCZ3a0Rvd25sb2FkQ2xpZW50LCAwLCBzaXplb2YoV0tDb250ZXh0RG93bmxvYWRDbGll
bnQpKTsKKworICAgIHdrRG93bmxvYWRDbGllbnQudmVyc2lvbiA9IGtXS0NvbnRleHREb3dubG9h
ZENsaWVudEN1cnJlbnRWZXJzaW9uOworICAgIHdrRG93bmxvYWRDbGllbnQuY2xpZW50SW5mbyA9
IGV3a0NvbnRleHQ7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRDYW5jZWwgPSBkaWRDYW5jZWw7
CisgICAgd2tEb3dubG9hZENsaWVudC5kZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxl
bmFtZSA9IGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lOworICAgIHdrRG93
bmxvYWRDbGllbnQuZGlkQ3JlYXRlRGVzdGluYXRpb24gPSBkaWRDcmVhdGVEZXN0aW5hdGlvbjsK
KyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZFJlY2VpdmVSZXNwb25zZSA9IGRpZFJlY2VpdmVSZXNw
b25zZTsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZFJlY2VpdmVEYXRhID0gZGlkUmVjZWl2ZURh
dGE7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRGYWlsID0gZGlkRmFpbDsKKyAgICB3a0Rvd25s
b2FkQ2xpZW50LmRpZEZpbmlzaCA9IGRpZEZpbmlzaDsKKworICAgIFdLQ29udGV4dFNldERvd25s
b2FkQ2xpZW50KGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoZXdrQ29udGV4dCksICZ3a0Rvd25s
b2FkQ2xpZW50KTsKK30KKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZh
dGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzAxN2E4Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
ZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gKKyNk
ZWZpbmUgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaAorCit0eXBlZGVmIHN0
cnVjdCBfRXdrX0NvbnRleHQgRXdrX0NvbnRleHQ7CisKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50X2F0dGFjaChFd2tfQ29udGV4dCopOworCisjZW5kaWYgLy8gZXdrX2NvbnRleHRf
ZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IGQ3OGUxZTkuLjdjYTNh
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9wcml2YXRlLmgKQEAgLTIzLDEwICsyMywxNSBAQAogI2luY2x1ZGUgPFdlYktpdDIv
V0tCYXNlLmg+CiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWQgRXdrX0Rvd25sb2FkOwogdHlwZWRlZiBzdHJ1Y3Qg
X0V3a19VcmxfU2NoZW1lX1JlcXVlc3QgRXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKIAogV0tDb250
ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKIFdL
U291cFJlcXVlc3RNYW5hZ2VyUmVmIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29u
c3QgRXdrX0NvbnRleHQqKTsKIHZvaWQgZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZXF1ZXN0X3Jl
Y2VpdmVkKEV3a19Db250ZXh0KiwgRXdrX1VybF9TY2hlbWVfUmVxdWVzdCopOwogCit2b2lkIGV3
a19jb250ZXh0X2Rvd25sb2FkX2FkZChFd2tfQ29udGV4dCosIEV3a19Eb3dubG9hZCopOworRXdr
X0Rvd25sb2FkKiBld2tfY29udGV4dF9kb3dubG9hZF9nZXQoY29uc3QgRXdrX0NvbnRleHQqLCB1
aW50NjRfdCBkb3dubG9hZElkKTsKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3ZlKEV3
a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7CisKICNlbmRpZiAvLyBld2tfY29udGV4
dF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19kb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkMzI5YTEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisKKyNpbmNsdWRlICJE
b3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tSZXRh
aW5QdHIuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX2Rvd25s
b2FkX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3RfcHJpdmF0ZS5oIgorI2lu
Y2x1ZGUgPEVjb3JlLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKKy8qKgorICogXHN0
cnVjdCAgX0V3a19Eb3dubG9hZAorICogQGJyaWVmICAgQ29udGFpbnMgdGhlIGRvd25sb2FkIGRh
dGEuCisgKi8KK3N0cnVjdCBfRXdrX0Rvd25sb2FkIHsKKyAgICB1bnNpZ25lZCBpbnQgX19yZWY7
IC8qKjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgb2JqZWN0ICovCisgICAgRG93bmxvYWRQ
cm94eSogZG93bmxvYWRQcm94eTsKKyAgICBFdmFzX09iamVjdCogdmlldzsKKyAgICBFd2tfRG93
bmxvYWRfU3RhdGUgc3RhdGU7CisgICAgRXdrX1VybF9SZXF1ZXN0KiByZXF1ZXN0OworICAgIEV3
a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlOworICAgIGRvdWJsZSBzdGFydFRpbWU7CisgICAgZG91
YmxlIGVuZFRpbWU7CisgICAgdWludDY0X3QgZG93bmxvYWRlZDsgLyoqPCBsZW5ndGggYWxyZWFk
eSBkb3dubG9hZGVkICovCisgICAgY29uc3QgY2hhciogZGVzdGluYXRpb247CisgICAgY29uc3Qg
Y2hhciogc3VnZ2VzdGVkRmlsZW5hbWU7CisKKyAgICBfRXdrX0Rvd25sb2FkKERvd25sb2FkUHJv
eHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKKyAgICAgICAgOiBfX3JlZigxKQor
ICAgICAgICAsIGRvd25sb2FkUHJveHkoZG93bmxvYWQpCisgICAgICAgICwgdmlldyhld2tWaWV3
KQorICAgICAgICAsIHN0YXRlKEVXS19ET1dOTE9BRF9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAg
ICAgLCByZXF1ZXN0KDApCisgICAgICAgICwgcmVzcG9uc2UoMCkKKyAgICAgICAgLCBzdGFydFRp
bWUoLTEpCisgICAgICAgICwgZW5kVGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisg
ICAgICAgICwgZGVzdGluYXRpb24oMCkKKyAgICAgICAgLCBzdWdnZXN0ZWRGaWxlbmFtZSgwKQor
ICAgIHsgfQorCisgICAgfl9Fd2tfRG93bmxvYWQoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFf
X3JlZik7CisgICAgICAgIGlmIChyZXF1ZXN0KQorICAgICAgICAgICAgZXdrX3VybF9yZXF1ZXN0
X3VucmVmKHJlcXVlc3QpOworICAgICAgICBpZiAocmVzcG9uc2UpCisgICAgICAgICAgICBld2tf
dXJsX3Jlc3BvbnNlX3VucmVmKHJlc3BvbnNlKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwoZGVzdGluYXRpb24pOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzdWdnZXN0ZWRG
aWxlbmFtZSk7CisgICAgfQorfTsKKwordm9pZCBld2tfZG93bmxvYWRfcmVmKEV3a19Eb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQp
OworCisgICAgKytkb3dubG9hZC0+X19yZWY7Cit9CisKK3ZvaWQgZXdrX2Rvd25sb2FkX3VucmVm
KEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oZG93bmxvYWQpOworCisgICAgaWYgKC0tZG93bmxvYWQtPl9fcmVmKQorICAgICAgICByZXR1
cm47CisKKyAgICBkZWxldGUgZG93bmxvYWQ7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBR
dWVyaWVzIHRoZSBpZGVudGlmaWVyIGZvciB0aGlzIGRvd25sb2FkCisgKi8KK3VpbnQ2NF90IGV3
a19kb3dubG9hZF9pZF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7CisKKyAg
ICByZXR1cm4gZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmRvd25sb2FkSUQoKTsKK30KKworLyoq
CisgKiBAaW50ZXJuYWwKKyAqIFJldHVybnMgdGhlIHZpZXcgdGhpcyBkb3dubG9hZCBpcyBhdHRh
Y2hlZCB0by4KKyAqIFRoZSB2aWV3IGlzIG5lZWRlZCB0byBzZW5kIG5vdGlmaWNhdGlvbiBzaWdu
YWxzLgorICovCitFdmFzX09iamVjdCogZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGNvbnN0IEV3a19E
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGRvd25sb2FkLCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+dmlldzsKK30KKworRXdrX0Rv
d25sb2FkX1N0YXRlIGV3a19kb3dubG9hZF9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQs
IEVXS19ET1dOTE9BRF9TVEFURV9VTktOT1dOKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+c3Rh
dGU7Cit9CisKK0V3a19VcmxfUmVxdWVzdCogZXdrX2Rvd25sb2FkX3JlcXVlc3RfZ2V0KGNvbnN0
IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIGlmICghZG93bmxvYWQtPnJlcXVlc3QpIHsKKyAg
ICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFBy
b3h5LCAwKTsKKyAgICAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1VSTFJlcXVl
c3QoQWRvcHRXSywgdG9BUEkoV2ViVVJMUmVxdWVzdDo6Y3JlYXRlKGRvd25sb2FkLT5kb3dubG9h
ZFByb3h5LT5yZXF1ZXN0KCkpLmxlYWtSZWYoKSkpOworICAgICAgICBjb25zdF9jYXN0PEV3a19E
b3dubG9hZCo+KGRvd25sb2FkKS0+cmVxdWVzdCA9IGV3a191cmxfcmVxdWVzdF9uZXcod2tVUkxS
ZXF1ZXN0LmdldCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnJlcXVlc3Q7Cit9
CisKK0V3a19VcmxfUmVzcG9uc2UqIGV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXNwb25zZTsKK30KKwor
Y29uc3QgY2hhciogZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxv
YWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
bG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPmRlc3RpbmF0aW9uOworfQorCitFaW5h
X0Jvb2wgZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWQgKmRvd25sb2Fk
LCBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbikKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZGVzdGluYXRpb24sIGZhbHNlKTsKKworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmZG93bmxvYWQtPmRlc3RpbmF0aW9uLCBkZXN0aW5hdGlvbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQo
Y29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5zdWdnZXN0
ZWRGaWxlbmFtZTsKK30KKworRWluYV9Cb29sIGV3a19kb3dubG9hZF9jYW5jZWwoRXdrX0Rvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxv
YWQtPmRvd25sb2FkUHJveHksIGZhbHNlKTsKKworICAgIGlmIChkb3dubG9hZC0+c3RhdGUgIT0g
RVdLX0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5HKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBkb3dubG9hZC0+c3RhdGUgPSBFV0tfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTElORzsKKyAg
ICBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+Y2FuY2VsKCk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2RvdWJsZSBld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBFd2tf
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZCwgMCk7CisKKyAgICBpZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGggPSBld2tf
dXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2UpOworICAg
IGlmICghY29udGVudExlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8ZG91YmxlPihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KGNvbnRlbnRMZW5ndGgpOworfQorCitkb3VibGUgZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGlt
ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgLy8gRG93bmxvYWQgaGFzIG5v
dCBzdGFydGVkIHlldC4KKyAgICBpZiAoZG93bmxvYWQtPnN0YXJ0VGltZSA8IDApCisgICAgICAg
IHJldHVybiAwOworCisgICAgLy8gRG93bmxvYWQgaGFkIGVuZGVkLCByZXR1cm4gdGhlIHRpbWUg
ZWxhcHNlZCBiZXR3ZWVuIHRoZQorICAgIC8vIGRvd25sb2FkIHN0YXJ0IGFuZCB0aGUgZW5kIGV2
ZW50LgorICAgIGlmIChkb3dubG9hZC0+ZW5kVGltZSA+PSAwKQorICAgICAgICByZXR1cm4gZG93
bmxvYWQtPmVuZFRpbWUgLSBkb3dubG9hZC0+c3RhcnRUaW1lOworCisgICAgLy8gRG93bmxvYWQg
aXMgc3RpbGwgZ29pbmcuCisgICAgcmV0dXJuIGVjb3JlX3RpbWVfZ2V0KCkgLSBkb3dubG9hZC0+
c3RhcnRUaW1lOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogU2V0cyB0aGUgVVJMIEBhIHJl
c3BvbnNlIGZvciB0aGlzIEBhIGRvd25sb2FkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9yZXNw
b25zZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgRXdrX1VybF9SZXNwb25zZSogcmVzcG9u
c2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHJlc3BvbnNlKTsKKworICAgIGV3a191cmxfcmVzcG9u
c2VfcmVmKHJlc3BvbnNlKTsKKyAgICBkb3dubG9hZC0+cmVzcG9uc2UgPSByZXNwb25zZTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNldHMgdGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUgZm9y
IHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxl
bmFtZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmls
ZW5hbWUpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisg
ICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWUs
IHN1Z2dlc3RlZEZpbGVuYW1lKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydCBh
IGdpdmVuIGFtb3VudCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KKyAqLwordm9pZCBld2tfZG93bmxv
YWRfcmVjZWl2ZWRfZGF0YShFd2tfRG93bmxvYWQqIGRvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgp
Cit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisgICAgZG93
bmxvYWQtPmRvd25sb2FkZWQgKz0gbGVuZ3RoOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
U2V0cyB0aGUgc3RhdGUgb2YgdGhlIGRvd25sb2FkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9z
dGF0ZV9zZXQoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgRXdrX0Rvd25sb2FkX1N0YXRlIHN0YXRl
KQoreworICAgIGRvd25sb2FkLT5zdGF0ZSA9IHN0YXRlOworCisgICAgLy8gVXBkYXRlIHN0YXJ0
IHRpbWUgaWYgdGhlIGRvd25sb2FkIGhhcyBzdGFydGVkCisgICAgaWYgKHN0YXRlID09IEVXS19E
T1dOTE9BRF9TVEFURV9ET1dOTE9BRElORykKKyAgICAgICAgZG93bmxvYWQtPnN0YXJ0VGltZSA9
IGVjb3JlX3RpbWVfZ2V0KCk7CisKKyAgICAvLyBVcGRhdGUgZW5kIHRpbWUgaWYgdGhlIGRvd25s
b2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkKKyAgICBpZiAoc3RhdGUgPT0g
RVdLX0RPV05MT0FEX1NUQVRFX0ZBSUxFRAorICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxP
QURfU1RBVEVfQ0FOQ0VMTEVECisgICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9TVEFU
RV9GSU5JU0hFRCkKKyAgICAgICAgZG93bmxvYWQtPmVuZFRpbWUgPSBlY29yZV90aW1lX2dldCgp
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29uc3RydWN0cyBhIEV3a19Eb3dubG9hZCBm
cm9tIGEgRG93bmxvYWRQcm94eS4KKyAqLworRXdrX0Rvd25sb2FkKiBld2tfZG93bmxvYWRfbmV3
KERvd25sb2FkUHJveHkqIGRvd25sb2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tWaWV3LCAwKTsKKworICAgIHJldHVybiBuZXcgX0V3
a19Eb3dubG9hZChkb3dubG9hZCwgZXdrVmlldyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY3ZmJlNTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuaApAQCAtMCwwICsxLDE5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBld2tfZG93bmxvYWRfaAorI2RlZmluZSBld2tfZG93bmxvYWRf
aAorCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNw
b25zZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4g
IkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBmb3IgX0V3a19Eb3dubG9h
ZCAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CisKKy8vLyBE
ZWZpbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9hZC4KK2VudW0gX0V3a19Eb3du
bG9hZF9TdGF0ZSB7CisgICAgLy8vIFRoZSBkb3dubG9hZCBzdGF0ZSBpcyB1bmtub3duCisgICAg
RVdLX0RPV05MT0FEX1NUQVRFX1VOS05PV04gPSAtMSwKKyAgICAvLy8gVGhlIGRvd25sb2FkIGhh
cyBub3Qgc3RhcnRlZCB5ZXQKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfTk9UX1NUQVJURUQsCisg
ICAgLy8vIFRoZSBkb3dubG9hZCBoYXMgc3RhcnRlZAorICAgIEVXS19ET1dOTE9BRF9TVEFURV9E
T1dOTE9BRElORywKKyAgICAvLy8gVGhlIGRvd25sb2FkIHN0b3BwZWQgYmVjYXVzZSBvZiBhIGZh
aWx1cmUKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfRkFJTEVELAorICAgIC8vLyBUaGUgZG93bmxv
YWQgaXMgYmVpbmcgY2FuY2VsbGVkCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0NBTkNFTExJTkcs
CisgICAgLy8vIFRoZSBkb3dubG9hZCBzdG9wcGVkIGJlY2F1c2UgaXQgd2FzIGNhbmNlbGxlZAor
ICAgIEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBj
b21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIEVXS19ET1dOTE9BRF9TVEFURV9GSU5JU0hFRAor
fTsKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBfRXdrX0Rvd25sb2FkX1N0YXRlLgor
dHlwZWRlZiBlbnVtIF9Fd2tfRG93bmxvYWRfU3RhdGUgRXdrX0Rvd25sb2FkX1N0YXRlOworCisv
KioKKyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3Qu
CisgKgorICogQHBhcmFtIGRvd25sb2FkIHRoZSBkb3dubG9hZCBvYmplY3QgdG8gaW5jcmVhc2Ug
dGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Rvd25sb2FkX3JlZihFd2tf
RG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBEZWNyZWFzZXMgdGhlIHJlZmVyZW5jZSBj
b3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5nIGl0LgorICoKKyAqIFdo
ZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBkb3dubG9hZCBpcyBmcmVlZC4K
KyAqCisgKiBAcGFyYW0gZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVjdCB0byBkZWNyZWFzZSB0
aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93bmxvYWRfdW5yZWYoRXdr
X0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIHN0YXRlIGZvciB0aGlz
IGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQgdG8gcXVl
cnkuCisgKgorICogQHJldHVybiB0aGUgZG93bmxvYWQgc3RhdGUuCisgKi8KK0VBUEkgRXdrX0Rv
d25sb2FkX1N0YXRlIGV3a19kb3dubG9hZF9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpk
b3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSTCByZXF1ZXN0IGZvciB0aGlzIGRvd25s
b2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQgdG8gcXVlcnkuCisg
KgorICogQHJldHVybiB0aGUgI0V3a19VcmxfUmVxdWVzdCBmb3IgdGhpcyBkb3dubG9hZC4KKyAq
LworRUFQSSBFd2tfVXJsX1JlcXVlc3QgKmV3a19kb3dubG9hZF9yZXF1ZXN0X2dldChjb25zdCBF
d2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgVVJMIHJlc3BvbnNl
IGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxv
YWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiB0aGUgI0V3a19VcmxfUmVzcG9uc2UgZm9yIHRo
aXMgZG93bmxvYWQgb3IgQGMgTlVMTCBpZiBpdCB3YXMgbm90IHJlY2VpdmVkIHlldC4KKyAqLwor
RUFQSSBFd2tfVXJsX1Jlc3BvbnNlICpld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBVUkkgdG8gd2hpY2gg
dGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uCisgKgorICogQHBhcmFtIGRvd25s
b2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRoZSBkZXN0aW5h
dGlvbiBwb2ludGVyLCB0aGF0IG1heSBiZSBAYyBOVUxMLiBUaGlzIHBvaW50ZXIgaXMKKyAqICAg
ICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBzbyB3aGVuZXZlciBwb3Nz
aWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5Y2xlcyBhbmQgdXNlCisg
KiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBvZiBlaW5hX3N0cmluZ3No
YXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitFQVBJIGNvbnN0IGNoYXIg
KmV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9h
ZCk7CisKKy8qKgorICogU2V0cyB0aGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhpcyBkb3dubG9h
ZC4KKyAqCisgKiBTZXRzIHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBkb3dubG9hZGVkIGZpbGUgd2ls
bCBiZSB3cml0dGVuLgorICoKKyAqIFRoaXMgbWV0aG9kIG5lZWRzIHRvIGJlIGNhbGxlZCBiZWZv
cmUgdGhlIGRvd25sb2FkIHRyYW5zZmVyCisgKiBzdGFydHMsIGJ5IGNvbm5lY3RpbmcgdG8gdGhl
ICJkb3dubG9hZCxuZXciIHNpZ25hbCBvbiB0aGUKKyAqIEV3a19WaWV3IGFuZCBzZXR0aW5nIHRo
ZSBkZXN0aW5hdGlvbiBpbiB0aGUgY2FsbGJhY2suIFRvIHNldAorICogdGhlIGRlc3RpbmF0aW9u
IHVzaW5nIHRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYnkgdGhlIHNlcnZlcgorICogdXNlIGV3a19k
b3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KCkuCisgKgorICogQHBhcmFtIGRvd25sb2Fk
ICNFd2tfRG93bmxvYWQgdG8gdXBkYXRlLgorICogQHBhcmFtIGRlc3RpbmF0aW9uIHRoZSBkZXN0
aW5hdGlvbiBwYXRoLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHN1Y2Nlc3NmdWws
IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdrX2Rvd25sb2FkX3N1Z2dl
c3RlZF9maWxlbmFtZV9nZXQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2Rlc3Rp
bmF0aW9uX3NldChFd2tfRG93bmxvYWQgKmRvd25sb2FkLCBjb25zdCBjaGFyKiBkZXN0aW5hdGlv
bik7CisKKy8qKgorICogUXVlcmllcyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBk
b3dubG9hZC4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZnVsIHRvIHVzZSB0aGUgdmFsdWUgcmV0dXJu
ZWQgYnkgdGhpcyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QKKyAqIHRoZSBkZXN0aW5hdGlvbiBwYXRo
IHRvIHBhc3MgdG8gZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldCgpLgorICoKKyAqIEBwYXJh
bSBkb3dubG9hZCAjRXdrX0Rvd25sb2FkIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gVGhlIHN1
Z2dlc3RlZCBmaWxlIG5hbWUgZm9yIHRoaXMgZG93bmxvYWQuIFRoaXMgcG9pbnRlciBpcworICog
ICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBv
c3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UK
KyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5n
c2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKgorICogQHNlZSBld2tfZG93
bmxvYWRfZGVzdGluYXRpb25fc2V0CisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2Rvd25sb2Fk
X3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisK
Ky8qKgorICogQ2FuY2VscyB0aGUgZG93bmxvYWQgYXN5bmNocm9ub3VzbHkuCisgKgorICogV2hl
biB0aGUgb25nb2luZyBkb3dubG9hZCBvcGVyYXRpb24gaXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVk
IGEgImRvd25sb2FkLGNhbmNlbGxlZCIKKyAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgb24gdGhl
IHZpZXcuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBjYW5jZWwu
CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIGNhbmNlbGxhdGlvbiByZXF1ZXN0
IHdhcyB0YWtlbiBpbnRvIGFjY291bnQsIG9yCisgKiAgICAgICAgIEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRfY2FuY2VsKEV3a19Eb3du
bG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBlc3RpbWF0ZWQgcHJvZ3Jlc3Mg
Zm9yIHRoaXMgZG93bmxvYWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9h
ZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIGFuIGVzdGltYXRlIG9mIHRoZSBvZiB0aGUgcGVy
Y2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAgICAgICBhcyBhIHJhbmdlIGZyb20g
MC4wIHRvIDEuMC4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2FkX2VzdGltYXRlZF9wcm9n
cmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogR2V0cyB0
aGUgZWxhcHNlZCB0aW1lIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkgZnJhY3Rpb25hbCBwYXJ0
LgorICoKKyAqIElmIHRoZSBkb3dubG9hZCBmaW5pc2hlZCwgaGFkIGFuIGVycm9yIG9yIHdhcyBj
YW5jZWxsZWQgdGhpcyBpcworICogdGhlIHRpbWUgYmV0d2VlbiBpdHMgc3RhcnQgYW5kIHRoZSBl
dmVudC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkCisgKgorICogQHJl
dHVybiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9hZCB3YXMgc3RhcnRlZCBvciAwIGluIGNhc2Ug
b2YgZmFpbHVyZS4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9n
ZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfZG93bmxvYWRfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX3ByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9wcml2YXRlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM3ZmYxZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9wcml2YXRlLmgK
QEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3Jh
dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZG93bmxv
YWRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19kb3dubG9hZF9wcml2YXRlX2gKKworI2luY2x1ZGUg
IldLQmFzZS5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZC5oIgorI2luY2x1ZGUgPEV2YXMuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfUmVzcG9uc2UgRXdrX1VybF9SZXNwb25zZTsKK3R5
cGVkZWYgc3RydWN0IF9Fd2tfV2ViX0Vycm9yIEV3a19XZWJfRXJyb3I7CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworY2xhc3MgRG93bmxvYWRQcm94eTsKK30KKworRXdrX0Rvd25sb2FkKiBld2tfZG93
bmxvYWRfbmV3KFdlYktpdDo6RG93bmxvYWRQcm94eSosIEV2YXNfT2JqZWN0KiBld2tWaWV3KTsK
K3VpbnQ2NF90IGV3a19kb3dubG9hZF9pZF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKik7CitFdmFz
X09iamVjdCogZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCopOworCit2
b2lkIGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkKiwgRXdrX0Rvd25sb2FkX1N0
YXRlKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX2NhbmNlbGxlZChFd2tfRG93bmxvYWQqKTsKK3ZvaWQg
ZXdrX2Rvd25sb2FkX2ZhaWxlZChFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX2Zp
bmlzaGVkKEV3a19Eb3dubG9hZCopOwordm9pZCBld2tfZG93bmxvYWRfc3RhcnRlZChFd2tfRG93
bmxvYWQqKTsKKwordm9pZCBld2tfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShFd2tfRG93bmxvYWQq
LCB1aW50NjRfdCBsZW5ndGgpOwordm9pZCBld2tfZG93bmxvYWRfcmVzcG9uc2Vfc2V0KEV3a19E
b3dubG9hZCosIEV3a19VcmxfUmVzcG9uc2UqKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX3N1Z2dlc3Rl
ZF9maWxlbmFtZV9zZXQoRXdrX0Rvd25sb2FkKiwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5h
bWUpOworCisjZW5kaWYgLy8gZXdrX2Rvd25sb2FkX3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAppbmRleCAx
Mzc3NTNkLi44ZjlmNTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcApAQCAtOTgsNiArOTgsMTMgQEAgY29uc3QgY2hh
ciogZXdrX3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2Uq
IHJlc3BvbnNlKQogICAgIHJldHVybiByZXNwb25zZS0+bWltZVR5cGU7CiB9CiAKK3Vuc2lnbmVk
IGxvbmcgZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoY29uc3QgRXdrX1VybF9S
ZXNwb25zZSogcmVzcG9uc2UpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHJlc3BvbnNlLCAwKTsKKworICAgIHJldHVybiByZXNwb25zZS0+Y29yZVJlc3BvbnNlLmV4cGVj
dGVkQ29udGVudExlbmd0aCgpOworfQorCiAvKioKICAqIEBpbnRlcm5hbAogICogQ29uc3RydWN0
cyBhIEV3a19VcmxfUmVzcG9uc2UgZnJvbSBhIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3Bv
bnNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNl
LmgKaW5kZXggYzAyNjIyZC4uMzU2MzFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaApAQCAtOTQsNiArOTQsMTcgQEAgRUFQ
SSBpbnQgZXdrX3VybF9yZXNwb25zZV9zdGF0dXNfY29kZV9nZXQoY29uc3QgRXdrX1VybF9SZXNw
b25zZSAqcmVzcG9uc2UpOwogICovCiBFQVBJIGNvbnN0IGNoYXIgKmV3a191cmxfcmVzcG9uc2Vf
bWltZV90eXBlX2dldChjb25zdCBFd2tfVXJsX1Jlc3BvbnNlICpyZXNwb25zZSk7CiAKKy8qKgor
ICogR2V0IHRoZSBleHBlY3RlZCBjb250ZW50IGxlbmd0aCBvZiB0aGUgI0V3a19VcmxfUmVzcG9u
c2UuCisgKgorICogSXQgY2FuIGJlIDAgaWYgdGhlIHNlcnZlciBwcm92aWRlZCBhbiBpbmNvcnJl
Y3Qgb3IgbWlzc2luZyBDb250ZW50LUxlbmd0aC4KKyAqCisgKiBAcGFyYW0gcmVzcG9uc2UgYSAj
RXdrX1VybF9SZXNwb25zZS4KKyAqCisgKiBAcmV0dXJuIHRoZSBleHBlY3RlZCBjb250ZW50IGxl
bmd0aCBvZiBAYSByZXNwb25zZSBvciAwIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworRUFQSSB1
bnNpZ25lZCBsb25nIGV3a191cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGNvbnN0IEV3
a19VcmxfUmVzcG9uc2UgKnJlc3BvbnNlKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAppbmRl
eCAzZjgwYWExLi5iN2VlMWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwCkBAIC03NzQsNiArNzc0LDUxIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGxh
eShFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBldmFzX29i
amVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5pbWFnZSwgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogfQogCisvKioKKyAqIEBpbnRl
cm5hbAorICogQSBkb3dubG9hZCBmb3IgdGhhdCB2aWV3IHdhcyBjYW5jZWxsZWQuCisgKgorICog
RW1pdHMgc2lnbmFsOiAiZG93bmxvYWQsY2FuY2VsbGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tf
RG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2VsbGVkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLGNhbmNlbGxlZCIsIGRvd25s
b2FkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgbmV3IGRvd25sb2FkIGhhcyBiZWVu
IHJlcXVlc3RlZCBmb3IgdGhhdCB2aWV3LgorICoKKyAqIEVtaXRzIHNpZ25hbDogImRvd25sb2Fk
LG5ldyIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkLgorICovCit2b2lkIGV3a192aWV3
X2Rvd25sb2FkX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkKiBkb3dubG9h
ZCkKK3sKKyAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93
bmxvYWQsbmV3IiwgZG93bmxvYWQpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBkb3du
bG9hZCBmb3IgdGhhdCB2aWV3IGhhcyBmYWlsZWQuCisgKgorICogRW1pdHMgc2lnbmFsOiAiZG93
bmxvYWQsZmFpbGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxvYWRfRXJyb3IuCisgKi8K
K3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfZmFpbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
RG93bmxvYWQqIGRvd25sb2FkLCBFd2tfV2ViX0Vycm9yKiBlcnJvcikKK3sKKyAgICBFd2tfRG93
bmxvYWRfRXJyb3IgZG93bmxvYWRFcnJvciA9IHsgZG93bmxvYWQsIGVycm9yIH07CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQsZmFpbGVkIiwg
JmRvd25sb2FkRXJyb3IpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBkb3dubG9hZCBm
b3IgdGhhdCB2aWV3IGZpbmlzaGVkIHN1Y2Nlc3NmdWxseS4KKyAqCisgKiBFbWl0cyBzaWduYWw6
ICJkb3dubG9hZCxmaW5pc2hlZCIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkLgorICov
Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJkb3dubG9hZCxmaW5pc2hlZCIsIGRvd25sb2FkKTsKK30KKwogRWlu
YV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIGZhbHNlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDkyNGRiY2YuLjg2MmQy
NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAt
MjYsNiArMjYsMTEgQEAKICAqCiAgKiBUaGUgZm9sbG93aW5nIHNpZ25hbHMgKHNlZSBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19hZGQoKSkgYXJlIGVtaXR0ZWQ6CiAgKgorICogLSAiZG93bmxv
YWQsY2FuY2VsbGVkIiwgRXdrX0Rvd25sb2FkKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgd2Fz
IGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KKyAqIC0gImRvd25sb2FkLG5ldyIsIEV3a19Eb3dubG9h
ZCo6IHJlcG9ydHMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuIFRoZSBj
bGllbnQgc2hvdWxkIHNldCB0aGUKKyAqICAgZGVzdGluYXRpb24gcGF0aCBieSBjYWxsaW5nIGV3
a19kb3dubG9hZF9kZXN0aW5hdGlvbl9zZXQoKSBvciB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgor
ICogLSAiZG93bmxvYWQsZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0Vycm9yKjogcmVwb3J0cyB0aGF0
IGEgZG93bmxvYWQgZmFpbGVkIHdpdGggdGhlIGdpdmVuIGVycm9yLgorICogLSAiZG93bmxvYWQs
ZmluaXNoZWQiLCBFd2tfRG93bmxvYWQqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0
ZWQgc3VjY2Vzc2Z1bGx5LgogICogLSAiaW50ZW50LHJlcXVlc3QsbmV3IiwgRXdrX0ludGVudF9S
ZXF1ZXN0KjogcmVwb3J0cyBuZXcgV2ViIGludGVudCByZXF1ZXN0LgogICogLSAiaW50ZW50LHNl
cnZpY2UscmVnaXN0ZXIiLCBFd2tfSW50ZW50X1NlcnZpY2UqOiByZXBvcnRzIG5ldyBXZWIgaW50
ZW50IHNlcnZpY2UgcmVnaXN0cmF0aW9uLgogICogLSAibG9hZCxlcnJvciIsIGNvbnN0IEV3a19X
ZWJfRXJyb3IqOiByZXBvcnRzIG1haW4gZnJhbWUgbG9hZCBmYWlsZWQuCkBAIC01Miw2ICs1Nyw3
IEBACiAjZGVmaW5lIGV3a192aWV3X2gKIAogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCisjaW5j
bHVkZSAiZXdrX2Rvd25sb2FkLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUg
ImV3a191cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKQEAgLTE4
OCw2ICsxOTQsMTcgQEAgc3RydWN0IF9Fd2tfV2ViX1Jlc291cmNlX0xvYWRfRXJyb3IgewogICAg
IEV3a19XZWJfRXJyb3IgKmVycm9yOyAvKio8IGxvYWQgZXJyb3IgKi8KIH07CiAKKy8vLyBDcmVh
dGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0Rvd25sb2FkX0Vycm9yLgordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19Eb3dubG9hZF9FcnJvciBFd2tfRG93bmxvYWRfRXJyb3I7CisKKy8qKgorICogQGJyaWVm
IFN0cnVjdHVyZSBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgYSBkb3dubG9hZCBmYWlsdXJlLgor
ICovCitzdHJ1Y3QgX0V3a19Eb3dubG9hZF9FcnJvciB7CisgICAgRXdrX0Rvd25sb2FkICpkb3du
bG9hZDsgLyoqPCBkb3dubG9hZCB0aGF0IGZhaWxlZCAqLworICAgIEV3a19XZWJfRXJyb3IgKmVy
cm9yOyAvKio8IGRvd25sb2FkIGVycm9yICovCit9OworCiAvKioKICAqIENyZWF0ZXMgYSBuZXcg
RUZMIFdlYktpdCB2aWV3IG9iamVjdC4KICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggM2M5Y2U5NC4uYTU3Nzk1MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3By
aXZhdGUuaApAQCAtMzAsNiArMzAsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsK
IH0KIAordHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CiB0eXBlZGVm
IHN0cnVjdCBfRXdrX1VybF9SZXF1ZXN0IEV3a19VcmxfUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0
IF9Fd2tfVXJsX1Jlc3BvbnNlIEV3a19VcmxfUmVzcG9uc2U7CiB0eXBlZGVmIHN0cnVjdCBfRXdr
X1dlYl9FcnJvciBFd2tfV2ViX0Vycm9yOwpAQCAtNDMsNiArNDQsMTAgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0V3a19JbnRlbnRfU2VydmljZSBFd2tfSW50ZW50X1NlcnZpY2U7CiAjZW5kaWYKIAogdm9p
ZCBld2tfdmlld19kaXNwbGF5KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KTsKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2VsbGVkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfbmV3
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKK3ZvaWQgZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqLCBFd2tfV2Vi
X0Vycm9yKik7Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfRG93bmxvYWQqKTsKIHZvaWQgZXdrX3ZpZXdfaW1hZ2VfZGF0YV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIGltYWdlRGF0YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgc2l6ZSk7CiB2b2lkIGV3a192aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IEV3a19XZWJfRXJyb3IqIGVycm9yKTsKIHZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hl
ZChFdmFzX09iamVjdCogZXdrVmlldyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQy
NGMxOWQ5OGI2MjFmZWFkZjNlNGQ2MWY3YmZmNDcxMDdhMzc0ZApHSVQgYmluYXJ5IHBhdGNoCmxp
dGVyYWwgNzQyMQp6Y21haTNieSQ/IXdeb3JGNUpYVD84NUtsd2RJJUFPZnVYeHdWclhWeTJtdUtK
TmtLIztnYHE9MlFqbkJKcShNPzcKekM4USgtcjFae3MmK28pTl9kZlN+bzt+d0BZcD95VCp6ZXdk
dGlgUF5nQkZBYyEyI1RAKnskYGhSanB8TkM9ZCs5CnpTPWEtXyNYLXMjdGN7eTM1SnI/fWczeHgz
Wld1Zlc/UCVfWGstPUV2dFN9TjEwOVE5VyNAcT91blpnfVcyUko4bgp6QCUtKiMjOGRMSUJ3dFFp
TWhASGk5Xm1eeFlsKDYpKERzMnpPaHsmV2E/bVVhMmxtdVlRan1qWVhuREw1JmByMVkKekYzSmcl
b1RfLT9ZVm80V3t2QTQ9MEdTYFYxcD5OdGMoe2dZbUQtMWlPI0VSNmVnUHtpSVhxfldMMmxOISE3
MntHCnpWNkZiSk9uZjZiM24yTU9kVnhTN3F9a3N4I0o/Z3p7dlZQMjVoKDtIMCl2YkVKKi04MlV2
Pjg3Qj4oQnBhUlpiPAp6PmN7dEUlPUw8YiZ0OWl+Mkk7dGtlI0deLUVDQFZII2RIckVNKnFvMnxN
fHdgdE51I3RDQztZflg1UHpPJSspUzkKelh6S25YSklKR0NwfFUxPGlmZ1BVPjZVNjw/e3xDQGB3
Wk9tXnlifDkoKF50USNANCZ2NmxiSHdIY1hhKCoyUUBvCno5UXZnI0E0blc7JUpJMj89X2JJRzAt
a2NZNzhPMkVQMDd3a1FVSllmaEhCMCRjNTlzKjU8YkpTSkhHeHlKOXdHLQp6KlYhaCZeVXJlRlg4
ZiVqNTllUC1wSWViPUtYcWw/OT1Ed15lRmFEZDIxQWY0PkZFeEtAPmgwZHIySjBYdnt6bHAKemRY
QyVRemYoOW9oMjFRfXReNntIN1ZqWTIpbjBlNEQwIylYZGAxOUg9Xn09X3tOU1RLMG97MTZ2cmdo
cHRhNFAjCnooZDk+KXZYVT51YHUpVldYb3F0MFpCYFBgYEA0MGNIQzRQcTdQVkllRX1aeSgqM1Fj
fjZJYy0xYmYpNk5IWC1WaQp6WnRIdmZQSUUpJjsjS340JE0xUz4xcFRWbXk2ezZOQzhYTE1vSkRu
eT5lZGBrYWRYLTxBVDlqYF9Celg+Y2ZwN0sKelJMNTd9MXxDKEtGIWVSTHJrT0piK1JRPnZSdE9y
PlZEZX5sQSVBKll0bDx3RSQyaXM+JnVuTER3JUV8ODdjcUFACnpuSWdLe1ROOTw5ZSYjK1U3dz1D
QSt+fDR1VVIofGxgNFpBbj11RHRCfEgzcnQ8eX0wVko0MThDI25FYT51aVNKIQp6SjVGVjlBbnpB
b0dWV0pmIVA5MXNBMiV3U2UlNlZiLVU1fTFyTXhyc0pQWXhhamo3UiNHbSFFQz9jTlFrSWxYTjQK
el5JVjVaRyglQ1VYbThhY0hPJFZAYWpTMmAtTVUobzNIYFVKIUozQWY8SlkjMUNrPjcyZHB9Klhw
UkNQc2FjI3sjCnpucTtmKUhaVXA2bX0pZlR0RHUmKGp2YWpWR0hjOFpWUEpvYDZNRFlqUjE/VmVW
Tm9OQUtPczx4WEVCRWJWRFclRAp6dnBnKWJzUjNFZXFTTXAlUF9WJlApRlVsTip5KmNEMXNBJUVJ
eXEkfCk5bGpYbkQyQVhVfFA0KDc+U004QlV2d24KemowYiNoejFMdlRfdjROJCpOPmp1XjJ0PXIl
cnY5cE5LUVBFXkpUJEZse215cyZXcVV+MVhqTXd1Znt5KiZ6Pk9ICnpFUWA4KlVUYmNxeXk/LWNQ
JiluITR9VjgoSWBgMDFpTmZCfFokK0VXVClFUlMxQ2lYPk1jQ01pN3RpTG9SSWFMcQp6KH5MYVhS
V3BJSzVifCQ2KU1rc2klTjlTdWFAMUd4XllELWQ2TmBITiFVdy1OY28wIyNeVlY0S0BUNUVseSlw
RiQKenNrKXFjSi1uISNvIWpON1dmTUwtaGtpNHo0U01PIz1OfU10PSVjTl5lbzhJfm1AX3JuIzMx
UkAmMlk0eC19TzVXCnp7WUlteVBgNHZaXj5pRWtLayFpIVJ1aUhJc21yO3c5UGpKcHJPYUhWP3ZB
XypSQmNsYXtBSngkSERNM2lFMTcmTwp6cD4lPWpkYG0jJHEre2lsbVJAfStDOUJ1I0oxSS1EPENZ
RVFPez1yYXRUVk1NLVdLcSNXRl48PV5kPipsWmticUwKenJ8JDFnWHxVQVp4IUk5dHVgX2pUSitI
eHlrMUgkWCpyLXE/eGdRb0R3ZHZRYytnMm9vPTgta2ZkMEx1Ml9MKiorCnpfYWtPSEE2KVpKQmB2
OzQ8WCNRMG4mUyZGWlBZQC0kemFjfjBUfjkwaT5We3tmZiZOa2Jte3V1Xnw+Z18oKSlNbgp6MytR
TmxyYWFyQkptc3xZY3h6MD4kNjkwPlQ9MThibiFaY2QrcFotZll2eFQ+KDhSe1VWMnRjOXBOfFF1
MFVnaDQKelRSe09maXliWktMR0tBTl9LWD8xQ18kJWp5flVyMFRQdWtJR1IwWSpJWkAlfWcofn58
MytFNCU8fiR7eDs0PTk7Cno2bSZMUD1vZCo8KTZPPjBBMUNmIW9LOHtURG8mcGhzciVJaykqTWYh
M2xpalVTWjlPdT11aH47O2hGYm5mIUUoNAp6PVFSNHQ5aGAtNCV0cE1adlVpQU94dXZXQnJVVSoo
YWdnJT52d3F1T1A1clZ7VWUmQlU5RCN3VDhWJVU1UnAkdVgKekFjRXs2RnRFNG4/ZmhuKSVNUDch
WEUzeE84WnUxWEh6cyMyXmRwb2BoYVRVNGglel4xNTA7WT5CP300a3ZWUUlUCnpaRW9gJWpybHFE
MHpGbmhFe0MpSkh3cnpoLVZYJVFHcCpLQU4zaFEheU59Py1YOGhzJmBKUT9kI2JuRUxAMnhgbwp6
LXRkfE1wbCQwJDJmdHdyVlZTdyEpTFQkKHB4ZVdBbF9mUjd5RzExZUBmejQhQj09UntZZH1IbHA7
Nzl7K3ImM1EKekA/V2VEMHV4ZiFTKmhNeHdST0lWWkoxTXtISns4WktCWmFIVkQ/aXV6czA4K3FX
SjA9XmFqUUArdkw0MSk1QTMtCnooP19EUi1Ncl81SWN1Y3YjbnxhJCZaQSQwP1VHentJP15NUnk2
WW4ldV84KmNqQTQtMUdrentGYHVkbFRkNnUkSAp6RD82SjUhKURYbyVTP3U+JGJZJiptREx5VHUz
NGAkcyNMNSF0LVJRNFNDam1xcTcpVnVFSyhUViQ5XzgwRFhZM3oKemJ3TlRydmZ5YXp0MXlpKiZH
eypuZ21SSHkmQ2h7YGQjYzBTQGx1enI9PTE0blowODhQKiZvaFRkaT4kO3QoUlJgCnoqbzA1eStq
QGR7b3B7RlRAI2t2YXNrTTcpKGk+LXtfPHoqdiRvbm1yWGU9Xik4RiRyQiZEQyRVeSYhSVkrJWg9
PAp6YD0+fkBua34qTz5VczdHNT5uPk9XPXBvJDE9TUtrQTk/U3k2PH5MWWRTYVA5cGBEQlk1Mygz
KCNKd3ktLWh+bF8KenlAWF9uS2x7TT9VdkdVO0FzOD1xa3JVdXEkMWE0K1VVLWZtKUFteVNkY0Ze
X0xXR2ElbHNoOVlCaV83QmxkNXxuCnpaaigoSTFKNDViUXhgIzdKdVU+OVJ+VDZUUlFrNFZ0V0oy
dUZOdk9tV2F2aiQhYz49dFZFZn14MilIPTNhSVFnbwp6IUI9eVpJYD5wYTVWZSRLeyRYVVJONE12
JnFreDl8M3ZLX1hgVnhpejZQd3xmJVNIXnZjRndlPWBSUzFFe19WKFQKekxMNmtGPDsmJVo+K096
MEZJaChrZ1FnPjwhfSFVLXYkclRLV2VPMSQ4ZHJeKVhpP1lUcHBtKG1nPV5uMDkmQipaCnp2LXlp
QlBTNmJxVzttaThQUUVGUHpITFVGNHkyeHU5fiVZWTNVT2NzajZHUlFESnVKZCg1UkdoRnVCIzU1
ckh2Ygp6ZUg2Sl8tPTkxdDBrNm99RlpTaj9QX0EweXYwQkA0a2V2SS13OyRefWRnTnZucUFQS3FZ
fjJCUD97YXAxcFFMY0MKeiYyRzVGRktyM1N2VW5wX0NrOFdaZ1lVKStkQSMlaD8qe2I/QlVZYmBf
a3ZmQU1qWkZ6O0BaMk5KX1VWVzdjOWIpCnpaKlh9SU5lZiZvfDFARnxDUnxYYmFeLVFSN2pNYTZn
VW5Rcmt+Pnt6SyEoJTt5RX1IX3gjbjRIYzlaYzMmKCRpKAp6MUBmOUE/SW52PFZlSFB3STRKa3k3
bUhCeHN3a2xsWFkkX2c9QXFHMXJ9a2gkYHB7SSRjTV51RDlWMn49NTdgcFoKekNaPGdLV0Fqdj0w
PUAyKEVRRGB8WU98JCFTMld2cVpVM0EmaCg2aEdqbVJqdUl3eyolX2R2NEJ2ZVU5SWojQlNqCnox
M3hFTnZPUmZpWmYkeispN3NLblZuNElFUExwR3FWPlFRezl3VSpzeWU3K29Ra0N7UTV0MyNuK0te
NlRnRnxMcQp6MjlpaExGdVJ2LXZZe2d8e1dGMns1ayotNWR8PSl8KFcmYCQkWHYqaTNxYE99KWVe
SVdaYHdNK2pfbHBPaV5eVSMKenl8JVFra2dMOCYlekgpb0psK2llanBrXzx4WEByTSE8LSEjbWZp
eG9CNjl5XkBwPFApZXpBKVBnO1lSaU8xSFc7CnpeNWE4KlFnfEwjPmxCPyg+JGlZPitAcT1nQ3ww
JFU/NG1TY2NsYmc+Rz0wcllkUiYqd0RCeihYPCRfTTUrPlBpVAp6MTslJDMtaEYkYnZSTj5IUl8l
ZFZvYUJrXnhTMUB4SCNSbFNKNGo9MWpkNnt5X0lUQj5LdU5MdENCPFpZbUlTWmwKekAhcVNKJXhD
Pj8tanIoPmVWMCYjejswVHJacW9kP2F1OE0+R2ZATn43ZSY8QWF6RGA+YUA7Nn4pPXFnS3QpMz5j
CnpSKjJIKi17ZGJaM1J4Xmk4SX5aMF5Mdk5iMG1gNTYpaW4+VmQkcEVuJVQxd3p1SF91bkhhRSpT
XmBAaEFiV0wmMwp6UzZAPFJuZ05xfnRfWn5NcFo1fEdJfmd6WS0waztvZUE2Kn5veUVTb0R3JVBp
TT15bmErUG07emU+K3xgd059OyEKenhpV09SLWg/OTlRK2AyRnJ5VDR6Y3tGVCNlWGUkMktkeDFD
PnEmNXY+OHhKc3JHcExJSnh4cCNfUDFFTlR8SUsqCnp2YGdSZj9kMXIlcUl4P2MtQyp7N01IQWVR
PnNpRyliTGtkeHNWaTU9SHc3KzUtbTlCN1ZBU3JEKW0+YWlFVV5SPwp6VHFEIXQ7RGFPe3MrJnVC
bGlRbCFwaTZtQSo3fCkxKFlWMEVDalJYMERYYyFNPnt5UW5je2RANCk9MitlJD99Q2cKejxXQXpO
JGAqP1diJGUoV3dwNT1fUUtoeTd3OTk7cmhpPno4VTVAUlpnNzchREFAWHNCV3ZXanZQbGVZVnMy
ZE0xCnorM0kzRjNvQVEtZERxIzM3Pi1CcEpDM2MqaktRdW5vWFh5clRlbShnKyZAQDFVVTskfXkm
anBXdE1NaERUNVA/fAp6az5gbnJ6JGFEZjRjR2smazlhOzE0TXdXe2VHLW1aK1UxenpUKzVeVE9m
cD40T2pzKVdDfTBRfHMhUmopN19TN18KemErO31FIWVsZElUWEBZMTNRXilLKl9gUXhYUVRyaWxG
MmtnQEI3JDwzRExUVkl6TXZ+MituTUooUDNkKF5IfUwjCnp7OHVfP3F4K3FRNTY1dDl3cS1vPTJV
cGlOampEQFpOcXFhVUdmaFMqazdQJUAySzlvUks3YUIkPTh6NGhLQTxmYAp6Y3lEX0F5YyglYjEp
PzBVN1VoQGR0VV5oT1pVfkNjXlZCKFgrOXclbSM5cE54NFJQU0hSfnlCQHNuaXghT3VQeyMKenAp
YmUkJFQka313KCo9U2Q7YVpaejxpeU5DNiFAKlRCJClTQk5QOT9qbHpiYXpNT2NHNmBJTkpkTEw+
YlgzeUlkCnoyQF84VUo9YD9gLVomUzkoI0EmRSU5JE45QVYqQHJwbWVzZGJVaX5rTTdvVkNlNHVS
aUQ2NkBLTjxtZzBGNVNyUAp6Zz1vMkx2RFA7fDglI0JLQlJsRGQ1QVRrfVZfeWIkJHRVJjliTk41
PE81cHNJSEJRQn10SnVaJC1wPFNSUEdgYE8KekFGYndWWHhwMVJvVVU+c1dWN1czTWB+KkxrVzJ5
LU1aKUtVKTk8YEQ5ZihiciRqOHdIN2VxUWBvVlh7QWFGfVUyCno/fEM9JHl8djxOJVc9NHZId0Y9
amR+aj5zZ1I8ZjcxK2tUPTRebFlHNGx9eUprV05gQUpOMGNoNSRBUygkTHQ0Wgp6PGg7b29zcGl1
aVFWc2R8WFB5UEdyNDt2UkkqKllMJjA0SW5mNnhRUHdTLTdsbndRO210WFdeKDIpZUN3NkxsdmYK
elYhWGAlIzF6d0NZbUl5eHUxYDJzSmVfT0wrZlFYTG17MHZReD9FRUA+YnYyPFpmU04renEoIVBi
JVJoVVV4ZzBFCnpXV3VsVmQtSlh8Pjw1bVZCNHVePiF5V0RIclVweGApO19+MElvNmJ9XlNIKGdv
aXVRcUFNWGZXcGh7PTVzPDVOIwp6amsjc25xflZDVmh1IWZmNlMtUmM1ZCVZeTR3b3dOIT48U0k0
UEtqM2RuWlQ1STxsSSgqeGM+JD9XTn0ycGBxTzcKenJLTElScWE7UnhAIUA2QmJHU0xOSF9oRnhx
NX0qQXRuU3JyaiFXNXR0T1VKOSlLYW5uUD1FalUzTjQ8PyV4JE5BCnojS055cC09eWJHYC0kQTR5
XiZ2SWFkSTlscFZUMipLfDgwISo4a00zSDYlQSRPNVVJSUlIdH5PQ1JJKG1gPmFwawp6SUAhXjdX
TE1ZI3NKbSlDUkJrbCN5fDNCeCR7eHp1MXdWMytlZlo8P09EaDwqPUUlQXJHVXRWQio3cHV1dntn
S3cKemBDRFo2SmVVeU0qTkg9cVdYbFktb0gyZCFfNDIyJXdiMyZZP1ctZUV4M2ViUXRxdndWcns5
IU84K3lhd0wyODI7Cnp3N3Izc2NhP2BaQ2JeKU1mYnpLfnRjRGpUZSY5cDswPCpTOFhwN0luY3pY
czYtKloydUUkLXhDOCpBTEVse1g5Tgp6M3QwRmY2VmdYYyoqWHZARHV7UURnck9LT0NjV3oocCMx
X1p2OVl+Xmd1SHR7eiE2ciZpei1ZSEVBQWJ6em0yJkEKemItVXV6X1NEQXFnMF4hRVpFPipzUjUp
I01YenZzYXN+RyNXTUwkQUA+d1NhOHU3UjNUQmFeazQ5QklsYipQQH4kCnp2ZFhsVFB2WjZVdzEk
Q0lUeXBjblM9KjF0aytGJVgzVD5MUHV3a0p4JXI4RihMe3VWMUYoVFgoTilUYjxibCpzdgp6VnBM
bWVDd04tbTlyYilwV2BGOGkydEx4UHBQQmRiZG10V0B0ejJBfnlaTG19WkA0UilnOzZWZit9NExM
ZXc/US0KekdRMUFGZHx5Q0UmX2ctO0VqVk1sJVppVjFafCtPd2AwfWJ0YyFvWm9NQ3Y4VztWZ0A5
JChDY3w8NnE+QjhKQE49Cnp6RzdrUCYlT203WUBsUn0/SGNUMjVIbFJ3MUReNUwrKHg7JCphKlok
QFl2Kz9YdWdeZCMyKERHaE1KVGBaY3xPeAp6cU9FaE17TilxR3B6TkdjSlVwRndXIU56cGR3WUt+
c09wLTYlS2ZNWkleeEtuRSpfZj4lfX5wNWt6ej9OPWw8eSoKekBgfXA2PX15S3woZUJEdzR2eWpz
KFExUT1ebjkkR2doWTt7aV90d0NPcU1ycVpjaX1Ya25XWV9GSkdoUXVKaTl6Cno9d2RSezx1VF90
VkFfPHNQTH5Db3psTT9zYEI/Mi02Mnh8YjBGSW5mVjNCJWhSfmZkQCZMaHA8R3dZPSorVk8kfgp6
bWhhQTZiLWN9IW5iTUpWJnFRLT4tWlFyYF5oS0YqRGNSbWJybW4wMDRCa3YjVCM/Tn0qJlREaGop
O3NlMlFjVVAKenBQZCNia1cqfjE7JWhzNU5De2lmdjZQPmB6LXFROFByRmMjdHR+LUlhcjBPbThS
VkMjJD1FS01AMlB1cEIldHZvCnowODU9PyVFcTEzcmZRX2hTOVV5KkRPVSNJQmB9NClmS0ZDZ2oy
dTU9c0I+PEVlOXoxT1QqamVjRilYU29OMDlRcQp6NXd2MHxiMEA8SlQ9MWlLR2A9bjdTS2lmdUVV
TzNkdGdkLUMpT2NaUD91LUNvOGx4QGkqXnQlYHtsVWxzXnRHLXcKemNpeFhvaENnNVZAcm5mYzch
VUhxVk4/MmdzK0diO2dCd1FqKyFqfCkpQ0dvaWY2UihyKTlQYjclJHw+RlFNVU1DCnpULUBoPjJ7
SUtWLSpOZkd3az04Nyp1RnYlI3lPbSVWVlRJZG0lQ2RmbVBoJW08d3hvQmV5VkctTUhtWUFrMlcm
bAp6a1Y0PWNaQHVyb29jZGwldlFDYFJ2d1dxP3tjdmhIcTNnJnBmQSYpI0AoQUBqX2Ajc3txR3ox
KnY+JCF9Uz55M0MKenRoI0drT0A0KERkTjRPWnBFTlU3eiQ3JFg+OzI/d3QqRm9MeWhfIzVFeXhy
WG4/NikxSTZoT1VMV3cjNHFnWDI/Cno3eUMzJXVHIX50ZiU+KFk9PncoeUpIRjFUQFppX3xDSjd9
Sy14KWstWXRmdTxSbVU0Mj1zJnF7JSo1PCkjZkV3TAp6JThZUytuV3V2Vz80WSRtKCgzME5ydXgz
OGZvQnFmJjt0Xyp6b2FPP1NlOGEhcElHWDxvVzJDbmhYal5CbiZyPlMKejZZdT1geFcmZ3pgTlVu
WkxDeTxQI2pkbSQlPjBFcW5PSmBFPDQ/WkEpTDwyQUokR0k5c1hhRWdFMjNle15kQClQCnp4S01F
fEooWnxMWXs/fjBINFVAKSY8KDgke3RycXl4YWZ1KDdxOUxFVDVYd0ZeQkV7NmBHYkFiT3ckMGRp
dnQ1cQp6MDd1eFRfUCRiXkBqfU9WWXJUQiFtNXgqTmlmJE9oam9NXldEODRiYlAwV2VLX0lRMjJY
MlZlflU2Wk5gY1pHSUMKenh+fWZqQFZJVjZffHIpMSN1eEd2TitGOFo2I0JVSXB7clhJaWNTSVVR
VndiRFNfM3hVUyZtckZgTD5ieVZwfTV1CnpBU0B2bEl4aUhSTyU2el54T2xsbng9LWwpejZlTEVV
YihKXmAtZno4bk9pKVZoeEIqNz5uTkBFNmorWmFacEBLTwp6SCV8VGZAcFg4PmFFTnpvQEEwQ29m
YDZXUCNOJmladUpTQk9SfEV6bykwQV54SlJ0SzRLPEB5ckhNP0F0TVJpcVAKejxTNFh2PTJDIUNj
WDdGPnIlR3BAZUBANGpkdWJJbDtDaD8tYEBKYEc/R2MoP1IpWWluV0VUfTw/KkFfKE87V0x2CnpS
TDRYPnB+OFJHRz09fUZYPS1+cFY/YnllKT1kV0VZS2dhVmNFYl4/diYydFRiMC1XKVQ4aX1XRThB
SU1AYUFySQp6SUlJPjFaKVhpNG0yWWlhZnBGcHJRQnp0UD1WPkdlNWs+KzlWUEZeIzB0Tz8xcTlQ
Q3prYjt9SnFuKUpgKjJXUDcKejFPcUApdTlnX0E4JkVfUDBzeFZXa3Y7Xlc1RmBNRUdJeTU4KnhB
XitrPTZrflQ1Y0Y4VTchZVkyPz9IOUZ+JmZGCnpxJDtjP3Y4TVc7czt0T2c1JlRoS2g5YmZMUGol
VmtuRl9XUWNyb31PQkBqfl5SKz1pSiVINkZRY2s0T3hzbUFBUAp6WElqVWxCRj51RVoqOTxeQ0tY
S3tINGZIeVppUz55RjY7OTVQcDJ8bV4lVDE7Yyh1cGM8KHdeaikoe3NjVSVPPzcKenpyTVhxKDdn
Rm1hWWc4PmspVCUmRWZVaFdlUWVINDl5QFBPO0Npb3V2dHFRe3VLVEw9WFRqMHdge3k/Nyg4KGMr
CnpFRz42SFE7aj4rRVZXZ3x2YCZqLVBOZ1QqNV8mWTFPPTQ8aDRDb2ZlbmxxaHlSTX55eUEpXlVP
c0MoVzE0VkwpdAp6TDJ2UVFGVEIqUDRRZz1ibkJSdiZjaiMmK1d2Ni0yRG9PQ0A4MmElM244RyVs
RkV7Wm45ZnQ9QitkTThobEdMeUMKelEpcz9Bcj9LITtYdE1kflZXWG1pI0FsQDh6OChKeUtTY2pa
PGV5WGtYfU1kdGskOW52Y2dPc2VOfUljNE5TcEQwCnpHcnx0PD5WfnA0JENHd2krNUNAcDVkY1dm
JmRTWiEpZCs/fTBGZStkNUR0ZHtWSXJiSHNJYyh3ZmRHU25xeWFeTQp6ZmhQYUc7ZVFia05hQ3Bg
MEhscjYhUD0yfTF3aGlhWVhiaHAxMHYqfmpScklYTlEmbTReTl8jSTY5WFg5XlMyNX0Kejlnbmxy
IW5oZk1oYGtHdEhwYko8PFI3cXF0QDw2bXkxNU1vcTs4SFVhVFpQajBCS0BlYXFmNmFqNEtkQUdO
QjFsCnohQzJYdWxhMnooMDc0VzI2b0VyY0t5ckFUeUVDeH5xRDlRNUlvOCNnMVl6an5MVE0zP2ZR
T3dXTXBJNTJxeVRneQp6PTI9MWxnZCNkZndCUU9QYng7MXpjOUtjYkF0bk8tPjVlUGxVcEBmLWEp
UCt2UGNLTWBSa0V7a0gzSShqbD1PK2gKenhzITc3X2VCMSFXQW9idiVBOXo3YVc9JUxaSFBoczRq
S1NiYkgtcSRFSi0oayhTS3VzXmJISndTYShPcXxOYTNKCnp2NmFvU0huJVpZS3s7dk9mMjh6MyVA
dHgwUXRvY0hJSmBKbzdMNWpqO2xnMEJGcCZlb0Z5ZXJOITk8I1hnXnxSNgp6O3Y1dUF5aUpJNXEk
cUtxeypYZj9oeWY1Z00jUVY/NCtzUGFmflpTVWB3YztZZ0Emejx5S0xvZGlUUkhub1R4KzYKemdB
PHtWQm9tfVRmK20/RHU3UyFEfEF9K0l2NTElP15EeUVaTmU9dGRFSFFjK1YqQmQwajJMbFY2YXBv
QkVDTG1VCnohVWUlbDl4I31QX2l0SkMjQUI9aFU/Mm56QVJfKG8wRmVqOzM8MHpUe3ZrdWM1WDlf
fjl3N0VWR0I2bElyMUpsZQp6TEJZaEZ8NUp2OWl4U1ZzS1ZASmpean5eSmleVG8/cnloYlJ7Rmg3
Xnt4M1d2YVgwPl85dWtXRHc7b2pWVXBeeGQKenFXQGx0NiNiaUJIQHJGVmcyJDdudCEzd3BBKktx
WGlOZ2BPYFRHbjJLbmhyRTkxdWR7NClHI1RrTzNNMiNnVzNZCnphRmkkKkNXVkJkcktNent2TGF3
ODhaSGYlS31rISZwa1JhcTtRdj00OVJlQWdDQ1YwSz5FUDxfMU95PmJENm9gXwp4Q18pTT9EfXFL
S0x7SkR9REpjO1Y1ZDtiJWpZTFZJTkt8JXBHc25DQS1jbikrQV4+aH5TdjU0XnpXe25AX1dKKzsK
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZG93bmxvYWQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMmU4YjAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfZG93bmxvYWQu
Y3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNp
bmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVk
ZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0
Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNs
dWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0
ZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdURjsK
KworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGlj
IGNvbnN0IGNoYXIqIHNlcnZlclN1Z2dlc3RlZEZpbGVuYW1lID0gIndlYmtpdC1kb3dubG9hZGVk
LWZpbGUiOworc3RhdGljIGNvbnN0IGNoYXIgdGVzdEZpbGVQYXRoW10gPSAiL3Rlc3QucGRmIjsK
Kworc3RydWN0IERvd25sb2FkVGVzdERhdGEgeworICAgIGNvbnN0IGNoYXIqIGZpbGVVcmw7Cisg
ICAgY29uc3QgY2hhciogZGVzdGluYXRpb25QYXRoOworfTsKKworc3RhdGljIGlubGluZSBib29s
IGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7Cisg
ICAgcmV0dXJuICFzdGF0KHBhdGgsICZidWYpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxs
YmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFy
KiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lkKikKK3sKKyAgICBp
ZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRWluYV9TdHJidWYqIGZpbGVQYXRoID0gZWlu
YV9zdHJidWZfbmV3KCk7CisgICAgZWluYV9zdHJidWZfYXBwZW5kKGZpbGVQYXRoLCBURVNUX1JF
U09VUkNFU19ESVIpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZChmaWxlUGF0aCwgcGF0aCk7CisK
KyAgICBFaW5hX0ZpbGUqIGYgPSBlaW5hX2ZpbGVfb3BlbihlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0
KGZpbGVQYXRoKSwgZmFsc2UpOworICAgIGVpbmFfc3RyYnVmX2ZyZWUoZmlsZVBhdGgpOworICAg
IGlmICghZikgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNp
emVfdCBmaWxlU2l6ZSA9IGVpbmFfZmlsZV9zaXplX2dldChmKTsKKworICAgIHZvaWQqIGNvbnRl
bnRzID0gZWluYV9maWxlX21hcF9hbGwoZiwgRUlOQV9GSUxFX1BPUFVMQVRFKTsKKyAgICBpZiAo
IWNvbnRlbnRzKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRl
KG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
c291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAg
RWluYV9TdHJidWYqIGNvbnRlbnREaXNwb3NpdGlvbiA9IGVpbmFfc3RyYnVmX25ldygpOworICAg
IGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoY29udGVudERpc3Bvc2l0aW9uLCAiZmlsZW5hbWU9
JXMiLCBzZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwg
ZWluYV9zdHJidWZfc3RyaW5nX2dldChjb250ZW50RGlzcG9zaXRpb24pKTsKKyAgICBlaW5hX3N0
cmJ1Zl9mcmVlKGNvbnRlbnREaXNwb3NpdGlvbik7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09QWSwgY29udGVudHMs
IGZpbGVTaXplKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNw
b25zZV9ib2R5KTsKKworICAgIGVpbmFfZmlsZV9tYXBfZnJlZShmLCBjb250ZW50cyk7CisgICAg
ZWluYV9maWxlX2Nsb3NlKGYpOworfQorCitzdGF0aWMgdm9pZCBvbl9kb3dubG9hZF9uZXcodm9p
ZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudEluZm8pCit7Cisg
ICAgRG93bmxvYWRUZXN0RGF0YSogdGVzdERhdGEgPSBzdGF0aWNfY2FzdDxEb3dubG9hZFRlc3RE
YXRhKj4odXNlckRhdGEpOworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBzdGF0aWNfY2Fz
dDxFd2tfRG93bmxvYWQqPihldmVudEluZm8pOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRf
c3RhdGVfZ2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FEX1NUQVRFX05PVF9TVEFSVEVEKTsKKyAg
ICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2VzdGltYXRlZF9wcm9ncmVzc19nZXQoZG93bmxvYWQp
LCAwKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9nZXQoZG93bmxv
YWQpLCAwKTsKKworICAgIEV3a19VcmxfUmVxdWVzdCogcmVxdWVzdCA9IGV3a19kb3dubG9hZF9y
ZXF1ZXN0X2dldChkb3dubG9hZCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisgICAgRVhQ
RUNUX1NUUkVRKGV3a191cmxfcmVxdWVzdF91cmxfZ2V0KHJlcXVlc3QpLCB0ZXN0RGF0YS0+Zmls
ZVVybCk7CisKKyAgICBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSA9IGV3a19kb3dubG9hZF9y
ZXNwb25zZV9nZXQoZG93bmxvYWQpOworICAgIEFTU0VSVF9UUlVFKHJlc3BvbnNlKTsKKyAgICBF
WFBFQ1RfU1RSRVEoZXdrX3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KHJlc3BvbnNlKSwgImFw
cGxpY2F0aW9uL3BkZiIpOworCisgICAgRVhQRUNUX1NUUkVRKGV3a19kb3dubG9hZF9zdWdnZXN0
ZWRfZmlsZW5hbWVfZ2V0KGRvd25sb2FkKSwgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworCisg
ICAgQVNTRVJUX0ZBTFNFKGZpbGVFeGlzdHModGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCkpOwor
ICAgIGV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIHRlc3REYXRhLT5kZXN0
aW5hdGlvblBhdGgpOworICAgIEVYUEVDVF9TVFJFUShld2tfZG93bmxvYWRfZGVzdGluYXRpb25f
Z2V0KGRvd25sb2FkKSwgdGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCk7Cit9CisKK3N0YXRpYyB2
b2lkIG9uX2Rvd25sb2FkX2NhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqIHdl
YnZpZXcsIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRvd25sb2Fk
IHdhcyBjYW5jZWxsZWQuXG4iKTsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgIEZB
SUwoKTsKK30KKworc3RhdGljIHZvaWQgb25fZG93bmxvYWRfZmFpbGVkKHZvaWQqIHVzZXJEYXRh
LCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19Eb3du
bG9hZF9FcnJvciogZG93bmxvYWRFcnJvciA9IHN0YXRpY19jYXN0PEV3a19Eb3dubG9hZF9FcnJv
cio+KGV2ZW50SW5mbyk7CisgICAgZnByaW50ZihzdGRlcnIsICJEb3dubG9hZCBlcnJvcjogJXNc
biIsIGV3a193ZWJfZXJyb3JfZGVzY3JpcHRpb25fZ2V0KGRvd25sb2FkRXJyb3ItPmVycm9yKSk7
CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICBGQUlMKCk7Cit9CisKK3N0YXRpYyB2
b2lkIG9uX2Rvd25sb2FkX2ZpbmlzaGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vi
dmlldywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIERvd25sb2FkVGVzdERhdGEqIHRlc3REYXRh
ID0gc3RhdGljX2Nhc3Q8RG93bmxvYWRUZXN0RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBFd2tfRG93
bmxvYWQqIGRvd25sb2FkID0gc3RhdGljX2Nhc3Q8RXdrX0Rvd25sb2FkKj4oZXZlbnRJbmZvKTsK
KworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChkb3du
bG9hZCksIDEpOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25sb2Fk
KSwgRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEKTsKKyAgICBBU1NFUlRfR1QoZXdrX2Rvd25s
b2FkX2VsYXBzZWRfdGltZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAgIEFTU0VSVF9UUlVFKGZp
bGVFeGlzdHModGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCkpOworCisgICAgZWNvcmVfbWFpbl9s
b29wX3F1aXQoKTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3a19kb3dubG9hZCkK
K3sKKyAgICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIo
bmV3IEVXSzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxi
YWNrKTsKKworICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBuYW1lIGZvciBkZXN0aW5hdGlvbiBmaWxl
LgorICAgIGNoYXIgZGVzdGluYXRpb25QYXRoW10gPSAiL3RtcC9wZGYtZmlsZS5YWFhYWFgiOwor
ICAgIEFTU0VSVF9UUlVFKG1rdGVtcChkZXN0aW5hdGlvblBhdGgpKTsKKworICAgIENTdHJpbmcg
ZmlsZVVybCA9IGh0dHBTZXJ2ZXItPmdldFVSSUZvclBhdGgodGVzdEZpbGVQYXRoKTsKKworICAg
IERvd25sb2FkVGVzdERhdGEgdXNlckRhdGEgPSB7IGZpbGVVcmwuZGF0YSgpLCBkZXN0aW5hdGlv
blBhdGggfTsKKyAgICBBU1NFUlRfRkFMU0UoZmlsZUV4aXN0cyhkZXN0aW5hdGlvblBhdGgpKTsK
KworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9h
ZCxuZXciLCBvbl9kb3dubG9hZF9uZXcsICZ1c2VyRGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImRvd25sb2FkLGNhbmNlbCIsIG9uX2Rvd25sb2Fk
X2NhbmNlbGxlZCwgJnVzZXJEYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19h
ZGQod2ViVmlldygpLCAiZG93bmxvYWQsZmFpbGVkIiwgb25fZG93bmxvYWRfZmFpbGVkLCAmdXNl
ckRhdGEpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJk
b3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCAmdXNlckRhdGEpOworCisg
ICAgLy8gRG93bmxvYWQgdGVzdCBwZGYKKyAgICBld2tfdmlld191cmlfc2V0KHdlYlZpZXcoKSwg
ZmlsZVVybC5kYXRhKCkpOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8g
Q2xlYW4gdXAKKyAgICB1bmxpbmsoZGVzdGluYXRpb25QYXRoKTsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGZjNWQ3NDcuLjUxOGRiOGUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMTIxLDEzICsxMjEsMTYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJD
b3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2Fk
UHJveHkqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChj
b25zdCBTdHJpbmcmIGhvc3RuYW1lLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcm
IHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9
IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNlcnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVz
dChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBib29sJiBpZ25vcmVFcnJvcnMpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgaGFuZGxlUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25z
dCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcmIHByZWZpbGxl
ZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAjZW5k
aWYgLy8gUExBVEZPUk0oUVQpLgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkK
KyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9
IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAppbmRleCAzNDRlZDk4Li5kMmM3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcApAQCAtMTIyMSw3ICsxMjIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJl
Y2VpdmVkUG9saWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbiwgV2ViRnJhbWVQcm94eSog
ZnIKICAgICAgICAgLy8gQ3JlYXRlIGEgZG93bmxvYWQgcHJveHkuCiAgICAgICAgIERvd25sb2Fk
UHJveHkqIGRvd25sb2FkID0gbV9wcm9jZXNzLT5jb250ZXh0KCktPmNyZWF0ZURvd25sb2FkUHJv
eHkoKTsKICAgICAgICAgZG93bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7Ci0jaWYg
UExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAg
Ly8gT3VyIGRlc2lnbiBkb2VzIG5vdCBzdXBwcG9ydCBkb3dubG9hZHMgd2l0aG91dCBhIFdlYlBh
Z2UuCiAgICAgICAgIGhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7CiAjZW5kaWYKQEAg
LTI2NDIsMTEgKzI2NDIsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJiBjb250ZW50cwogICAgIG1fcGFnZUNs
aWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29udGVudHMpOwog
fQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJv
eHkqIGRvd25sb2FkKQotewotICAgIG1fcGFnZUNsaWVudC0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KGRvd25sb2FkKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmF1dGhlbnRpY2F0aW9uUmVxdWly
ZWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNv
bnN0IFN0cmluZyYgcHJlZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYg
cGFzc3dvcmQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LT5oYW5kbGVBdXRoZW50aWNhdGlvblJlcXVp
cmVkUmVxdWVzdChob3N0bmFtZSwgcmVhbG0sIHByZWZpbGxlZFVzZXJuYW1lLCB1c2VybmFtZSwg
cGFzc3dvcmQpOwpAQCAtMjY2Myw2ICsyNjU4LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYK
IH0KICNlbmRpZiAvLyBQTEFURk9STShRVCkuCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oRUZMKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9h
ZFByb3h5KiBkb3dubG9hZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmhhbmRsZURvd25sb2FkUmVx
dWVzdChkb3dubG9hZCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmVlZFRv
dWNoRXZlbnRzKGJvb2wgbmVlZFRvdWNoRXZlbnRzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oCmluZGV4IDMzYzQ5YTMuLjU2MzNjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTYzNSw2ICs2MzUsOSBAQCBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBkaWRS
ZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsKKyNlbmRp
ZgorCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154440</attachid>
            <date>2012-07-25 14:10:53 -0700</date>
            <delta_ts>2012-07-25 22:13:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_downloadmanager2.patch</filename>
            <type>text/plain</type>
            <size>65204</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZjlhYTI0Li4wOGY3MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEw
IEBACiAyMDEyLTA3LTI1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLG5l
dyIgc2lnbmFsIG9uIHRoZSB2aWV3IGFuZCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHBhdGgg
Zm9yIHRoZSBkb3dubG9hZCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgaW4gb3JkZXIgdG8gYWNj
ZXB0IGl0LiBJZiB0aGUgc2lnbmFsCisgICAgICAgIGlzIGlnbm9yZWQgb3IgaWYgdGhlIGRvd25s
b2FkIHBhdGggaXMgbm90IHNldAorICAgICAgICB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgorCisg
ICAgICAgIEEgbmV3IEV3a19Eb3dubG9hZCB0eXBlIGlzIGludHJvZHVjZWQgdG8gcHJvdmlkZQor
ICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGRvd25sb2FkIHRvIHRoZSBjbGllbnQK
KyAgICAgICAgYW5kIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCBpdCAoZS5n
LgorICAgICAgICBzZXQgaXRzIGRvd25sb2FkIHBhdGgsIGNhbmNlbCBpdCwgLi4uKS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2FkZCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfcmVtb3ZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvRXdrQ29udGV4dCk6Cisg
ICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgor
ICAgICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChk
aWRDYW5jZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfRG93bmxvYWQp
OgorICAgICAgICAoX0V3a19Eb3dubG9hZDo6X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChfRXdr
X0Rvd25sb2FkOjp+X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChld2tfZG93bmxvYWRfcmVmKToK
KyAgICAgICAgKGV3a19kb3dubG9hZF91bnJlZik6CisgICAgICAgIChld2tfZG93bmxvYWRfaWRf
Z2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF92aWV3X2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfc3RhdGVfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3Nl
dCk6CisgICAgICAgIChld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAg
ICAgIChld2tfZG93bmxvYWRfY2FuY2VsKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3N0YXRlX3NldCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfbmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwOiBBZGQgYSBmdW5jdGlvbiB0bworICAgICAg
ICByZXRyaWV2ZSB0aGUgY29udGVudCBsZW5ndGggb2YgYSBVUkwgcmVzcG9uc2UuCisgICAgICAg
IChld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZCk6
CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGY6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisg
ICAgICAgIHRoZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0
RGF0YSk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKG9uX2Rvd25sb2FkX25ldyk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxs
ZWQpOgorICAgICAgICAob25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisKKzIwMTItMDctMjUgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbV0sy
XVtXVFJdIExheW91dFRlc3RDb250cm9sbGVyLnNlbmRXZWJJbnRlbnRSZXNwb25zZSgpIG5lZWRz
IHRvIGJlIGltcGxlbWVudGVkCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MjIyNwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDY2YWQwMzcu
LmE4NmYwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00MCw4ICs0MCwxMCBAQCBM
SVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKyAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19tYWluLmNwcApAQCAtMTgwLDYgKzE4Miw3IEBAIFNFVCAoRVdlYktpdDJfSEVB
REVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKKyAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5oIgogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2ludGVudF9zZXJ2aWNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5oIgpAQCAtMjQxLDYgKzI0NCw3IEBAIFRBUkdFVF9MSU5L
X0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkK
ICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRlc3Qgc3VpdGUuCiBT
RVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9jb29raWVfbWFuYWdlcgor
ICAgIHRlc3RfZXdrMl9kb3dubG9hZAogICAgIHRlc3RfZXdrMl92aWV3CiApCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IGZiNjNhYzUuLjg1OGI0
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgorI2luY2x1
ZGUgImV3a19kb3dubG9hZC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJl
d2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tfbWFpbi5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDEx
OGVkYjEuLmFjZTYzZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSAiV2Vi
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dC5oIgorI2luY2x1ZGUgImV3a19j
b250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKKyNpbmNsdWRlICJl
d2tfZG93bmxvYWRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yNzYsNCArMjgwLDE0IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBQYWdlQ2xpZW50
SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQorewor
ICAgIEV3a19Eb3dubG9hZCogZXdrRG93bmxvYWQgPSBld2tfZG93bmxvYWRfbmV3KGRvd25sb2Fk
LCBtX3ZpZXdXaWRnZXQpOworICAgIC8vIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IG9uZSBkZWZh
dWx0IGNvbnRleHQsIGJ1dCBvbmNlIHdlIHN1cHBvcnQKKyAgICAvLyBtdWx0aXBsZSBjb250ZXh0
cywgd2Ugd2lsbCBuZWVkIHRvIHJldHJpZXZlIHRoZSBjb250ZXh0IGZyb20gdGhlCisgICAgLy8g
dmlldy4KKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9hZGQoZXdrX2NvbnRleHRfZGVmYXVsdF9n
ZXQoKSwgZXdrRG93bmxvYWQpOworICAgIGV3a19kb3dubG9hZF91bnJlZihld2tEb3dubG9hZCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggNDI3ZWY1Mi4uN2RmYzk1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5o
CkBAIC03Niw2ICs3Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2lu
dCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkq
KTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmLCBib29sKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1
YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJv
b2wgd2FzRXZlbnRIYW5kbGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBjMmY5MjQ3Li45MjQ2ZTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yNyw5ICsy
NywxMiBAQAogI2luY2x1ZGUgIldLQ29udGV4dFNvdXAuaCIKICNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93
bmxvYWQuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYyLDYg
KzY1LDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAg
ICBSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IHZpYnJhdGlvblByb3ZpZGVyOwogI2VuZGlmCisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkKj4gZG93bmxvYWRzOwogCiAgICAgV0tS
ZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAgIFVS
TFNjaGVtZUhhbmRsZXJNYXAgdXJsU2NoZW1lSGFuZGxlcnM7CkBAIC04MiwxMiArODYsMTggQEAg
c3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKIAogICAgICAgICBld2tfY29udGV4dF9yZXF1
ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKKyAgICAgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkK
ICAgICB7CiAgICAgICAgIGlmIChjb29raWVNYW5hZ2VyKQogICAgICAgICAgICAgZXdrX2Nvb2tp
ZV9tYW5hZ2VyX2ZyZWUoY29va2llTWFuYWdlcik7CisKKyAgICAgICAgSGFzaE1hcDx1aW50NjRf
dCwgRXdrX0Rvd25sb2FkKj46Oml0ZXJhdG9yIGl0ID0gZG93bmxvYWRzLmJlZ2luKCk7CisgICAg
ICAgIEhhc2hNYXA8dWludDY0X3QsIEV3a19Eb3dubG9hZCo+OjppdGVyYXRvciBlbmQgPSBkb3du
bG9hZHMuZW5kKCk7CisgICAgICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgZXdrX2Rvd25sb2FkX3VucmVmKGl0LT5zZWNvbmQpOwogICAgIH0KIH07CiAKQEAgLTEwOCw2
ICsxMTgsNDcgQEAgV0tDb250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3Qg
RXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiAKIC8qKgogICogQGludGVybmFsCisgKiBSZWdpc3Rl
cnMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCisgKi8KK3ZvaWQgZXdr
X2NvbnRleHRfZG93bmxvYWRfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxv
YWQqIGV3a0Rvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Nv
bnRleHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKKwor
ICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tfZG93bmxvYWRfaWRfZ2V0KGV3a0Rvd25sb2Fk
KTsKKyAgICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBld2tfZG93bmxvYWRfcmVmKGV3a0Rvd25sb2FkKTsKKyAg
ICBld2tDb250ZXh0LT5kb3dubG9hZHMuYWRkKGRvd25sb2FkSWQsIGV3a0Rvd25sb2FkKTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJldHVybnMgdGhlICNFd2tfRG93bmxvYWQgd2l0aCB0
aGUgZ2l2ZW4gQGEgZG93bmxvYWRJZCwgb3IKKyAqIEBjIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgor
ICovCitFd2tfRG93bmxvYWQqIGV3a19jb250ZXh0X2Rvd25sb2FkX2dldChjb25zdCBFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gZXdrQ29u
dGV4dC0+ZG93bmxvYWRzLmdldChkb3dubG9hZElkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwK
KyAqIFJlbW92ZXMgdGhlICNFd2tfRG93bmxvYWQgd2l0aCB0aGUgZ2l2ZW4gQGEgZG93bmxvYWRJ
ZCBmcm9tIHRoZSBpbnRlcm5hbAorICogSGFzaE1hcC4KKyAqLwordm9pZCBld2tfY29udGV4dF9k
b3dubG9hZF9yZW1vdmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2NF90IGRvd25sb2Fk
SWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a0NvbnRleHQtPmRvd25sb2Fkcy50YWtlKGRvd25s
b2FkSWQpOworICAgIGlmIChkb3dubG9hZCkKKyAgICAgICAgZXdrX2Rvd25sb2FkX3VucmVmKGRv
d25sb2FkKTsKK30KKworLyoqCiAgKiBSZXRyaWV2ZSB0aGUgcmVxdWVzdCBtYW5hZ2VyIGZvciBA
YSBld2tDb250ZXh0LgogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNkYTk1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dlYl9lcnJv
ci5oIgorI2luY2x1ZGUgImV3a193ZWJfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGlubGluZSBFd2tfQ29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19Db250ZXh0Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYg
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092
ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9h
ZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwg
dG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBXZSBz
ZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2Ug
aGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKKyAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxl
IG5hbWUuCisgICAgZXdrX3ZpZXdfZG93bmxvYWRfbmV3KGV3a19kb3dubG9hZF92aWV3X2dldChk
b3dubG9hZCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBk
ZXN0aW5hdGlvbiB0byBiZSBhIFVSSS4KKyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBTdHJpbmco
ImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dl
dChkb3dubG9hZCkpOworCisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGRlc3RpbmF0aW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVz
cG9uc2VSZWYgd2tSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tf
RG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFT
U0VSVChkb3dubG9hZCk7CisgICAgRXdrX1VybF9SZXNwb25zZSogcmVzcG9uc2UgPSBld2tfdXJs
X3Jlc3BvbnNlX25ldyh0b0ltcGwod2tSZXNwb25zZSktPnJlc291cmNlUmVzcG9uc2UoKSk7Cisg
ICAgZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX3NldChkb3dubG9hZCwgcmVzcG9uc2UpOworICAgIGV3
a191cmxfcmVzcG9uc2VfdW5yZWYocmVzcG9uc2UpOworfQorCitzdGF0aWMgdm9pZCBkaWRDcmVh
dGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tT
dHJpbmdSZWYgcGF0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxv
YWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9X
TkxPQURfU1RBVEVfRE9XTkxPQURJTkcpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0
YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3Ro
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQg
PSBld2tfY29udGV4dF9kb3dubG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0lt
cGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAg
ICBld2tfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKK30KKworc3Rh
dGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwg
V0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50NjRf
dCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAg
ICBFd2tfV2ViX0Vycm9yKiBld2tFcnJvciA9IGV3a193ZWJfZXJyb3JfbmV3KGVycm9yKTsKKyAg
ICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVfRkFJ
TEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9mYWlsZWQoZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0
KGRvd25sb2FkKSwgZG93bmxvYWQsIGV3a0Vycm9yKTsKKyAgICBld2tfd2ViX2Vycm9yX2ZyZWUo
ZXdrRXJyb3IpOworICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92ZSh0b0V3a0NvbnRleHQo
Y2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworfQorCitzdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCit7CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93
bmxvYWRJRCgpOworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3du
bG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBBU1NF
UlQoZG93bmxvYWQpOworCisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2Vs
bGVkKGV3a19kb3dubG9hZF92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBld2tf
Y29udGV4dF9kb3dubG9hZF9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9h
ZElkKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9h
ZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHVpbnQ2NF90
IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKKyAgICBFd2tf
RG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAg
IGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9TVEFURV9GSU5J
U0hFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfZmluaXNoZWQoZXdrX2Rvd25sb2FkX3ZpZXdf
Z2V0KGRvd25sb2FkKSwgZG93bmxvYWQpOworICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92
ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworfQorCit2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7
CisgICAgV0tDb250ZXh0RG93bmxvYWRDbGllbnQgd2tEb3dubG9hZENsaWVudDsKKyAgICBtZW1z
ZXQoJndrRG93bmxvYWRDbGllbnQsIDAsIHNpemVvZihXS0NvbnRleHREb3dubG9hZENsaWVudCkp
OworCisgICAgd2tEb3dubG9hZENsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dERvd25sb2FkQ2xp
ZW50Q3VycmVudFZlcnNpb247CisgICAgd2tEb3dubG9hZENsaWVudC5jbGllbnRJbmZvID0gZXdr
Q29udGV4dDsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZENhbmNlbCA9IGRpZENhbmNlbDsKKyAg
ICB3a0Rvd25sb2FkQ2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
ID0gZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgd2tEb3dubG9h
ZENsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlvbiA9IGRpZENyZWF0ZURlc3RpbmF0aW9uOworICAg
IHdrRG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlID0gZGlkUmVjZWl2ZVJlc3BvbnNl
OworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBkaWRSZWNlaXZlRGF0YTsK
KyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZEZhaWwgPSBkaWRGYWlsOworICAgIHdrRG93bmxvYWRD
bGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNoOworCisgICAgV0tDb250ZXh0U2V0RG93bmxvYWRD
bGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwgJndrRG93bmxvYWRD
bGllbnQpOworfQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDE3YTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3du
bG9hZF9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaAorI2RlZmlu
ZSBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZV9oCisKK3R5cGVkZWYgc3RydWN0
IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKKwordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfYXR0YWNoKEV3a19Db250ZXh0Kik7CisKKyNlbmRpZiAvLyBld2tfY29udGV4dF9kb3du
bG9hZF9jbGllbnRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggZDc4ZTFlOS4uN2NhM2FjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaApAQCAtMjMsMTAgKzIzLDE1IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jh
c2UuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250ZXh0OwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CiB0eXBlZGVmIHN0cnVjdCBfRXdr
X1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwogCiBXS0NvbnRleHRS
ZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCopOwogV0tTb3Vw
UmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2dldChjb25zdCBF
d2tfQ29udGV4dCopOwogdm9pZCBld2tfY29udGV4dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2
ZWQoRXdrX0NvbnRleHQqLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0Kik7CiAKK3ZvaWQgZXdrX2Nv
bnRleHRfZG93bmxvYWRfYWRkKEV3a19Db250ZXh0KiwgRXdrX0Rvd25sb2FkKik7CitFd2tfRG93
bmxvYWQqIGV3a19jb250ZXh0X2Rvd25sb2FkX2dldChjb25zdCBFd2tfQ29udGV4dCosIHVpbnQ2
NF90IGRvd25sb2FkSWQpOwordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9yZW1vdmUoRXdrX0Nv
bnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKKwogI2VuZGlmIC8vIGV3a19jb250ZXh0X3By
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QzMjlhMQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZC5jcHAKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKKworI2luY2x1ZGUgIkRvd25s
b2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8RWNvcmUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBcc3RydWN0
ICBfRXdrX0Rvd25sb2FkCisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgZG93bmxvYWQgZGF0YS4K
KyAqLworc3RydWN0IF9Fd2tfRG93bmxvYWQgeworICAgIHVuc2lnbmVkIGludCBfX3JlZjsgLyoq
PCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvYmplY3QgKi8KKyAgICBEb3dubG9hZFByb3h5
KiBkb3dubG9hZFByb3h5OworICAgIEV2YXNfT2JqZWN0KiB2aWV3OworICAgIEV3a19Eb3dubG9h
ZF9TdGF0ZSBzdGF0ZTsKKyAgICBFd2tfVXJsX1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgRXdrX1Vy
bF9SZXNwb25zZSogcmVzcG9uc2U7CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUg
ZW5kVGltZTsKKyAgICB1aW50NjRfdCBkb3dubG9hZGVkOyAvKio8IGxlbmd0aCBhbHJlYWR5IGRv
d25sb2FkZWQgKi8KKyAgICBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbjsKKyAgICBjb25zdCBjaGFy
KiBzdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIF9Fd2tfRG93bmxvYWQoRG93bmxvYWRQcm94eSog
ZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQorICAgICAgICA6IF9fcmVmKDEpCisgICAg
ICAgICwgZG93bmxvYWRQcm94eShkb3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisg
ICAgICAgICwgc3RhdGUoRVdLX0RPV05MT0FEX1NUQVRFX05PVF9TVEFSVEVEKQorICAgICAgICAs
IHJlcXVlc3QoMCkKKyAgICAgICAgLCByZXNwb25zZSgwKQorICAgICAgICAsIHN0YXJ0VGltZSgt
MSkKKyAgICAgICAgLCBlbmRUaW1lKC0xKQorICAgICAgICAsIGRvd25sb2FkZWQoMCkKKyAgICAg
ICAgLCBkZXN0aW5hdGlvbigwKQorICAgICAgICAsIHN1Z2dlc3RlZEZpbGVuYW1lKDApCisgICAg
eyB9CisKKyAgICB+X0V3a19Eb3dubG9hZCgpCisgICAgeworICAgICAgICBBU1NFUlQoIV9fcmVm
KTsKKyAgICAgICAgaWYgKHJlcXVlc3QpCisgICAgICAgICAgICBld2tfdXJsX3JlcXVlc3RfdW5y
ZWYocmVxdWVzdCk7CisgICAgICAgIGlmIChyZXNwb25zZSkKKyAgICAgICAgICAgIGV3a191cmxf
cmVzcG9uc2VfdW5yZWYocmVzcG9uc2UpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChk
ZXN0aW5hdGlvbik7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICB9Cit9OworCit2b2lkIGV3a19kb3dubG9hZF9yZWYoRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisK
KyAgICArK2Rvd25sb2FkLT5fX3JlZjsKK30KKwordm9pZCBld2tfZG93bmxvYWRfdW5yZWYoRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihk
b3dubG9hZCk7CisKKyAgICBpZiAoLS1kb3dubG9hZC0+X19yZWYpCisgICAgICAgIHJldHVybjsK
KworICAgIGRlbGV0ZSBkb3dubG9hZDsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFF1ZXJp
ZXMgdGhlIGlkZW50aWZpZXIgZm9yIHRoaXMgZG93bmxvYWQKKyAqLwordWludDY0X3QgZXdrX2Rv
d25sb2FkX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAwKTsKKworICAgIHJl
dHVybiBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOworfQorCisvKioKKyAq
IEBpbnRlcm5hbAorICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVk
IHRvLgorICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMu
CisgKi8KK0V2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfdmlld19nZXQoY29uc3QgRXdrX0Rvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT52aWV3OworfQorCitFd2tfRG93bmxv
YWRfU3RhdGUgZXdrX2Rvd25sb2FkX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX1VOS05PV04pOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5zdGF0ZTsK
K30KKworRXdrX1VybF9SZXF1ZXN0KiBld2tfZG93bmxvYWRfcmVxdWVzdF9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bmxvYWQsIDApOworCisgICAgaWYgKCFkb3dubG9hZC0+cmVxdWVzdCkgeworICAgICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJveHks
IDApOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChB
ZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZG93bmxvYWQtPmRvd25sb2FkUHJv
eHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Rvd25s
b2FkKj4oZG93bmxvYWQpLT5yZXF1ZXN0ID0gZXdrX3VybF9yZXF1ZXN0X25ldyh3a1VSTFJlcXVl
c3QuZ2V0KCkpOworICAgIH0KKworICAgIHJldHVybiBkb3dubG9hZC0+cmVxdWVzdDsKK30KKwor
RXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93
bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
b3dubG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnJlc3BvbnNlOworfQorCitjb25z
dCBjaGFyKiBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2Fk
LCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247Cit9CisKK0VpbmFfQm9v
bCBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZCAqZG93bmxvYWQsIGNv
bnN0IGNoYXIqIGRlc3RpbmF0aW9uKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChkb3dubG9hZCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkZXN0aW5hdGlvbiwgZmFsc2UpOworCisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZk
b3dubG9hZC0+ZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitjb25zdCBjaGFyICpld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25z
dCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkb3dubG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZp
bGVuYW1lOworfQorCitFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2NhbmNlbChFd2tfRG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9h
ZCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+
ZG93bmxvYWRQcm94eSwgZmFsc2UpOworCisgICAgaWYgKGRvd25sb2FkLT5zdGF0ZSAhPSBFV0tf
RE9XTkxPQURfU1RBVEVfRE9XTkxPQURJTkcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGRvd25sb2FkLT5zdGF0ZSA9IEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMSU5HOworICAgIGRv
d25sb2FkLT5kb3dubG9hZFByb3h5LT5jYW5jZWwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
ZG91YmxlIGV3a19kb3dubG9hZF9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRv
d25sb2FkLCAwKTsKKworICAgIGlmICghZG93bmxvYWQtPnJlc3BvbnNlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGRvd25sb2FkLT5yZXNwb25zZSk7CisgICAgaWYg
KCFjb250ZW50TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxkb3VibGU+KGRvd25sb2FkLT5kb3dubG9hZGVkKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4o
Y29udGVudExlbmd0aCk7Cit9CisKK2RvdWJsZSBld2tfZG93bmxvYWRfZWxhcHNlZF90aW1lX2dl
dChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisKKyAgICAvLyBEb3dubG9hZCBoYXMgbm90IHN0
YXJ0ZWQgeWV0LgorICAgIGlmIChkb3dubG9hZC0+c3RhcnRUaW1lIDwgMCkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICAvLyBEb3dubG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFw
c2VkIGJldHdlZW4gdGhlCisgICAgLy8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQu
CisgICAgaWYgKGRvd25sb2FkLT5lbmRUaW1lID49IDApCisgICAgICAgIHJldHVybiBkb3dubG9h
ZC0+ZW5kVGltZSAtIGRvd25sb2FkLT5zdGFydFRpbWU7CisKKyAgICAvLyBEb3dubG9hZCBpcyBz
dGlsbCBnb2luZy4KKyAgICByZXR1cm4gZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5zdGFy
dFRpbWU7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRoZSBVUkwgQGEgcmVzcG9u
c2UgZm9yIHRoaXMgQGEgZG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3Jlc3BvbnNl
X3NldChFd2tfRG93bmxvYWQqIGRvd25sb2FkLCBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSkK
K3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4ocmVzcG9uc2UpOworCisgICAgZXdrX3VybF9yZXNwb25zZV9y
ZWYocmVzcG9uc2UpOworICAgIGRvd25sb2FkLT5yZXNwb25zZSA9IHJlc3BvbnNlOworfQorCisv
KioKKyAqIEBpbnRlcm5hbAorICogU2V0cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhp
cyBAYSBkb3dubG9hZC4KKyAqLwordm9pZCBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1l
X3NldChFd2tfRG93bmxvYWQqIGRvd25sb2FkLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFt
ZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSwgc3Vn
Z2VzdGVkRmlsZW5hbWUpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmVwb3J0IGEgZ2l2
ZW4gYW1vdW50IG9mIGRhdGEgd2FzIHJlY2VpdmVkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9y
ZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZCogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisKKyAgICBkb3dubG9h
ZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXRz
IHRoZSBzdGF0ZSBvZiB0aGUgZG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3N0YXRl
X3NldChFd2tfRG93bmxvYWQqIGRvd25sb2FkLCBFd2tfRG93bmxvYWRfU3RhdGUgc3RhdGUpCit7
CisgICAgZG93bmxvYWQtPnN0YXRlID0gc3RhdGU7CisKKyAgICAvLyBVcGRhdGUgc3RhcnQgdGlt
ZSBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQKKyAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05M
T0FEX1NUQVRFX0RPV05MT0FESU5HKQorICAgICAgICBkb3dubG9hZC0+c3RhcnRUaW1lID0gZWNv
cmVfdGltZV9nZXQoKTsKKworICAgIC8vIFVwZGF0ZSBlbmQgdGltZSBpZiB0aGUgZG93bmxvYWQg
aGFzIGZpbmlzaGVkIChzdWNjZXNzZnVsbHkgb3Igbm90KQorICAgIGlmIChzdGF0ZSA9PSBFV0tf
RE9XTkxPQURfU1RBVEVfRkFJTEVECisgICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9T
VEFURV9DQU5DRUxMRUQKKyAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX1NUQVRFX0ZJ
TklTSEVEKQorICAgICAgICBkb3dubG9hZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7Cit9
CisKKy8qKgorICogQGludGVybmFsCisgKiBDb25zdHJ1Y3RzIGEgRXdrX0Rvd25sb2FkIGZyb20g
YSBEb3dubG9hZFByb3h5LgorICovCitFd2tfRG93bmxvYWQqIGV3a19kb3dubG9hZF9uZXcoRG93
bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV3a1ZpZXcsIDApOworCisgICAgcmV0dXJuIG5ldyBfRXdrX0Rv
d25sb2FkKGRvd25sb2FkLCBld2tWaWV3KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjdmYmU1MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19kb3dubG9hZC5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIGV3a19kb3dubG9hZF9oCisjZGVmaW5lIGV3a19kb3dubG9hZF9oCisK
KyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNl
LmgiCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0Rvd25sb2FkICov
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19Eb3dubG9hZDsKKworLy8vIERlZmlu
ZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBvZiBhIGRvd25sb2FkLgorZW51bSBfRXdrX0Rvd25sb2Fk
X1N0YXRlIHsKKyAgICAvLy8gVGhlIGRvd25sb2FkIHN0YXRlIGlzIHVua25vd24KKyAgICBFV0tf
RE9XTkxPQURfU1RBVEVfVU5LTk9XTiA9IC0xLAorICAgIC8vLyBUaGUgZG93bmxvYWQgaGFzIG5v
dCBzdGFydGVkIHlldAorICAgIEVXS19ET1dOTE9BRF9TVEFURV9OT1RfU1RBUlRFRCwKKyAgICAv
Ly8gVGhlIGRvd25sb2FkIGhhcyBzdGFydGVkCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0RPV05M
T0FESU5HLAorICAgIC8vLyBUaGUgZG93bmxvYWQgc3RvcHBlZCBiZWNhdXNlIG9mIGEgZmFpbHVy
ZQorICAgIEVXS19ET1dOTE9BRF9TVEFURV9GQUlMRUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBp
cyBiZWluZyBjYW5jZWxsZWQKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTElORywKKyAg
ICAvLy8gVGhlIGRvd25sb2FkIHN0b3BwZWQgYmVjYXVzZSBpdCB3YXMgY2FuY2VsbGVkCisgICAg
RVdLX0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCwKKyAgICAvLy8gVGhlIGRvd25sb2FkIGNvbXBs
ZXRlZCBzdWNjZXNzZnVsbHkuCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVECit9Owor
Ly8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfRG93bmxvYWRfU3RhdGUuCit0eXBl
ZGVmIGVudW0gX0V3a19Eb3dubG9hZF9TdGF0ZSBFd2tfRG93bmxvYWRfU3RhdGU7CisKKy8qKgor
ICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAq
CisgKiBAcGFyYW0gZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVjdCB0byBpbmNyZWFzZSB0aGUg
cmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93bmxvYWRfcmVmKEV3a19Eb3du
bG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50
IG9mIHRoZSBnaXZlbiBvYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0
aGUgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgMCwgdGhlIGRvd25sb2FkIGlzIGZyZWVkLgorICoK
KyAqIEBwYXJhbSBkb3dubG9hZCB0aGUgZG93bmxvYWQgb2JqZWN0IHRvIGRlY3JlYXNlIHRoZSBy
ZWZlcmVuY2UgY291bnQKKyAqLworRUFQSSB2b2lkIGV3a19kb3dubG9hZF91bnJlZihFd2tfRG93
bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgc3RhdGUgZm9yIHRoaXMgZG93
bmxvYWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4K
KyAqCisgKiBAcmV0dXJuIHRoZSBkb3dubG9hZCBzdGF0ZS4KKyAqLworRUFQSSBFd2tfRG93bmxv
YWRfU3RhdGUgZXdrX2Rvd25sb2FkX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25s
b2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgVVJMIHJlcXVlc3QgZm9yIHRoaXMgZG93bmxvYWQu
CisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisg
KiBAcmV0dXJuIHRoZSAjRXdrX1VybF9SZXF1ZXN0IGZvciB0aGlzIGRvd25sb2FkLgorICovCitF
QVBJIEV3a19VcmxfUmVxdWVzdCAqZXdrX2Rvd25sb2FkX3JlcXVlc3RfZ2V0KGNvbnN0IEV3a19E
b3dubG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBVUkwgcmVzcG9uc2UgZm9y
IHRoaXMgZG93bmxvYWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0
byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRoZSAjRXdrX1VybF9SZXNwb25zZSBmb3IgdGhpcyBk
b3dubG9hZCBvciBAYyBOVUxMIGlmIGl0IHdhcyBub3QgcmVjZWl2ZWQgeWV0LgorICovCitFQVBJ
IEV3a19VcmxfUmVzcG9uc2UgKmV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoY29uc3QgRXdrX0Rv
d25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSSSB0byB3aGljaCB0aGUg
ZG93bmxvYWRlZCBmaWxlIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQg
YSAjRXdrX0Rvd25sb2FkIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gdGhlIGRlc3RpbmF0aW9u
IHBvaW50ZXIsIHRoYXQgbWF5IGJlIEBjIE5VTEwuIFRoaXMgcG9pbnRlciBpcworICogICAgICAg
ICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxl
CisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVf
YWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdr
X2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsK
KworLyoqCisgKiBTZXRzIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGlzIGRvd25sb2FkLgor
ICoKKyAqIFNldHMgdGhlIHBhdGggdG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJl
IHdyaXR0ZW4uCisgKgorICogVGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0
aGUgZG93bmxvYWQgdHJhbnNmZXIKKyAqIHN0YXJ0cywgYnkgY29ubmVjdGluZyB0byB0aGUgImRv
d25sb2FkLG5ldyIgc2lnbmFsIG9uIHRoZQorICogRXdrX1ZpZXcgYW5kIHNldHRpbmcgdGhlIGRl
c3RpbmF0aW9uIGluIHRoZSBjYWxsYmFjay4gVG8gc2V0CisgKiB0aGUgZGVzdGluYXRpb24gdXNp
bmcgdGhlIGZpbGVuYW1lIHN1Z2dlc3RlZCBieSB0aGUgc2VydmVyCisgKiB1c2UgZXdrX2Rvd25s
b2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoKS4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgI0V3
a19Eb3dubG9hZCB0byB1cGRhdGUuCisgKiBAcGFyYW0gZGVzdGluYXRpb24gdGhlIGRlc3RpbmF0
aW9uIHBhdGguCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgQGMg
RUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKgorICogQHNlZSBld2tfZG93bmxvYWRfc3VnZ2VzdGVk
X2ZpbGVuYW1lX2dldAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRfZGVzdGluYXRp
b25fc2V0KEV3a19Eb3dubG9hZCAqZG93bmxvYWQsIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uKTsK
KworLyoqCisgKiBRdWVyaWVzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIGRvd25s
b2FkLgorICoKKyAqIEl0IGNhbiBiZSB1c2VmdWwgdG8gdXNlIHRoZSB2YWx1ZSByZXR1cm5lZCBi
eSB0aGlzIGZ1bmN0aW9uIHRvIGNvbnN0cnVjdAorICogdGhlIGRlc3RpbmF0aW9uIHBhdGggdG8g
cGFzcyB0byBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KCkuCisgKgorICogQHBhcmFtIGRv
d25sb2FkICNFd2tfRG93bmxvYWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBUaGUgc3VnZ2Vz
dGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBkb3dubG9hZC4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAg
ICAgIGd1YXJhbnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2li
bGUKKyAqICAgICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICog
ICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFy
ZV9hZGQoKSBvcgorICogICAgICAgICBzdHJkdXAoKS4KKyAqCisgKiBAc2VlIGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9zZXQKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfZG93bmxvYWRfc3Vn
Z2VzdGVkX2ZpbGVuYW1lX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoq
CisgKiBDYW5jZWxzIHRoZSBkb3dubG9hZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBXaGVuIHRo
ZSBvbmdvaW5nIGRvd25sb2FkIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBjYW5jZWxsZWQgYSAi
ZG93bmxvYWQsY2FuY2VsbGVkIgorICogc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCBvbiB0aGUgdmll
dy4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkIHRvIGNhbmNlbC4KKyAq
CisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiB0aGUgY2FuY2VsbGF0aW9uIHJlcXVlc3Qgd2Fz
IHRha2VuIGludG8gYWNjb3VudCwgb3IKKyAqICAgICAgICAgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UuCisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19kb3dubG9hZF9jYW5jZWwoRXdrX0Rvd25sb2Fk
ICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIGVzdGltYXRlZCBwcm9ncmVzcyBmb3Ig
dGhpcyBkb3dubG9hZC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkIHRv
IHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG9mIHRoZSBwZXJjZW50
IGNvbXBsZXRlIGZvciBhIGRvd25sb2FkCisgKiAgICAgICAgIGFzIGEgcmFuZ2UgZnJvbSAwLjAg
dG8gMS4wLgorICovCitFQVBJIGRvdWJsZSBld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNz
X2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBHZXRzIHRoZSBl
bGFwc2VkIHRpbWUgaW4gc2Vjb25kcywgaW5jbHVkaW5nIGFueSBmcmFjdGlvbmFsIHBhcnQuCisg
KgorICogSWYgdGhlIGRvd25sb2FkIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNl
bGxlZCB0aGlzIGlzCisgKiB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50
LgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQKKyAqCisgKiBAcmV0dXJu
IHNlY29uZHMgc2luY2UgdGhlIGRvd25sb2FkIHdhcyBzdGFydGVkIG9yIDAgaW4gY2FzZSBvZiBm
YWlsdXJlLgorICovCitFQVBJIGRvdWJsZSBld2tfZG93bmxvYWRfZWxhcHNlZF90aW1lX2dldChj
b25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9Cisj
ZW5kaWYKKworI2VuZGlmIC8vIGV3a19kb3dubG9hZF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfcHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX3ByaXZhdGUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzdmZjFkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkX3ByaXZhdGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19kb3dubG9hZF9w
cml2YXRlX2gKKyNkZWZpbmUgZXdrX2Rvd25sb2FkX3ByaXZhdGVfaAorCisjaW5jbHVkZSAiV0tC
YXNlLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisjaW5jbHVkZSA8RXZhcy5oPgorCit0
eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9SZXNwb25zZSBFd2tfVXJsX1Jlc3BvbnNlOwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19XZWJfRXJyb3IgRXdrX1dlYl9FcnJvcjsKKworbmFtZXNwYWNlIFdlYktp
dCB7CitjbGFzcyBEb3dubG9hZFByb3h5OworfQorCitFd2tfRG93bmxvYWQqIGV3a19kb3dubG9h
ZF9uZXcoV2ViS2l0OjpEb3dubG9hZFByb3h5KiwgRXZhc19PYmplY3QqIGV3a1ZpZXcpOwordWlu
dDY0X3QgZXdrX2Rvd25sb2FkX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWQqKTsKK0V2YXNfT2Jq
ZWN0KiBld2tfZG93bmxvYWRfdmlld19nZXQoY29uc3QgRXdrX0Rvd25sb2FkKik7CisKK3ZvaWQg
ZXdrX2Rvd25sb2FkX3N0YXRlX3NldChFd2tfRG93bmxvYWQqLCBFd2tfRG93bmxvYWRfU3RhdGUp
Owordm9pZCBld2tfZG93bmxvYWRfY2FuY2VsbGVkKEV3a19Eb3dubG9hZCopOwordm9pZCBld2tf
ZG93bmxvYWRfZmFpbGVkKEV3a19Eb3dubG9hZCopOwordm9pZCBld2tfZG93bmxvYWRfZmluaXNo
ZWQoRXdrX0Rvd25sb2FkKik7Cit2b2lkIGV3a19kb3dubG9hZF9zdGFydGVkKEV3a19Eb3dubG9h
ZCopOworCit2b2lkIGV3a19kb3dubG9hZF9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZCosIHVp
bnQ2NF90IGxlbmd0aCk7Cit2b2lkIGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQoRXdrX0Rvd25s
b2FkKiwgRXdrX1VybF9SZXNwb25zZSopOwordm9pZCBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2Zp
bGVuYW1lX3NldChFd2tfRG93bmxvYWQqLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSk7
CisKKyNlbmRpZiAvLyBld2tfZG93bmxvYWRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCmluZGV4IDEzNzc1
M2QuLjhmOWY1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a191cmxfcmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCkBAIC05OCw2ICs5OCwxMyBAQCBjb25zdCBjaGFyKiBl
d2tfdXJsX3Jlc3BvbnNlX21pbWVfdHlwZV9nZXQoY29uc3QgRXdrX1VybF9SZXNwb25zZSogcmVz
cG9uc2UpCiAgICAgcmV0dXJuIHJlc3BvbnNlLT5taW1lVHlwZTsKIH0KIAordW5zaWduZWQgbG9u
ZyBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChjb25zdCBFd2tfVXJsX1Jlc3Bv
bnNlKiByZXNwb25zZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVz
cG9uc2UsIDApOworCisgICAgcmV0dXJuIHJlc3BvbnNlLT5jb3JlUmVzcG9uc2UuZXhwZWN0ZWRD
b250ZW50TGVuZ3RoKCk7Cit9CisKIC8qKgogICogQGludGVybmFsCiAgKiBDb25zdHJ1Y3RzIGEg
RXdrX1VybF9SZXNwb25zZSBmcm9tIGEgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2Uu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaApp
bmRleCBjMDI2MjJkLi4zNTYzMWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCkBAIC05NCw2ICs5NCwxNyBAQCBFQVBJIGlu
dCBld2tfdXJsX3Jlc3BvbnNlX3N0YXR1c19jb2RlX2dldChjb25zdCBFd2tfVXJsX1Jlc3BvbnNl
ICpyZXNwb25zZSk7CiAgKi8KIEVBUEkgY29uc3QgY2hhciAqZXdrX3VybF9yZXNwb25zZV9taW1l
X3R5cGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2UgKnJlc3BvbnNlKTsKIAorLyoqCisgKiBH
ZXQgdGhlIGV4cGVjdGVkIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSAjRXdrX1VybF9SZXNwb25zZS4K
KyAqCisgKiBJdCBjYW4gYmUgMCBpZiB0aGUgc2VydmVyIHByb3ZpZGVkIGFuIGluY29ycmVjdCBv
ciBtaXNzaW5nIENvbnRlbnQtTGVuZ3RoLgorICoKKyAqIEBwYXJhbSByZXNwb25zZSBhICNFd2tf
VXJsX1Jlc3BvbnNlLgorICoKKyAqIEByZXR1cm4gdGhlIGV4cGVjdGVkIGNvbnRlbnQgbGVuZ3Ro
IG9mIEBhIHJlc3BvbnNlIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitFQVBJIHVuc2ln
bmVkIGxvbmcgZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoY29uc3QgRXdrX1Vy
bF9SZXNwb25zZSAqcmVzcG9uc2UpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDg0
NDhmZDYuLjhjMGMzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlldy5jcHAKQEAgLTg3MSw2ICs4NzEsNTEgQEAgdm9pZCBld2tfdmlld19kaXNwbGF5KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmltYWdlLCByZWN0LngoKSwgcmVjdC55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKKy8qKgorICogQGludGVybmFs
CisgKiBBIGRvd25sb2FkIGZvciB0aGF0IHZpZXcgd2FzIGNhbmNlbGxlZC4KKyAqCisgKiBFbWl0
cyBzaWduYWw6ICJkb3dubG9hZCxjYW5jZWxsZWQiIHdpdGggcG9pbnRlciB0byBhIEV3a19Eb3du
bG9hZC4KKyAqLwordm9pZCBld2tfdmlld19kb3dubG9hZF9jYW5jZWxsZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQsY2FuY2VsbGVkIiwgZG93bmxvYWQp
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVx
dWVzdGVkIGZvciB0aGF0IHZpZXcuCisgKgorICogRW1pdHMgc2lnbmFsOiAiZG93bmxvYWQsbmV3
IiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZG93
bmxvYWRfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQor
eworICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJkb3dubG9h
ZCxuZXciLCBkb3dubG9hZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBBIGRvd25sb2Fk
IGZvciB0aGF0IHZpZXcgaGFzIGZhaWxlZC4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJkb3dubG9h
ZCxmYWlsZWQiIHdpdGggcG9pbnRlciB0byBhIEV3a19Eb3dubG9hZF9FcnJvci4KKyAqLwordm9p
ZCBld2tfdmlld19kb3dubG9hZF9mYWlsZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3du
bG9hZCogZG93bmxvYWQsIEV3a19XZWJfRXJyb3IqIGVycm9yKQoreworICAgIEV3a19Eb3dubG9h
ZF9FcnJvciBkb3dubG9hZEVycm9yID0geyBkb3dubG9hZCwgZXJyb3IgfTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJkb3dubG9hZCxmYWlsZWQiLCAmZG93
bmxvYWRFcnJvcik7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBBIGRvd25sb2FkIGZvciB0
aGF0IHZpZXcgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICoKKyAqIEVtaXRzIHNpZ25hbDogImRv
d25sb2FkLGZpbmlzaGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxvYWQuCisgKi8KK3Zv
aWQgZXdrX3ZpZXdfZG93bmxvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19E
b3dubG9hZCogZG93bmxvYWQpCit7CisgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrVmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwgZG93bmxvYWQpOworfQorCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5kZXggNWQ2OWRmNC4uZGY0NWE5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCkBAIC0yNiw2
ICsyNiwxMSBAQAogICoKICAqIFRoZSBmb2xsb3dpbmcgc2lnbmFscyAoc2VlIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCgpKSBhcmUgZW1pdHRlZDoKICAqCisgKiAtICJkb3dubG9hZCxj
YW5jZWxsZWQiLCBFd2tfRG93bmxvYWQqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCB3YXMgZWZm
ZWN0aXZlbHkgY2FuY2VsbGVkLgorICogLSAiZG93bmxvYWQsbmV3IiwgRXdrX0Rvd25sb2FkKjog
cmVwb3J0cyB0aGF0IGEgbmV3IGRvd25sb2FkIGhhcyBiZWVuIHJlcXVlc3RlZC4gVGhlIGNsaWVu
dCBzaG91bGQgc2V0IHRoZQorICogICBkZXN0aW5hdGlvbiBwYXRoIGJ5IGNhbGxpbmcgZXdrX2Rv
d25sb2FkX2Rlc3RpbmF0aW9uX3NldCgpIG9yIHRoZSBkb3dubG9hZCB3aWxsIGZhaWwuCisgKiAt
ICJkb3dubG9hZCxmYWlsZWQiLCBFd2tfRG93bmxvYWRfRXJyb3IqOiByZXBvcnRzIHRoYXQgYSBk
b3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IuCisgKiAtICJkb3dubG9hZCxmaW5p
c2hlZCIsIEV3a19Eb3dubG9hZCo6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIGNvbXBsZXRlZCBz
dWNjZXNzZnVsbHkuCiAgKiAtICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50ZW50X1JlcXVl
c3QqOiByZXBvcnRzIG5ldyBXZWIgaW50ZW50IHJlcXVlc3QuCiAgKiAtICJpbnRlbnQsc2Vydmlj
ZSxyZWdpc3RlciIsIEV3a19JbnRlbnRfU2VydmljZSo6IHJlcG9ydHMgbmV3IFdlYiBpbnRlbnQg
c2VydmljZSByZWdpc3RyYXRpb24uCiAgKiAtICJsb2FkLGVycm9yIiwgY29uc3QgRXdrX1dlYl9F
cnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxlZC4KQEAgLTUzLDYgKzU4LDcgQEAK
ICNkZWZpbmUgZXdrX3ZpZXdfaAogCiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKKyNpbmNsdWRl
ICJld2tfZG93bmxvYWQuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdr
X3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMTg5LDYg
KzE5NSwxNyBAQCBzdHJ1Y3QgX0V3a19XZWJfUmVzb3VyY2VfTG9hZF9FcnJvciB7CiAgICAgRXdr
X1dlYl9FcnJvciAqZXJyb3I7IC8qKjwgbG9hZCBlcnJvciAqLwogfTsKIAorLy8vIENyZWF0ZXMg
YSB0eXBlIG5hbWUgZm9yIF9Fd2tfRG93bmxvYWRfRXJyb3IuCit0eXBlZGVmIHN0cnVjdCBfRXdr
X0Rvd25sb2FkX0Vycm9yIEV3a19Eb3dubG9hZF9FcnJvcjsKKworLyoqCisgKiBAYnJpZWYgU3Ry
dWN0dXJlIGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBhIGRvd25sb2FkIGZhaWx1cmUuCisgKi8K
K3N0cnVjdCBfRXdrX0Rvd25sb2FkX0Vycm9yIHsKKyAgICBFd2tfRG93bmxvYWQgKmRvd25sb2Fk
OyAvKio8IGRvd25sb2FkIHRoYXQgZmFpbGVkICovCisgICAgRXdrX1dlYl9FcnJvciAqZXJyb3I7
IC8qKjwgZG93bmxvYWQgZXJyb3IgKi8KK307CisKIC8qKgogICogQ3JlYXRlcyBhIG5ldyBFRkwg
V2ViS2l0IHZpZXcgb2JqZWN0LgogICoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCBhMGE2NzkwLi5kOTM1Y2YwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRl
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oCkBAIC0zMSw2ICszMSw3IEBAIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBJbnRTaXplOwogfQog
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19Eb3dubG9hZDsKIHR5cGVkZWYgc3Ry
dWN0IF9Fd2tfVXJsX1JlcXVlc3QgRXdrX1VybF9SZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3QgX0V3
a19VcmxfUmVzcG9uc2UgRXdrX1VybF9SZXNwb25zZTsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfV2Vi
X0Vycm9yIEV3a19XZWJfRXJyb3I7CkBAIC00NSw2ICs0NiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBf
RXdrX0ludGVudF9TZXJ2aWNlIEV3a19JbnRlbnRfU2VydmljZTsKIAogdm9pZCBld2tfdmlld19j
dXJzb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1
cnNvcik7CiB2b2lkIGV3a192aWV3X2Rpc3BsYXkoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpOwordm9pZCBld2tfdmlld19kb3dubG9hZF9jYW5jZWxs
ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCopOwordm9pZCBld2tfdmlld19k
b3dubG9hZF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCopOwordm9pZCBl
d2tfdmlld19kb3dubG9hZF9mYWlsZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9h
ZCosIEV3a19XZWJfRXJyb3IqKTsKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfZmluaXNoZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCopOwogdm9pZCBld2tfdmlld19pbWFnZV9k
YXRhX3NldChFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJD
b3JlOjpJbnRTaXplJiBzaXplKTsKIHZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVj
dCogZXdrVmlldywgY29uc3QgRXdrX1dlYl9FcnJvciogZXJyb3IpOwogdm9pZCBld2tfdmlld19s
b2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBkZiBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBkZgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNDI0YzE5ZDk4YjYyMWZlYWRmM2U0ZDYxZjdiZmY0NzEwN2EzNzRkCkdJVCBiaW5h
cnkgcGF0Y2gKbGl0ZXJhbCA3NDIxCnpjbWFpM2J5JD8hd15vckY1SlhUPzg1S2x3ZEklQU9mdVh4
d1ZyWFZ5Mm11S0pOa0sjO2dgcT0yUWpuQkpxKE0/Nwp6QzhRKC1yMVp7cyYrbylOX2RmU35vO353
QFlwP3lUKnpld2R0aWBQXmdCRkFjITIjVEAqeyRgaFJqcHxOQz1kKzkKelM9YS1fI1gtcyN0Y3t5
MzVKcj99ZzN4eDNaV3VmVz9QJV9Yay09RXZ0U31OMTA5UTlXI0BxP3VuWmd9VzJSSjhuCnpAJS0q
IyM4ZExJQnd0UWlNaEBIaTlebV54WWwoNikoRHMyek9oeyZXYT9tVWEybG11WVFqfWpZWG5ETDUm
YHIxWQp6RjNKZyVvVF8tP1lWbzRXe3ZBND0wR1NgVjFwPk50Yyh7Z1ltRC0xaU8jRVI2ZWdQe2lJ
WHF+V0wybE4hITcye0cKelY2RmJKT25mNmIzbjJNT2RWeFM3cX1rc3gjSj9nent2VlAyNWgoO0gw
KXZiRUoqLTgyVXY+ODdCPihCcGFSWmI8Cno+Y3t0RSU9TDxiJnQ5aX4ySTt0a2UjR14tRUNAVkgj
ZEhyRU0qcW8yfE18d2B0TnUjdENDO1l+WDVQek8lKylTOQp6WHpLblhKSUpHQ3B8VTE8aWZnUFU+
NlU2PD97fENAYHdaT21eeWJ8OSgoXnRRI0A0JnY2bGJId0hjWGEoKjJRQG8KejlRdmcjQTRuVzsl
SkkyPz1fYklHMC1rY1k3OE8yRVAwN3drUVVKWWZoSEIwJGM1OXMqNTxiSlNKSEd4eUo5d0ctCnoq
ViFoJl5VcmVGWDhmJWo1OWVQLXBJZWI9S1hxbD85PUR3XmVGYURkMjFBZjQ+RkV4S0A+aDBkcjJK
MFh2e3pscAp6ZFhDJVF6Zig5b2gyMVF9dF42e0g3VmpZMiluMGU0RDAjKVhkYDE5SD1efT1fe05T
VEswb3sxNnZyZ2hwdGE0UCMKeihkOT4pdlhVPnVgdSlWV1hvcXQwWkJgUGBgQDQwY0hDNFBxN1BW
SWVFfVp5KCozUWN+NkljLTFiZik2TkhYLVZpCnpadEh2ZlBJRSkmOyNLfjQkTTFTPjFwVFZteTZ7
Nk5DOFhMTW9KRG55PmVkYGthZFgtPEFUOWpgX0J6WD5jZnA3Swp6Ukw1N30xfEMoS0YhZVJMcmtP
SmIrUlE+dlJ0T3I+VkRlfmxBJUEqWXRsPHdFJDJpcz4mdW5MRHclRXw4N2NxQUAKem5JZ0t7VE45
PDllJiMrVTd3PUNBK358NHVVUih8bGA0WkFuPXVEdEJ8SDNydDx5fTBWSjQxOEMjbkVhPnVpU0oh
CnpKNUZWOUFuekFvR1ZXSmYhUDkxc0EyJXdTZSU2VmItVTV9MXJNeHJzSlBZeGFqajdSI0dtIUVD
P2NOUWtJbFhONAp6XklWNVpHKCVDVVhtOGFjSE8kVkBhalMyYC1NVShvM0hgVUohSjNBZjxKWSMx
Q2s+NzJkcH0qWHBSQ1BzYWMjeyMKem5xO2YpSFpVcDZtfSlmVHREdSYoanZhalZHSGM4WlZQSm9g
Nk1EWWpSMT9WZVZOb05BS09zPHhYRUJFYlZEVyVECnp2cGcpYnNSM0VlcVNNcCVQX1YmUClGVWxO
KnkqY0Qxc0ElRUl5cSR8KTlsalhuRDJBWFV8UDQoNz5TTThCVXZ3bgp6ajBiI2h6MUx2VF92NE4k
Kk4+anVeMnQ9ciVydjlwTktRUEVeSlQkRmx7bXlzJldxVX4xWGpNd3Vme3kqJno+T0gKekVRYDgq
VVRiY3F5eT8tY1AmKW4hNH1WOChJYGAwMWlOZkJ8WiQrRVdUKUVSUzFDaVg+TWNDTWk3dGlMb1JJ
YUxxCnoofkxhWFJXcElLNWJ8JDYpTWtzaSVOOVN1YUAxR3heWUQtZDZOYEhOIVV3LU5jbzAjI15W
VjRLQFQ1RWx5KXBGJAp6c2spcWNKLW4hI28hak43V2ZNTC1oa2k0ejRTTU8jPU59TXQ9JWNOXmVv
OEl+bUBfcm4jMzFSQCYyWTR4LX1PNVcKentZSW15UGA0dlpePmlFa0trIWkhUnVpSElzbXI7dzlQ
akpwck9hSFY/dkFfKlJCY2xhe0FKeCRIRE0zaUUxNyZPCnpwPiU9amRgbSMkcSt7aWxtUkB9K0M5
QnUjSjFJLUQ8Q1lFUU97PXJhdFRWTU0tV0txI1dGXjw9XmQ+Kmxaa2JxTAp6cnwkMWdYfFVBWngh
STl0dWBfalRKK0h4eWsxSCRYKnItcT94Z1FvRHdkdlFjK2cyb289OC1rZmQwTHUyX0wqKisKel9h
a09IQTYpWkpCYHY7NDxYI1EwbiZTJkZaUFlALSR6YWN+MFR+OTBpPlZ7e2ZmJk5rYm17dXVefD5n
XygpKU1uCnozK1FObHJhYXJCSm1zfFljeHowPiQ2OTA+VD0xOGJuIVpjZCtwWi1mWXZ4VD4oOFJ7
VVYydGM5cE58UXUwVWdoNAp6VFJ7T2ZpeWJaS0xHS0FOX0tYPzFDXyQlanl+VXIwVFB1a0lHUjBZ
KklaQCV9Zyh+fnwzK0U0JTx+JHt4OzQ9OTsKejZtJkxQPW9kKjwpNk8+MEExQ2Yhb0s4e1REbyZw
aHNyJUlrKSpNZiEzbGlqVVNaOU91PXVofjs7aEZibmYhRSg0Cno9UVI0dDloYC00JXRwTVp2VWlB
T3h1dldCclVVKihhZ2clPnZ3cXVPUDVyVntVZSZCVTlEI3dUOFYlVTVScCR1WAp6QWNFezZGdEU0
bj9maG4pJU1QNyFYRTN4TzhadTFYSHpzIzJeZHBvYGhhVFU0aCV6XjE1MDtZPkI/fTRrdlZRSVQK
elpFb2AlanJscUQwekZuaEV7QylKSHdyemgtVlglUUdwKktBTjNoUSF5Tn0/LVg4aHMmYEpRP2Qj
Ym5FTEAyeGBvCnotdGR8TXBsJDAkMmZ0d3JWVlN3ISlMVCQocHhlV0FsX2ZSN3lHMTFlQGZ6NCFC
PT1Se1lkfUhscDs3OXsrciYzUQp6QD9XZUQwdXhmIVMqaE14d1JPSVZaSjFNe0hKezhaS0JaYUhW
RD9pdXpzMDgrcVdKMD1eYWpRQCt2TDQxKTVBMy0Keig/X0RSLU1yXzVJY3VjdiNufGEkJlpBJDA/
VUd6e0k/Xk1SeTZZbiV1XzgqY2pBNC0xR2t6e0ZgdWRsVGQ2dSRICnpEPzZKNSEpRFhvJVM/dT4k
YlkmKm1ETHlUdTM0YCRzI0w1IXQtUlE0U0NqbXFxNylWdUVLKFRWJDlfODBEWFkzegp6YndOVHJ2
ZnlhenQxeWkqJkd7Km5nbVJIeSZDaHtgZCNjMFNAbHV6cj09MTRuWjA4OFAqJm9oVGRpPiQ7dChS
UmAKeipvMDV5K2pAZHtvcHtGVEAja3Zhc2tNNykoaT4te188eip2JG9ubXJYZT1eKThGJHJCJkRD
JFV5JiFJWSslaD08CnpgPT5+QG5rfipPPlVzN0c1Pm4+T1c9cG8kMT1NS2tBOT9TeTY8fkxZZFNh
UDlwYERCWTUzKDMoI0p3eS0taH5sXwp6eUBYX25LbHtNP1V2R1U7QXM4PXFrclV1cSQxYTQrVVUt
Zm0pQW15U2RjRl5fTFdHYSVsc2g5WUJpXzdCbGQ1fG4KelpqKChJMUo0NWJReGAjN0p1VT45Un5U
NlRSUWs0VnRXSjJ1Rk52T21XYXZqJCFjPj10VkVmfXgyKUg9M2FJUWdvCnohQj15WklgPnBhNVZl
JEt7JFhVUk40TXYmcWt4OXwzdktfWGBWeGl6NlB3fGYlU0hedmNGd2U9YFJTMUV7X1YoVAp6TEw2
a0Y8OyYlWj4rT3owRkloKGtnUWc+PCF9IVUtdiRyVEtXZU8xJDhkcl4pWGk/WVRwcG0obWc9Xm4w
OSZCKloKenYteWlCUFM2YnFXO21pOFBRRUZQekhMVUY0eTJ4dTl+JVlZM1VPY3NqNkdSUURKdUpk
KDVSR2hGdUIjNTVySHZiCnplSDZKXy09OTF0MGs2b31GWlNqP1BfQTB5djBCQDRrZXZJLXc7JF59
ZGdOdm5xQVBLcVl+MkJQP3thcDFwUUxjQwp6JjJHNUZGS3IzU3ZVbnBfQ2s4V1pnWVUpK2RBIyVo
Pyp7Yj9CVVliYF9rdmZBTWpaRno7QFoyTkpfVVZXN2M5YikKeloqWH1JTmVmJm98MUBGfENSfFhi
YV4tUVI3ak1hNmdVblFya34+e3pLISglO3lFfUhfeCNuNEhjOVpjMyYoJGkoCnoxQGY5QT9JbnY8
VmVIUHdJNEpreTdtSEJ4c3drbGxYWSRfZz1BcUcxcn1raCRgcHtJJGNNXnVEOVYyfj01N2BwWgp6
Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZT3wkIVMyV3ZxWlUzQSZoKDZoR2ptUmp1SXd7KiVfZHY0QnZl
VTlJaiNCU2oKejEzeEVOdk9SZmlaZiR6Kyk3c0tuVm40SUVQTHBHcVY+UVF7OXdVKnN5ZTcrb1Fr
Q3tRNXQzI24rS142VGdGfExxCnoyOWloTEZ1UnYtdll7Z3x7V0YyezVrKi01ZHw9KXwoVyZgJCRY
dippM3FgT30pZV5JV1pgd00ral9scE9pXl5VIwp6eXwlUWtrZ0w4JiV6SClvSmwraWVqcGtfPHhY
QHJNITwtISNtZml4b0I2OXleQHA8UCllekEpUGc7WVJpTzFIVzsKel41YTgqUWd8TCM+bEI/KD4k
aVk+K0BxPWdDfDAkVT80bVNjY2xiZz5HPTByWWRSJip3REJ6KFg8JF9NNSs+UGlUCnoxOyUkMy1o
RiRidlJOPkhSXyVkVm9hQmteeFMxQHhII1JsU0o0aj0xamQ2e3lfSVRCPkt1Tkx0Q0I8WlltSVNa
bAp6QCFxU0oleEM+Py1qcig+ZVYwJiN6OzBUclpxb2Q/YXU4TT5HZkBOfjdlJjxBYXpEYD5hQDs2
fik9cWdLdCkzPmMKelIqMkgqLXtkYlozUnheaThJflowXkx2TmIwbWA1Nilpbj5WZCRwRW4lVDF3
enVIX3VuSGFFKlNeYEBoQWJXTCYzCnpTNkA8Um5nTnF+dF9afk1wWjV8R0l+Z3pZLTBrO29lQTYq
fm95RVNvRHclUGlNPXluYStQbTt6ZT4rfGB3Tn07IQp6eGlXT1ItaD85OVErYDJGcnlUNHpje0ZU
I2VYZSQyS2R4MUM+cSY1dj44eEpzckdwTElKeHhwI19QMUVOVHxJSyoKenZgZ1JmP2QxciVxSXg/
Yy1DKns3TUhBZVE+c2lHKWJMa2R4c1ZpNT1IdzcrNS1tOUI3VkFTckQpbT5haUVVXlI/CnpUcUQh
dDtEYU97cysmdUJsaVFsIXBpNm1BKjd8KTEoWVYwRUNqUlgwRFhjIU0+e3lRbmN7ZEA0KT0yK2Uk
P31DZwp6PFdBek4kYCo/V2IkZShXd3A1PV9RS2h5N3c5OTtyaGk+ejhVNUBSWmc3NyFEQUBYc0JX
dldqdlBsZVlWczJkTTEKeiszSTNGM29BUS1kRHEjMzc+LUJwSkMzYypqS1F1bm9YWHlyVGVtKGcr
JkBAMVVVOyR9eSZqcFd0TU1oRFQ1UD98CnprPmBucnokYURmNGNHayZrOWE7MTRNd1d7ZUctbVor
VTF6elQrNV5UT2ZwPjRPanMpV0N9MFF8cyFSaik3X1M3Xwp6YSs7fUUhZWxkSVRYQFkxM1FeKUsq
X2BReFhRVHJpbEYya2dAQjckPDNETFRWSXpNdn4yK25NSihQM2QoXkh9TCMKens4dV8/cXgrcVE1
NjV0OXdxLW89MlVwaU5qakRAWk5xcWFVR2ZoUyprN1AlQDJLOW9SSzdhQiQ9OHo0aEtBPGZgCnpj
eURfQXljKCViMSk/MFU3VWhAZHRVXmhPWlV+Q2NeVkIoWCs5dyVtIzlwTng0UlBTSFJ+eUJAc25p
eCFPdVB7Iwp6cCliZSQkVCRrfXcoKj1TZDthWlp6PGl5TkM2IUAqVEIkKVNCTlA5P2psemJhek1P
Y0c2YElOSmRMTD5iWDN5SWQKejJAXzhVSj1gP2AtWiZTOSgjQSZFJTkkTjlBVipAcnBtZXNkYlVp
fmtNN29WQ2U0dVJpRDY2QEtOPG1nMEY1U3JQCnpnPW8yTHZEUDt8OCUjQktCUmxEZDVBVGt9Vl95
YiQkdFUmOWJOTjU8TzVwc0lIQlFCfXRKdVokLXA8U1JQR2BgTwp6QUZid1ZYeHAxUm9VVT5zV1Y3
VzNNYH4qTGtXMnktTVopS1UpOTxgRDlmKGJyJGo4d0g3ZXFRYG9WWHtBYUZ9VTIKej98Qz0keXx2
PE4lVz00dkh3Rj1qZH5qPnNnUjxmNzEra1Q9NF5sWUc0bH15SmtXTmBBSk4wY2g1JEFTKCRMdDRa
Cno8aDtvb3NwaXVpUVZzZHxYUHlQR3I0O3ZSSSoqWUwmMDRJbmY2eFFQd1MtN2xud1E7bXRYV14o
MillQ3c2TGx2Zgp6ViFYYCUjMXp3Q1ltSXl4dTFgMnNKZV9PTCtmUVhMbXswdlF4P0VFQD5idjI8
WmZTTit6cSghUGIlUmhVVXhnMEUKeldXdWxWZC1KWHw+PDVtVkI0dV4+IXlXREhyVXB4YCk7X34w
SW82Yn1eU0goZ29pdVFxQU1YZldwaHs9NXM8NU4jCnpqayNzbnF+VkNWaHUhZmY2Uy1SYzVkJVl5
NHdvd04hPjxTSTRQS2ozZG5aVDVJPGxJKCp4Yz4kP1dOfTJwYHFPNwp6cktMSVJxYTtSeEAhQDZC
YkdTTE5IX2hGeHE1fSpBdG5TcnJqIVc1dHRPVUo5KUthbm5QPUVqVTNONDw/JXgkTkEKeiNLTnlw
LT15YkdgLSRBNHleJnZJYWRJOWxwVlQyKkt8ODAhKjhrTTNINiVBJE81VUlJSUh0fk9DUkkobWA+
YXBrCnpJQCFeN1dMTVkjc0ptKUNSQmtsI3l8M0J4JHt4enUxd1YzK2VmWjw/T0RoPCo9RSVBckdV
dFZCKjdwdXV2e2dLdwp6YENEWjZKZVV5TSpOSD1xV1hsWS1vSDJkIV80MjIld2IzJlk/Vy1lRXgz
ZWJRdHF2d1ZyezkhTzgreWF3TDI4MjsKenc3cjNzY2E/YFpDYl4pTWZiekt+dGNEalRlJjlwOzA8
KlM4WHA3SW5jelhzNi0qWjJ1RSQteEM4KkFMRWx7WDlOCnozdDBGZjZWZ1hjKipYdkBEdXtRRGdy
T0tPQ2NXeihwIzFfWnY5WX5eZ3VIdHt6ITZyJml6LVlIRUFBYnp6bTImQQp6Yi1VdXpfU0RBcWcw
XiFFWkU+KnNSNSkjTVh6dnNhc35HI1dNTCRBQD53U2E4dTdSM1RCYV5rNDlCSWxiKlBAfiQKenZk
WGxUUHZaNlV3MSRDSVR5cGNuUz0qMXRrK0YlWDNUPkxQdXdrSnglcjhGKEx7dVYxRihUWChOKVRi
PGJsKnN2CnpWcExtZUN3Ti1tOXJiKXBXYEY4aTJ0THhQcFBCZGJkbXRXQHR6MkF+eVpMbX1aQDRS
KWc7NlZmK300TExldz9RLQp6R1ExQUZkfHlDRSZfZy07RWpWTWwlWmlWMVp8K093YDB9YnRjIW9a
b01DdjhXO1ZnQDkkKENjfDw2cT5COEpATj0KenpHN2tQJiVPbTdZQGxSfT9IY1QyNUhsUncxRF41
TCsoeDskKmEqWiRAWXYrP1h1Z15kIzIoREdoTUpUYFpjfE94CnpxT0VoTXtOKXFHcHpOR2NKVXBG
d1chTnpwZHdZS35zT3AtNiVLZk1aSV54S25FKl9mPiV9fnA1a3p6P049bDx5Kgp6QGB9cDY9fXlL
fChlQkR3NHZ5anMoUTFRPV5uOSRHZ2hZO3tpX3R3Q09xTXJxWmNpfVhrbldZX0ZKR2hRdUppOXoK
ej13ZFJ7PHVUX3RWQV88c1BMfkNvemxNP3NgQj8yLTYyeHxiMEZJbmZWM0IlaFJ+ZmRAJkxocDxH
d1k9KitWTyR+CnptaGFBNmItY30hbmJNSlYmcVEtPi1aUXJgXmhLRipEY1JtYnJtbjAwNEJrdiNU
Iz9OfSomVERoaik7c2UyUWNVUAp6cFBkI2JrVyp+MTslaHM1TkN7aWZ2NlA+YHotcVE4UHJGYyN0
dH4tSWFyME9tOFJWQyMkPUVLTUAyUHVwQiV0dm8KejA4NT0/JUVxMTNyZlFfaFM5VXkqRE9VI0lC
YH00KWZLRkNnajJ1NT1zQj48RWU5ejFPVCpqZWNGKVhTb04wOVFxCno1d3YwfGIwQDxKVD0xaUtH
YD1uN1NLaWZ1RVVPM2R0Z2QtQylPY1pQP3UtQ284bHhAaSpedCVge2xVbHNedEctdwp6Y2l4WG9o
Q2c1VkBybmZjNyFVSHFWTj8yZ3MrR2I7Z0J3UWorIWp8KSlDR29pZjZSKHIpOVBiNyUkfD5GUU1V
TUMKelQtQGg+MntJS1YtKk5mR3drPTg3KnVGdiUjeU9tJVZWVElkbSVDZGZtUGglbTx3eG9CZXlW
Ry1NSG1ZQWsyVyZsCnprVjQ9Y1pAdXJvb2NkbCV2UUNgUnZ3V3E/e2N2aEhxM2cmcGZBJikjQChB
QGpfYCNze3FHejEqdj4kIX1TPnkzQwp6dGgjR2tPQDQoRGRONE9acEVOVTd6JDckWD47Mj93dCpG
b0x5aF8jNUV5eHJYbj82KTFJNmhPVUxXdyM0cWdYMj8Kejd5QzMldUchfnRmJT4oWT0+dyh5SkhG
MVRAWmlffENKN31LLXgpay1ZdGZ1PFJtVTQyPXMmcXslKjU8KSNmRXdMCnolOFlTK25XdXZXPzRZ
JG0oKDMwTnJ1eDM4Zm9CcWYmO3RfKnpvYU8/U2U4YSFwSUdYPG9XMkNuaFhqXkJuJnI+Uwp6Nll1
PWB4VyZnemBOVW5aTEN5PFAjamRtJCU+MEVxbk9KYEU8ND9aQSlMPDJBSiRHSTlzWGFFZ0UyM2V7
XmRAKVAKenhLTUV8SihafExZez9+MEg0VUApJjwoOCR7dHJxeXhhZnUoN3E5TEVUNVh3Rl5CRXs2
YEdiQWJPdyQwZGl2dDVxCnowN3V4VF9QJGJeQGp9T1ZZclRCIW01eCpOaWYkT2hqb01eV0Q4NGJi
UDBXZUtfSVEyMlgyVmV+VTZaTmBjWkdJQwp6eH59ZmpAVklWNl98cikxI3V4R3ZOK0Y4WjYjQlVJ
cHtyWElpY1NJVVFWd2JEU18zeFVTJm1yRmBMPmJ5VnB9NXUKekFTQHZsSXhpSFJPJTZ6XnhPbGxu
eD0tbCl6NmVMRVViKEpeYC1mejhuT2kpVmh4Qio3Pm5OQEU2aitaYVpwQEtPCnpIJXxUZkBwWDg+
YUVOem9AQTBDb2ZgNldQI04maVp1SlNCT1J8RXpvKTBBXnhKUnRLNEs8QHlySE0/QXRNUmlxUAp6
PFM0WHY9MkMhQ2NYN0Y+ciVHcEBlQEA0amR1YklsO0NoPy1gQEpgRz9HYyg/UilZaW5XRVR9PD8q
QV8oTztXTHYKelJMNFg+cH44UkdHPT19Rlg9LX5wVj9ieWUpPWRXRVlLZ2FWY0ViXj92JjJ0VGIw
LVcpVDhpfVdFOEFJTUBhQXJJCnpJSUk+MVopWGk0bTJZaWFmcEZwclFCenRQPVY+R2U1az4rOVZQ
Rl4jMHRPPzFxOVBDemtiO31KcW4pSmAqMldQNwp6MU9xQCl1OWdfQTgmRV9QMHN4VldrdjteVzVG
YE1FR0l5NTgqeEFeK2s9Nmt+VDVjRjhVNyFlWTI/P0g5Rn4mZkYKenEkO2M/djhNVztzO3RPZzUm
VGhLaDliZkxQaiVWa25GX1dRY3JvfU9CQGp+XlIrPWlKJUg2RlFjazRPeHNtQUFQCnpYSWpVbEJG
PnVFWio5PF5DS1hLe0g0Zkh5WmlTPnlGNjs5NVBwMnxtXiVUMTtjKHVwYzwod15qKSh7c2NVJU8/
Nwp6enJNWHEoN2dGbWFZZzg+aylUJSZFZlVoV2VRZUg0OXlAUE87Q2lvdXZ0cVF7dUtUTD1YVGow
d2B7eT83KDgoYysKekVHPjZIUTtqPitFVldnfHZgJmotUE5nVCo1XyZZMU89NDxoNENvZmVubHFo
eVJNfnl5QSleVU9zQyhXMTRWTCl0CnpMMnZRUUZUQipQNFFnPWJuQlJ2JmNqIyYrV3Y2LTJEb09D
QDgyYSUzbjhHJWxGRXtabjlmdD1CK2RNOGhsR0x5Qwp6USlzP0FyP0shO1h0TWR+VldYbWkjQWxA
OHo4KEp5S1Njalo8ZXlYa1h9TWR0ayQ5bnZjZ09zZU59SWM0TlNwRDAKekdyfHQ8PlZ+cDQkQ0d3
aSs1Q0BwNWRjV2YmZFNaISlkKz99MEZlK2Q1RHRke1ZJcmJIc0ljKHdmZEdTbnF5YV5NCnpmaFBh
RztlUWJrTmFDcGAwSGxyNiFQPTJ9MXdoaWFZWGJocDEwdip+alJySVhOUSZtNF5OXyNJNjlYWDle
UzI1fQp6OWdubHIhbmhmTWhga0d0SHBiSjw8UjdxcXRAPDZteTE1TW9xOzhIVWFUWlBqMEJLQGVh
cWY2YWo0S2RBR05CMWwKeiFDMlh1bGEyeigwNzRXMjZvRXJjS3lyQVR5RUN4fnFEOVE1SW84I2cx
WXpqfkxUTTM/ZlFPd1dNcEk1MnF5VGd5Cno9Mj0xbGdkI2Rmd0JRT1BieDsxemM5S2NiQXRuTy0+
NWVQbFVwQGYtYSlQK3ZQY0tNYFJrRXtrSDNJKGpsPU8raAp6eHMhNzdfZUIxIVdBb2J2JUE5ejdh
Vz0lTFpIUGhzNGpLU2JiSC1xJEVKLShrKFNLdXNeYkhKd1NhKE9xfE5hM0oKenY2YW9TSG4lWllL
ezt2T2YyOHozJUB0eDBRdG9jSElKYEpvN0w1amo7bGcwQkZwJmVvRnllck4hOTwjWGdefFI2Cno7
djV1QXlpSkk1cSRxS3F7KlhmP2h5ZjVnTSNRVj80K3NQYWZ+WlNVYHdjO1lnQSZ6PHlLTG9kaVRS
SG5vVHgrNgp6Z0E8e1ZCb219VGYrbT9EdTdTIUR8QX0rSXY1MSU/XkR5RVpOZT10ZEVIUWMrVipC
ZDBqMkxsVjZhcG9CRUNMbVUKeiFVZSVsOXgjfVBfaXRKQyNBQj1oVT8ybnpBUl8obzBGZWo7Mzww
elR7dmt1YzVYOV9+OXc3RVZHQjZsSXIxSmxlCnpMQlloRnw1SnY5aXhTVnNLVkBKal5qfl5KaV5U
bz9yeWhiUntGaDdee3gzV3ZhWDA+Xzl1a1dEdztvalZVcF54ZAp6cVdAbHQ2I2JpQkhAckZWZzIk
N250ITN3cEEqS3FYaU5nYE9gVEduMktuaHJFOTF1ZHs0KUcjVGtPM00yI2dXM1kKemFGaSQqQ1dW
QmRyS016e3ZMYXc4OFpIZiVLfWshJnBrUmFxO1F2PTQ5UmVBZ0NDVjBLPkVQPF8xT3k+YkQ2b2Bf
CnhDXylNP0R9cUtLTHtKRH1ESmM7VjVkO2IlallMVklOS3wlcEdzbkNBLWNuKStBXj5oflN2NTRe
eld7bkBfV0orOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Rvd25sb2FkLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI5YTQzNgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9kb3dubG9hZC5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0
QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQu
aCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdFNlcnZlci5oIgorI2luY2x1
ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j
bHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0syVW5pdFRlc3Q7Cit1c2luZyBuYW1l
c3BhY2UgV1RGOworCitleHRlcm4gRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQqIGVudmlyb25tZW50
OworCitzdGF0aWMgY29uc3QgY2hhciBzZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZVtdID0gIndlYmtp
dC1kb3dubG9hZGVkLWZpbGUiOworc3RhdGljIGNvbnN0IGNoYXIgdGVzdEZpbGVQYXRoW10gPSAi
L3Rlc3QucGRmIjsKKworc3RydWN0IERvd25sb2FkVGVzdERhdGEgeworICAgIGNvbnN0IGNoYXIq
IGZpbGVVcmw7CisgICAgY29uc3QgY2hhciogZGVzdGluYXRpb25QYXRoOworfTsKKworc3RhdGlj
IGlubGluZSBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBzdHJ1Y3Qg
c3RhdCBidWY7CisgICAgcmV0dXJuICFzdGF0KHBhdGgsICZidWYpOworfQorCitzdGF0aWMgdm9p
ZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdl
LCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291cENsaWVudENvbnRleHQqLCB2b2lk
KikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAg
ICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1Q
TEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgRWluYV9TdHJidWYqIGZp
bGVQYXRoID0gZWluYV9zdHJidWZfbmV3KCk7CisgICAgZWluYV9zdHJidWZfYXBwZW5kKGZpbGVQ
YXRoLCBURVNUX1JFU09VUkNFU19ESVIpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZChmaWxlUGF0
aCwgcGF0aCk7CisKKyAgICBFaW5hX0ZpbGUqIGYgPSBlaW5hX2ZpbGVfb3BlbihlaW5hX3N0cmJ1
Zl9zdHJpbmdfZ2V0KGZpbGVQYXRoKSwgZmFsc2UpOworICAgIGVpbmFfc3RyYnVmX2ZyZWUoZmls
ZVBhdGgpOworICAgIGlmICghZikgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNpemVfdCBmaWxlU2l6ZSA9IGVpbmFfZmlsZV9zaXplX2dldChmKTsKKworICAg
IHZvaWQqIGNvbnRlbnRzID0gZWluYV9maWxlX21hcF9hbGwoZiwgRUlOQV9GSUxFX1BPUFVMQVRF
KTsKKyAgICBpZiAoIWNvbnRlbnRzKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVz
KG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9i
b2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOworCisgICAgRWluYV9TdHJidWYqIGNvbnRlbnREaXNwb3NpdGlvbiA9IGVpbmFfc3RyYnVm
X25ldygpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmludGYoY29udGVudERpc3Bvc2l0aW9u
LCAiZmlsZW5hbWU9JXMiLCBzZXJ2ZXJTdWdnZXN0ZWRGaWxlbmFtZSk7CisgICAgc291cF9tZXNz
YWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJDb250ZW50LURp
c3Bvc2l0aW9uIiwgZWluYV9zdHJidWZfc3RyaW5nX2dldChjb250ZW50RGlzcG9zaXRpb24pKTsK
KyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGNvbnRlbnREaXNwb3NpdGlvbik7CisKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfQ09Q
WSwgY29udGVudHMsIGZpbGVTaXplKTsKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKworICAgIGVpbmFfZmlsZV9tYXBfZnJlZShmLCBjb250
ZW50cyk7CisgICAgZWluYV9maWxlX2Nsb3NlKGYpOworfQorCitzdGF0aWMgdm9pZCBvbl9kb3du
bG9hZF9uZXcodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVu
dEluZm8pCit7CisgICAgRG93bmxvYWRUZXN0RGF0YSogdGVzdERhdGEgPSBzdGF0aWNfY2FzdDxE
b3dubG9hZFRlc3REYXRhKj4odXNlckRhdGEpOworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQg
PSBzdGF0aWNfY2FzdDxFd2tfRG93bmxvYWQqPihldmVudEluZm8pOworICAgIEFTU0VSVF9FUShl
d2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FEX1NUQVRFX05PVF9T
VEFSVEVEKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2VzdGltYXRlZF9wcm9ncmVzc19n
ZXQoZG93bmxvYWQpLCAwKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGlt
ZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAgIEV3a19VcmxfUmVxdWVzdCogcmVxdWVzdCA9IGV3
a19kb3dubG9hZF9yZXF1ZXN0X2dldChkb3dubG9hZCk7CisgICAgQVNTRVJUX1RSVUUocmVxdWVz
dCk7CisgICAgRVhQRUNUX1NUUkVRKGV3a191cmxfcmVxdWVzdF91cmxfZ2V0KHJlcXVlc3QpLCB0
ZXN0RGF0YS0+ZmlsZVVybCk7CisKKyAgICBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSA9IGV3
a19kb3dubG9hZF9yZXNwb25zZV9nZXQoZG93bmxvYWQpOworICAgIEFTU0VSVF9UUlVFKHJlc3Bv
bnNlKTsKKyAgICBFWFBFQ1RfU1RSRVEoZXdrX3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KHJl
c3BvbnNlKSwgImFwcGxpY2F0aW9uL3BkZiIpOworCisgICAgRVhQRUNUX1NUUkVRKGV3a19kb3du
bG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGRvd25sb2FkKSwgc2VydmVyU3VnZ2VzdGVkRmls
ZW5hbWUpOworCisgICAgQVNTRVJUX0ZBTFNFKGZpbGVFeGlzdHModGVzdERhdGEtPmRlc3RpbmF0
aW9uUGF0aCkpOworICAgIGV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9zZXQoZG93bmxvYWQsIHRl
c3REYXRhLT5kZXN0aW5hdGlvblBhdGgpOworICAgIEVYUEVDVF9TVFJFUShld2tfZG93bmxvYWRf
ZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSwgdGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCk7Cit9
CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2FkX2NhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSwgRXZh
c19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIkRvd25sb2FkIHdhcyBjYW5jZWxsZWQuXG4iKTsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVp
dCgpOworICAgIEZBSUwoKTsKK30KKworc3RhdGljIHZvaWQgb25fZG93bmxvYWRfZmFpbGVkKHZv
aWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQorewor
ICAgIEV3a19Eb3dubG9hZF9FcnJvciogZG93bmxvYWRFcnJvciA9IHN0YXRpY19jYXN0PEV3a19E
b3dubG9hZF9FcnJvcio+KGV2ZW50SW5mbyk7CisgICAgZnByaW50ZihzdGRlcnIsICJEb3dubG9h
ZCBlcnJvcjogJXNcbiIsIGV3a193ZWJfZXJyb3JfZGVzY3JpcHRpb25fZ2V0KGRvd25sb2FkRXJy
b3ItPmVycm9yKSk7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKKyAgICBGQUlMKCk7Cit9
CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2FkX2ZpbmlzaGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFz
X09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIERvd25sb2FkVGVzdERh
dGEqIHRlc3REYXRhID0gc3RhdGljX2Nhc3Q8RG93bmxvYWRUZXN0RGF0YSo+KHVzZXJEYXRhKTsK
KyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gc3RhdGljX2Nhc3Q8RXdrX0Rvd25sb2FkKj4o
ZXZlbnRJbmZvKTsKKworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dy
ZXNzX2dldChkb3dubG9hZCksIDEpOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfc3RhdGVf
Z2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEKTsKKyAgICBBU1NFUlRf
R1QoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAgIEFT
U0VSVF9UUlVFKGZpbGVFeGlzdHModGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCkpOworCisgICAg
ZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworVEVTVF9GKEVXSzJVbml0VGVzdEJhc2UsIGV3
a19kb3dubG9hZCkKK3sKKyAgICBPd25QdHI8RVdLMlVuaXRUZXN0U2VydmVyPiBodHRwU2VydmVy
ID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNlcnZlcik7CisgICAgaHR0cFNlcnZlci0+cnVu
KHNlcnZlckNhbGxiYWNrKTsKKworICAgIC8vIEdlbmVyYXRlIHVuaXF1ZSBuYW1lIGZvciBkZXN0
aW5hdGlvbiBmaWxlLgorICAgIGNoYXIgZGVzdGluYXRpb25QYXRoW10gPSAiL3RtcC9wZGYtZmls
ZS5YWFhYWFgiOworICAgIEFTU0VSVF9UUlVFKG1rdGVtcChkZXN0aW5hdGlvblBhdGgpKTsKKwor
ICAgIENTdHJpbmcgZmlsZVVybCA9IGh0dHBTZXJ2ZXItPmdldFVSSUZvclBhdGgodGVzdEZpbGVQ
YXRoKTsKKworICAgIERvd25sb2FkVGVzdERhdGEgdXNlckRhdGEgPSB7IGZpbGVVcmwuZGF0YSgp
LCBkZXN0aW5hdGlvblBhdGggfTsKKyAgICBBU1NFUlRfRkFMU0UoZmlsZUV4aXN0cyhkZXN0aW5h
dGlvblBhdGgpKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3
KCksICJkb3dubG9hZCxuZXciLCBvbl9kb3dubG9hZF9uZXcsICZ1c2VyRGF0YSk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImRvd25sb2FkLGNhbmNlbCIs
IG9uX2Rvd25sb2FkX2NhbmNlbGxlZCwgJnVzZXJEYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZG93bmxvYWQsZmFpbGVkIiwgb25fZG93bmxvYWRf
ZmFpbGVkLCAmdXNlckRhdGEpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3
ZWJWaWV3KCksICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rvd25sb2FkX2ZpbmlzaGVkLCAmdXNl
ckRhdGEpOworCisgICAgLy8gRG93bmxvYWQgdGVzdCBwZGYKKyAgICBld2tfdmlld191cmlfc2V0
KHdlYlZpZXcoKSwgZmlsZVVybC5kYXRhKCkpOworICAgIGVjb3JlX21haW5fbG9vcF9iZWdpbigp
OworCisgICAgLy8gQ2xlYW4gdXAKKyAgICB1bmxpbmsoZGVzdGluYXRpb25QYXRoKTsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4IGZjNWQ3NDcuLjUxOGRiOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMTIxLDEzICsxMjEsMTYgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2Vi
Q29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJl
YShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0
KGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1
ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHRJbnB1
dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVBdXRoZW50aWNhdGlvblJlcXVp
cmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBjb25zdCBTdHJpbmcmIHJlYWxtLCBj
b25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcm
IHBhc3N3b3JkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUNlcnRpZmljYXRlVmVyaWZp
Y2F0aW9uUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBib29sJiBpZ25vcmVFcnJvcnMp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVk
UmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50MTZfdCBwb3J0LCBjb25zdCBTdHJp
bmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3Jk
KSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0oUVQpLgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEVGTCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25s
b2FkUHJveHkqKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkK
KwogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdmlydHVhbCB2b2lkIHN0
YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBkcmFnSW1hZ2UpID0gMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmNwcAppbmRleCA0ZWYyZGE1Li42Y2YyNjBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTIyMSw3ICsxMjIxLDcgQEAgdm9pZCBXZWJQ
YWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24oUG9saWN5QWN0aW9uIGFjdGlvbiwgV2Vi
RnJhbWVQcm94eSogZnIKICAgICAgICAgLy8gQ3JlYXRlIGEgZG93bmxvYWQgcHJveHkuCiAgICAg
ICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkID0gbV9wcm9jZXNzLT5jb250ZXh0KCktPmNyZWF0
ZURvd25sb2FkUHJveHkoKTsKICAgICAgICAgZG93bmxvYWRJRCA9IGRvd25sb2FkLT5kb3dubG9h
ZElEKCk7Ci0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVG
TCkKICAgICAgICAgLy8gT3VyIGRlc2lnbiBkb2VzIG5vdCBzdXBwcG9ydCBkb3dubG9hZHMgd2l0
aG91dCBhIFdlYlBhZ2UuCiAgICAgICAgIGhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7
CiAjZW5kaWYKQEAgLTI2NDIsMTEgKzI2NDIsNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29uc3QgU3RyaW5nJiBjb250ZW50cwog
ICAgIG1fcGFnZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3Qo
Y29udGVudHMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQotewotICAgIG1fcGFnZUNsaWVudC0+aGFuZGxlRG93
bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKLX0KLQogdm9pZCBXZWJQYWdlUHJveHk6OmF1dGhlbnRp
Y2F0aW9uUmVxdWlyZWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUsIGNvbnN0IFN0cmlu
ZyYgcmVhbG0sIGNvbnN0IFN0cmluZyYgcHJlZmlsbGVkVXNlcm5hbWUsIFN0cmluZyYgdXNlcm5h
bWUsIFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgbV9wYWdlQ2xpZW50LT5oYW5kbGVBdXRoZW50
aWNhdGlvblJlcXVpcmVkUmVxdWVzdChob3N0bmFtZSwgcmVhbG0sIHByZWZpbGxlZFVzZXJuYW1l
LCB1c2VybmFtZSwgcGFzc3dvcmQpOwpAQCAtMjY2Myw2ICsyNjU4LDEzIEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0
bmFtZSwgYm9vbCYKIH0KICNlbmRpZiAvLyBQTEFURk9STShRVCkuCiAKKyNpZiBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oRUZMKQordm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURvd25sb2FkUmVx
dWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAgICBtX3BhZ2VDbGllbnQtPmhhbmRs
ZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7Cit9CisjZW5kaWYgLy8gUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEVGTCkKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgbmVlZFRvdWNoRXZlbnRzKQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDMzYzQ5YTMuLjU2MzNjZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTYzNSw2ICs2MzUsOSBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBmaW5kWm9vbWFibGVBcmVhRm9yUG9p
bnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CiAg
ICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0b3JRdE9iamVjdChjb25zdCBTdHJp
bmcmKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICB2
b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5Kik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154538</attachid>
            <date>2012-07-25 22:13:02 -0700</date>
            <delta_ts>2012-07-26 22:51:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_downloadmanager2.patch</filename>
            <type>text/plain</type>
            <size>65453</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAzZjlhYTI0Li4wOGY3MTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEw
IEBACiAyMDEyLTA3LTI1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLG5l
dyIgc2lnbmFsIG9uIHRoZSB2aWV3IGFuZCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHBhdGgg
Zm9yIHRoZSBkb3dubG9hZCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgaW4gb3JkZXIgdG8gYWNj
ZXB0IGl0LiBJZiB0aGUgc2lnbmFsCisgICAgICAgIGlzIGlnbm9yZWQgb3IgaWYgdGhlIGRvd25s
b2FkIHBhdGggaXMgbm90IHNldAorICAgICAgICB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgorCisg
ICAgICAgIEEgbmV3IEV3a19Eb3dubG9hZCB0eXBlIGlzIGludHJvZHVjZWQgdG8gcHJvdmlkZQor
ICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGRvd25sb2FkIHRvIHRoZSBjbGllbnQK
KyAgICAgICAgYW5kIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCBpdCAoZS5n
LgorICAgICAgICBzZXQgaXRzIGRvd25sb2FkIHBhdGgsIGNhbmNlbCBpdCwgLi4uKS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2FkZCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfcmVtb3ZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvRXdrQ29udGV4dCk6Cisg
ICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgor
ICAgICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChk
aWRDYW5jZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfRG93bmxvYWQp
OgorICAgICAgICAoX0V3a19Eb3dubG9hZDo6X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChfRXdr
X0Rvd25sb2FkOjp+X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChld2tfZG93bmxvYWRfcmVmKToK
KyAgICAgICAgKGV3a19kb3dubG9hZF91bnJlZik6CisgICAgICAgIChld2tfZG93bmxvYWRfaWRf
Z2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF92aWV3X2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfc3RhdGVfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3Nl
dCk6CisgICAgICAgIChld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAg
ICAgIChld2tfZG93bmxvYWRfY2FuY2VsKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3N0YXRlX3NldCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfbmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwOiBBZGQgYSBmdW5jdGlvbiB0bworICAgICAg
ICByZXRyaWV2ZSB0aGUgY29udGVudCBsZW5ndGggb2YgYSBVUkwgcmVzcG9uc2UuCisgICAgICAg
IChld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZCk6
CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGY6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisg
ICAgICAgIHRoZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0
RGF0YSk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKG9uX2Rvd25sb2FkX25ldyk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxs
ZWQpOgorICAgICAgICAob25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisKKzIwMTItMDctMjUgIENocmlz
dG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbV0sy
XVtXVFJdIExheW91dFRlc3RDb250cm9sbGVyLnNlbmRXZWJJbnRlbnRSZXNwb25zZSgpIG5lZWRz
IHRvIGJlIGltcGxlbWVudGVkCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05MjIyNwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDY2YWQwMzcu
LmE4NmYwNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC00MCw4ICs0MCwxMCBAQCBM
SVNUKEFQUEVORCBXZWJLaXQyX1NPVVJDRVMKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xp
ZW50SW1wbC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9WaWJyYXRpb25Qcm92aWRlci5jcHAK
ICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKyAgICBVSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudC5jcHAKICAgICBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAg
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmNwcAogICAgIFVJUHJvY2Vzcy9B
UEkvZWZsL2V3a19tYWluLmNwcApAQCAtMTgwLDYgKzE4Miw3IEBAIFNFVCAoRVdlYktpdDJfSEVB
REVSUwogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwv
RVdlYktpdDIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKKyAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZC5oIgogICAgICIk
e0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5o
IgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2ludGVudF9zZXJ2aWNlLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5oIgpAQCAtMjQxLDYgKzI0NCw3IEBAIFRBUkdFVF9MSU5L
X0xJQlJBUklFUyhld2syVW5pdFRlc3RVdGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkK
ICMgd2lsbCBjbGFzaCB3aXRoIHRlc3RzIGZyb20gdGhlIFdlYktpdCAxIHRlc3Qgc3VpdGUuCiBT
RVQoRVdLMlVuaXRUZXN0c19CSU5BUklFUwogICAgIHRlc3RfZXdrMl9jb29raWVfbWFuYWdlcgor
ICAgIHRlc3RfZXdrMl9kb3dubG9hZAogICAgIHRlc3RfZXdrMl92aWV3CiApCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IGZiNjNhYzUuLjg1OGI0
ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAt
MSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmlj
cworICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOSw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb29raWVfbWFuYWdlci5oIgorI2luY2x1
ZGUgImV3a19kb3dubG9hZC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnQuaCIKICNpbmNsdWRlICJl
d2tfaW50ZW50X3NlcnZpY2UuaCIKICNpbmNsdWRlICJld2tfbWFpbi5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDEx
OGVkYjEuLmFjZTYzZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTMyLDYgKzMyLDEwIEBACiAjaW5jbHVkZSAiV2Vi
Q29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIKICNpbmNsdWRlICJX
ZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dC5oIgorI2luY2x1ZGUgImV3a19j
b250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKKyNpbmNsdWRlICJl
d2tfZG93bmxvYWRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBAIC0yNzYsNCArMjgwLDE0IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OmNvdW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBQYWdlQ2xpZW50
SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQorewor
ICAgIEV3a19Eb3dubG9hZCogZXdrRG93bmxvYWQgPSBld2tfZG93bmxvYWRfbmV3KGRvd25sb2Fk
LCBtX3ZpZXdXaWRnZXQpOworICAgIC8vIEZvciBub3cgd2Ugb25seSBzdXBwb3J0IG9uZSBkZWZh
dWx0IGNvbnRleHQsIGJ1dCBvbmNlIHdlIHN1cHBvcnQKKyAgICAvLyBtdWx0aXBsZSBjb250ZXh0
cywgd2Ugd2lsbCBuZWVkIHRvIHJldHJpZXZlIHRoZSBjb250ZXh0IGZyb20gdGhlCisgICAgLy8g
dmlldy4KKyAgICBld2tfY29udGV4dF9kb3dubG9hZF9hZGQoZXdrX2NvbnRleHRfZGVmYXVsdF9n
ZXQoKSwgZXdrRG93bmxvYWQpOworICAgIGV3a19kb3dubG9hZF91bnJlZihld2tEb3dubG9hZCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggNDI3ZWY1Mi4uN2RmYzk1YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5o
CkBAIC03Niw2ICs3Niw4IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2lu
dCBzY3JlZW5Ub1dpbmRvdyhjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7
CiAKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkq
KTsKKwogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktl
eWJvYXJkRXZlbnQmLCBib29sKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1
YWwgdm9pZCBkb25lV2l0aFRvdWNoRXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJv
b2wgd2FzRXZlbnRIYW5kbGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0LmNwcAppbmRleCBjMmY5MjQ3Li45MjQ2ZTAzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yNyw5ICsy
NywxMiBAQAogI2luY2x1ZGUgIldLQ29udGV4dFNvdXAuaCIKICNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgogI2luY2x1ZGUgIldLU3RyaW5nLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxv
YWRfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAj
aW5jbHVkZSAiZXdrX2Nvb2tpZV9tYW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93
bmxvYWQuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYyLDYg
KzY1LDcgQEAgc3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjaWYgRU5BQkxFKFZJQlJBVElPTikKICAg
ICBSZWZQdHI8VmlicmF0aW9uUHJvdmlkZXI+IHZpYnJhdGlvblByb3ZpZGVyOwogI2VuZGlmCisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25sb2FkKj4gZG93bmxvYWRzOwogCiAgICAgV0tS
ZXRhaW5QdHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAgIFVS
TFNjaGVtZUhhbmRsZXJNYXAgdXJsU2NoZW1lSGFuZGxlcnM7CkBAIC04MiwxMiArODYsMTggQEAg
c3RydWN0IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKIAogICAgICAgICBld2tfY29udGV4dF9yZXF1
ZXN0X21hbmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKKyAgICAgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfY2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkK
ICAgICB7CiAgICAgICAgIGlmIChjb29raWVNYW5hZ2VyKQogICAgICAgICAgICAgZXdrX2Nvb2tp
ZV9tYW5hZ2VyX2ZyZWUoY29va2llTWFuYWdlcik7CisKKyAgICAgICAgSGFzaE1hcDx1aW50NjRf
dCwgRXdrX0Rvd25sb2FkKj46Oml0ZXJhdG9yIGl0ID0gZG93bmxvYWRzLmJlZ2luKCk7CisgICAg
ICAgIEhhc2hNYXA8dWludDY0X3QsIEV3a19Eb3dubG9hZCo+OjppdGVyYXRvciBlbmQgPSBkb3du
bG9hZHMuZW5kKCk7CisgICAgICAgIGZvciAoIDsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICAg
ICAgZXdrX2Rvd25sb2FkX3VucmVmKGl0LT5zZWNvbmQpOwogICAgIH0KIH07CiAKQEAgLTEwOCw2
ICsxMTgsNDcgQEAgV0tDb250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4dF9nZXQoY29uc3Qg
RXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiAKIC8qKgogICogQGludGVybmFsCisgKiBSZWdpc3Rl
cnMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCisgKi8KK3ZvaWQgZXdr
X2NvbnRleHRfZG93bmxvYWRfYWRkKEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfRG93bmxv
YWQqIGV3a0Rvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Nv
bnRleHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGV3a0Rvd25sb2FkKTsKKwor
ICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSBld2tfZG93bmxvYWRfaWRfZ2V0KGV3a0Rvd25sb2Fk
KTsKKyAgICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBld2tfZG93bmxvYWRfcmVmKGV3a0Rvd25sb2FkKTsKKyAg
ICBld2tDb250ZXh0LT5kb3dubG9hZHMuYWRkKGRvd25sb2FkSWQsIGV3a0Rvd25sb2FkKTsKK30K
KworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJldHVybnMgdGhlICNFd2tfRG93bmxvYWQgd2l0aCB0
aGUgZ2l2ZW4gQGEgZG93bmxvYWRJZCwgb3IKKyAqIEBjIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgor
ICovCitFd2tfRG93bmxvYWQqIGV3a19jb250ZXh0X2Rvd25sb2FkX2dldChjb25zdCBFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJZCkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrQ29udGV4dCwgMCk7CisKKyAgICByZXR1cm4gZXdrQ29u
dGV4dC0+ZG93bmxvYWRzLmdldChkb3dubG9hZElkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwK
KyAqIFJlbW92ZXMgdGhlICNFd2tfRG93bmxvYWQgd2l0aCB0aGUgZ2l2ZW4gQGEgZG93bmxvYWRJ
ZCBmcm9tIHRoZSBpbnRlcm5hbAorICogSGFzaE1hcC4KKyAqLwordm9pZCBld2tfY29udGV4dF9k
b3dubG9hZF9yZW1vdmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2NF90IGRvd25sb2Fk
SWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisgICAg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a0NvbnRleHQtPmRvd25sb2Fkcy50YWtlKGRvd25s
b2FkSWQpOworICAgIGlmIChkb3dubG9hZCkKKyAgICAgICAgZXdrX2Rvd25sb2FkX3VucmVmKGRv
d25sb2FkKTsKK30KKworLyoqCiAgKiBSZXRyaWV2ZSB0aGUgcmVxdWVzdCBtYW5hZ2VyIGZvciBA
YSBld2tDb250ZXh0LgogICoKICAqIEBwYXJhbSBld2tDb250ZXh0IGEgI0V3a19Db250ZXh0IG9i
amVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNkYTk1NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnQuY3BwCkBAIC0w
LDAgKzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tDb250ZXh0LmgiCisjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNpbmNsdWRlICJld2tf
Y29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2UuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlX3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfdmlld19wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3dlYl9lcnJv
ci5oIgorI2luY2x1ZGUgImV3a193ZWJfZXJyb3JfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworc3RhdGljIGlubGluZSBFd2tfQ29udGV4dCogdG9Fd2tDb250ZXh0KGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEV3a19Db250ZXh0Kj4o
Y29uc3RfY2FzdDx2b2lkKj4oY2xpZW50SW5mbykpOworfQorCitzdGF0aWMgV0tTdHJpbmdSZWYg
ZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUoV0tDb250ZXh0UmVmLCBXS0Rv
d25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIGZpbGVuYW1lLCBib29sKiBhbGxvd092
ZXJ3cml0ZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWQqIGRv
d25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZv
KSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9h
ZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChkb3dubG9hZCwg
dG9JbXBsKGZpbGVuYW1lKS0+c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAvLyBXZSBz
ZW5kIHRoZSBuZXcgZG93bmxvYWQgc2lnbmFsIG9uIHRoZSBFd2tfVmlldyBvbmx5IG9uY2Ugd2Ug
aGF2ZSByZWNlaXZlZCB0aGUgcmVzcG9uc2UKKyAgICAvLyBhbmQgdGhlIHN1Z2dlc3RlZCBmaWxl
IG5hbWUuCisgICAgZXdrX3ZpZXdfZG93bmxvYWRfbmV3KGV3a19kb3dubG9hZF92aWV3X2dldChk
b3dubG9hZCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291cCBleHBlY3RzIHRoZSBk
ZXN0aW5hdGlvbiB0byBiZSBhIFVSSS4KKyAgICBTdHJpbmcgZGVzdGluYXRpb24gPSBTdHJpbmco
ImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dl
dChkb3dubG9hZCkpOworCisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KGRlc3RpbmF0aW9uLnV0ZjgoKS5kYXRhKCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
UmVzcG9uc2UoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLVVJMUmVz
cG9uc2VSZWYgd2tSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tf
RG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFT
U0VSVChkb3dubG9hZCk7CisgICAgRXdrX1VybF9SZXNwb25zZSogcmVzcG9uc2UgPSBld2tfdXJs
X3Jlc3BvbnNlX25ldyh0b0ltcGwod2tSZXNwb25zZSktPnJlc291cmNlUmVzcG9uc2UoKSk7Cisg
ICAgZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX3NldChkb3dubG9hZCwgcmVzcG9uc2UpOworICAgIGV3
a191cmxfcmVzcG9uc2VfdW5yZWYocmVzcG9uc2UpOworfQorCitzdGF0aWMgdm9pZCBkaWRDcmVh
dGVEZXN0aW5hdGlvbihXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tT
dHJpbmdSZWYgcGF0aCwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxv
YWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGll
bnRJbmZvKSwgdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChk
b3dubG9hZCk7CisKKyAgICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9X
TkxPQURfU1RBVEVfRE9XTkxPQURJTkcpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlRGF0
YShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgdWludDY0X3QgbGVuZ3Ro
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQg
PSBld2tfY29udGV4dF9kb3dubG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0lt
cGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAg
ICBld2tfZG93bmxvYWRfcmVjZWl2ZWRfZGF0YShkb3dubG9hZCwgbGVuZ3RoKTsKK30KKworc3Rh
dGljIHZvaWQgZGlkRmFpbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwg
V0tFcnJvclJlZiBlcnJvciwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50NjRf
dCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAg
ICBFd2tfV2ViX0Vycm9yKiBld2tFcnJvciA9IGV3a193ZWJfZXJyb3JfbmV3KGVycm9yKTsKKyAg
ICBld2tfZG93bmxvYWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVfRkFJ
TEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9mYWlsZWQoZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0
KGRvd25sb2FkKSwgZG93bmxvYWQsIGV3a0Vycm9yKTsKKyAgICBld2tfd2ViX2Vycm9yX2ZyZWUo
ZXdrRXJyb3IpOworICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92ZSh0b0V3a0NvbnRleHQo
Y2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworfQorCitzdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tD
b250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudElu
Zm8pCit7CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93
bmxvYWRJRCgpOworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3du
bG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBBU1NF
UlQoZG93bmxvYWQpOworCisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX0NBTkNFTExFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfY2FuY2Vs
bGVkKGV3a19kb3dubG9hZF92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBld2tf
Y29udGV4dF9kb3dubG9hZF9yZW1vdmUodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9h
ZElkKTsKK30KKworc3RhdGljIHZvaWQgZGlkRmluaXNoKFdLQ29udGV4dFJlZiwgV0tEb3dubG9h
ZFJlZiB3a0Rvd25sb2FkLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHVpbnQ2NF90
IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKKyAgICBFd2tf
RG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAg
IGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9TVEFURV9GSU5J
U0hFRCk7CisgICAgZXdrX3ZpZXdfZG93bmxvYWRfZmluaXNoZWQoZXdrX2Rvd25sb2FkX3ZpZXdf
Z2V0KGRvd25sb2FkKSwgZG93bmxvYWQpOworICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92
ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworfQorCit2b2lkIGV3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCit7
CisgICAgV0tDb250ZXh0RG93bmxvYWRDbGllbnQgd2tEb3dubG9hZENsaWVudDsKKyAgICBtZW1z
ZXQoJndrRG93bmxvYWRDbGllbnQsIDAsIHNpemVvZihXS0NvbnRleHREb3dubG9hZENsaWVudCkp
OworCisgICAgd2tEb3dubG9hZENsaWVudC52ZXJzaW9uID0ga1dLQ29udGV4dERvd25sb2FkQ2xp
ZW50Q3VycmVudFZlcnNpb247CisgICAgd2tEb3dubG9hZENsaWVudC5jbGllbnRJbmZvID0gZXdr
Q29udGV4dDsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZENhbmNlbCA9IGRpZENhbmNlbDsKKyAg
ICB3a0Rvd25sb2FkQ2xpZW50LmRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1l
ID0gZGVjaWRlRGVzdGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWU7CisgICAgd2tEb3dubG9h
ZENsaWVudC5kaWRDcmVhdGVEZXN0aW5hdGlvbiA9IGRpZENyZWF0ZURlc3RpbmF0aW9uOworICAg
IHdrRG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZVJlc3BvbnNlID0gZGlkUmVjZWl2ZVJlc3BvbnNl
OworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkUmVjZWl2ZURhdGEgPSBkaWRSZWNlaXZlRGF0YTsK
KyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZEZhaWwgPSBkaWRGYWlsOworICAgIHdrRG93bmxvYWRD
bGllbnQuZGlkRmluaXNoID0gZGlkRmluaXNoOworCisgICAgV0tDb250ZXh0U2V0RG93bmxvYWRD
bGllbnQoZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChld2tDb250ZXh0KSwgJndrRG93bmxvYWRD
bGllbnQpOworfQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDE3YTgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9kb3du
bG9hZF9jbGllbnRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGVfaAorI2RlZmlu
ZSBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZV9oCisKK3R5cGVkZWYgc3RydWN0
IF9Fd2tfQ29udGV4dCBFd2tfQ29udGV4dDsKKwordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9j
bGllbnRfYXR0YWNoKEV3a19Db250ZXh0Kik7CisKKyNlbmRpZiAvLyBld2tfY29udGV4dF9kb3du
bG9hZF9jbGllbnRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKaW5kZXggZDc4ZTFlOS4uN2NhM2FjMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRf
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaApAQCAtMjMsMTAgKzIzLDE1IEBACiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jh
c2UuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250ZXh0OwordHlwZWRl
ZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CiB0eXBlZGVmIHN0cnVjdCBfRXdr
X1VybF9TY2hlbWVfUmVxdWVzdCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0OwogCiBXS0NvbnRleHRS
ZWYgZXdrX2NvbnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCopOwogV0tTb3Vw
UmVxdWVzdE1hbmFnZXJSZWYgZXdrX2NvbnRleHRfcmVxdWVzdF9tYW5hZ2VyX2dldChjb25zdCBF
d2tfQ29udGV4dCopOwogdm9pZCBld2tfY29udGV4dF91cmxfc2NoZW1lX3JlcXVlc3RfcmVjZWl2
ZWQoRXdrX0NvbnRleHQqLCBFd2tfVXJsX1NjaGVtZV9SZXF1ZXN0Kik7CiAKK3ZvaWQgZXdrX2Nv
bnRleHRfZG93bmxvYWRfYWRkKEV3a19Db250ZXh0KiwgRXdrX0Rvd25sb2FkKik7CitFd2tfRG93
bmxvYWQqIGV3a19jb250ZXh0X2Rvd25sb2FkX2dldChjb25zdCBFd2tfQ29udGV4dCosIHVpbnQ2
NF90IGRvd25sb2FkSWQpOwordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9yZW1vdmUoRXdrX0Nv
bnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKKwogI2VuZGlmIC8vIGV3a19jb250ZXh0X3By
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJjNDA3OAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3du
bG9hZC5jcHAKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50
ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKKworI2luY2x1ZGUgIkRvd25s
b2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0
ci5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRf
cHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a191cmxfcmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8RWNvcmUuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworLyoqCisgKiBcc3RydWN0
ICBfRXdrX0Rvd25sb2FkCisgKiBAYnJpZWYgICBDb250YWlucyB0aGUgZG93bmxvYWQgZGF0YS4K
KyAqLworc3RydWN0IF9Fd2tfRG93bmxvYWQgeworICAgIHVuc2lnbmVkIGludCBfX3JlZjsgLyoq
PCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBvYmplY3QgKi8KKyAgICBEb3dubG9hZFByb3h5
KiBkb3dubG9hZFByb3h5OworICAgIEV2YXNfT2JqZWN0KiB2aWV3OworICAgIEV3a19Eb3dubG9h
ZF9TdGF0ZSBzdGF0ZTsKKyAgICBFd2tfVXJsX1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgRXdrX1Vy
bF9SZXNwb25zZSogcmVzcG9uc2U7CisgICAgZG91YmxlIHN0YXJ0VGltZTsKKyAgICBkb3VibGUg
ZW5kVGltZTsKKyAgICB1aW50NjRfdCBkb3dubG9hZGVkOyAvKio8IGxlbmd0aCBhbHJlYWR5IGRv
d25sb2FkZWQgKi8KKyAgICBjb25zdCBjaGFyKiBkZXN0aW5hdGlvbjsKKyAgICBjb25zdCBjaGFy
KiBzdWdnZXN0ZWRGaWxlbmFtZTsKKworICAgIF9Fd2tfRG93bmxvYWQoRG93bmxvYWRQcm94eSog
ZG93bmxvYWQsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQorICAgICAgICA6IF9fcmVmKDEpCisgICAg
ICAgICwgZG93bmxvYWRQcm94eShkb3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisg
ICAgICAgICwgc3RhdGUoRVdLX0RPV05MT0FEX1NUQVRFX05PVF9TVEFSVEVEKQorICAgICAgICAs
IHJlcXVlc3QoMCkKKyAgICAgICAgLCByZXNwb25zZSgwKQorICAgICAgICAsIHN0YXJ0VGltZSgt
MSkKKyAgICAgICAgLCBlbmRUaW1lKC0xKQorICAgICAgICAsIGRvd25sb2FkZWQoMCkKKyAgICAg
ICAgLCBkZXN0aW5hdGlvbigwKQorICAgICAgICAsIHN1Z2dlc3RlZEZpbGVuYW1lKDApCisgICAg
eyB9CisKKyAgICB+X0V3a19Eb3dubG9hZCgpCisgICAgeworICAgICAgICBBU1NFUlQoIV9fcmVm
KTsKKyAgICAgICAgaWYgKHJlcXVlc3QpCisgICAgICAgICAgICBld2tfdXJsX3JlcXVlc3RfdW5y
ZWYocmVxdWVzdCk7CisgICAgICAgIGlmIChyZXNwb25zZSkKKyAgICAgICAgICAgIGV3a191cmxf
cmVzcG9uc2VfdW5yZWYocmVzcG9uc2UpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChk
ZXN0aW5hdGlvbik7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHN1Z2dlc3RlZEZpbGVu
YW1lKTsKKyAgICB9Cit9OworCit2b2lkIGV3a19kb3dubG9hZF9yZWYoRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisK
KyAgICArK2Rvd25sb2FkLT5fX3JlZjsKK30KKwordm9pZCBld2tfZG93bmxvYWRfdW5yZWYoRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihk
b3dubG9hZCk7CisKKyAgICBpZiAoLS1kb3dubG9hZC0+X19yZWYpCisgICAgICAgIHJldHVybjsK
KworICAgIGRlbGV0ZSBkb3dubG9hZDsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFF1ZXJp
ZXMgdGhlIGlkZW50aWZpZXIgZm9yIHRoaXMgZG93bmxvYWQKKyAqLwordWludDY0X3QgZXdrX2Rv
d25sb2FkX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAwKTsKKworICAgIHJl
dHVybiBkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+ZG93bmxvYWRJRCgpOworfQorCisvKioKKyAq
IEBpbnRlcm5hbAorICogUmV0dXJucyB0aGUgdmlldyB0aGlzIGRvd25sb2FkIGlzIGF0dGFjaGVk
IHRvLgorICogVGhlIHZpZXcgaXMgbmVlZGVkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHNpZ25hbHMu
CisgKi8KK0V2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfdmlld19nZXQoY29uc3QgRXdrX0Rvd25s
b2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT52aWV3OworfQorCitFd2tfRG93bmxv
YWRfU3RhdGUgZXdrX2Rvd25sb2FkX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25s
b2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgRVdL
X0RPV05MT0FEX1NUQVRFX1VOS05PV04pOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5zdGF0ZTsK
K30KKworRXdrX1VybF9SZXF1ZXN0KiBld2tfZG93bmxvYWRfcmVxdWVzdF9nZXQoY29uc3QgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bmxvYWQsIDApOworCisgICAgaWYgKCFkb3dubG9hZC0+cmVxdWVzdCkgeworICAgICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJveHks
IDApOworICAgICAgICBXS1JldGFpblB0cjxXS1VSTFJlcXVlc3RSZWY+IHdrVVJMUmVxdWVzdChB
ZG9wdFdLLCB0b0FQSShXZWJVUkxSZXF1ZXN0OjpjcmVhdGUoZG93bmxvYWQtPmRvd25sb2FkUHJv
eHktPnJlcXVlc3QoKSkubGVha1JlZigpKSk7CisgICAgICAgIGNvbnN0X2Nhc3Q8RXdrX0Rvd25s
b2FkKj4oZG93bmxvYWQpLT5yZXF1ZXN0ID0gZXdrX3VybF9yZXF1ZXN0X25ldyh3a1VSTFJlcXVl
c3QuZ2V0KCkpOworICAgIH0KKworICAgIHJldHVybiBkb3dubG9hZC0+cmVxdWVzdDsKK30KKwor
RXdrX1VybF9SZXNwb25zZSogZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93
bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChk
b3dubG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnJlc3BvbnNlOworfQorCitjb25z
dCBjaGFyKiBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCog
ZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2Fk
LCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247Cit9CisKK0VpbmFfQm9v
bCBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZCogZG93bmxvYWQsIGNv
bnN0IGNoYXIqIGRlc3RpbmF0aW9uKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChkb3dubG9hZCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkZXN0aW5hdGlvbiwgZmFsc2UpOworCisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZk
b3dubG9hZC0+ZGVzdGluYXRpb24sIGRlc3RpbmF0aW9uKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCitjb25zdCBjaGFyICpld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChjb25z
dCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkb3dubG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnN1Z2dlc3RlZEZp
bGVuYW1lOworfQorCitFaW5hX0Jvb2wgZXdrX2Rvd25sb2FkX2NhbmNlbChFd2tfRG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9h
ZCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+
ZG93bmxvYWRQcm94eSwgZmFsc2UpOworCisgICAgaWYgKGRvd25sb2FkLT5zdGF0ZSAhPSBFV0tf
RE9XTkxPQURfU1RBVEVfRE9XTkxPQURJTkcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGRvd25sb2FkLT5zdGF0ZSA9IEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMSU5HOworICAgIGRv
d25sb2FkLT5kb3dubG9hZFByb3h5LT5jYW5jZWwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
ZG91YmxlIGV3a19kb3dubG9hZF9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3du
bG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRv
d25sb2FkLCAwKTsKKworICAgIGlmICghZG93bmxvYWQtPnJlc3BvbnNlKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgY29udGVudExlbmd0aCA9IGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGRvd25sb2FkLT5yZXNwb25zZSk7CisgICAgaWYg
KCFjb250ZW50TGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxkb3VibGU+KGRvd25sb2FkLT5kb3dubG9hZGVkKSAvIGNvbnRlbnRMZW5ndGg7Cit9CisK
K2RvdWJsZSBld2tfZG93bmxvYWRfZWxhcHNlZF90aW1lX2dldChjb25zdCBFd2tfRG93bmxvYWQq
IGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9h
ZCwgMCk7CisKKyAgICAvLyBEb3dubG9hZCBoYXMgbm90IHN0YXJ0ZWQgeWV0LgorICAgIGlmIChk
b3dubG9hZC0+c3RhcnRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEb3du
bG9hZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlCisgICAg
Ly8gZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQuCisgICAgaWYgKGRvd25sb2FkLT5l
bmRUaW1lID49IDApCisgICAgICAgIHJldHVybiBkb3dubG9hZC0+ZW5kVGltZSAtIGRvd25sb2Fk
LT5zdGFydFRpbWU7CisKKyAgICAvLyBEb3dubG9hZCBpcyBzdGlsbCBnb2luZy4KKyAgICByZXR1
cm4gZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5zdGFydFRpbWU7Cit9CisKKy8qKgorICog
QGludGVybmFsCisgKiBTZXRzIHRoZSBVUkwgQGEgcmVzcG9uc2UgZm9yIHRoaXMgQGEgZG93bmxv
YWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWQqIGRv
d25sb2FkLCBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
cmVzcG9uc2UpOworCisgICAgZXdrX3VybF9yZXNwb25zZV9yZWYocmVzcG9uc2UpOworICAgIGRv
d25sb2FkLT5yZXNwb25zZSA9IHJlc3BvbnNlOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
U2V0cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KKyAqLwor
dm9pZCBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWQqIGRv
d25sb2FkLCBjb25zdCBjaGFyKiBzdWdnZXN0ZWRGaWxlbmFtZSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJmRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZSwgc3VnZ2VzdGVkRmlsZW5hbWUpOworfQor
CisvKioKKyAqIEBpbnRlcm5hbAorICogUmVwb3J0IGEgZ2l2ZW4gYW1vdW50IG9mIGRhdGEgd2Fz
IHJlY2VpdmVkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9yZWNlaXZlZF9kYXRhKEV3a19Eb3du
bG9hZCogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihkb3dubG9hZCk7CisKKyAgICBkb3dubG9hZC0+ZG93bmxvYWRlZCArPSBsZW5n
dGg7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgZG93
bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChFd2tfRG93bmxvYWQqIGRv
d25sb2FkLCBFd2tfRG93bmxvYWRfU3RhdGUgc3RhdGUpCit7CisgICAgZG93bmxvYWQtPnN0YXRl
ID0gc3RhdGU7CisKKyAgICAvLyBVcGRhdGUgc3RhcnQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFz
IHN0YXJ0ZWQKKyAgICBpZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5H
KQorICAgICAgICBkb3dubG9hZC0+c3RhcnRUaW1lID0gZWNvcmVfdGltZV9nZXQoKTsKKworICAg
IC8vIFVwZGF0ZSBlbmQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIGZpbmlzaGVkIChzdWNjZXNz
ZnVsbHkgb3Igbm90KQorICAgIGlmIChzdGF0ZSA9PSBFV0tfRE9XTkxPQURfU1RBVEVfRkFJTEVE
CisgICAgICAgIHx8IHN0YXRlID09IEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQKKyAgICAg
ICAgfHwgc3RhdGUgPT0gRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEKQorICAgICAgICBkb3du
bG9hZC0+ZW5kVGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7Cit9CisKKy8qKgorICogQGludGVybmFs
CisgKiBDb25zdHJ1Y3RzIGEgRXdrX0Rvd25sb2FkIGZyb20gYSBEb3dubG9hZFByb3h5LgorICov
CitFd2tfRG93bmxvYWQqIGV3a19kb3dubG9hZF9uZXcoRG93bmxvYWRQcm94eSogZG93bmxvYWQs
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChkb3dubG9hZCwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV3
a1ZpZXcsIDApOworCisgICAgcmV0dXJuIG5ldyBfRXdrX0Rvd25sb2FkKGRvd25sb2FkLCBld2tW
aWV3KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19kb3dubG9hZC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25s
b2FkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkxMWNjYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9h
ZC5oCkBAIC0wLDAgKzEsMjAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxl
ICAgIGV3a19kb3dubG9hZC5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIERvd25sb2FkIEFQ
SS4KKyAqCisgKiBAbm90ZSBFd2tfRG93bmxvYWQgZW5jYXBzdWxhdGVzIGEgV2ViS2l0IGRvd25s
b2FkIGluIG9yZGVyIHRvIHByb3ZpZGUKKyAqIGluZm9ybWF0aW9uIGFib3V0IGl0IGFuZCBpbnRl
cmFjdCB3aXRoIGl0IChlLmcuIHNldCB0aGUgZGVzdGluYXRpb24KKyAqIHBhdGgsIGNhbmNlbCB0
aGUgZG93bmxvYWQsIC4uLikuCisgKi8KKworI2lmbmRlZiBld2tfZG93bmxvYWRfaAorI2RlZmlu
ZSBld2tfZG93bmxvYWRfaAorCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVmIF9fY3Bs
dXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUgbmFtZSBm
b3IgX0V3a19Eb3dubG9hZCAqLwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93
bmxvYWQ7CisKKy8vLyBEZWZpbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9hZC4K
K2VudW0gX0V3a19Eb3dubG9hZF9TdGF0ZSB7CisgICAgLy8vIFRoZSBkb3dubG9hZCBzdGF0ZSBp
cyB1bmtub3duCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX1VOS05PV04gPSAtMSwKKyAgICAvLy8g
VGhlIGRvd25sb2FkIGhhcyBub3Qgc3RhcnRlZCB5ZXQKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVf
Tk9UX1NUQVJURUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBoYXMgc3RhcnRlZAorICAgIEVXS19E
T1dOTE9BRF9TVEFURV9ET1dOTE9BRElORywKKyAgICAvLy8gVGhlIGRvd25sb2FkIHN0b3BwZWQg
YmVjYXVzZSBvZiBhIGZhaWx1cmUKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfRkFJTEVELAorICAg
IC8vLyBUaGUgZG93bmxvYWQgaXMgYmVpbmcgY2FuY2VsbGVkCisgICAgRVdLX0RPV05MT0FEX1NU
QVRFX0NBTkNFTExJTkcsCisgICAgLy8vIFRoZSBkb3dubG9hZCBzdG9wcGVkIGJlY2F1c2UgaXQg
d2FzIGNhbmNlbGxlZAorICAgIEVXS19ET1dOTE9BRF9TVEFURV9DQU5DRUxMRUQsCisgICAgLy8v
IFRoZSBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgIEVXS19ET1dOTE9BRF9T
VEFURV9GSU5JU0hFRAorfTsKKy8vLyBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBAYSBfRXdrX0Rv
d25sb2FkX1N0YXRlLgordHlwZWRlZiBlbnVtIF9Fd2tfRG93bmxvYWRfU3RhdGUgRXdrX0Rvd25s
b2FkX1N0YXRlOworCisvKioKKyAqIEluY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRo
ZSBnaXZlbiBvYmplY3QuCisgKgorICogQHBhcmFtIGRvd25sb2FkIHRoZSBkb3dubG9hZCBvYmpl
Y3QgdG8gaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Rv
d25sb2FkX3JlZihFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBEZWNyZWFzZXMg
dGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUgZ2l2ZW4gb2JqZWN0LCBwb3NzaWJseSBmcmVlaW5n
IGl0LgorICoKKyAqIFdoZW4gdGhlIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIDAsIHRoZSBkb3du
bG9hZCBpcyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVj
dCB0byBkZWNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93
bmxvYWRfdW5yZWYoRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhl
IHN0YXRlIGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tf
RG93bmxvYWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiB0aGUgZG93bmxvYWQgc3RhdGUuCisg
Ki8KK0VBUEkgRXdrX0Rvd25sb2FkX1N0YXRlIGV3a19kb3dubG9hZF9zdGF0ZV9nZXQoY29uc3Qg
RXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSTCByZXF1ZXN0
IGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxv
YWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiB0aGUgI0V3a19VcmxfUmVxdWVzdCBmb3IgdGhp
cyBkb3dubG9hZC4KKyAqLworRUFQSSBFd2tfVXJsX1JlcXVlc3QgKmV3a19kb3dubG9hZF9yZXF1
ZXN0X2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBRdWVyeSB0
aGUgVVJMIHJlc3BvbnNlIGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9h
ZCBhICNFd2tfRG93bmxvYWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiB0aGUgI0V3a19Vcmxf
UmVzcG9uc2UgZm9yIHRoaXMgZG93bmxvYWQgb3IgQGMgTlVMTCBpZiBpdCB3YXMgbm90IHJlY2Vp
dmVkIHlldC4KKyAqLworRUFQSSBFd2tfVXJsX1Jlc3BvbnNlICpld2tfZG93bmxvYWRfcmVzcG9u
c2VfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRo
ZSBVUkkgdG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uCisgKgor
ICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0
dXJuIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyLCB0aGF0IG1heSBiZSBAYyBOVUxMLiBUaGlzIHBv
aW50ZXIgaXMKKyAqICAgICAgICAgZ3VhcmFudGVlZCB0byBiZSBlaW5hX3N0cmluZ3NoYXJlLCBz
byB3aGVuZXZlciBwb3NzaWJsZQorICogICAgICAgICBzYXZlIHlvdXJzZWxmIHNvbWUgY3B1IGN5
Y2xlcyBhbmQgdXNlCisgKiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVmKCkgaW5zdGVhZCBv
ZiBlaW5hX3N0cmluZ3NoYXJlX2FkZCgpIG9yCisgKiAgICAgICAgIHN0cmR1cCgpLgorICovCitF
QVBJIGNvbnN0IGNoYXIgKmV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rv
d25sb2FkICpkb3dubG9hZCk7CisKKy8qKgorICogU2V0cyB0aGUgZGVzdGluYXRpb24gcGF0aCBm
b3IgdGhpcyBkb3dubG9hZC4KKyAqCisgKiBTZXRzIHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBkb3du
bG9hZGVkIGZpbGUgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIFRoaXMgbWV0aG9kIG5lZWRzIHRv
IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGRvd25sb2FkIHRyYW5zZmVyCisgKiBzdGFydHMsIGJ5IGNv
bm5lY3RpbmcgdG8gdGhlICJkb3dubG9hZCxuZXciIHNpZ25hbCBvbiB0aGUKKyAqIEV3a19WaWV3
IGFuZCBzZXR0aW5nIHRoZSBkZXN0aW5hdGlvbiBpbiB0aGUgY2FsbGJhY2suIFRvIHNldAorICog
dGhlIGRlc3RpbmF0aW9uIHVzaW5nIHRoZSBmaWxlbmFtZSBzdWdnZXN0ZWQgYnkgdGhlIHNlcnZl
cgorICogdXNlIGV3a19kb3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KCkuCisgKgorICog
QHBhcmFtIGRvd25sb2FkICNFd2tfRG93bmxvYWQgdG8gdXBkYXRlLgorICogQHBhcmFtIGRlc3Rp
bmF0aW9uIHRoZSBkZXN0aW5hdGlvbiBwYXRoLgorICoKKyAqIEByZXR1cm4gQGMgRUlOQV9UUlVF
IGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgZXdr
X2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdr
X2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWQgKmRvd25sb2FkLCBjb25zdCBj
aGFyICpkZXN0aW5hdGlvbik7CisKKy8qKgorICogUXVlcmllcyB0aGUgc3VnZ2VzdGVkIGZpbGUg
bmFtZSBmb3IgdGhpcyBkb3dubG9hZC4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZnVsIHRvIHVzZSB0
aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB0byBjb25zdHJ1Y3QKKyAqIHRoZSBk
ZXN0aW5hdGlvbiBwYXRoIHRvIHBhc3MgdG8gZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3NldCgp
LgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCAjRXdrX0Rvd25sb2FkIHRvIHF1ZXJ5LgorICoKKyAq
IEByZXR1cm4gVGhlIHN1Z2dlc3RlZCBmaWxlIG5hbWUgZm9yIHRoaXMgZG93bmxvYWQuIFRoaXMg
cG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUs
IHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUg
Y3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFk
IG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKgor
ICogQHNlZSBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0CisgKi8KK0VBUEkgY29uc3QgY2hh
ciAqZXdrX2Rvd25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoY29uc3QgRXdrX0Rvd25sb2Fk
ICpkb3dubG9hZCk7CisKKy8qKgorICogQ2FuY2VscyB0aGUgZG93bmxvYWQgYXN5bmNocm9ub3Vz
bHkuCisgKgorICogV2hlbiB0aGUgb25nb2luZyBkb3dubG9hZCBvcGVyYXRpb24gaXMgZWZmZWN0
aXZlbHkgY2FuY2VsbGVkIGEgImRvd25sb2FkLGNhbmNlbGxlZCIKKyAqIHNpZ25hbCB3aWxsIGJl
IGVtaXR0ZWQgb24gdGhlIHZpZXcuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3du
bG9hZCB0byBjYW5jZWwuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIGNhbmNl
bGxhdGlvbiByZXF1ZXN0IHdhcyB0YWtlbiBpbnRvIGFjY291bnQsIG9yCisgKiAgICAgICAgIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRf
Y2FuY2VsKEV3a19Eb3dubG9hZCAqZG93bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBlc3Rp
bWF0ZWQgcHJvZ3Jlc3MgZm9yIHRoaXMgZG93bmxvYWQuCisgKgorICogQHBhcmFtIGRvd25sb2Fk
IGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIGFuIGVzdGltYXRlIG9m
IHRoZSBvZiB0aGUgcGVyY2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAgICAgICBh
cyBhIHJhbmdlIGZyb20gMC4wIHRvIDEuMC4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2Fk
X2VzdGltYXRlZF9wcm9ncmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7CisK
Ky8qKgorICogR2V0cyB0aGUgZWxhcHNlZCB0aW1lIGluIHNlY29uZHMsIGluY2x1ZGluZyBhbnkg
ZnJhY3Rpb25hbCBwYXJ0LgorICoKKyAqIElmIHRoZSBkb3dubG9hZCBmaW5pc2hlZCwgaGFkIGFu
IGVycm9yIG9yIHdhcyBjYW5jZWxsZWQgdGhpcyBpcworICogdGhlIHRpbWUgYmV0d2VlbiBpdHMg
c3RhcnQgYW5kIHRoZSBldmVudC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25s
b2FkCisgKgorICogQHJldHVybiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9hZCB3YXMgc3RhcnRl
ZCBvciAwLjAgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitFQVBJIGRvdWJsZSBld2tfZG93bmxv
YWRfZWxhcHNlZF90aW1lX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8vIGV3a19kb3dubG9hZF9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRf
cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzdmZjFkCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rv
d25sb2FkX3ByaXZhdGUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIGV3a19kb3dubG9hZF9wcml2YXRlX2gKKyNkZWZpbmUgZXdrX2Rvd25sb2FkX3ByaXZh
dGVfaAorCisjaW5jbHVkZSAiV0tCYXNlLmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkLmgiCisj
aW5jbHVkZSA8RXZhcy5oPgorCit0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9SZXNwb25zZSBFd2tf
VXJsX1Jlc3BvbnNlOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19XZWJfRXJyb3IgRXdrX1dlYl9FcnJv
cjsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBEb3dubG9hZFByb3h5OworfQorCitFd2tf
RG93bmxvYWQqIGV3a19kb3dubG9hZF9uZXcoV2ViS2l0OjpEb3dubG9hZFByb3h5KiwgRXZhc19P
YmplY3QqIGV3a1ZpZXcpOwordWludDY0X3QgZXdrX2Rvd25sb2FkX2lkX2dldChjb25zdCBFd2tf
RG93bmxvYWQqKTsKK0V2YXNfT2JqZWN0KiBld2tfZG93bmxvYWRfdmlld19nZXQoY29uc3QgRXdr
X0Rvd25sb2FkKik7CisKK3ZvaWQgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChFd2tfRG93bmxvYWQq
LCBFd2tfRG93bmxvYWRfU3RhdGUpOwordm9pZCBld2tfZG93bmxvYWRfY2FuY2VsbGVkKEV3a19E
b3dubG9hZCopOwordm9pZCBld2tfZG93bmxvYWRfZmFpbGVkKEV3a19Eb3dubG9hZCopOwordm9p
ZCBld2tfZG93bmxvYWRfZmluaXNoZWQoRXdrX0Rvd25sb2FkKik7Cit2b2lkIGV3a19kb3dubG9h
ZF9zdGFydGVkKEV3a19Eb3dubG9hZCopOworCit2b2lkIGV3a19kb3dubG9hZF9yZWNlaXZlZF9k
YXRhKEV3a19Eb3dubG9hZCosIHVpbnQ2NF90IGxlbmd0aCk7Cit2b2lkIGV3a19kb3dubG9hZF9y
ZXNwb25zZV9zZXQoRXdrX0Rvd25sb2FkKiwgRXdrX1VybF9SZXNwb25zZSopOwordm9pZCBld2tf
ZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93bmxvYWQqLCBjb25zdCBjaGFy
KiBzdWdnZXN0ZWRGaWxlbmFtZSk7CisKKyNlbmRpZiAvLyBld2tfZG93bmxvYWRfcHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jl
c3BvbnNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVz
cG9uc2UuY3BwCmluZGV4IDEzNzc1M2QuLjhmOWY1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCkBAIC05OCw2ICs5
OCwxMyBAQCBjb25zdCBjaGFyKiBld2tfdXJsX3Jlc3BvbnNlX21pbWVfdHlwZV9nZXQoY29uc3Qg
RXdrX1VybF9SZXNwb25zZSogcmVzcG9uc2UpCiAgICAgcmV0dXJuIHJlc3BvbnNlLT5taW1lVHlw
ZTsKIH0KIAordW5zaWduZWQgbG9uZyBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dl
dChjb25zdCBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwocmVzcG9uc2UsIDApOworCisgICAgcmV0dXJuIHJlc3BvbnNlLT5j
b3JlUmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7Cit9CisKIC8qKgogICogQGludGVy
bmFsCiAgKiBDb25zdHJ1Y3RzIGEgRXdrX1VybF9SZXNwb25zZSBmcm9tIGEgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a191cmxfcmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a191cmxfcmVzcG9uc2UuaAppbmRleCBjMDI2MjJkLi4zNTYzMWViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCkBAIC05
NCw2ICs5NCwxNyBAQCBFQVBJIGludCBld2tfdXJsX3Jlc3BvbnNlX3N0YXR1c19jb2RlX2dldChj
b25zdCBFd2tfVXJsX1Jlc3BvbnNlICpyZXNwb25zZSk7CiAgKi8KIEVBUEkgY29uc3QgY2hhciAq
ZXdrX3VybF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2UgKnJl
c3BvbnNlKTsKIAorLyoqCisgKiBHZXQgdGhlIGV4cGVjdGVkIGNvbnRlbnQgbGVuZ3RoIG9mIHRo
ZSAjRXdrX1VybF9SZXNwb25zZS4KKyAqCisgKiBJdCBjYW4gYmUgMCBpZiB0aGUgc2VydmVyIHBy
b3ZpZGVkIGFuIGluY29ycmVjdCBvciBtaXNzaW5nIENvbnRlbnQtTGVuZ3RoLgorICoKKyAqIEBw
YXJhbSByZXNwb25zZSBhICNFd2tfVXJsX1Jlc3BvbnNlLgorICoKKyAqIEByZXR1cm4gdGhlIGV4
cGVjdGVkIGNvbnRlbnQgbGVuZ3RoIG9mIEBhIHJlc3BvbnNlIG9yIDAgaW4gY2FzZSBvZiBmYWls
dXJlLgorICovCitFQVBJIHVuc2lnbmVkIGxvbmcgZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xl
bmd0aF9nZXQoY29uc3QgRXdrX1VybF9SZXNwb25zZSAqcmVzcG9uc2UpOworCiAjaWZkZWYgX19j
cGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuY3BwCmluZGV4IDg0NDhmZDYuLjhjMGMzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTg3MSw2ICs4NzEsNTEgQEAgdm9p
ZCBld2tfdmlld19kaXNwbGF5KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmlt
YWdlLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9
CiAKKy8qKgorICogQGludGVybmFsCisgKiBBIGRvd25sb2FkIGZvciB0aGF0IHZpZXcgd2FzIGNh
bmNlbGxlZC4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJkb3dubG9hZCxjYW5jZWxsZWQiIHdpdGgg
cG9pbnRlciB0byBhIEV3a19Eb3dubG9hZC4KKyAqLwordm9pZCBld2tfdmlld19kb3dubG9hZF9j
YW5jZWxsZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQs
Y2FuY2VsbGVkIiwgZG93bmxvYWQpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQSBuZXcg
ZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciB0aGF0IHZpZXcuCisgKgorICogRW1pdHMg
c2lnbmFsOiAiZG93bmxvYWQsbmV3IiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxvYWQuCisg
Ki8KK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
RG93bmxvYWQqIGRvd25sb2FkKQoreworICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a1ZpZXcsICJkb3dubG9hZCxuZXciLCBkb3dubG9hZCk7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBBIGRvd25sb2FkIGZvciB0aGF0IHZpZXcgaGFzIGZhaWxlZC4KKyAqCisgKiBF
bWl0cyBzaWduYWw6ICJkb3dubG9hZCxmYWlsZWQiIHdpdGggcG9pbnRlciB0byBhIEV3a19Eb3du
bG9hZF9FcnJvci4KKyAqLwordm9pZCBld2tfdmlld19kb3dubG9hZF9mYWlsZWQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQsIEV3a19XZWJfRXJyb3IqIGVycm9y
KQoreworICAgIEV3a19Eb3dubG9hZF9FcnJvciBkb3dubG9hZEVycm9yID0geyBkb3dubG9hZCwg
ZXJyb3IgfTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJk
b3dubG9hZCxmYWlsZWQiLCAmZG93bmxvYWRFcnJvcik7Cit9CisKKy8qKgorICogQGludGVybmFs
CisgKiBBIGRvd25sb2FkIGZvciB0aGF0IHZpZXcgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICoK
KyAqIEVtaXRzIHNpZ25hbDogImRvd25sb2FkLGZpbmlzaGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBF
d2tfRG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfZmluaXNoZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwgZG93
bmxvYWQpOworfQorCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCogZXdrVmll
dykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5k
ZXggNWQ2OWRmNC4uNjljMjJiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5oCkBAIC0yNiw2ICsyNiwxMSBAQAogICoKICAqIFRoZSBmb2xsb3dpbmcgc2ln
bmFscyAoc2VlIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCgpKSBhcmUgZW1pdHRlZDoK
ICAqCisgKiAtICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWQqOiByZXBvcnRzIHRo
YXQgYSBkb3dubG9hZCB3YXMgZWZmZWN0aXZlbHkgY2FuY2VsbGVkLgorICogLSAiZG93bmxvYWQs
ZmFpbGVkIiwgRXdrX0Rvd25sb2FkX0Vycm9yKjogcmVwb3J0cyB0aGF0IGEgZG93bmxvYWQgZmFp
bGVkIHdpdGggdGhlIGdpdmVuIGVycm9yLgorICogLSAiZG93bmxvYWQsZmluaXNoZWQiLCBFd2tf
RG93bmxvYWQqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5
LgorICogLSAiZG93bmxvYWQsbmV3IiwgRXdrX0Rvd25sb2FkKjogcmVwb3J0cyB0aGF0IGEgbmV3
IGRvd25sb2FkIGhhcyBiZWVuIHJlcXVlc3RlZC4gVGhlIGNsaWVudCBzaG91bGQgc2V0IHRoZQor
ICogICBkZXN0aW5hdGlvbiBwYXRoIGJ5IGNhbGxpbmcgZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9u
X3NldCgpIG9yIHRoZSBkb3dubG9hZCB3aWxsIGZhaWwuCiAgKiAtICJpbnRlbnQscmVxdWVzdCxu
ZXciLCBFd2tfSW50ZW50X1JlcXVlc3QqOiByZXBvcnRzIG5ldyBXZWIgaW50ZW50IHJlcXVlc3Qu
CiAgKiAtICJpbnRlbnQsc2VydmljZSxyZWdpc3RlciIsIEV3a19JbnRlbnRfU2VydmljZSo6IHJl
cG9ydHMgbmV3IFdlYiBpbnRlbnQgc2VydmljZSByZWdpc3RyYXRpb24uCiAgKiAtICJsb2FkLGVy
cm9yIiwgY29uc3QgRXdrX1dlYl9FcnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxl
ZC4KQEAgLTUzLDYgKzU4LDcgQEAKICNkZWZpbmUgZXdrX3ZpZXdfaAogCiAjaW5jbHVkZSAiZXdr
X2NvbnRleHQuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKICNpbmNsdWRlICJld2tfaW50
ZW50LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9y
ZXNwb25zZS5oIgpAQCAtMTg5LDYgKzE5NSwxNyBAQCBzdHJ1Y3QgX0V3a19XZWJfUmVzb3VyY2Vf
TG9hZF9FcnJvciB7CiAgICAgRXdrX1dlYl9FcnJvciAqZXJyb3I7IC8qKjwgbG9hZCBlcnJvciAq
LwogfTsKIAorLy8vIENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfRG93bmxvYWRfRXJyb3Iu
Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkX0Vycm9yIEV3a19Eb3dubG9hZF9FcnJvcjsK
KworLyoqCisgKiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBhIGRv
d25sb2FkIGZhaWx1cmUuCisgKi8KK3N0cnVjdCBfRXdrX0Rvd25sb2FkX0Vycm9yIHsKKyAgICBF
d2tfRG93bmxvYWQgKmRvd25sb2FkOyAvKio8IGRvd25sb2FkIHRoYXQgZmFpbGVkICovCisgICAg
RXdrX1dlYl9FcnJvciAqZXJyb3I7IC8qKjwgZG93bmxvYWQgZXJyb3IgKi8KK307CisKIC8qKgog
ICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0IHZpZXcgb2JqZWN0LgogICoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaAppbmRleCBh
MGE2NzkwLi5kOTM1Y2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0zMSw2ICszMSw3IEBAIGNsYXNzIEludFJlY3Q7
CiBjbGFzcyBJbnRTaXplOwogfQogCit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19E
b3dubG9hZDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVXJsX1JlcXVlc3QgRXdrX1VybF9SZXF1ZXN0
OwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfUmVzcG9uc2UgRXdrX1VybF9SZXNwb25zZTsKIHR5
cGVkZWYgc3RydWN0IF9Fd2tfV2ViX0Vycm9yIEV3a19XZWJfRXJyb3I7CkBAIC00NSw2ICs0Niwx
MCBAQCB0eXBlZGVmIHN0cnVjdCBfRXdrX0ludGVudF9TZXJ2aWNlIEV3a19JbnRlbnRfU2Vydmlj
ZTsKIAogdm9pZCBld2tfdmlld19jdXJzb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25z
dCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7CiB2b2lkIGV3a192aWV3X2Rpc3BsYXkoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpOwordm9pZCBld2tf
dmlld19kb3dubG9hZF9jYW5jZWxsZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9h
ZCopOwordm9pZCBld2tfdmlld19kb3dubG9hZF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3
a19Eb3dubG9hZCopOwordm9pZCBld2tfdmlld19kb3dubG9hZF9mYWlsZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV3a19Eb3dubG9hZCosIEV3a19XZWJfRXJyb3IqKTsKK3ZvaWQgZXdrX3ZpZXdf
ZG93bmxvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCopOwog
dm9pZCBld2tfdmlld19pbWFnZV9kYXRhX3NldChFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCog
aW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKTsKIHZvaWQgZXdrX3ZpZXdf
bG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX1dlYl9FcnJvciogZXJy
b3IpOwogdm9pZCBld2tfdmlld19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291
cmNlcy90ZXN0LnBkZiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jl
c291cmNlcy90ZXN0LnBkZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDI0YzE5ZDk4YjYyMWZlYWRmM2U0ZDYxZjdi
ZmY0NzEwN2EzNzRkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3NDIxCnpjbWFpM2J5JD8hd15v
ckY1SlhUPzg1S2x3ZEklQU9mdVh4d1ZyWFZ5Mm11S0pOa0sjO2dgcT0yUWpuQkpxKE0/Nwp6QzhR
KC1yMVp7cyYrbylOX2RmU35vO353QFlwP3lUKnpld2R0aWBQXmdCRkFjITIjVEAqeyRgaFJqcHxO
Qz1kKzkKelM9YS1fI1gtcyN0Y3t5MzVKcj99ZzN4eDNaV3VmVz9QJV9Yay09RXZ0U31OMTA5UTlX
I0BxP3VuWmd9VzJSSjhuCnpAJS0qIyM4ZExJQnd0UWlNaEBIaTlebV54WWwoNikoRHMyek9oeyZX
YT9tVWEybG11WVFqfWpZWG5ETDUmYHIxWQp6RjNKZyVvVF8tP1lWbzRXe3ZBND0wR1NgVjFwPk50
Yyh7Z1ltRC0xaU8jRVI2ZWdQe2lJWHF+V0wybE4hITcye0cKelY2RmJKT25mNmIzbjJNT2RWeFM3
cX1rc3gjSj9nent2VlAyNWgoO0gwKXZiRUoqLTgyVXY+ODdCPihCcGFSWmI8Cno+Y3t0RSU9TDxi
JnQ5aX4ySTt0a2UjR14tRUNAVkgjZEhyRU0qcW8yfE18d2B0TnUjdENDO1l+WDVQek8lKylTOQp6
WHpLblhKSUpHQ3B8VTE8aWZnUFU+NlU2PD97fENAYHdaT21eeWJ8OSgoXnRRI0A0JnY2bGJId0hj
WGEoKjJRQG8KejlRdmcjQTRuVzslSkkyPz1fYklHMC1rY1k3OE8yRVAwN3drUVVKWWZoSEIwJGM1
OXMqNTxiSlNKSEd4eUo5d0ctCnoqViFoJl5VcmVGWDhmJWo1OWVQLXBJZWI9S1hxbD85PUR3XmVG
YURkMjFBZjQ+RkV4S0A+aDBkcjJKMFh2e3pscAp6ZFhDJVF6Zig5b2gyMVF9dF42e0g3VmpZMilu
MGU0RDAjKVhkYDE5SD1efT1fe05TVEswb3sxNnZyZ2hwdGE0UCMKeihkOT4pdlhVPnVgdSlWV1hv
cXQwWkJgUGBgQDQwY0hDNFBxN1BWSWVFfVp5KCozUWN+NkljLTFiZik2TkhYLVZpCnpadEh2ZlBJ
RSkmOyNLfjQkTTFTPjFwVFZteTZ7Nk5DOFhMTW9KRG55PmVkYGthZFgtPEFUOWpgX0J6WD5jZnA3
Swp6Ukw1N30xfEMoS0YhZVJMcmtPSmIrUlE+dlJ0T3I+VkRlfmxBJUEqWXRsPHdFJDJpcz4mdW5M
RHclRXw4N2NxQUAKem5JZ0t7VE45PDllJiMrVTd3PUNBK358NHVVUih8bGA0WkFuPXVEdEJ8SDNy
dDx5fTBWSjQxOEMjbkVhPnVpU0ohCnpKNUZWOUFuekFvR1ZXSmYhUDkxc0EyJXdTZSU2VmItVTV9
MXJNeHJzSlBZeGFqajdSI0dtIUVDP2NOUWtJbFhONAp6XklWNVpHKCVDVVhtOGFjSE8kVkBhalMy
YC1NVShvM0hgVUohSjNBZjxKWSMxQ2s+NzJkcH0qWHBSQ1BzYWMjeyMKem5xO2YpSFpVcDZtfSlm
VHREdSYoanZhalZHSGM4WlZQSm9gNk1EWWpSMT9WZVZOb05BS09zPHhYRUJFYlZEVyVECnp2cGcp
YnNSM0VlcVNNcCVQX1YmUClGVWxOKnkqY0Qxc0ElRUl5cSR8KTlsalhuRDJBWFV8UDQoNz5TTThC
VXZ3bgp6ajBiI2h6MUx2VF92NE4kKk4+anVeMnQ9ciVydjlwTktRUEVeSlQkRmx7bXlzJldxVX4x
WGpNd3Vme3kqJno+T0gKekVRYDgqVVRiY3F5eT8tY1AmKW4hNH1WOChJYGAwMWlOZkJ8WiQrRVdU
KUVSUzFDaVg+TWNDTWk3dGlMb1JJYUxxCnoofkxhWFJXcElLNWJ8JDYpTWtzaSVOOVN1YUAxR3he
WUQtZDZOYEhOIVV3LU5jbzAjI15WVjRLQFQ1RWx5KXBGJAp6c2spcWNKLW4hI28hak43V2ZNTC1o
a2k0ejRTTU8jPU59TXQ9JWNOXmVvOEl+bUBfcm4jMzFSQCYyWTR4LX1PNVcKentZSW15UGA0dlpe
PmlFa0trIWkhUnVpSElzbXI7dzlQakpwck9hSFY/dkFfKlJCY2xhe0FKeCRIRE0zaUUxNyZPCnpw
PiU9amRgbSMkcSt7aWxtUkB9K0M5QnUjSjFJLUQ8Q1lFUU97PXJhdFRWTU0tV0txI1dGXjw9XmQ+
Kmxaa2JxTAp6cnwkMWdYfFVBWnghSTl0dWBfalRKK0h4eWsxSCRYKnItcT94Z1FvRHdkdlFjK2cy
b289OC1rZmQwTHUyX0wqKisKel9ha09IQTYpWkpCYHY7NDxYI1EwbiZTJkZaUFlALSR6YWN+MFR+
OTBpPlZ7e2ZmJk5rYm17dXVefD5nXygpKU1uCnozK1FObHJhYXJCSm1zfFljeHowPiQ2OTA+VD0x
OGJuIVpjZCtwWi1mWXZ4VD4oOFJ7VVYydGM5cE58UXUwVWdoNAp6VFJ7T2ZpeWJaS0xHS0FOX0tY
PzFDXyQlanl+VXIwVFB1a0lHUjBZKklaQCV9Zyh+fnwzK0U0JTx+JHt4OzQ9OTsKejZtJkxQPW9k
KjwpNk8+MEExQ2Yhb0s4e1REbyZwaHNyJUlrKSpNZiEzbGlqVVNaOU91PXVofjs7aEZibmYhRSg0
Cno9UVI0dDloYC00JXRwTVp2VWlBT3h1dldCclVVKihhZ2clPnZ3cXVPUDVyVntVZSZCVTlEI3dU
OFYlVTVScCR1WAp6QWNFezZGdEU0bj9maG4pJU1QNyFYRTN4TzhadTFYSHpzIzJeZHBvYGhhVFU0
aCV6XjE1MDtZPkI/fTRrdlZRSVQKelpFb2AlanJscUQwekZuaEV7QylKSHdyemgtVlglUUdwKktB
TjNoUSF5Tn0/LVg4aHMmYEpRP2QjYm5FTEAyeGBvCnotdGR8TXBsJDAkMmZ0d3JWVlN3ISlMVCQo
cHhlV0FsX2ZSN3lHMTFlQGZ6NCFCPT1Se1lkfUhscDs3OXsrciYzUQp6QD9XZUQwdXhmIVMqaE14
d1JPSVZaSjFNe0hKezhaS0JaYUhWRD9pdXpzMDgrcVdKMD1eYWpRQCt2TDQxKTVBMy0Keig/X0RS
LU1yXzVJY3VjdiNufGEkJlpBJDA/VUd6e0k/Xk1SeTZZbiV1XzgqY2pBNC0xR2t6e0ZgdWRsVGQ2
dSRICnpEPzZKNSEpRFhvJVM/dT4kYlkmKm1ETHlUdTM0YCRzI0w1IXQtUlE0U0NqbXFxNylWdUVL
KFRWJDlfODBEWFkzegp6YndOVHJ2ZnlhenQxeWkqJkd7Km5nbVJIeSZDaHtgZCNjMFNAbHV6cj09
MTRuWjA4OFAqJm9oVGRpPiQ7dChSUmAKeipvMDV5K2pAZHtvcHtGVEAja3Zhc2tNNykoaT4te188
eip2JG9ubXJYZT1eKThGJHJCJkRDJFV5JiFJWSslaD08CnpgPT5+QG5rfipPPlVzN0c1Pm4+T1c9
cG8kMT1NS2tBOT9TeTY8fkxZZFNhUDlwYERCWTUzKDMoI0p3eS0taH5sXwp6eUBYX25LbHtNP1V2
R1U7QXM4PXFrclV1cSQxYTQrVVUtZm0pQW15U2RjRl5fTFdHYSVsc2g5WUJpXzdCbGQ1fG4Kelpq
KChJMUo0NWJReGAjN0p1VT45Un5UNlRSUWs0VnRXSjJ1Rk52T21XYXZqJCFjPj10VkVmfXgyKUg9
M2FJUWdvCnohQj15WklgPnBhNVZlJEt7JFhVUk40TXYmcWt4OXwzdktfWGBWeGl6NlB3fGYlU0he
dmNGd2U9YFJTMUV7X1YoVAp6TEw2a0Y8OyYlWj4rT3owRkloKGtnUWc+PCF9IVUtdiRyVEtXZU8x
JDhkcl4pWGk/WVRwcG0obWc9Xm4wOSZCKloKenYteWlCUFM2YnFXO21pOFBRRUZQekhMVUY0eTJ4
dTl+JVlZM1VPY3NqNkdSUURKdUpkKDVSR2hGdUIjNTVySHZiCnplSDZKXy09OTF0MGs2b31GWlNq
P1BfQTB5djBCQDRrZXZJLXc7JF59ZGdOdm5xQVBLcVl+MkJQP3thcDFwUUxjQwp6JjJHNUZGS3Iz
U3ZVbnBfQ2s4V1pnWVUpK2RBIyVoPyp7Yj9CVVliYF9rdmZBTWpaRno7QFoyTkpfVVZXN2M5YikK
eloqWH1JTmVmJm98MUBGfENSfFhiYV4tUVI3ak1hNmdVblFya34+e3pLISglO3lFfUhfeCNuNEhj
OVpjMyYoJGkoCnoxQGY5QT9JbnY8VmVIUHdJNEpreTdtSEJ4c3drbGxYWSRfZz1BcUcxcn1raCRg
cHtJJGNNXnVEOVYyfj01N2BwWgp6Q1o8Z0tXQWp2PTA9QDIoRVFEYHxZT3wkIVMyV3ZxWlUzQSZo
KDZoR2ptUmp1SXd7KiVfZHY0QnZlVTlJaiNCU2oKejEzeEVOdk9SZmlaZiR6Kyk3c0tuVm40SUVQ
THBHcVY+UVF7OXdVKnN5ZTcrb1FrQ3tRNXQzI24rS142VGdGfExxCnoyOWloTEZ1UnYtdll7Z3x7
V0YyezVrKi01ZHw9KXwoVyZgJCRYdippM3FgT30pZV5JV1pgd00ral9scE9pXl5VIwp6eXwlUWtr
Z0w4JiV6SClvSmwraWVqcGtfPHhYQHJNITwtISNtZml4b0I2OXleQHA8UCllekEpUGc7WVJpTzFI
VzsKel41YTgqUWd8TCM+bEI/KD4kaVk+K0BxPWdDfDAkVT80bVNjY2xiZz5HPTByWWRSJip3REJ6
KFg8JF9NNSs+UGlUCnoxOyUkMy1oRiRidlJOPkhSXyVkVm9hQmteeFMxQHhII1JsU0o0aj0xamQ2
e3lfSVRCPkt1Tkx0Q0I8WlltSVNabAp6QCFxU0oleEM+Py1qcig+ZVYwJiN6OzBUclpxb2Q/YXU4
TT5HZkBOfjdlJjxBYXpEYD5hQDs2fik9cWdLdCkzPmMKelIqMkgqLXtkYlozUnheaThJflowXkx2
TmIwbWA1Nilpbj5WZCRwRW4lVDF3enVIX3VuSGFFKlNeYEBoQWJXTCYzCnpTNkA8Um5nTnF+dF9a
fk1wWjV8R0l+Z3pZLTBrO29lQTYqfm95RVNvRHclUGlNPXluYStQbTt6ZT4rfGB3Tn07IQp6eGlX
T1ItaD85OVErYDJGcnlUNHpje0ZUI2VYZSQyS2R4MUM+cSY1dj44eEpzckdwTElKeHhwI19QMUVO
VHxJSyoKenZgZ1JmP2QxciVxSXg/Yy1DKns3TUhBZVE+c2lHKWJMa2R4c1ZpNT1IdzcrNS1tOUI3
VkFTckQpbT5haUVVXlI/CnpUcUQhdDtEYU97cysmdUJsaVFsIXBpNm1BKjd8KTEoWVYwRUNqUlgw
RFhjIU0+e3lRbmN7ZEA0KT0yK2UkP31DZwp6PFdBek4kYCo/V2IkZShXd3A1PV9RS2h5N3c5OTty
aGk+ejhVNUBSWmc3NyFEQUBYc0JXdldqdlBsZVlWczJkTTEKeiszSTNGM29BUS1kRHEjMzc+LUJw
SkMzYypqS1F1bm9YWHlyVGVtKGcrJkBAMVVVOyR9eSZqcFd0TU1oRFQ1UD98CnprPmBucnokYURm
NGNHayZrOWE7MTRNd1d7ZUctbVorVTF6elQrNV5UT2ZwPjRPanMpV0N9MFF8cyFSaik3X1M3Xwp6
YSs7fUUhZWxkSVRYQFkxM1FeKUsqX2BReFhRVHJpbEYya2dAQjckPDNETFRWSXpNdn4yK25NSihQ
M2QoXkh9TCMKens4dV8/cXgrcVE1NjV0OXdxLW89MlVwaU5qakRAWk5xcWFVR2ZoUyprN1AlQDJL
OW9SSzdhQiQ9OHo0aEtBPGZgCnpjeURfQXljKCViMSk/MFU3VWhAZHRVXmhPWlV+Q2NeVkIoWCs5
dyVtIzlwTng0UlBTSFJ+eUJAc25peCFPdVB7Iwp6cCliZSQkVCRrfXcoKj1TZDthWlp6PGl5TkM2
IUAqVEIkKVNCTlA5P2psemJhek1PY0c2YElOSmRMTD5iWDN5SWQKejJAXzhVSj1gP2AtWiZTOSgj
QSZFJTkkTjlBVipAcnBtZXNkYlVpfmtNN29WQ2U0dVJpRDY2QEtOPG1nMEY1U3JQCnpnPW8yTHZE
UDt8OCUjQktCUmxEZDVBVGt9Vl95YiQkdFUmOWJOTjU8TzVwc0lIQlFCfXRKdVokLXA8U1JQR2Bg
Twp6QUZid1ZYeHAxUm9VVT5zV1Y3VzNNYH4qTGtXMnktTVopS1UpOTxgRDlmKGJyJGo4d0g3ZXFR
YG9WWHtBYUZ9VTIKej98Qz0keXx2PE4lVz00dkh3Rj1qZH5qPnNnUjxmNzEra1Q9NF5sWUc0bH15
SmtXTmBBSk4wY2g1JEFTKCRMdDRaCno8aDtvb3NwaXVpUVZzZHxYUHlQR3I0O3ZSSSoqWUwmMDRJ
bmY2eFFQd1MtN2xud1E7bXRYV14oMillQ3c2TGx2Zgp6ViFYYCUjMXp3Q1ltSXl4dTFgMnNKZV9P
TCtmUVhMbXswdlF4P0VFQD5idjI8WmZTTit6cSghUGIlUmhVVXhnMEUKeldXdWxWZC1KWHw+PDVt
VkI0dV4+IXlXREhyVXB4YCk7X34wSW82Yn1eU0goZ29pdVFxQU1YZldwaHs9NXM8NU4jCnpqayNz
bnF+VkNWaHUhZmY2Uy1SYzVkJVl5NHdvd04hPjxTSTRQS2ozZG5aVDVJPGxJKCp4Yz4kP1dOfTJw
YHFPNwp6cktMSVJxYTtSeEAhQDZCYkdTTE5IX2hGeHE1fSpBdG5TcnJqIVc1dHRPVUo5KUthbm5Q
PUVqVTNONDw/JXgkTkEKeiNLTnlwLT15YkdgLSRBNHleJnZJYWRJOWxwVlQyKkt8ODAhKjhrTTNI
NiVBJE81VUlJSUh0fk9DUkkobWA+YXBrCnpJQCFeN1dMTVkjc0ptKUNSQmtsI3l8M0J4JHt4enUx
d1YzK2VmWjw/T0RoPCo9RSVBckdVdFZCKjdwdXV2e2dLdwp6YENEWjZKZVV5TSpOSD1xV1hsWS1v
SDJkIV80MjIld2IzJlk/Vy1lRXgzZWJRdHF2d1ZyezkhTzgreWF3TDI4MjsKenc3cjNzY2E/YFpD
Yl4pTWZiekt+dGNEalRlJjlwOzA8KlM4WHA3SW5jelhzNi0qWjJ1RSQteEM4KkFMRWx7WDlOCnoz
dDBGZjZWZ1hjKipYdkBEdXtRRGdyT0tPQ2NXeihwIzFfWnY5WX5eZ3VIdHt6ITZyJml6LVlIRUFB
Ynp6bTImQQp6Yi1VdXpfU0RBcWcwXiFFWkU+KnNSNSkjTVh6dnNhc35HI1dNTCRBQD53U2E4dTdS
M1RCYV5rNDlCSWxiKlBAfiQKenZkWGxUUHZaNlV3MSRDSVR5cGNuUz0qMXRrK0YlWDNUPkxQdXdr
SnglcjhGKEx7dVYxRihUWChOKVRiPGJsKnN2CnpWcExtZUN3Ti1tOXJiKXBXYEY4aTJ0THhQcFBC
ZGJkbXRXQHR6MkF+eVpMbX1aQDRSKWc7NlZmK300TExldz9RLQp6R1ExQUZkfHlDRSZfZy07RWpW
TWwlWmlWMVp8K093YDB9YnRjIW9ab01DdjhXO1ZnQDkkKENjfDw2cT5COEpATj0KenpHN2tQJiVP
bTdZQGxSfT9IY1QyNUhsUncxRF41TCsoeDskKmEqWiRAWXYrP1h1Z15kIzIoREdoTUpUYFpjfE94
CnpxT0VoTXtOKXFHcHpOR2NKVXBGd1chTnpwZHdZS35zT3AtNiVLZk1aSV54S25FKl9mPiV9fnA1
a3p6P049bDx5Kgp6QGB9cDY9fXlLfChlQkR3NHZ5anMoUTFRPV5uOSRHZ2hZO3tpX3R3Q09xTXJx
WmNpfVhrbldZX0ZKR2hRdUppOXoKej13ZFJ7PHVUX3RWQV88c1BMfkNvemxNP3NgQj8yLTYyeHxi
MEZJbmZWM0IlaFJ+ZmRAJkxocDxHd1k9KitWTyR+CnptaGFBNmItY30hbmJNSlYmcVEtPi1aUXJg
XmhLRipEY1JtYnJtbjAwNEJrdiNUIz9OfSomVERoaik7c2UyUWNVUAp6cFBkI2JrVyp+MTslaHM1
TkN7aWZ2NlA+YHotcVE4UHJGYyN0dH4tSWFyME9tOFJWQyMkPUVLTUAyUHVwQiV0dm8KejA4NT0/
JUVxMTNyZlFfaFM5VXkqRE9VI0lCYH00KWZLRkNnajJ1NT1zQj48RWU5ejFPVCpqZWNGKVhTb04w
OVFxCno1d3YwfGIwQDxKVD0xaUtHYD1uN1NLaWZ1RVVPM2R0Z2QtQylPY1pQP3UtQ284bHhAaSpe
dCVge2xVbHNedEctdwp6Y2l4WG9oQ2c1VkBybmZjNyFVSHFWTj8yZ3MrR2I7Z0J3UWorIWp8KSlD
R29pZjZSKHIpOVBiNyUkfD5GUU1VTUMKelQtQGg+MntJS1YtKk5mR3drPTg3KnVGdiUjeU9tJVZW
VElkbSVDZGZtUGglbTx3eG9CZXlWRy1NSG1ZQWsyVyZsCnprVjQ9Y1pAdXJvb2NkbCV2UUNgUnZ3
V3E/e2N2aEhxM2cmcGZBJikjQChBQGpfYCNze3FHejEqdj4kIX1TPnkzQwp6dGgjR2tPQDQoRGRO
NE9acEVOVTd6JDckWD47Mj93dCpGb0x5aF8jNUV5eHJYbj82KTFJNmhPVUxXdyM0cWdYMj8Kejd5
QzMldUchfnRmJT4oWT0+dyh5SkhGMVRAWmlffENKN31LLXgpay1ZdGZ1PFJtVTQyPXMmcXslKjU8
KSNmRXdMCnolOFlTK25XdXZXPzRZJG0oKDMwTnJ1eDM4Zm9CcWYmO3RfKnpvYU8/U2U4YSFwSUdY
PG9XMkNuaFhqXkJuJnI+Uwp6Nll1PWB4VyZnemBOVW5aTEN5PFAjamRtJCU+MEVxbk9KYEU8ND9a
QSlMPDJBSiRHSTlzWGFFZ0UyM2V7XmRAKVAKenhLTUV8SihafExZez9+MEg0VUApJjwoOCR7dHJx
eXhhZnUoN3E5TEVUNVh3Rl5CRXs2YEdiQWJPdyQwZGl2dDVxCnowN3V4VF9QJGJeQGp9T1ZZclRC
IW01eCpOaWYkT2hqb01eV0Q4NGJiUDBXZUtfSVEyMlgyVmV+VTZaTmBjWkdJQwp6eH59ZmpAVklW
Nl98cikxI3V4R3ZOK0Y4WjYjQlVJcHtyWElpY1NJVVFWd2JEU18zeFVTJm1yRmBMPmJ5VnB9NXUK
ekFTQHZsSXhpSFJPJTZ6XnhPbGxueD0tbCl6NmVMRVViKEpeYC1mejhuT2kpVmh4Qio3Pm5OQEU2
aitaYVpwQEtPCnpIJXxUZkBwWDg+YUVOem9AQTBDb2ZgNldQI04maVp1SlNCT1J8RXpvKTBBXnhK
UnRLNEs8QHlySE0/QXRNUmlxUAp6PFM0WHY9MkMhQ2NYN0Y+ciVHcEBlQEA0amR1YklsO0NoPy1g
QEpgRz9HYyg/UilZaW5XRVR9PD8qQV8oTztXTHYKelJMNFg+cH44UkdHPT19Rlg9LX5wVj9ieWUp
PWRXRVlLZ2FWY0ViXj92JjJ0VGIwLVcpVDhpfVdFOEFJTUBhQXJJCnpJSUk+MVopWGk0bTJZaWFm
cEZwclFCenRQPVY+R2U1az4rOVZQRl4jMHRPPzFxOVBDemtiO31KcW4pSmAqMldQNwp6MU9xQCl1
OWdfQTgmRV9QMHN4VldrdjteVzVGYE1FR0l5NTgqeEFeK2s9Nmt+VDVjRjhVNyFlWTI/P0g5Rn4m
ZkYKenEkO2M/djhNVztzO3RPZzUmVGhLaDliZkxQaiVWa25GX1dRY3JvfU9CQGp+XlIrPWlKJUg2
RlFjazRPeHNtQUFQCnpYSWpVbEJGPnVFWio5PF5DS1hLe0g0Zkh5WmlTPnlGNjs5NVBwMnxtXiVU
MTtjKHVwYzwod15qKSh7c2NVJU8/Nwp6enJNWHEoN2dGbWFZZzg+aylUJSZFZlVoV2VRZUg0OXlA
UE87Q2lvdXZ0cVF7dUtUTD1YVGowd2B7eT83KDgoYysKekVHPjZIUTtqPitFVldnfHZgJmotUE5n
VCo1XyZZMU89NDxoNENvZmVubHFoeVJNfnl5QSleVU9zQyhXMTRWTCl0CnpMMnZRUUZUQipQNFFn
PWJuQlJ2JmNqIyYrV3Y2LTJEb09DQDgyYSUzbjhHJWxGRXtabjlmdD1CK2RNOGhsR0x5Qwp6USlz
P0FyP0shO1h0TWR+VldYbWkjQWxAOHo4KEp5S1Njalo8ZXlYa1h9TWR0ayQ5bnZjZ09zZU59SWM0
TlNwRDAKekdyfHQ8PlZ+cDQkQ0d3aSs1Q0BwNWRjV2YmZFNaISlkKz99MEZlK2Q1RHRke1ZJcmJI
c0ljKHdmZEdTbnF5YV5NCnpmaFBhRztlUWJrTmFDcGAwSGxyNiFQPTJ9MXdoaWFZWGJocDEwdip+
alJySVhOUSZtNF5OXyNJNjlYWDleUzI1fQp6OWdubHIhbmhmTWhga0d0SHBiSjw8UjdxcXRAPDZt
eTE1TW9xOzhIVWFUWlBqMEJLQGVhcWY2YWo0S2RBR05CMWwKeiFDMlh1bGEyeigwNzRXMjZvRXJj
S3lyQVR5RUN4fnFEOVE1SW84I2cxWXpqfkxUTTM/ZlFPd1dNcEk1MnF5VGd5Cno9Mj0xbGdkI2Rm
d0JRT1BieDsxemM5S2NiQXRuTy0+NWVQbFVwQGYtYSlQK3ZQY0tNYFJrRXtrSDNJKGpsPU8raAp6
eHMhNzdfZUIxIVdBb2J2JUE5ejdhVz0lTFpIUGhzNGpLU2JiSC1xJEVKLShrKFNLdXNeYkhKd1Nh
KE9xfE5hM0oKenY2YW9TSG4lWllLezt2T2YyOHozJUB0eDBRdG9jSElKYEpvN0w1amo7bGcwQkZw
JmVvRnllck4hOTwjWGdefFI2Cno7djV1QXlpSkk1cSRxS3F7KlhmP2h5ZjVnTSNRVj80K3NQYWZ+
WlNVYHdjO1lnQSZ6PHlLTG9kaVRSSG5vVHgrNgp6Z0E8e1ZCb219VGYrbT9EdTdTIUR8QX0rSXY1
MSU/XkR5RVpOZT10ZEVIUWMrVipCZDBqMkxsVjZhcG9CRUNMbVUKeiFVZSVsOXgjfVBfaXRKQyNB
Qj1oVT8ybnpBUl8obzBGZWo7MzwwelR7dmt1YzVYOV9+OXc3RVZHQjZsSXIxSmxlCnpMQlloRnw1
SnY5aXhTVnNLVkBKal5qfl5KaV5Ubz9yeWhiUntGaDdee3gzV3ZhWDA+Xzl1a1dEdztvalZVcF54
ZAp6cVdAbHQ2I2JpQkhAckZWZzIkN250ITN3cEEqS3FYaU5nYE9gVEduMktuaHJFOTF1ZHs0KUcj
VGtPM00yI2dXM1kKemFGaSQqQ1dWQmRyS016e3ZMYXc4OFpIZiVLfWshJnBrUmFxO1F2PTQ5UmVB
Z0NDVjBLPkVQPF8xT3k+YkQ2b2BfCnhDXylNP0R9cUtLTHtKRH1ESmM7VjVkO2IlallMVklOS3wl
cEdzbkNBLWNuKStBXj5oflN2NTReeld7bkBfV0orOwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX2Rvd25sb2FkLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L3Rlc3RfZXdrMl9kb3dubG9hZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjI5YTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHAKQEAgLTAsMCArMSwxNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlVuaXRU
ZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIgorI2luY2x1ZGUgIlVuaXRUZXN0VXRpbHMvRVdL
MlVuaXRUZXN0RW52aXJvbm1lbnQuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0
VGVzdFNlcnZlci5oIgorI2luY2x1ZGUgPEVXZWJLaXQyLmg+CisjaW5jbHVkZSA8RWNvcmUuaD4K
KyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBFV0sy
VW5pdFRlc3Q7Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCitleHRlcm4gRVdLMlVuaXRUZXN0RW52
aXJvbm1lbnQqIGVudmlyb25tZW50OworCitzdGF0aWMgY29uc3QgY2hhciBzZXJ2ZXJTdWdnZXN0
ZWRGaWxlbmFtZVtdID0gIndlYmtpdC1kb3dubG9hZGVkLWZpbGUiOworc3RhdGljIGNvbnN0IGNo
YXIgdGVzdEZpbGVQYXRoW10gPSAiL3Rlc3QucGRmIjsKKworc3RydWN0IERvd25sb2FkVGVzdERh
dGEgeworICAgIGNvbnN0IGNoYXIqIGZpbGVVcmw7CisgICAgY29uc3QgY2hhciogZGVzdGluYXRp
b25QYXRoOworfTsKKworc3RhdGljIGlubGluZSBib29sIGZpbGVFeGlzdHMoY29uc3QgY2hhciog
cGF0aCkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBidWY7CisgICAgcmV0dXJuICFzdGF0KHBhdGgsICZi
dWYpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2ZXIs
IFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwgU291
cENsaWVudENvbnRleHQqLCB2b2lkKikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9kICE9IFNP
VVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdl
LCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgRWluYV9TdHJidWYqIGZpbGVQYXRoID0gZWluYV9zdHJidWZfbmV3KCk7CisgICAgZWlu
YV9zdHJidWZfYXBwZW5kKGZpbGVQYXRoLCBURVNUX1JFU09VUkNFU19ESVIpOworICAgIGVpbmFf
c3RyYnVmX2FwcGVuZChmaWxlUGF0aCwgcGF0aCk7CisKKyAgICBFaW5hX0ZpbGUqIGYgPSBlaW5h
X2ZpbGVfb3BlbihlaW5hX3N0cmJ1Zl9zdHJpbmdfZ2V0KGZpbGVQYXRoKSwgZmFsc2UpOworICAg
IGVpbmFfc3RyYnVmX2ZyZWUoZmlsZVBhdGgpOworICAgIGlmICghZikgeworICAgICAgICBzb3Vw
X21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAg
ICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBmaWxlU2l6ZSA9IGVpbmFfZmls
ZV9zaXplX2dldChmKTsKKworICAgIHZvaWQqIGNvbnRlbnRzID0gZWluYV9maWxlX21hcF9hbGwo
ZiwgRUlOQV9GSUxFX1BPUFVMQVRFKTsKKyAgICBpZiAoIWNvbnRlbnRzKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9GT1VORCk7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworCisgICAgRWluYV9TdHJidWYqIGNvbnRlbnREaXNw
b3NpdGlvbiA9IGVpbmFfc3RyYnVmX25ldygpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZF9wcmlu
dGYoY29udGVudERpc3Bvc2l0aW9uLCAiZmlsZW5hbWU9JXMiLCBzZXJ2ZXJTdWdnZXN0ZWRGaWxl
bmFtZSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJDb250ZW50LURpc3Bvc2l0aW9uIiwgZWluYV9zdHJidWZfc3RyaW5nX2dldChj
b250ZW50RGlzcG9zaXRpb24pKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGNvbnRlbnREaXNwb3Np
dGlvbik7CisKKyAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSwgU09VUF9NRU1PUllfQ09QWSwgY29udGVudHMsIGZpbGVTaXplKTsKKyAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKworICAgIGVpbmFf
ZmlsZV9tYXBfZnJlZShmLCBjb250ZW50cyk7CisgICAgZWluYV9maWxlX2Nsb3NlKGYpOworfQor
CitzdGF0aWMgdm9pZCBvbl9kb3dubG9hZF9uZXcodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0
KiB3ZWJ2aWV3LCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRG93bmxvYWRUZXN0RGF0YSogdGVz
dERhdGEgPSBzdGF0aWNfY2FzdDxEb3dubG9hZFRlc3REYXRhKj4odXNlckRhdGEpOworICAgIEV3
a19Eb3dubG9hZCogZG93bmxvYWQgPSBzdGF0aWNfY2FzdDxFd2tfRG93bmxvYWQqPihldmVudElu
Zm8pOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25sb2FkKSwgRVdL
X0RPV05MT0FEX1NUQVRFX05PVF9TVEFSVEVEKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2Fk
X2VzdGltYXRlZF9wcm9ncmVzc19nZXQoZG93bmxvYWQpLCAwKTsKKyAgICBBU1NFUlRfRVEoZXdr
X2Rvd25sb2FkX2VsYXBzZWRfdGltZV9nZXQoZG93bmxvYWQpLCAwKTsKKworICAgIEV3a19Vcmxf
UmVxdWVzdCogcmVxdWVzdCA9IGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldChkb3dubG9hZCk7Cisg
ICAgQVNTRVJUX1RSVUUocmVxdWVzdCk7CisgICAgRVhQRUNUX1NUUkVRKGV3a191cmxfcmVxdWVz
dF91cmxfZ2V0KHJlcXVlc3QpLCB0ZXN0RGF0YS0+ZmlsZVVybCk7CisKKyAgICBFd2tfVXJsX1Jl
c3BvbnNlKiByZXNwb25zZSA9IGV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoZG93bmxvYWQpOwor
ICAgIEFTU0VSVF9UUlVFKHJlc3BvbnNlKTsKKyAgICBFWFBFQ1RfU1RSRVEoZXdrX3VybF9yZXNw
b25zZV9taW1lX3R5cGVfZ2V0KHJlc3BvbnNlKSwgImFwcGxpY2F0aW9uL3BkZiIpOworCisgICAg
RVhQRUNUX1NUUkVRKGV3a19kb3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGRvd25sb2Fk
KSwgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworCisgICAgQVNTRVJUX0ZBTFNFKGZpbGVFeGlz
dHModGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCkpOworICAgIGV3a19kb3dubG9hZF9kZXN0aW5h
dGlvbl9zZXQoZG93bmxvYWQsIHRlc3REYXRhLT5kZXN0aW5hdGlvblBhdGgpOworICAgIEVYUEVD
VF9TVFJFUShld2tfZG93bmxvYWRfZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSwgdGVzdERhdGEt
PmRlc3RpbmF0aW9uUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2FkX2NhbmNlbGxl
ZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50SW5mbykK
K3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRvd25sb2FkIHdhcyBjYW5jZWxsZWQuXG4iKTsKKyAg
ICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgIEZBSUwoKTsKK30KKworc3RhdGljIHZvaWQg
b25fZG93bmxvYWRfZmFpbGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywg
dm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZF9FcnJvciogZG93bmxvYWRFcnJv
ciA9IHN0YXRpY19jYXN0PEV3a19Eb3dubG9hZF9FcnJvcio+KGV2ZW50SW5mbyk7CisgICAgZnBy
aW50ZihzdGRlcnIsICJEb3dubG9hZCBlcnJvcjogJXNcbiIsIGV3a193ZWJfZXJyb3JfZGVzY3Jp
cHRpb25fZ2V0KGRvd25sb2FkRXJyb3ItPmVycm9yKSk7CisgICAgZWNvcmVfbWFpbl9sb29wX3F1
aXQoKTsKKyAgICBGQUlMKCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25sb2FkX2ZpbmlzaGVk
KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQor
eworICAgIERvd25sb2FkVGVzdERhdGEqIHRlc3REYXRhID0gc3RhdGljX2Nhc3Q8RG93bmxvYWRU
ZXN0RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gc3RhdGlj
X2Nhc3Q8RXdrX0Rvd25sb2FkKj4oZXZlbnRJbmZvKTsKKworICAgIEFTU0VSVF9FUShld2tfZG93
bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChkb3dubG9hZCksIDEpOworICAgIEFTU0VSVF9F
UShld2tfZG93bmxvYWRfc3RhdGVfZ2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FEX1NUQVRFX0ZJ
TklTSEVEKTsKKyAgICBBU1NFUlRfR1QoZXdrX2Rvd25sb2FkX2VsYXBzZWRfdGltZV9nZXQoZG93
bmxvYWQpLCAwKTsKKworICAgIEFTU0VSVF9UUlVFKGZpbGVFeGlzdHModGVzdERhdGEtPmRlc3Rp
bmF0aW9uUGF0aCkpOworCisgICAgZWNvcmVfbWFpbl9sb29wX3F1aXQoKTsKK30KKworVEVTVF9G
KEVXSzJVbml0VGVzdEJhc2UsIGV3a19kb3dubG9hZCkKK3sKKyAgICBPd25QdHI8RVdLMlVuaXRU
ZXN0U2VydmVyPiBodHRwU2VydmVyID0gYWRvcHRQdHIobmV3IEVXSzJVbml0VGVzdFNlcnZlcik7
CisgICAgaHR0cFNlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIC8vIEdlbmVyYXRl
IHVuaXF1ZSBuYW1lIGZvciBkZXN0aW5hdGlvbiBmaWxlLgorICAgIGNoYXIgZGVzdGluYXRpb25Q
YXRoW10gPSAiL3RtcC9wZGYtZmlsZS5YWFhYWFgiOworICAgIEFTU0VSVF9UUlVFKG1rdGVtcChk
ZXN0aW5hdGlvblBhdGgpKTsKKworICAgIENTdHJpbmcgZmlsZVVybCA9IGh0dHBTZXJ2ZXItPmdl
dFVSSUZvclBhdGgodGVzdEZpbGVQYXRoKTsKKworICAgIERvd25sb2FkVGVzdERhdGEgdXNlckRh
dGEgPSB7IGZpbGVVcmwuZGF0YSgpLCBkZXN0aW5hdGlvblBhdGggfTsKKyAgICBBU1NFUlRfRkFM
U0UoZmlsZUV4aXN0cyhkZXN0aW5hdGlvblBhdGgpKTsKKworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9hZCxuZXciLCBvbl9kb3dubG9hZF9uZXcs
ICZ1c2VyRGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXco
KSwgImRvd25sb2FkLGNhbmNlbCIsIG9uX2Rvd25sb2FkX2NhbmNlbGxlZCwgJnVzZXJEYXRhKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZG93bmxvYWQs
ZmFpbGVkIiwgb25fZG93bmxvYWRfZmFpbGVkLCAmdXNlckRhdGEpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rv
d25sb2FkX2ZpbmlzaGVkLCAmdXNlckRhdGEpOworCisgICAgLy8gRG93bmxvYWQgdGVzdCBwZGYK
KyAgICBld2tfdmlld191cmlfc2V0KHdlYlZpZXcoKSwgZmlsZVVybC5kYXRhKCkpOworICAgIGVj
b3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gQ2xlYW4gdXAKKyAgICB1bmxpbmsoZGVz
dGluYXRpb25QYXRoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4
IGZjNWQ3NDcuLjUxOGRiOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApA
QCAtMTIxLDEzICsxMjEsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
RnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBj
b25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJp
bmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUNlcnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1l
LCBib29sJiBpZ25vcmVFcnJvcnMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJveHlB
dXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50
MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJu
YW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0oUVQpLgogCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEsp
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpID0gMDsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0ZWYyZGE1Li42Y2YyNjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTIyMSw3
ICsxMjIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24oUG9s
aWN5QWN0aW9uIGFjdGlvbiwgV2ViRnJhbWVQcm94eSogZnIKICAgICAgICAgLy8gQ3JlYXRlIGEg
ZG93bmxvYWQgcHJveHkuCiAgICAgICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkID0gbV9wcm9j
ZXNzLT5jb250ZXh0KCktPmNyZWF0ZURvd25sb2FkUHJveHkoKTsKICAgICAgICAgZG93bmxvYWRJ
RCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7Ci0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgLy8gT3VyIGRlc2lnbiBkb2VzIG5vdCBz
dXBwcG9ydCBkb3dubG9hZHMgd2l0aG91dCBhIFdlYlBhZ2UuCiAgICAgICAgIGhhbmRsZURvd25s
b2FkUmVxdWVzdChkb3dubG9hZCk7CiAjZW5kaWYKQEAgLTI2NDIsMTEgKzI2NDIsNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29u
c3QgU3RyaW5nJiBjb250ZW50cwogICAgIG1fcGFnZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tTmF2aWdhdG9yUXRPYmplY3QoY29udGVudHMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQotewotICAgIG1f
cGFnZUNsaWVudC0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKLX0KLQogdm9pZCBX
ZWJQYWdlUHJveHk6OmF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNvbnN0IFN0cmluZyYgcHJlZmlsbGVkVXNl
cm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgbV9wYWdl
Q2xpZW50LT5oYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChob3N0bmFtZSwgcmVh
bG0sIHByZWZpbGxlZFVzZXJuYW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpOwpAQCAtMjY2Myw2ICsy
NjU4LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVl
c3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYKIH0KICNlbmRpZiAvLyBQTEFURk9STShR
VCkuCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQordm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAg
ICBtX3BhZ2VDbGllbnQtPmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgbmVlZFRvdWNo
RXZlbnRzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDMz
YzQ5YTMuLjU2MzNjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTYzNSw2ICs2MzUsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBm
aW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0
b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFBy
b3h5Kik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154846</attachid>
            <date>2012-07-26 22:51:35 -0700</date>
            <delta_ts>2012-07-27 06:41:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_download_manager2.patch</filename>
            <type>text/plain</type>
            <size>65502</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA1NjlkZDc1Li41MjA0YzJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTA4
IEBACisyMDEyLTA3LTI2ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CisKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLG5l
dyIgc2lnbmFsIG9uIHRoZSB2aWV3IGFuZCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHBhdGgg
Zm9yIHRoZSBkb3dubG9hZCBpbiB0aGUKKyAgICAgICAgY2FsbGJhY2sgaW4gb3JkZXIgdG8gYWNj
ZXB0IGl0LiBJZiB0aGUgc2lnbmFsCisgICAgICAgIGlzIGlnbm9yZWQgb3IgaWYgdGhlIGRvd25s
b2FkIHBhdGggaXMgbm90IHNldAorICAgICAgICB0aGUgZG93bmxvYWQgd2lsbCBmYWlsLgorCisg
ICAgICAgIEEgbmV3IEV3a19Eb3dubG9hZCB0eXBlIGlzIGludHJvZHVjZWQgdG8gcHJvdmlkZQor
ICAgICAgICBpbmZvcm1hdGlvbiByZWxhdGl2ZSB0byBhIGRvd25sb2FkIHRvIHRoZSBjbGllbnQK
KyAgICAgICAgYW5kIHRvIGFsbG93IHRoZSBjbGllbnQgdG8gaW50ZXJhY3Qgd2l0aCBpdCAoZS5n
LgorICAgICAgICBzZXQgaXRzIGRvd25sb2FkIHBhdGgsIGNhbmNlbCBpdCwgLi4uKS4KKworICAg
ICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL0VX
ZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6aGFuZGxlRG93bmxvYWRSZXF1ZXN0
KToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuaDoKKyAgICAgICAgKFBhZ2VDbGllbnRJbXBsKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6CisgICAgICAgIChfRXdrX0NvbnRleHQpOgorICAg
ICAgICAoX0V3a19Db250ZXh0OjpfRXdrX0NvbnRleHQpOgorICAgICAgICAoX0V3a19Db250ZXh0
Ojp+X0V3a19Db250ZXh0KToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2FkZCk6Cisg
ICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9nZXQpOgorICAgICAgICAoZXdrX2NvbnRleHRf
ZG93bmxvYWRfcmVtb3ZlKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dF9kb3dubG9hZF9jbGllbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKHRvRXdrQ29udGV4dCk6Cisg
ICAgICAgIChkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRGaWxlbmFtZSk6CisgICAgICAg
IChkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoZGlkQ3JlYXRlRGVzdGluYXRpb24pOgor
ICAgICAgICAoZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoZGlkRmFpbCk6CisgICAgICAgIChk
aWRDYW5jZWwpOgorICAgICAgICAoZGlkRmluaXNoKToKKyAgICAgICAgKGV3a19jb250ZXh0X2Rv
d25sb2FkX2NsaWVudF9hdHRhY2gpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9Fd2tfRG93bmxvYWQp
OgorICAgICAgICAoX0V3a19Eb3dubG9hZDo6X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChfRXdr
X0Rvd25sb2FkOjp+X0V3a19Eb3dubG9hZCk6CisgICAgICAgIChld2tfZG93bmxvYWRfcmVmKToK
KyAgICAgICAgKGV3a19kb3dubG9hZF91bnJlZik6CisgICAgICAgIChld2tfZG93bmxvYWRfaWRf
Z2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF92aWV3X2dldCk6CisgICAgICAgIChld2tfZG93
bmxvYWRfc3RhdGVfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXF1ZXN0X2dldCk6Cisg
ICAgICAgIChld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9h
ZF9kZXN0aW5hdGlvbl9nZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX3Nl
dCk6CisgICAgICAgIChld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAg
ICAgIChld2tfZG93bmxvYWRfY2FuY2VsKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0
KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9yZXNwb25zZV9zZXQpOgorICAgICAgICAoZXdrX2Rv
d25sb2FkX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3Jl
Y2VpdmVkX2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX3N0YXRlX3NldCk6CisgICAgICAg
IChld2tfZG93bmxvYWRfbmV3KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93
bmxvYWQuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2Fk
X3ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwOiBBZGQgYSBmdW5jdGlvbiB0bworICAgICAg
ICByZXRyaWV2ZSB0aGUgY29udGVudCBsZW5ndGggb2YgYSBVUkwgcmVzcG9uc2UuCisgICAgICAg
IChld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldCk6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a192aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZCk6
CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9uZXcpOgorICAgICAgICAoZXdrX3ZpZXdfZG93
bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGY6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZC5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisg
ICAgICAgIHRoZSBkb3dubG9hZCBmdW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0
RGF0YSk6CisgICAgICAgIChmaWxlRXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToK
KyAgICAgICAgKG9uX2Rvd25sb2FkX25ldyk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxs
ZWQpOgorICAgICAgICAob25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X2ZpbmlzaGVkKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VD
bGllbnQuaDoKKyAgICAgICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9s
aWN5RGVjaXNpb24pOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpoYW5kbGVEb3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaDoKKyAgICAgICAgKFdlYlBhZ2VQcm94eSk6CisKIDIwMTItMDctMjYgIFplbm8g
QWxiaXNzZXIgIDx6ZW5vQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBRdCBidWls
ZGZpeCBhZnRlciByMTIzNzg2LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1F
ZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQppbmRleCBiNGZhMGFj
Li5iYTc0M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQpAQCAtNDIsOCArNDIsMTAgQEAg
TElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNs
aWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3Bw
CiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCisgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19kb3dubG9hZC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9u
X3JlcXVlc3QuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudC5jcHAKICAgICBV
SVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50X3NlcnZpY2UuY3BwCkBAIC0xODYsNiArMTg4LDcg
QEAgU0VUIChFV2ViS2l0Ml9IRUFERVJTCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElS
fS9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09V
UkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCIKICAgICAiJHtDTUFLRV9D
VVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb29raWVfbWFuYWdlci5o
IgorICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkLmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICAgICAiJHtDTUFLRV9DVVJS
RU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnQuaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2Vy
dmljZS5oIgpAQCAtMjQ5LDYgKzI1Miw3IEBAIFRBUkdFVF9MSU5LX0xJQlJBUklFUyhld2syVW5p
dFRlc3RVdGlscyAke0VXSzJVbml0VGVzdHNfTElCUkFSSUVTfSkKIFNFVChFV0syVW5pdFRlc3Rz
X0JJTkFSSUVTCiAgICAgdGVzdF9ld2syX2NvbnRleHQKICAgICB0ZXN0X2V3azJfY29va2llX21h
bmFnZXIKKyAgICB0ZXN0X2V3azJfZG93bmxvYWQKICAgICB0ZXN0X2V3azJfdmlldwogKQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NDRmYzE2
Li42OTE1NWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9F
V2ViS2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQy
LmgKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxl
Y3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIK
KyNpbmNsdWRlICJld2tfZG93bmxvYWQuaCIKICNpbmNsdWRlICJld2tfZm9ybV9zdWJtaXNzaW9u
X3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVu
dF9zZXJ2aWNlLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9Q
YWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggMTE4ZWRiMS4uYWNlNjNmNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcApAQCAtMzIs
NiArMzIsMTAgQEAKICNpbmNsdWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4
dE1lbnVQcm94eS5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgorI2luY2x1ZGUgImV3a19j
b250ZXh0LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3
a19kb3dubG9hZC5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZF9wcml2YXRlLmgiCiAjaW5jbHVk
ZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI3
Niw0ICsyODAsMTQgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y291bnRTdHJpbmdNYXRjaGVzSW5D
dXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW4KICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93
bmxvYWRQcm94eSogZG93bmxvYWQpCit7CisgICAgRXdrX0Rvd25sb2FkKiBld2tEb3dubG9hZCA9
IGV3a19kb3dubG9hZF9uZXcoZG93bmxvYWQsIG1fdmlld1dpZGdldCk7CisgICAgLy8gRm9yIG5v
dyB3ZSBvbmx5IHN1cHBvcnQgb25lIGRlZmF1bHQgY29udGV4dCwgYnV0IG9uY2Ugd2Ugc3VwcG9y
dAorICAgIC8vIG11bHRpcGxlIGNvbnRleHRzLCB3ZSB3aWxsIG5lZWQgdG8gcmV0cmlldmUgdGhl
IGNvbnRleHQgZnJvbSB0aGUKKyAgICAvLyB2aWV3LgorICAgIGV3a19jb250ZXh0X2Rvd25sb2Fk
X2FkZChld2tfY29udGV4dF9kZWZhdWx0X2dldCgpLCBld2tEb3dubG9hZCk7CisgICAgZXdrX2Rv
d25sb2FkX3VucmVmKGV3a0Rvd25sb2FkKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1w
bC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaApp
bmRleCA0MjdlZjUyLi43ZGZjOTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTc2LDYgKzc2LDggQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIFdlYkNvcmU6OkludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IFdlYkNvcmU6
OkludFBvaW50Jik7CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRSZWN0IHdpbmRvd1RvU2NyZWVu
KGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKTsKIAorICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVEb3du
bG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOworCiAgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRo
S2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGJvb2wpOwogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCiAgICAgdmlydHVhbCB2b2lkIGRvbmVXaXRoVG91Y2hFdmVudChjb25z
dCBOYXRpdmVXZWJUb3VjaEV2ZW50JiwgYm9vbCB3YXNFdmVudEhhbmRsZWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IGMyZjky
NDcuLjkyNDZlMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5jcHAKQEAgLTI3LDkgKzI3LDEyIEBACiAjaW5jbHVkZSAiV0tDb250ZXh0U291
cC5oIgogI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKKyNp
bmNsdWRlICJld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUg
ImV3a19jb250ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9yZXF1ZXN0X21h
bmFnZXJfY2xpZW50X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXJfcHJp
dmF0ZS5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZC5oIgorI2luY2x1ZGUgImV3a19kb3dubG9h
ZF9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIApAQCAtNjIsNiArNjUsNyBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsK
ICNpZiBFTkFCTEUoVklCUkFUSU9OKQogICAgIFJlZlB0cjxWaWJyYXRpb25Qcm92aWRlcj4gdmli
cmF0aW9uUHJvdmlkZXI7CiAjZW5kaWYKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxv
YWQqPiBkb3dubG9hZHM7CiAKICAgICBXS1JldGFpblB0cjxXS1NvdXBSZXF1ZXN0TWFuYWdlclJl
Zj4gcmVxdWVzdE1hbmFnZXI7CiAgICAgVVJMU2NoZW1lSGFuZGxlck1hcCB1cmxTY2hlbWVIYW5k
bGVyczsKQEAgLTgyLDEyICs4NiwxOCBAQCBzdHJ1Y3QgX0V3a19Db250ZXh0IHsKICNlbmRpZgog
CiAgICAgICAgIGV3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnRfYXR0YWNoKHRoaXMp
OworICAgICAgICBld2tfY29udGV4dF9kb3dubG9hZF9jbGllbnRfYXR0YWNoKHRoaXMpOwogICAg
IH0KIAogICAgIH5fRXdrX0NvbnRleHQoKQogICAgIHsKICAgICAgICAgaWYgKGNvb2tpZU1hbmFn
ZXIpCiAgICAgICAgICAgICBld2tfY29va2llX21hbmFnZXJfZnJlZShjb29raWVNYW5hZ2VyKTsK
KworICAgICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWQqPjo6aXRlcmF0b3IgaXQg
PSBkb3dubG9hZHMuYmVnaW4oKTsKKyAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdrX0Rvd25s
b2FkKj46Oml0ZXJhdG9yIGVuZCA9IGRvd25sb2Fkcy5lbmQoKTsKKyAgICAgICAgZm9yICggOyBp
dCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBld2tfZG93bmxvYWRfdW5yZWYoaXQtPnNlY29u
ZCk7CiAgICAgfQogfTsKIApAQCAtMTA4LDYgKzExOCw0NyBAQCBXS0NvbnRleHRSZWYgZXdrX2Nv
bnRleHRfV0tDb250ZXh0X2dldChjb25zdCBFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKIAogLyoq
CiAgKiBAaW50ZXJuYWwKKyAqIFJlZ2lzdGVycyB0aGF0IGEgbmV3IGRvd25sb2FkIGhhcyBiZWVu
IHJlcXVlc3RlZC4KKyAqLwordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9hZGQoRXdrX0NvbnRl
eHQqIGV3a0NvbnRleHQsIEV3a19Eb3dubG9hZCogZXdrRG93bmxvYWQpCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oZXdrRG93bmxvYWQpOworCisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IGV3a19k
b3dubG9hZF9pZF9nZXQoZXdrRG93bmxvYWQpOworICAgIGlmIChld2tDb250ZXh0LT5kb3dubG9h
ZHMuY29udGFpbnMoZG93bmxvYWRJZCkpCisgICAgICAgIHJldHVybjsKKworICAgIGV3a19kb3du
bG9hZF9yZWYoZXdrRG93bmxvYWQpOworICAgIGV3a0NvbnRleHQtPmRvd25sb2Fkcy5hZGQoZG93
bmxvYWRJZCwgZXdrRG93bmxvYWQpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmV0dXJu
cyB0aGUgI0V3a19Eb3dubG9hZCB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkLCBvcgorICog
QGMgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0V3a19Eb3dubG9hZCogZXdrX2NvbnRleHRf
ZG93bmxvYWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiBld2tDb250ZXh0LCB1aW50NjRfdCBkb3du
bG9hZElkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChld2tDb250ZXh0
LCAwKTsKKworICAgIHJldHVybiBld2tDb250ZXh0LT5kb3dubG9hZHMuZ2V0KGRvd25sb2FkSWQp
OworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogUmVtb3ZlcyB0aGUgI0V3a19Eb3dubG9hZCB3
aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkIGZyb20gdGhlIGludGVybmFsCisgKiBIYXNoTWFw
LgorICovCit2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92ZShFd2tfQ29udGV4dCogZXdr
Q29udGV4dCwgdWludDY0X3QgZG93bmxvYWRJZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihld2tDb250ZXh0KTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gZXdrQ29u
dGV4dC0+ZG93bmxvYWRzLnRha2UoZG93bmxvYWRJZCk7CisgICAgaWYgKGRvd25sb2FkKQorICAg
ICAgICBld2tfZG93bmxvYWRfdW5yZWYoZG93bmxvYWQpOworfQorCisvKioKICAqIFJldHJpZXZl
IHRoZSByZXF1ZXN0IG1hbmFnZXIgZm9yIEBhIGV3a0NvbnRleHQuCiAgKgogICogQHBhcmFtIGV3
a0NvbnRleHQgYSAjRXdrX0NvbnRleHQgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RhOTU2NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X2Rvd25sb2FkX2NsaWVudC5jcHAKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKKyNp
bmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
S1N0cmluZy5oIgorI2luY2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRl
LmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19kb3du
bG9hZF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgorI2luY2x1ZGUg
ImV3a191cmxfcmVzcG9uc2VfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUu
aCIKKyNpbmNsdWRlICJld2tfd2ViX2Vycm9yLmgiCisjaW5jbHVkZSAiZXdrX3dlYl9lcnJvcl9w
cml2YXRlLmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitzdGF0aWMgaW5saW5lIEV3a19Db250
ZXh0KiB0b0V3a0NvbnRleHQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RXdrX0NvbnRleHQqPihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7
Cit9CisKK3N0YXRpYyBXS1N0cmluZ1JlZiBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0ZWRG
aWxlbmFtZShXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3dubG9hZCwgV0tTdHJpbmdS
ZWYgZmlsZW5hbWUsIGJvb2wqIGFsbG93T3ZlcndyaXRlLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9n
ZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2Fk
SUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAgIGV3a19kb3dubG9hZF9zdWdnZXN0
ZWRfZmlsZW5hbWVfc2V0KGRvd25sb2FkLCB0b0ltcGwoZmlsZW5hbWUpLT5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKworICAgIC8vIFdlIHNlbmQgdGhlIG5ldyBkb3dubG9hZCBzaWduYWwgb24g
dGhlIEV3a19WaWV3IG9ubHkgb25jZSB3ZSBoYXZlIHJlY2VpdmVkIHRoZSByZXNwb25zZQorICAg
IC8vIGFuZCB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZS4KKyAgICBld2tfdmlld19kb3dubG9hZF9u
ZXcoZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGRvd25sb2FkKSwgZG93bmxvYWQpOworCisgICAgLy8g
RG93bmxvYWRTb3VwIGV4cGVjdHMgdGhlIGRlc3RpbmF0aW9uIHRvIGJlIGEgVVJJLgorICAgIFN0
cmluZyBkZXN0aW5hdGlvbiA9IFN0cmluZygiZmlsZTovLyIpICsgU3RyaW5nOjpmcm9tVVRGOChl
d2tfZG93bmxvYWRfZGVzdGluYXRpb25fZ2V0KGRvd25sb2FkKSk7CisKKyAgICByZXR1cm4gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoZGVzdGluYXRpb24udXRmOCgpLmRhdGEoKSk7Cit9
CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgV0tVUkxSZXNwb25zZVJlZiB3a1Jlc3BvbnNlLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4
dF9kb3dubG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKyAgICBFd2tfVXJsX1Jl
c3BvbnNlKiByZXNwb25zZSA9IGV3a191cmxfcmVzcG9uc2VfbmV3KHRvSW1wbCh3a1Jlc3BvbnNl
KS0+cmVzb3VyY2VSZXNwb25zZSgpKTsKKyAgICBld2tfZG93bmxvYWRfcmVzcG9uc2Vfc2V0KGRv
d25sb2FkLCByZXNwb25zZSk7CisgICAgZXdrX3VybF9yZXNwb25zZV91bnJlZihyZXNwb25zZSk7
Cit9CisKK3N0YXRpYyB2b2lkIGRpZENyZWF0ZURlc3RpbmF0aW9uKFdLQ29udGV4dFJlZiwgV0tE
b3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBwYXRoLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3du
bG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCB0b0ltcGwod2tEb3dubG9hZCktPmRv
d25sb2FkSUQoKSk7CisgICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAgIGV3a19kb3dubG9hZF9z
dGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9TVEFURV9ET1dOTE9BRElORyk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3
a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7Cisg
ICAgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3
a0NvbnRleHQoY2xpZW50SW5mbyksIHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpKTsK
KyAgICBBU1NFUlQoZG93bmxvYWQpOworICAgIGV3a19kb3dubG9hZF9yZWNlaXZlZF9kYXRhKGRv
d25sb2FkLCBsZW5ndGgpOworfQorCitzdGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwg
V0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICpj
bGllbnRJbmZvKQoreworICAgIHVpbnQ2NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9h
ZCktPmRvd25sb2FkSUQoKTsKKyAgICBFd2tfRG93bmxvYWQqIGRvd25sb2FkID0gZXdrX2NvbnRl
eHRfZG93bmxvYWRfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7Cisg
ICAgQVNTRVJUKGRvd25sb2FkKTsKKworICAgIEV3a19XZWJfRXJyb3IqIGV3a0Vycm9yID0gZXdr
X3dlYl9lcnJvcl9uZXcoZXJyb3IpOworICAgIGV3a19kb3dubG9hZF9zdGF0ZV9zZXQoZG93bmxv
YWQsIEVXS19ET1dOTE9BRF9TVEFURV9GQUlMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2Zh
aWxlZChld2tfZG93bmxvYWRfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCwgZXdrRXJyb3Ip
OworICAgIGV3a193ZWJfZXJyb3JfZnJlZShld2tFcnJvcik7CisgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7Cit9CisK
K3N0YXRpYyB2b2lkIGRpZENhbmNlbChXS0NvbnRleHRSZWYsIFdLRG93bmxvYWRSZWYgd2tEb3du
bG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50NjRfdCBkb3dubG9hZElk
ID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2dldCh0b0V3a0NvbnRleHQoY2xpZW50SW5m
byksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAgICBld2tfZG93bmxv
YWRfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTEVEKTsKKyAg
ICBld2tfdmlld19kb3dubG9hZF9jYW5jZWxsZWQoZXdrX2Rvd25sb2FkX3ZpZXdfZ2V0KGRvd25s
b2FkKSwgZG93bmxvYWQpOworICAgIGV3a19jb250ZXh0X2Rvd25sb2FkX3JlbW92ZSh0b0V3a0Nv
bnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworfQorCitzdGF0aWMgdm9pZCBkaWRGaW5p
c2goV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIGNvbnN0IHZvaWQgKmNs
aWVudEluZm8pCit7CisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IHRvSW1wbCh3a0Rvd25sb2Fk
KS0+ZG93bmxvYWRJRCgpOworICAgIEV3a19Eb3dubG9hZCogZG93bmxvYWQgPSBld2tfY29udGV4
dF9kb3dubG9hZF9nZXQodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAg
ICBBU1NFUlQoZG93bmxvYWQpOworCisgICAgZXdrX2Rvd25sb2FkX3N0YXRlX3NldChkb3dubG9h
ZCwgRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9m
aW5pc2hlZChld2tfZG93bmxvYWRfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCk7CisgICAg
ZXdrX2NvbnRleHRfZG93bmxvYWRfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93
bmxvYWRJZCk7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaChF
d2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBXS0NvbnRleHREb3dubG9hZENsaWVudCB3
a0Rvd25sb2FkQ2xpZW50OworICAgIG1lbXNldCgmd2tEb3dubG9hZENsaWVudCwgMCwgc2l6ZW9m
KFdLQ29udGV4dERvd25sb2FkQ2xpZW50KSk7CisKKyAgICB3a0Rvd25sb2FkQ2xpZW50LnZlcnNp
b24gPSBrV0tDb250ZXh0RG93bmxvYWRDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB3a0Rvd25s
b2FkQ2xpZW50LmNsaWVudEluZm8gPSBld2tDb250ZXh0OworICAgIHdrRG93bmxvYWRDbGllbnQu
ZGlkQ2FuY2VsID0gZGlkQ2FuY2VsOworICAgIHdrRG93bmxvYWRDbGllbnQuZGVjaWRlRGVzdGlu
YXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdnZXN0
ZWRGaWxlbmFtZTsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZENyZWF0ZURlc3RpbmF0aW9uID0g
ZGlkQ3JlYXRlRGVzdGluYXRpb247CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZlUmVz
cG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9uc2U7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNl
aXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRhOworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmFpbCA9
IGRpZEZhaWw7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRGaW5pc2ggPSBkaWRGaW5pc2g7CisK
KyAgICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0
KGV3a0NvbnRleHQpLCAmd2tEb3dubG9hZENsaWVudCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50
X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uZjcwMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgKQEAgLTAsMCAr
MSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfY29udGV4dF9kb3dubG9h
ZF9jbGllbnRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9w
cml2YXRlX2gKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250ZXh0OworCit2
b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqKTsKKwor
I2VuZGlmIC8vIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUu
aAppbmRleCBkNzhlMWU5Li43Y2EzYWMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCkBAIC0yMywxMCArMjMsMTUg
QEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogCiB0eXBlZGVmIHN0cnVjdCBfRXdrX0Nv
bnRleHQgRXdrX0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19Eb3du
bG9hZDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVXJsX1NjaGVtZV9SZXF1ZXN0IEV3a19VcmxfU2No
ZW1lX1JlcXVlc3Q7CiAKIFdLQ29udGV4dFJlZiBld2tfY29udGV4dF9XS0NvbnRleHRfZ2V0KGNv
bnN0IEV3a19Db250ZXh0Kik7CiBXS1NvdXBSZXF1ZXN0TWFuYWdlclJlZiBld2tfY29udGV4dF9y
ZXF1ZXN0X21hbmFnZXJfZ2V0KGNvbnN0IEV3a19Db250ZXh0Kik7CiB2b2lkIGV3a19jb250ZXh0
X3VybF9zY2hlbWVfcmVxdWVzdF9yZWNlaXZlZChFd2tfQ29udGV4dCosIEV3a19VcmxfU2NoZW1l
X1JlcXVlc3QqKTsKIAordm9pZCBld2tfY29udGV4dF9kb3dubG9hZF9hZGQoRXdrX0NvbnRleHQq
LCBFd2tfRG93bmxvYWQqKTsKK0V3a19Eb3dubG9hZCogZXdrX2NvbnRleHRfZG93bmxvYWRfZ2V0
KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3QgZG93bmxvYWRJZCk7Cit2b2lkIGV3a19jb250
ZXh0X2Rvd25sb2FkX3JlbW92ZShFd2tfQ29udGV4dCosIHVpbnQ2NF90IGRvd25sb2FkSWQpOwor
CiAjZW5kaWYgLy8gZXdrX2NvbnRleHRfcHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5kYmM0MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmNwcApAQCAtMCwwICsxLDI4MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgImV3a19kb3du
bG9hZC5oIgorCisjaW5jbHVkZSAiRG93bmxvYWRQcm94eS5oIgorI2luY2x1ZGUgIldLQVBJQ2Fz
dC5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5o
IgorI2luY2x1ZGUgImV3a19kb3dubG9hZF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9y
ZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorCit1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfRG93bmxvYWQKKyAqIEBicmllZiAgIENv
bnRhaW5zIHRoZSBkb3dubG9hZCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19Eb3dubG9hZCB7Cisg
ICAgdW5zaWduZWQgaW50IF9fcmVmOyAvKio8IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9i
amVjdCAqLworICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkUHJveHk7CisgICAgRXZhc19PYmpl
Y3QqIHZpZXc7CisgICAgRXdrX0Rvd25sb2FkX1N0YXRlIHN0YXRlOworICAgIEV3a19VcmxfUmVx
dWVzdCogcmVxdWVzdDsKKyAgICBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZTsKKyAgICBkb3Vi
bGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBlbmRUaW1lOworICAgIHVpbnQ2NF90IGRvd25sb2Fk
ZWQ7IC8qKjwgbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZCAqLworICAgIGNvbnN0IGNoYXIqIGRl
c3RpbmF0aW9uOworICAgIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lOworCisgICAgX0V3
a19Eb3dubG9hZChEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CisgICAgICAgIDogX19yZWYoMSkKKyAgICAgICAgLCBkb3dubG9hZFByb3h5KGRvd25sb2FkKQor
ICAgICAgICAsIHZpZXcoZXdrVmlldykKKyAgICAgICAgLCBzdGF0ZShFV0tfRE9XTkxPQURfU1RB
VEVfTk9UX1NUQVJURUQpCisgICAgICAgICwgcmVxdWVzdCgwKQorICAgICAgICAsIHJlc3BvbnNl
KDApCisgICAgICAgICwgc3RhcnRUaW1lKC0xKQorICAgICAgICAsIGVuZFRpbWUoLTEpCisgICAg
ICAgICwgZG93bmxvYWRlZCgwKQorICAgICAgICAsIGRlc3RpbmF0aW9uKDApCisgICAgICAgICwg
c3VnZ2VzdGVkRmlsZW5hbWUoMCkKKyAgICB7IH0KKworICAgIH5fRXdrX0Rvd25sb2FkKCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghX19yZWYpOworICAgICAgICBpZiAocmVxdWVzdCkKKyAgICAg
ICAgICAgIGV3a191cmxfcmVxdWVzdF91bnJlZihyZXF1ZXN0KTsKKyAgICAgICAgaWYgKHJlc3Bv
bnNlKQorICAgICAgICAgICAgZXdrX3VybF9yZXNwb25zZV91bnJlZihyZXNwb25zZSk7CisgICAg
ICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGRlc3RpbmF0aW9uKTsKKyAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIH0KK307CisKK3ZvaWQgZXdrX2Rv
d25sb2FkX3JlZihFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGRvd25sb2FkKTsKKworICAgICsrZG93bmxvYWQtPl9fcmVmOworfQorCit2
b2lkIGV3a19kb3dubG9hZF91bnJlZihFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKKworICAgIGlmICgtLWRvd25sb2Fk
LT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIGRvd25sb2FkOworfQorCisv
KioKKyAqIEBpbnRlcm5hbAorICogUXVlcmllcyB0aGUgaWRlbnRpZmllciBmb3IgdGhpcyBkb3du
bG9hZAorICovCit1aW50NjRfdCBld2tfZG93bmxvYWRfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9h
ZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25s
b2FkLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRv
d25sb2FkUHJveHksIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5kb3dubG9hZFByb3h5LT5k
b3dubG9hZElEKCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXR1cm5zIHRoZSB2aWV3
IHRoaXMgZG93bmxvYWQgaXMgYXR0YWNoZWQgdG8uCisgKiBUaGUgdmlldyBpcyBuZWVkZWQgdG8g
c2VuZCBub3RpZmljYXRpb24gc2lnbmFscy4KKyAqLworRXZhc19PYmplY3QqIGV3a19kb3dubG9h
ZF92aWV3X2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisKKyAgICByZXR1cm4gZG93bmxv
YWQtPnZpZXc7Cit9CisKK0V3a19Eb3dubG9hZF9TdGF0ZSBld2tfZG93bmxvYWRfc3RhdGVfZ2V0
KGNvbnN0IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGRvd25sb2FkLCBFV0tfRE9XTkxPQURfU1RBVEVfVU5LTk9XTik7CisKKyAg
ICByZXR1cm4gZG93bmxvYWQtPnN0YXRlOworfQorCitFd2tfVXJsX1JlcXVlc3QqIGV3a19kb3du
bG9hZF9yZXF1ZXN0X2dldChjb25zdCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQoreworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7CisKKyAgICBpZiAoIWRv
d25sb2FkLT5yZXF1ZXN0KSB7CisgICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgMCk7CisgICAgICAgIFdLUmV0YWluUHRyPFdLVVJM
UmVxdWVzdFJlZj4gd2tVUkxSZXF1ZXN0KEFkb3B0V0ssIHRvQVBJKFdlYlVSTFJlcXVlc3Q6OmNy
ZWF0ZShkb3dubG9hZC0+ZG93bmxvYWRQcm94eS0+cmVxdWVzdCgpKS5sZWFrUmVmKCkpKTsKKyAg
ICAgICAgY29uc3RfY2FzdDxFd2tfRG93bmxvYWQqPihkb3dubG9hZCktPnJlcXVlc3QgPSBld2tf
dXJsX3JlcXVlc3RfbmV3KHdrVVJMUmVxdWVzdC5nZXQoKSk7CisgICAgfQorCisgICAgcmV0dXJu
IGRvd25sb2FkLT5yZXF1ZXN0OworfQorCitFd2tfVXJsX1Jlc3BvbnNlKiBld2tfZG93bmxvYWRf
cmVzcG9uc2VfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIHJldHVybiBkb3du
bG9hZC0+cmVzcG9uc2U7Cit9CisKK2NvbnN0IGNoYXIqIGV3a19kb3dubG9hZF9kZXN0aW5hdGlv
bl9nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5k
ZXN0aW5hdGlvbjsKK30KKworRWluYV9Cb29sIGV3a19kb3dubG9hZF9kZXN0aW5hdGlvbl9zZXQo
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgY29uc3QgY2hhciogZGVzdGluYXRpb24pCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRlc3RpbmF0aW9uLCBmYWxzZSk7CisKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmRvd25sb2FkLT5kZXN0aW5hdGlvbiwgZGVzdGluYXRp
b24pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2NvbnN0IGNoYXIgKmV3a19kb3dubG9hZF9z
dWdnZXN0ZWRfZmlsZW5hbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIHJl
dHVybiBkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWU7Cit9CisKK0VpbmFfQm9vbCBld2tfZG93
bmxvYWRfY2FuY2VsKEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCBmYWxzZSk7CisKKyAgICBp
ZiAoZG93bmxvYWQtPnN0YXRlICE9IEVXS19ET1dOTE9BRF9TVEFURV9ET1dOTE9BRElORykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZG93bmxvYWQtPnN0YXRlID0gRVdLX0RPV05MT0FE
X1NUQVRFX0NBTkNFTExJTkc7CisgICAgZG93bmxvYWQtPmRvd25sb2FkUHJveHktPmNhbmNlbCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUgZXdrX2Rvd25sb2FkX2VzdGltYXRlZF9w
cm9ncmVzc19nZXQoY29uc3QgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgaWYgKCFkb3dubG9h
ZC0+cmVzcG9uc2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgdW5zaWduZWQgbG9u
ZyBjb250ZW50TGVuZ3RoID0gZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9nZXQoZG93
bmxvYWQtPnJlc3BvbnNlKTsKKyAgICBpZiAoIWNvbnRlbnRMZW5ndGgpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4oZG93bmxvYWQtPmRvd25sb2Fk
ZWQpIC8gY29udGVudExlbmd0aDsKK30KKworZG91YmxlIGV3a19kb3dubG9hZF9lbGFwc2VkX3Rp
bWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIC8vIERvd25sb2FkIGhhcyBu
b3Qgc3RhcnRlZCB5ZXQuCisgICAgaWYgKGRvd25sb2FkLT5zdGFydFRpbWUgPCAwKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIC8vIERvd25sb2FkIGhhZCBlbmRlZCwgcmV0dXJuIHRoZSB0aW1l
IGVsYXBzZWQgYmV0d2VlbiB0aGUKKyAgICAvLyBkb3dubG9hZCBzdGFydCBhbmQgdGhlIGVuZCBl
dmVudC4KKyAgICBpZiAoZG93bmxvYWQtPmVuZFRpbWUgPj0gMCkKKyAgICAgICAgcmV0dXJuIGRv
d25sb2FkLT5lbmRUaW1lIC0gZG93bmxvYWQtPnN0YXJ0VGltZTsKKworICAgIC8vIERvd25sb2Fk
IGlzIHN0aWxsIGdvaW5nLgorICAgIHJldHVybiBlY29yZV90aW1lX2dldCgpIC0gZG93bmxvYWQt
PnN0YXJ0VGltZTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNldHMgdGhlIFVSTCBAYSBy
ZXNwb25zZSBmb3IgdGhpcyBAYSBkb3dubG9hZC4KKyAqLwordm9pZCBld2tfZG93bmxvYWRfcmVz
cG9uc2Vfc2V0KEV3a19Eb3dubG9hZCogZG93bmxvYWQsIEV3a19VcmxfUmVzcG9uc2UqIHJlc3Bv
bnNlKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihyZXNwb25zZSk7CisKKyAgICBld2tfdXJsX3Jlc3Bv
bnNlX3JlZihyZXNwb25zZSk7CisgICAgZG93bmxvYWQtPnJlc3BvbnNlID0gcmVzcG9uc2U7Cit9
CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXRzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZv
ciB0aGlzIEBhIGRvd25sb2FkLgorICovCit2b2lkIGV3a19kb3dubG9hZF9zdWdnZXN0ZWRfZmls
ZW5hbWVfc2V0KEV3a19Eb3dubG9hZCogZG93bmxvYWQsIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZp
bGVuYW1lKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKKwor
ICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmZG93bmxvYWQtPnN1Z2dlc3RlZEZpbGVuYW1l
LCBzdWdnZXN0ZWRGaWxlbmFtZSk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXBvcnQg
YSBnaXZlbiBhbW91bnQgb2YgZGF0YSB3YXMgcmVjZWl2ZWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25s
b2FkX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkKiBkb3dubG9hZCwgdWludDY0X3QgbGVuZ3Ro
KQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKKworICAgIGRv
d25sb2FkLT5kb3dubG9hZGVkICs9IGxlbmd0aDsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAq
IFNldHMgdGhlIHN0YXRlIG9mIHRoZSBkb3dubG9hZC4KKyAqLwordm9pZCBld2tfZG93bmxvYWRf
c3RhdGVfc2V0KEV3a19Eb3dubG9hZCogZG93bmxvYWQsIEV3a19Eb3dubG9hZF9TdGF0ZSBzdGF0
ZSkKK3sKKyAgICBkb3dubG9hZC0+c3RhdGUgPSBzdGF0ZTsKKworICAgIC8vIFVwZGF0ZSBzdGFy
dCB0aW1lIGlmIHRoZSBkb3dubG9hZCBoYXMgc3RhcnRlZAorICAgIGlmIChzdGF0ZSA9PSBFV0tf
RE9XTkxPQURfU1RBVEVfRE9XTkxPQURJTkcpCisgICAgICAgIGRvd25sb2FkLT5zdGFydFRpbWUg
PSBlY29yZV90aW1lX2dldCgpOworCisgICAgLy8gVXBkYXRlIGVuZCB0aW1lIGlmIHRoZSBkb3du
bG9hZCBoYXMgZmluaXNoZWQgKHN1Y2Nlc3NmdWxseSBvciBub3QpCisgICAgaWYgKHN0YXRlID09
IEVXS19ET1dOTE9BRF9TVEFURV9GQUlMRUQKKyAgICAgICAgfHwgc3RhdGUgPT0gRVdLX0RPV05M
T0FEX1NUQVRFX0NBTkNFTExFRAorICAgICAgICB8fCBzdGF0ZSA9PSBFV0tfRE9XTkxPQURfU1RB
VEVfRklOSVNIRUQpCisgICAgICAgIGRvd25sb2FkLT5lbmRUaW1lID0gZWNvcmVfdGltZV9nZXQo
KTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIENvbnN0cnVjdHMgYSBFd2tfRG93bmxvYWQg
ZnJvbSBhIERvd25sb2FkUHJveHkuCisgKi8KK0V3a19Eb3dubG9hZCogZXdrX2Rvd25sb2FkX25l
dyhEb3dubG9hZFByb3h5KiBkb3dubG9hZCwgRXZhc19PYmplY3QqIGV3a1ZpZXcpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXdrVmlldywgMCk7CisKKyAgICByZXR1cm4gbmV3IF9F
d2tfRG93bmxvYWQoZG93bmxvYWQsIGV3a1ZpZXcpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45OTExY2NjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2Rvd25sb2FkLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2Rvd25sb2FkLmgKKyAqIEBicmllZiAg
IERlc2NyaWJlcyB0aGUgRG93bmxvYWQgQVBJLgorICoKKyAqIEBub3RlIEV3a19Eb3dubG9hZCBl
bmNhcHN1bGF0ZXMgYSBXZWJLaXQgZG93bmxvYWQgaW4gb3JkZXIgdG8gcHJvdmlkZQorICogaW5m
b3JtYXRpb24gYWJvdXQgaXQgYW5kIGludGVyYWN0IHdpdGggaXQgKGUuZy4gc2V0IHRoZSBkZXN0
aW5hdGlvbgorICogcGF0aCwgY2FuY2VsIHRoZSBkb3dubG9hZCwgLi4uKS4KKyAqLworCisjaWZu
ZGVmIGV3a19kb3dubG9hZF9oCisjZGVmaW5lIGV3a19kb3dubG9hZF9oCisKKyNpbmNsdWRlICJl
d2tfdXJsX3JlcXVlc3QuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jlc3BvbnNlLmgiCisjaW5jbHVk
ZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisK
Ky8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0Rvd25sb2FkICovCit0eXBlZGVmIHN0
cnVjdCBfRXdrX0Rvd25sb2FkIEV3a19Eb3dubG9hZDsKKworLy8vIERlZmluZXMgdGhlIHBvc3Np
YmxlIHN0YXRlcyBvZiBhIGRvd25sb2FkLgorZW51bSBfRXdrX0Rvd25sb2FkX1N0YXRlIHsKKyAg
ICAvLy8gVGhlIGRvd25sb2FkIHN0YXRlIGlzIHVua25vd24KKyAgICBFV0tfRE9XTkxPQURfU1RB
VEVfVU5LTk9XTiA9IC0xLAorICAgIC8vLyBUaGUgZG93bmxvYWQgaGFzIG5vdCBzdGFydGVkIHll
dAorICAgIEVXS19ET1dOTE9BRF9TVEFURV9OT1RfU1RBUlRFRCwKKyAgICAvLy8gVGhlIGRvd25s
b2FkIGhhcyBzdGFydGVkCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0RPV05MT0FESU5HLAorICAg
IC8vLyBUaGUgZG93bmxvYWQgc3RvcHBlZCBiZWNhdXNlIG9mIGEgZmFpbHVyZQorICAgIEVXS19E
T1dOTE9BRF9TVEFURV9GQUlMRUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBpcyBiZWluZyBjYW5j
ZWxsZWQKKyAgICBFV0tfRE9XTkxPQURfU1RBVEVfQ0FOQ0VMTElORywKKyAgICAvLy8gVGhlIGRv
d25sb2FkIHN0b3BwZWQgYmVjYXVzZSBpdCB3YXMgY2FuY2VsbGVkCisgICAgRVdLX0RPV05MT0FE
X1NUQVRFX0NBTkNFTExFRCwKKyAgICAvLy8gVGhlIGRvd25sb2FkIGNvbXBsZXRlZCBzdWNjZXNz
ZnVsbHkuCisgICAgRVdLX0RPV05MT0FEX1NUQVRFX0ZJTklTSEVECit9OworLy8vIENyZWF0ZXMg
YSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfRG93bmxvYWRfU3RhdGUuCit0eXBlZGVmIGVudW0gX0V3
a19Eb3dubG9hZF9TdGF0ZSBFd2tfRG93bmxvYWRfU3RhdGU7CisKKy8qKgorICogSW5jcmVhc2Vz
IHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KKyAqCisgKiBAcGFyYW0g
ZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVjdCB0byBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNv
dW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93bmxvYWRfcmVmKEV3a19Eb3dubG9hZCAqZG93bmxv
YWQpOworCisvKioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZl
biBvYmplY3QsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0aGUgcmVmZXJlbmNl
IGNvdW50IHJlYWNoZXMgMCwgdGhlIGRvd25sb2FkIGlzIGZyZWVkLgorICoKKyAqIEBwYXJhbSBk
b3dubG9hZCB0aGUgZG93bmxvYWQgb2JqZWN0IHRvIGRlY3JlYXNlIHRoZSByZWZlcmVuY2UgY291
bnQKKyAqLworRUFQSSB2b2lkIGV3a19kb3dubG9hZF91bnJlZihFd2tfRG93bmxvYWQgKmRvd25s
b2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgc3RhdGUgZm9yIHRoaXMgZG93bmxvYWQuCisgKgor
ICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0
dXJuIHRoZSBkb3dubG9hZCBzdGF0ZS4KKyAqLworRUFQSSBFd2tfRG93bmxvYWRfU3RhdGUgZXdr
X2Rvd25sb2FkX3N0YXRlX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoq
CisgKiBRdWVyeSB0aGUgVVJMIHJlcXVlc3QgZm9yIHRoaXMgZG93bmxvYWQuCisgKgorICogQHBh
cmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRo
ZSAjRXdrX1VybF9SZXF1ZXN0IGZvciB0aGlzIGRvd25sb2FkLgorICovCitFQVBJIEV3a19Vcmxf
UmVxdWVzdCAqZXdrX2Rvd25sb2FkX3JlcXVlc3RfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCAqZG93
bmxvYWQpOworCisvKioKKyAqIFF1ZXJ5IHRoZSBVUkwgcmVzcG9uc2UgZm9yIHRoaXMgZG93bmxv
YWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIGEgI0V3a19Eb3dubG9hZCB0byBxdWVyeS4KKyAq
CisgKiBAcmV0dXJuIHRoZSAjRXdrX1VybF9SZXNwb25zZSBmb3IgdGhpcyBkb3dubG9hZCBvciBA
YyBOVUxMIGlmIGl0IHdhcyBub3QgcmVjZWl2ZWQgeWV0LgorICovCitFQVBJIEV3a19VcmxfUmVz
cG9uc2UgKmV3a19kb3dubG9hZF9yZXNwb25zZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkICpkb3du
bG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSSSB0byB3aGljaCB0aGUgZG93bmxvYWRlZCBm
aWxlIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25s
b2FkIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIsIHRo
YXQgbWF5IGJlIEBjIE5VTEwuIFRoaXMgcG9pbnRlciBpcworICogICAgICAgICBndWFyYW50ZWVk
IHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5ldmVyIHBvc3NpYmxlCisgKiAgICAgICAg
IHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFuZCB1c2UKKyAqICAgICAgICAgZWluYV9z
dHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFfc3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAq
ICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX2Rl
c3RpbmF0aW9uX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBT
ZXRzIHRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIFNldHMg
dGhlIHBhdGggdG8gd2hpY2ggdGhlIGRvd25sb2FkZWQgZmlsZSB3aWxsIGJlIHdyaXR0ZW4uCisg
KgorICogVGhpcyBtZXRob2QgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0aGUgZG93bmxvYWQg
dHJhbnNmZXIKKyAqIHN0YXJ0cywgYnkgY29ubmVjdGluZyB0byB0aGUgImRvd25sb2FkLG5ldyIg
c2lnbmFsIG9uIHRoZQorICogRXdrX1ZpZXcgYW5kIHNldHRpbmcgdGhlIGRlc3RpbmF0aW9uIGlu
IHRoZSBjYWxsYmFjay4gVG8gc2V0CisgKiB0aGUgZGVzdGluYXRpb24gdXNpbmcgdGhlIGZpbGVu
YW1lIHN1Z2dlc3RlZCBieSB0aGUgc2VydmVyCisgKiB1c2UgZXdrX2Rvd25sb2FkX3N1Z2dlc3Rl
ZF9maWxlbmFtZV9nZXQoKS4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgI0V3a19Eb3dubG9hZCB0
byB1cGRhdGUuCisgKiBAcGFyYW0gZGVzdGluYXRpb24gdGhlIGRlc3RpbmF0aW9uIHBhdGguCisg
KgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc3VjY2Vzc2Z1bCwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UuCisgKgorICogQHNlZSBld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dl
dAorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KEV3a19E
b3dubG9hZCAqZG93bmxvYWQsIGNvbnN0IGNoYXIgKmRlc3RpbmF0aW9uKTsKKworLyoqCisgKiBR
dWVyaWVzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAq
IEl0IGNhbiBiZSB1c2VmdWwgdG8gdXNlIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0
aW9uIHRvIGNvbnN0cnVjdAorICogdGhlIGRlc3RpbmF0aW9uIHBhdGggdG8gcGFzcyB0byBld2tf
ZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KCkuCisgKgorICogQHBhcmFtIGRvd25sb2FkICNFd2tf
RG93bmxvYWQgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBUaGUgc3VnZ2VzdGVkIGZpbGUgbmFt
ZSBmb3IgdGhpcyBkb3dubG9hZC4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJhbnRl
ZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAgICAg
ICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBvcgor
ICogICAgICAgICBzdHJkdXAoKS4KKyAqCisgKiBAc2VlIGV3a19kb3dubG9hZF9kZXN0aW5hdGlv
bl9zZXQKKyAqLworRUFQSSBjb25zdCBjaGFyICpld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVu
YW1lX2dldChjb25zdCBFd2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBDYW5jZWxz
IHRoZSBkb3dubG9hZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBXaGVuIHRoZSBvbmdvaW5nIGRv
d25sb2FkIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBjYW5jZWxsZWQgYSAiZG93bmxvYWQsY2Fu
Y2VsbGVkIgorICogc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCBvbiB0aGUgdmlldy4KKyAqCisgKiBA
cGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkIHRvIGNhbmNlbC4KKyAqCisgKiBAcmV0dXJu
IEBjIEVJTkFfVFJVRSBpZiB0aGUgY2FuY2VsbGF0aW9uIHJlcXVlc3Qgd2FzIHRha2VuIGludG8g
YWNjb3VudCwgb3IKKyAqICAgICAgICAgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UuCisgKi8KK0VB
UEkgRWluYV9Cb29sIGV3a19kb3dubG9hZF9jYW5jZWwoRXdrX0Rvd25sb2FkICpkb3dubG9hZCk7
CisKKy8qKgorICogUXVlcnkgdGhlIGVzdGltYXRlZCBwcm9ncmVzcyBmb3IgdGhpcyBkb3dubG9h
ZC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkIHRvIHF1ZXJ5LgorICoK
KyAqIEByZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG9mIHRoZSBwZXJjZW50IGNvbXBsZXRlIGZv
ciBhIGRvd25sb2FkCisgKiAgICAgICAgIGFzIGEgcmFuZ2UgZnJvbSAwLjAgdG8gMS4wLgorICov
CitFQVBJIGRvdWJsZSBld2tfZG93bmxvYWRfZXN0aW1hdGVkX3Byb2dyZXNzX2dldChjb25zdCBF
d2tfRG93bmxvYWQgKmRvd25sb2FkKTsKKworLyoqCisgKiBHZXRzIHRoZSBlbGFwc2VkIHRpbWUg
aW4gc2Vjb25kcywgaW5jbHVkaW5nIGFueSBmcmFjdGlvbmFsIHBhcnQuCisgKgorICogSWYgdGhl
IGRvd25sb2FkIGZpbmlzaGVkLCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNlbGxlZCB0aGlzIGlz
CisgKiB0aGUgdGltZSBiZXR3ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50LgorICoKKyAqIEBw
YXJhbSBkb3dubG9hZCBhICNFd2tfRG93bmxvYWQKKyAqCisgKiBAcmV0dXJuIHNlY29uZHMgc2lu
Y2UgdGhlIGRvd25sb2FkIHdhcyBzdGFydGVkIG9yIDAuMCBpbiBjYXNlIG9mIGZhaWx1cmUuCisg
Ki8KK0VBUEkgZG91YmxlIGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0KGNvbnN0IEV3a19E
b3dubG9hZCAqZG93bmxvYWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisj
ZW5kaWYgLy8gZXdrX2Rvd25sb2FkX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmVjN2ZmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfcHJpdmF0ZS5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2Rvd25sb2FkX3ByaXZhdGVfaAor
I2RlZmluZSBld2tfZG93bmxvYWRfcHJpdmF0ZV9oCisKKyNpbmNsdWRlICJXS0Jhc2UuaCIKKyNp
bmNsdWRlICJld2tfZG93bmxvYWQuaCIKKyNpbmNsdWRlIDxFdmFzLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9Fd2tfVXJsX1Jlc3BvbnNlIEV3a19VcmxfUmVzcG9uc2U7Cit0eXBlZGVmIHN0cnVjdCBf
RXdrX1dlYl9FcnJvciBFd2tfV2ViX0Vycm9yOworCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNz
IERvd25sb2FkUHJveHk7Cit9CisKK0V3a19Eb3dubG9hZCogZXdrX2Rvd25sb2FkX25ldyhXZWJL
aXQ6OkRvd25sb2FkUHJveHkqLCBFdmFzX09iamVjdCogZXdrVmlldyk7Cit1aW50NjRfdCBld2tf
ZG93bmxvYWRfaWRfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZCopOworRXZhc19PYmplY3QqIGV3a19k
b3dubG9hZF92aWV3X2dldChjb25zdCBFd2tfRG93bmxvYWQqKTsKKwordm9pZCBld2tfZG93bmxv
YWRfc3RhdGVfc2V0KEV3a19Eb3dubG9hZCosIEV3a19Eb3dubG9hZF9TdGF0ZSk7Cit2b2lkIGV3
a19kb3dubG9hZF9jYW5jZWxsZWQoRXdrX0Rvd25sb2FkKik7Cit2b2lkIGV3a19kb3dubG9hZF9m
YWlsZWQoRXdrX0Rvd25sb2FkKik7Cit2b2lkIGV3a19kb3dubG9hZF9maW5pc2hlZChFd2tfRG93
bmxvYWQqKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX3N0YXJ0ZWQoRXdrX0Rvd25sb2FkKik7CisKK3Zv
aWQgZXdrX2Rvd25sb2FkX3JlY2VpdmVkX2RhdGEoRXdrX0Rvd25sb2FkKiwgdWludDY0X3QgbGVu
Z3RoKTsKK3ZvaWQgZXdrX2Rvd25sb2FkX3Jlc3BvbnNlX3NldChFd2tfRG93bmxvYWQqLCBFd2tf
VXJsX1Jlc3BvbnNlKik7Cit2b2lkIGV3a19kb3dubG9hZF9zdWdnZXN0ZWRfZmlsZW5hbWVfc2V0
KEV3a19Eb3dubG9hZCosIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lKTsKKworI2VuZGlm
IC8vIGV3a19kb3dubG9hZF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5jcHAKaW5kZXggMTM3NzUzZC4uOGY5ZjUz
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9y
ZXNwb25zZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Vy
bF9yZXNwb25zZS5jcHAKQEAgLTk4LDYgKzk4LDEzIEBAIGNvbnN0IGNoYXIqIGV3a191cmxfcmVz
cG9uc2VfbWltZV90eXBlX2dldChjb25zdCBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSkKICAg
ICByZXR1cm4gcmVzcG9uc2UtPm1pbWVUeXBlOwogfQogCit1bnNpZ25lZCBsb25nIGV3a191cmxf
cmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2UqIHJlc3Bv
bnNlKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXNwb25zZSwgMCk7
CisKKyAgICByZXR1cm4gcmVzcG9uc2UtPmNvcmVSZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5n
dGgoKTsKK30KKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIENvbnN0cnVjdHMgYSBFd2tfVXJsX1Jl
c3BvbnNlIGZyb20gYSBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCmluZGV4IGMwMjYy
MmQuLjM1NjMxZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a191cmxfcmVzcG9uc2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdXJsX3Jlc3BvbnNlLmgKQEAgLTk0LDYgKzk0LDE3IEBAIEVBUEkgaW50IGV3a191cmxf
cmVzcG9uc2Vfc3RhdHVzX2NvZGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2UgKnJlc3BvbnNl
KTsKICAqLwogRUFQSSBjb25zdCBjaGFyICpld2tfdXJsX3Jlc3BvbnNlX21pbWVfdHlwZV9nZXQo
Y29uc3QgRXdrX1VybF9SZXNwb25zZSAqcmVzcG9uc2UpOwogCisvKioKKyAqIEdldCB0aGUgZXhw
ZWN0ZWQgY29udGVudCBsZW5ndGggb2YgdGhlICNFd2tfVXJsX1Jlc3BvbnNlLgorICoKKyAqIEl0
IGNhbiBiZSAwIGlmIHRoZSBzZXJ2ZXIgcHJvdmlkZWQgYW4gaW5jb3JyZWN0IG9yIG1pc3Npbmcg
Q29udGVudC1MZW5ndGguCisgKgorICogQHBhcmFtIHJlc3BvbnNlIGEgI0V3a19VcmxfUmVzcG9u
c2UuCisgKgorICogQHJldHVybiB0aGUgZXhwZWN0ZWQgY29udGVudCBsZW5ndGggb2YgQGEgcmVz
cG9uc2Ugb3IgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0VBUEkgdW5zaWduZWQgbG9uZyBl
d2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChjb25zdCBFd2tfVXJsX1Jlc3BvbnNl
ICpyZXNwb25zZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKaW5kZXggYjY3MWQ3Ni4uMzg3
ZTIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNw
cApAQCAtODg2LDYgKzg4Niw1MSBAQCB2b2lkIGV3a192aWV3X2Rpc3BsYXkoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0
YV91cGRhdGVfYWRkKHNtYXJ0RGF0YS0+aW1hZ2UsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIH0KIAorLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgZG93
bmxvYWQgZm9yIHRoYXQgdmlldyB3YXMgY2FuY2VsbGVkLgorICoKKyAqIEVtaXRzIHNpZ25hbDog
ImRvd25sb2FkLGNhbmNlbGxlZCIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkLgorICov
Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZChFdmFzX09iamVjdCogZXdrVmlldywg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKK3sKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJkb3dubG9hZCxjYW5jZWxsZWQiLCBkb3dubG9hZCk7Cit9CisKKy8q
KgorICogQGludGVybmFsCisgKiBBIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQgZm9y
IHRoYXQgdmlldy4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJkb3dubG9hZCxuZXciIHdpdGggcG9p
bnRlciB0byBhIEV3a19Eb3dubG9hZC4KKyAqLwordm9pZCBld2tfdmlld19kb3dubG9hZF9uZXco
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit7CisgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLG5ldyIsIGRv
d25sb2FkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgZG93bmxvYWQgZm9yIHRoYXQg
dmlldyBoYXMgZmFpbGVkLgorICoKKyAqIEVtaXRzIHNpZ25hbDogImRvd25sb2FkLGZhaWxlZCIg
d2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkX0Vycm9yLgorICovCit2b2lkIGV3a192aWV3
X2Rvd25sb2FkX2ZhaWxlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkKiBkb3du
bG9hZCwgRXdrX1dlYl9FcnJvciogZXJyb3IpCit7CisgICAgRXdrX0Rvd25sb2FkX0Vycm9yIGRv
d25sb2FkRXJyb3IgPSB7IGRvd25sb2FkLCBlcnJvciB9OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLGZhaWxlZCIsICZkb3dubG9hZEVycm9y
KTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgZG93bmxvYWQgZm9yIHRoYXQgdmlldyBm
aW5pc2hlZCBzdWNjZXNzZnVsbHkuCisgKgorICogRW1pdHMgc2lnbmFsOiAiZG93bmxvYWQsZmlu
aXNoZWQiIHdpdGggcG9pbnRlciB0byBhIEV3a19Eb3dubG9hZC4KKyAqLwordm9pZCBld2tfdmll
d19kb3dubG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkKiBk
b3dubG9hZCkKK3sKKyAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAiZG93bmxvYWQsZmluaXNoZWQiLCBkb3dubG9hZCk7Cit9CisKIEVpbmFfQm9vbCBld2tfdmll
d19iYWNrKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAppbmRleCBjNDEwNGJmLi5kMDI3YzE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKQEAgLTI2LDYgKzI2LDExIEBA
CiAgKgogICogVGhlIGZvbGxvd2luZyBzaWduYWxzIChzZWUgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfYWRkKCkpIGFyZSBlbWl0dGVkOgogICoKKyAqIC0gImRvd25sb2FkLGNhbmNlbGxlZCIs
IEV3a19Eb3dubG9hZCo6IHJlcG9ydHMgdGhhdCBhIGRvd25sb2FkIHdhcyBlZmZlY3RpdmVseSBj
YW5jZWxsZWQuCisgKiAtICJkb3dubG9hZCxmYWlsZWQiLCBFd2tfRG93bmxvYWRfRXJyb3IqOiBy
ZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IuCisgKiAt
ICJkb3dubG9hZCxmaW5pc2hlZCIsIEV3a19Eb3dubG9hZCo6IHJlcG9ydHMgdGhhdCBhIGRvd25s
b2FkIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgKiAtICJkb3dubG9hZCxuZXciLCBFd2tfRG93
bmxvYWQqOiByZXBvcnRzIHRoYXQgYSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLiBU
aGUgY2xpZW50IHNob3VsZCBzZXQgdGhlCisgKiAgIGRlc3RpbmF0aW9uIHBhdGggYnkgY2FsbGlu
ZyBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0KCkgb3IgdGhlIGRvd25sb2FkIHdpbGwgZmFp
bC4KICAqIC0gImZvcm0sc3VibWlzc2lvbixyZXF1ZXN0IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9S
ZXF1ZXN0KjogUmVwb3J0cyB0aGF0IGEgZm9ybSByZXF1ZXN0IGlzIGFib3V0IHRvIGJlIHN1Ym1p
dHRlZC4KICAqICAgVGhlIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBwYXNzZWQgY29udGFp
bnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRleHQgZmllbGRzIG9mIHRoZSBmb3JtLiBUaGlzCiAg
KiAgIGlzIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGxvZ2luIGluZm9ybWF0aW9uIHRoYXQgY2Fu
IGJlIHVzZWQgbGF0ZXIgdG8gcHJlLWZpbGwgdGhlIGZvcm0uCkBAIC02Miw2ICs2Nyw3IEBACiAj
ZGVmaW5lIGV3a192aWV3X2gKIAogI2luY2x1ZGUgImV3a19jb250ZXh0LmgiCisjaW5jbHVkZSAi
ZXdrX2Rvd25sb2FkLmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a191
cmxfcmVxdWVzdC5oIgogI2luY2x1ZGUgImV3a191cmxfcmVzcG9uc2UuaCIKQEAgLTE5OCw2ICsy
MDQsMTcgQEAgc3RydWN0IF9Fd2tfV2ViX1Jlc291cmNlX0xvYWRfRXJyb3IgewogICAgIEV3a19X
ZWJfRXJyb3IgKmVycm9yOyAvKio8IGxvYWQgZXJyb3IgKi8KIH07CiAKKy8vLyBDcmVhdGVzIGEg
dHlwZSBuYW1lIGZvciBfRXdrX0Rvd25sb2FkX0Vycm9yLgordHlwZWRlZiBzdHJ1Y3QgX0V3a19E
b3dubG9hZF9FcnJvciBFd2tfRG93bmxvYWRfRXJyb3I7CisKKy8qKgorICogQGJyaWVmIFN0cnVj
dHVyZSBjb250YWluaW5nIGRldGFpbHMgYWJvdXQgYSBkb3dubG9hZCBmYWlsdXJlLgorICovCitz
dHJ1Y3QgX0V3a19Eb3dubG9hZF9FcnJvciB7CisgICAgRXdrX0Rvd25sb2FkICpkb3dubG9hZDsg
LyoqPCBkb3dubG9hZCB0aGF0IGZhaWxlZCAqLworICAgIEV3a19XZWJfRXJyb3IgKmVycm9yOyAv
Kio8IGRvd25sb2FkIGVycm9yICovCit9OworCiAvKioKICAqIENyZWF0ZXMgYSBuZXcgRUZMIFdl
YktpdCB2aWV3IG9iamVjdC4KICAqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXggNDMxMjdjZi4uNTJkYmU4NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aApAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKIH0KIAor
dHlwZWRlZiBzdHJ1Y3QgX0V3a19Eb3dubG9hZCBFd2tfRG93bmxvYWQ7CiB0eXBlZGVmIHN0cnVj
dCBfRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0IEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVz
dDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVXJsX1JlcXVlc3QgRXdrX1VybF9SZXF1ZXN0OwogdHlw
ZWRlZiBzdHJ1Y3QgX0V3a19VcmxfUmVzcG9uc2UgRXdrX1VybF9SZXNwb25zZTsKQEAgLTQ2LDYg
KzQ3LDEwIEBAIHR5cGVkZWYgc3RydWN0IF9Fd2tfSW50ZW50X1NlcnZpY2UgRXdrX0ludGVudF9T
ZXJ2aWNlOwogCiB2b2lkIGV3a192aWV3X2N1cnNvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IFdlYkNvcmU6OkN1cnNvciYgY3Vyc29yKTsKIHZvaWQgZXdrX3ZpZXdfZGlzcGxheShF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCk7Cit2b2lk
IGV3a192aWV3X2Rvd25sb2FkX2NhbmNlbGxlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rv
d25sb2FkKik7Cit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2ZhaWxlZChFdmFzX09iamVjdCogZXdr
VmlldywgRXdrX0Rvd25sb2FkKiwgRXdrX1dlYl9FcnJvciopOwordm9pZCBld2tfdmlld19kb3du
bG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkKik7Cit2b2lk
IGV3a192aWV3X2Rvd25sb2FkX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2Fk
Kik7CiB2b2lkIGV3a192aWV3X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyhFdmFzX09iamVj
dCogZXdrVmlldywgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0Kik7CiB2b2lkIGV3a192aWV3
X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiBpbWFnZURhdGEsIGNv
bnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpOwogdm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfV2ViX0Vycm9yKiBlcnJvcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMvdGVz
dC5wZGYgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9yZXNvdXJjZXMv
dGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyNGMxOWQ5OGI2MjFmZWFkZjNlNGQ2MWY3YmZmNDcxMDdh
Mzc0ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzQyMQp6Y21haTNieSQ/IXdeb3JGNUpYVD84
NUtsd2RJJUFPZnVYeHdWclhWeTJtdUtKTmtLIztnYHE9MlFqbkJKcShNPzcKekM4USgtcjFae3Mm
K28pTl9kZlN+bzt+d0BZcD95VCp6ZXdkdGlgUF5nQkZBYyEyI1RAKnskYGhSanB8TkM9ZCs5CnpT
PWEtXyNYLXMjdGN7eTM1SnI/fWczeHgzWld1Zlc/UCVfWGstPUV2dFN9TjEwOVE5VyNAcT91blpn
fVcyUko4bgp6QCUtKiMjOGRMSUJ3dFFpTWhASGk5Xm1eeFlsKDYpKERzMnpPaHsmV2E/bVVhMmxt
dVlRan1qWVhuREw1JmByMVkKekYzSmclb1RfLT9ZVm80V3t2QTQ9MEdTYFYxcD5OdGMoe2dZbUQt
MWlPI0VSNmVnUHtpSVhxfldMMmxOISE3MntHCnpWNkZiSk9uZjZiM24yTU9kVnhTN3F9a3N4I0o/
Z3p7dlZQMjVoKDtIMCl2YkVKKi04MlV2Pjg3Qj4oQnBhUlpiPAp6PmN7dEUlPUw8YiZ0OWl+Mkk7
dGtlI0deLUVDQFZII2RIckVNKnFvMnxNfHdgdE51I3RDQztZflg1UHpPJSspUzkKelh6S25YSklK
R0NwfFUxPGlmZ1BVPjZVNjw/e3xDQGB3Wk9tXnlifDkoKF50USNANCZ2NmxiSHdIY1hhKCoyUUBv
Cno5UXZnI0E0blc7JUpJMj89X2JJRzAta2NZNzhPMkVQMDd3a1FVSllmaEhCMCRjNTlzKjU8YkpT
SkhHeHlKOXdHLQp6KlYhaCZeVXJlRlg4ZiVqNTllUC1wSWViPUtYcWw/OT1Ed15lRmFEZDIxQWY0
PkZFeEtAPmgwZHIySjBYdnt6bHAKemRYQyVRemYoOW9oMjFRfXReNntIN1ZqWTIpbjBlNEQwIylY
ZGAxOUg9Xn09X3tOU1RLMG97MTZ2cmdocHRhNFAjCnooZDk+KXZYVT51YHUpVldYb3F0MFpCYFBg
YEA0MGNIQzRQcTdQVkllRX1aeSgqM1FjfjZJYy0xYmYpNk5IWC1WaQp6WnRIdmZQSUUpJjsjS340
JE0xUz4xcFRWbXk2ezZOQzhYTE1vSkRueT5lZGBrYWRYLTxBVDlqYF9Celg+Y2ZwN0sKelJMNTd9
MXxDKEtGIWVSTHJrT0piK1JRPnZSdE9yPlZEZX5sQSVBKll0bDx3RSQyaXM+JnVuTER3JUV8ODdj
cUFACnpuSWdLe1ROOTw5ZSYjK1U3dz1DQSt+fDR1VVIofGxgNFpBbj11RHRCfEgzcnQ8eX0wVko0
MThDI25FYT51aVNKIQp6SjVGVjlBbnpBb0dWV0pmIVA5MXNBMiV3U2UlNlZiLVU1fTFyTXhyc0pQ
WXhhamo3UiNHbSFFQz9jTlFrSWxYTjQKel5JVjVaRyglQ1VYbThhY0hPJFZAYWpTMmAtTVUobzNI
YFVKIUozQWY8SlkjMUNrPjcyZHB9KlhwUkNQc2FjI3sjCnpucTtmKUhaVXA2bX0pZlR0RHUmKGp2
YWpWR0hjOFpWUEpvYDZNRFlqUjE/VmVWTm9OQUtPczx4WEVCRWJWRFclRAp6dnBnKWJzUjNFZXFT
TXAlUF9WJlApRlVsTip5KmNEMXNBJUVJeXEkfCk5bGpYbkQyQVhVfFA0KDc+U004QlV2d24Kemow
YiNoejFMdlRfdjROJCpOPmp1XjJ0PXIlcnY5cE5LUVBFXkpUJEZse215cyZXcVV+MVhqTXd1Znt5
KiZ6Pk9ICnpFUWA4KlVUYmNxeXk/LWNQJiluITR9VjgoSWBgMDFpTmZCfFokK0VXVClFUlMxQ2lY
Pk1jQ01pN3RpTG9SSWFMcQp6KH5MYVhSV3BJSzVifCQ2KU1rc2klTjlTdWFAMUd4XllELWQ2TmBI
TiFVdy1OY28wIyNeVlY0S0BUNUVseSlwRiQKenNrKXFjSi1uISNvIWpON1dmTUwtaGtpNHo0U01P
Iz1OfU10PSVjTl5lbzhJfm1AX3JuIzMxUkAmMlk0eC19TzVXCnp7WUlteVBgNHZaXj5pRWtLayFp
IVJ1aUhJc21yO3c5UGpKcHJPYUhWP3ZBXypSQmNsYXtBSngkSERNM2lFMTcmTwp6cD4lPWpkYG0j
JHEre2lsbVJAfStDOUJ1I0oxSS1EPENZRVFPez1yYXRUVk1NLVdLcSNXRl48PV5kPipsWmticUwK
enJ8JDFnWHxVQVp4IUk5dHVgX2pUSitIeHlrMUgkWCpyLXE/eGdRb0R3ZHZRYytnMm9vPTgta2Zk
MEx1Ml9MKiorCnpfYWtPSEE2KVpKQmB2OzQ8WCNRMG4mUyZGWlBZQC0kemFjfjBUfjkwaT5We3tm
ZiZOa2Jte3V1Xnw+Z18oKSlNbgp6MytRTmxyYWFyQkptc3xZY3h6MD4kNjkwPlQ9MThibiFaY2Qr
cFotZll2eFQ+KDhSe1VWMnRjOXBOfFF1MFVnaDQKelRSe09maXliWktMR0tBTl9LWD8xQ18kJWp5
flVyMFRQdWtJR1IwWSpJWkAlfWcofn58MytFNCU8fiR7eDs0PTk7Cno2bSZMUD1vZCo8KTZPPjBB
MUNmIW9LOHtURG8mcGhzciVJaykqTWYhM2xpalVTWjlPdT11aH47O2hGYm5mIUUoNAp6PVFSNHQ5
aGAtNCV0cE1adlVpQU94dXZXQnJVVSooYWdnJT52d3F1T1A1clZ7VWUmQlU5RCN3VDhWJVU1UnAk
dVgKekFjRXs2RnRFNG4/ZmhuKSVNUDchWEUzeE84WnUxWEh6cyMyXmRwb2BoYVRVNGglel4xNTA7
WT5CP300a3ZWUUlUCnpaRW9gJWpybHFEMHpGbmhFe0MpSkh3cnpoLVZYJVFHcCpLQU4zaFEheU59
Py1YOGhzJmBKUT9kI2JuRUxAMnhgbwp6LXRkfE1wbCQwJDJmdHdyVlZTdyEpTFQkKHB4ZVdBbF9m
Ujd5RzExZUBmejQhQj09UntZZH1IbHA7Nzl7K3ImM1EKekA/V2VEMHV4ZiFTKmhNeHdST0lWWkox
TXtISns4WktCWmFIVkQ/aXV6czA4K3FXSjA9XmFqUUArdkw0MSk1QTMtCnooP19EUi1Ncl81SWN1
Y3YjbnxhJCZaQSQwP1VHentJP15NUnk2WW4ldV84KmNqQTQtMUdrentGYHVkbFRkNnUkSAp6RD82
SjUhKURYbyVTP3U+JGJZJiptREx5VHUzNGAkcyNMNSF0LVJRNFNDam1xcTcpVnVFSyhUViQ5Xzgw
RFhZM3oKemJ3TlRydmZ5YXp0MXlpKiZHeypuZ21SSHkmQ2h7YGQjYzBTQGx1enI9PTE0blowODhQ
KiZvaFRkaT4kO3QoUlJgCnoqbzA1eStqQGR7b3B7RlRAI2t2YXNrTTcpKGk+LXtfPHoqdiRvbm1y
WGU9Xik4RiRyQiZEQyRVeSYhSVkrJWg9PAp6YD0+fkBua34qTz5VczdHNT5uPk9XPXBvJDE9TUtr
QTk/U3k2PH5MWWRTYVA5cGBEQlk1MygzKCNKd3ktLWh+bF8KenlAWF9uS2x7TT9VdkdVO0FzOD1x
a3JVdXEkMWE0K1VVLWZtKUFteVNkY0ZeX0xXR2ElbHNoOVlCaV83QmxkNXxuCnpaaigoSTFKNDVi
UXhgIzdKdVU+OVJ+VDZUUlFrNFZ0V0oydUZOdk9tV2F2aiQhYz49dFZFZn14MilIPTNhSVFnbwp6
IUI9eVpJYD5wYTVWZSRLeyRYVVJONE12JnFreDl8M3ZLX1hgVnhpejZQd3xmJVNIXnZjRndlPWBS
UzFFe19WKFQKekxMNmtGPDsmJVo+K096MEZJaChrZ1FnPjwhfSFVLXYkclRLV2VPMSQ4ZHJeKVhp
P1lUcHBtKG1nPV5uMDkmQipaCnp2LXlpQlBTNmJxVzttaThQUUVGUHpITFVGNHkyeHU5fiVZWTNV
T2NzajZHUlFESnVKZCg1UkdoRnVCIzU1ckh2Ygp6ZUg2Sl8tPTkxdDBrNm99RlpTaj9QX0EweXYw
QkA0a2V2SS13OyRefWRnTnZucUFQS3FZfjJCUD97YXAxcFFMY0MKeiYyRzVGRktyM1N2VW5wX0Nr
OFdaZ1lVKStkQSMlaD8qe2I/QlVZYmBfa3ZmQU1qWkZ6O0BaMk5KX1VWVzdjOWIpCnpaKlh9SU5l
ZiZvfDFARnxDUnxYYmFeLVFSN2pNYTZnVW5Rcmt+Pnt6SyEoJTt5RX1IX3gjbjRIYzlaYzMmKCRp
KAp6MUBmOUE/SW52PFZlSFB3STRKa3k3bUhCeHN3a2xsWFkkX2c9QXFHMXJ9a2gkYHB7SSRjTV51
RDlWMn49NTdgcFoKekNaPGdLV0Fqdj0wPUAyKEVRRGB8WU98JCFTMld2cVpVM0EmaCg2aEdqbVJq
dUl3eyolX2R2NEJ2ZVU5SWojQlNqCnoxM3hFTnZPUmZpWmYkeispN3NLblZuNElFUExwR3FWPlFR
ezl3VSpzeWU3K29Ra0N7UTV0MyNuK0teNlRnRnxMcQp6MjlpaExGdVJ2LXZZe2d8e1dGMns1ayot
NWR8PSl8KFcmYCQkWHYqaTNxYE99KWVeSVdaYHdNK2pfbHBPaV5eVSMKenl8JVFra2dMOCYlekgp
b0psK2llanBrXzx4WEByTSE8LSEjbWZpeG9CNjl5XkBwPFApZXpBKVBnO1lSaU8xSFc7CnpeNWE4
KlFnfEwjPmxCPyg+JGlZPitAcT1nQ3wwJFU/NG1TY2NsYmc+Rz0wcllkUiYqd0RCeihYPCRfTTUr
PlBpVAp6MTslJDMtaEYkYnZSTj5IUl8lZFZvYUJrXnhTMUB4SCNSbFNKNGo9MWpkNnt5X0lUQj5L
dU5MdENCPFpZbUlTWmwKekAhcVNKJXhDPj8tanIoPmVWMCYjejswVHJacW9kP2F1OE0+R2ZATn43
ZSY8QWF6RGA+YUA7Nn4pPXFnS3QpMz5jCnpSKjJIKi17ZGJaM1J4Xmk4SX5aMF5Mdk5iMG1gNTYp
aW4+VmQkcEVuJVQxd3p1SF91bkhhRSpTXmBAaEFiV0wmMwp6UzZAPFJuZ05xfnRfWn5NcFo1fEdJ
fmd6WS0waztvZUE2Kn5veUVTb0R3JVBpTT15bmErUG07emU+K3xgd059OyEKenhpV09SLWg/OTlR
K2AyRnJ5VDR6Y3tGVCNlWGUkMktkeDFDPnEmNXY+OHhKc3JHcExJSnh4cCNfUDFFTlR8SUsqCnp2
YGdSZj9kMXIlcUl4P2MtQyp7N01IQWVRPnNpRyliTGtkeHNWaTU9SHc3KzUtbTlCN1ZBU3JEKW0+
YWlFVV5SPwp6VHFEIXQ7RGFPe3MrJnVCbGlRbCFwaTZtQSo3fCkxKFlWMEVDalJYMERYYyFNPnt5
UW5je2RANCk9MitlJD99Q2cKejxXQXpOJGAqP1diJGUoV3dwNT1fUUtoeTd3OTk7cmhpPno4VTVA
UlpnNzchREFAWHNCV3ZXanZQbGVZVnMyZE0xCnorM0kzRjNvQVEtZERxIzM3Pi1CcEpDM2MqaktR
dW5vWFh5clRlbShnKyZAQDFVVTskfXkmanBXdE1NaERUNVA/fAp6az5gbnJ6JGFEZjRjR2smazlh
OzE0TXdXe2VHLW1aK1UxenpUKzVeVE9mcD40T2pzKVdDfTBRfHMhUmopN19TN18KemErO31FIWVs
ZElUWEBZMTNRXilLKl9gUXhYUVRyaWxGMmtnQEI3JDwzRExUVkl6TXZ+MituTUooUDNkKF5IfUwj
Cnp7OHVfP3F4K3FRNTY1dDl3cS1vPTJVcGlOampEQFpOcXFhVUdmaFMqazdQJUAySzlvUks3YUIk
PTh6NGhLQTxmYAp6Y3lEX0F5YyglYjEpPzBVN1VoQGR0VV5oT1pVfkNjXlZCKFgrOXclbSM5cE54
NFJQU0hSfnlCQHNuaXghT3VQeyMKenApYmUkJFQka313KCo9U2Q7YVpaejxpeU5DNiFAKlRCJClT
Qk5QOT9qbHpiYXpNT2NHNmBJTkpkTEw+YlgzeUlkCnoyQF84VUo9YD9gLVomUzkoI0EmRSU5JE45
QVYqQHJwbWVzZGJVaX5rTTdvVkNlNHVSaUQ2NkBLTjxtZzBGNVNyUAp6Zz1vMkx2RFA7fDglI0JL
QlJsRGQ1QVRrfVZfeWIkJHRVJjliTk41PE81cHNJSEJRQn10SnVaJC1wPFNSUEdgYE8KekFGYndW
WHhwMVJvVVU+c1dWN1czTWB+KkxrVzJ5LU1aKUtVKTk8YEQ5ZihiciRqOHdIN2VxUWBvVlh7QWFG
fVUyCno/fEM9JHl8djxOJVc9NHZId0Y9amR+aj5zZ1I8ZjcxK2tUPTRebFlHNGx9eUprV05gQUpO
MGNoNSRBUygkTHQ0Wgp6PGg7b29zcGl1aVFWc2R8WFB5UEdyNDt2UkkqKllMJjA0SW5mNnhRUHdT
LTdsbndRO210WFdeKDIpZUN3NkxsdmYKelYhWGAlIzF6d0NZbUl5eHUxYDJzSmVfT0wrZlFYTG17
MHZReD9FRUA+YnYyPFpmU04renEoIVBiJVJoVVV4ZzBFCnpXV3VsVmQtSlh8Pjw1bVZCNHVePiF5
V0RIclVweGApO19+MElvNmJ9XlNIKGdvaXVRcUFNWGZXcGh7PTVzPDVOIwp6amsjc25xflZDVmh1
IWZmNlMtUmM1ZCVZeTR3b3dOIT48U0k0UEtqM2RuWlQ1STxsSSgqeGM+JD9XTn0ycGBxTzcKenJL
TElScWE7UnhAIUA2QmJHU0xOSF9oRnhxNX0qQXRuU3JyaiFXNXR0T1VKOSlLYW5uUD1FalUzTjQ8
PyV4JE5BCnojS055cC09eWJHYC0kQTR5XiZ2SWFkSTlscFZUMipLfDgwISo4a00zSDYlQSRPNVVJ
SUlIdH5PQ1JJKG1gPmFwawp6SUAhXjdXTE1ZI3NKbSlDUkJrbCN5fDNCeCR7eHp1MXdWMytlZlo8
P09EaDwqPUUlQXJHVXRWQio3cHV1dntnS3cKemBDRFo2SmVVeU0qTkg9cVdYbFktb0gyZCFfNDIy
JXdiMyZZP1ctZUV4M2ViUXRxdndWcns5IU84K3lhd0wyODI7Cnp3N3Izc2NhP2BaQ2JeKU1mYnpL
fnRjRGpUZSY5cDswPCpTOFhwN0luY3pYczYtKloydUUkLXhDOCpBTEVse1g5Tgp6M3QwRmY2VmdY
YyoqWHZARHV7UURnck9LT0NjV3oocCMxX1p2OVl+Xmd1SHR7eiE2ciZpei1ZSEVBQWJ6em0yJkEK
emItVXV6X1NEQXFnMF4hRVpFPipzUjUpI01YenZzYXN+RyNXTUwkQUA+d1NhOHU3UjNUQmFeazQ5
QklsYipQQH4kCnp2ZFhsVFB2WjZVdzEkQ0lUeXBjblM9KjF0aytGJVgzVD5MUHV3a0p4JXI4RihM
e3VWMUYoVFgoTilUYjxibCpzdgp6VnBMbWVDd04tbTlyYilwV2BGOGkydEx4UHBQQmRiZG10V0B0
ejJBfnlaTG19WkA0UilnOzZWZit9NExMZXc/US0KekdRMUFGZHx5Q0UmX2ctO0VqVk1sJVppVjFa
fCtPd2AwfWJ0YyFvWm9NQ3Y4VztWZ0A5JChDY3w8NnE+QjhKQE49Cnp6RzdrUCYlT203WUBsUn0/
SGNUMjVIbFJ3MUReNUwrKHg7JCphKlokQFl2Kz9YdWdeZCMyKERHaE1KVGBaY3xPeAp6cU9FaE17
TilxR3B6TkdjSlVwRndXIU56cGR3WUt+c09wLTYlS2ZNWkleeEtuRSpfZj4lfX5wNWt6ej9OPWw8
eSoKekBgfXA2PX15S3woZUJEdzR2eWpzKFExUT1ebjkkR2doWTt7aV90d0NPcU1ycVpjaX1Ya25X
WV9GSkdoUXVKaTl6Cno9d2RSezx1VF90VkFfPHNQTH5Db3psTT9zYEI/Mi02Mnh8YjBGSW5mVjNC
JWhSfmZkQCZMaHA8R3dZPSorVk8kfgp6bWhhQTZiLWN9IW5iTUpWJnFRLT4tWlFyYF5oS0YqRGNS
bWJybW4wMDRCa3YjVCM/Tn0qJlREaGopO3NlMlFjVVAKenBQZCNia1cqfjE7JWhzNU5De2lmdjZQ
PmB6LXFROFByRmMjdHR+LUlhcjBPbThSVkMjJD1FS01AMlB1cEIldHZvCnowODU9PyVFcTEzcmZR
X2hTOVV5KkRPVSNJQmB9NClmS0ZDZ2oydTU9c0I+PEVlOXoxT1QqamVjRilYU29OMDlRcQp6NXd2
MHxiMEA8SlQ9MWlLR2A9bjdTS2lmdUVVTzNkdGdkLUMpT2NaUD91LUNvOGx4QGkqXnQlYHtsVWxz
XnRHLXcKemNpeFhvaENnNVZAcm5mYzchVUhxVk4/MmdzK0diO2dCd1FqKyFqfCkpQ0dvaWY2Uihy
KTlQYjclJHw+RlFNVU1DCnpULUBoPjJ7SUtWLSpOZkd3az04Nyp1RnYlI3lPbSVWVlRJZG0lQ2Rm
bVBoJW08d3hvQmV5VkctTUhtWUFrMlcmbAp6a1Y0PWNaQHVyb29jZGwldlFDYFJ2d1dxP3tjdmhI
cTNnJnBmQSYpI0AoQUBqX2Ajc3txR3oxKnY+JCF9Uz55M0MKenRoI0drT0A0KERkTjRPWnBFTlU3
eiQ3JFg+OzI/d3QqRm9MeWhfIzVFeXhyWG4/NikxSTZoT1VMV3cjNHFnWDI/Cno3eUMzJXVHIX50
ZiU+KFk9PncoeUpIRjFUQFppX3xDSjd9Sy14KWstWXRmdTxSbVU0Mj1zJnF7JSo1PCkjZkV3TAp6
JThZUytuV3V2Vz80WSRtKCgzME5ydXgzOGZvQnFmJjt0Xyp6b2FPP1NlOGEhcElHWDxvVzJDbmhY
al5CbiZyPlMKejZZdT1geFcmZ3pgTlVuWkxDeTxQI2pkbSQlPjBFcW5PSmBFPDQ/WkEpTDwyQUok
R0k5c1hhRWdFMjNle15kQClQCnp4S01FfEooWnxMWXs/fjBINFVAKSY8KDgke3RycXl4YWZ1KDdx
OUxFVDVYd0ZeQkV7NmBHYkFiT3ckMGRpdnQ1cQp6MDd1eFRfUCRiXkBqfU9WWXJUQiFtNXgqTmlm
JE9oam9NXldEODRiYlAwV2VLX0lRMjJYMlZlflU2Wk5gY1pHSUMKenh+fWZqQFZJVjZffHIpMSN1
eEd2TitGOFo2I0JVSXB7clhJaWNTSVVRVndiRFNfM3hVUyZtckZgTD5ieVZwfTV1CnpBU0B2bEl4
aUhSTyU2el54T2xsbng9LWwpejZlTEVVYihKXmAtZno4bk9pKVZoeEIqNz5uTkBFNmorWmFacEBL
Twp6SCV8VGZAcFg4PmFFTnpvQEEwQ29mYDZXUCNOJmladUpTQk9SfEV6bykwQV54SlJ0SzRLPEB5
ckhNP0F0TVJpcVAKejxTNFh2PTJDIUNjWDdGPnIlR3BAZUBANGpkdWJJbDtDaD8tYEBKYEc/R2Mo
P1IpWWluV0VUfTw/KkFfKE87V0x2CnpSTDRYPnB+OFJHRz09fUZYPS1+cFY/YnllKT1kV0VZS2dh
VmNFYl4/diYydFRiMC1XKVQ4aX1XRThBSU1AYUFySQp6SUlJPjFaKVhpNG0yWWlhZnBGcHJRQnp0
UD1WPkdlNWs+KzlWUEZeIzB0Tz8xcTlQQ3prYjt9SnFuKUpgKjJXUDcKejFPcUApdTlnX0E4JkVf
UDBzeFZXa3Y7Xlc1RmBNRUdJeTU4KnhBXitrPTZrflQ1Y0Y4VTchZVkyPz9IOUZ+JmZGCnpxJDtj
P3Y4TVc7czt0T2c1JlRoS2g5YmZMUGolVmtuRl9XUWNyb31PQkBqfl5SKz1pSiVINkZRY2s0T3hz
bUFBUAp6WElqVWxCRj51RVoqOTxeQ0tYS3tINGZIeVppUz55RjY7OTVQcDJ8bV4lVDE7Yyh1cGM8
KHdeaikoe3NjVSVPPzcKenpyTVhxKDdnRm1hWWc4PmspVCUmRWZVaFdlUWVINDl5QFBPO0Npb3V2
dHFRe3VLVEw9WFRqMHdge3k/Nyg4KGMrCnpFRz42SFE7aj4rRVZXZ3x2YCZqLVBOZ1QqNV8mWTFP
PTQ8aDRDb2ZlbmxxaHlSTX55eUEpXlVPc0MoVzE0VkwpdAp6TDJ2UVFGVEIqUDRRZz1ibkJSdiZj
aiMmK1d2Ni0yRG9PQ0A4MmElM244RyVsRkV7Wm45ZnQ9QitkTThobEdMeUMKelEpcz9Bcj9LITtY
dE1kflZXWG1pI0FsQDh6OChKeUtTY2paPGV5WGtYfU1kdGskOW52Y2dPc2VOfUljNE5TcEQwCnpH
cnx0PD5WfnA0JENHd2krNUNAcDVkY1dmJmRTWiEpZCs/fTBGZStkNUR0ZHtWSXJiSHNJYyh3ZmRH
U25xeWFeTQp6ZmhQYUc7ZVFia05hQ3BgMEhscjYhUD0yfTF3aGlhWVhiaHAxMHYqfmpScklYTlEm
bTReTl8jSTY5WFg5XlMyNX0KejlnbmxyIW5oZk1oYGtHdEhwYko8PFI3cXF0QDw2bXkxNU1vcTs4
SFVhVFpQajBCS0BlYXFmNmFqNEtkQUdOQjFsCnohQzJYdWxhMnooMDc0VzI2b0VyY0t5ckFUeUVD
eH5xRDlRNUlvOCNnMVl6an5MVE0zP2ZRT3dXTXBJNTJxeVRneQp6PTI9MWxnZCNkZndCUU9QYng7
MXpjOUtjYkF0bk8tPjVlUGxVcEBmLWEpUCt2UGNLTWBSa0V7a0gzSShqbD1PK2gKenhzITc3X2VC
MSFXQW9idiVBOXo3YVc9JUxaSFBoczRqS1NiYkgtcSRFSi0oayhTS3VzXmJISndTYShPcXxOYTNK
Cnp2NmFvU0huJVpZS3s7dk9mMjh6MyVAdHgwUXRvY0hJSmBKbzdMNWpqO2xnMEJGcCZlb0Z5ZXJO
ITk8I1hnXnxSNgp6O3Y1dUF5aUpJNXEkcUtxeypYZj9oeWY1Z00jUVY/NCtzUGFmflpTVWB3YztZ
Z0Emejx5S0xvZGlUUkhub1R4KzYKemdBPHtWQm9tfVRmK20/RHU3UyFEfEF9K0l2NTElP15EeUVa
TmU9dGRFSFFjK1YqQmQwajJMbFY2YXBvQkVDTG1VCnohVWUlbDl4I31QX2l0SkMjQUI9aFU/Mm56
QVJfKG8wRmVqOzM8MHpUe3ZrdWM1WDlffjl3N0VWR0I2bElyMUpsZQp6TEJZaEZ8NUp2OWl4U1Zz
S1ZASmpean5eSmleVG8/cnloYlJ7Rmg3Xnt4M1d2YVgwPl85dWtXRHc7b2pWVXBeeGQKenFXQGx0
NiNiaUJIQHJGVmcyJDdudCEzd3BBKktxWGlOZ2BPYFRHbjJLbmhyRTkxdWR7NClHI1RrTzNNMiNn
VzNZCnphRmkkKkNXVkJkcktNent2TGF3ODhaSGYlS31rISZwa1JhcTtRdj00OVJlQWdDQ1YwSz5F
UDxfMU95PmJENm9gXwp4Q18pTT9EfXFLS0x7SkR9REpjO1Y1ZDtiJWpZTFZJTkt8JXBHc25DQS1j
bikrQV4+aH5TdjU0XnpXe25AX1dKKzsKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3du
bG9hZC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfZG93bmxvYWQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyOWE0
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy90ZXN0X2V3azJfZG93bmxvYWQuY3BwCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxz
L0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAiVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2
ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5oPgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVk
ZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0
OwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50
KiBlbnZpcm9ubWVudDsKKworc3RhdGljIGNvbnN0IGNoYXIgc2VydmVyU3VnZ2VzdGVkRmlsZW5h
bWVbXSA9ICJ3ZWJraXQtZG93bmxvYWRlZC1maWxlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RG
aWxlUGF0aFtdID0gIi90ZXN0LnBkZiI7CisKK3N0cnVjdCBEb3dubG9hZFRlc3REYXRhIHsKKyAg
ICBjb25zdCBjaGFyKiBmaWxlVXJsOworICAgIGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uUGF0aDsK
K307CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBmaWxlRXhpc3RzKGNvbnN0IGNoYXIqIHBhdGgpCit7
CisgICAgc3RydWN0IHN0YXQgYnVmOworICAgIHJldHVybiAhc3RhdChwYXRoLCAmYnVmKTsKK30K
Kworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVz
c2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciogcGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRD
b250ZXh0Kiwgdm9pZCopCit7CisgICAgaWYgKG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhP
RF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVp
bmFfU3RyYnVmKiBmaWxlUGF0aCA9IGVpbmFfc3RyYnVmX25ldygpOworICAgIGVpbmFfc3RyYnVm
X2FwcGVuZChmaWxlUGF0aCwgVEVTVF9SRVNPVVJDRVNfRElSKTsKKyAgICBlaW5hX3N0cmJ1Zl9h
cHBlbmQoZmlsZVBhdGgsIHBhdGgpOworCisgICAgRWluYV9GaWxlKiBmID0gZWluYV9maWxlX29w
ZW4oZWluYV9zdHJidWZfc3RyaW5nX2dldChmaWxlUGF0aCksIGZhbHNlKTsKKyAgICBlaW5hX3N0
cmJ1Zl9mcmVlKGZpbGVQYXRoKTsKKyAgICBpZiAoIWYpIHsKKyAgICAgICAgc291cF9tZXNzYWdl
X3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0ZPVU5EKTsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3QgZmlsZVNpemUgPSBlaW5hX2ZpbGVfc2l6ZV9n
ZXQoZik7CisKKyAgICB2b2lkKiBjb250ZW50cyA9IGVpbmFfZmlsZV9tYXBfYWxsKGYsIEVJTkFf
RklMRV9QT1BVTEFURSk7CisgICAgaWYgKCFjb250ZW50cykgeworICAgICAgICBzb3VwX21lc3Nh
Z2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBz
b3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX09LKTsKKworICAgIEVpbmFfU3RyYnVmKiBjb250ZW50RGlzcG9zaXRpb24g
PSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgICBlaW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGNvbnRl
bnREaXNwb3NpdGlvbiwgImZpbGVuYW1lPSVzIiwgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOwor
ICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJz
LCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGVpbmFfc3RyYnVmX3N0cmluZ19nZXQoY29udGVudERp
c3Bvc2l0aW9uKSk7CisgICAgZWluYV9zdHJidWZfZnJlZShjb250ZW50RGlzcG9zaXRpb24pOwor
CisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNP
VVBfTUVNT1JZX0NPUFksIGNvbnRlbnRzLCBmaWxlU2l6ZSk7CisgICAgc291cF9tZXNzYWdlX2Jv
ZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisKKyAgICBlaW5hX2ZpbGVfbWFw
X2ZyZWUoZiwgY29udGVudHMpOworICAgIGVpbmFfZmlsZV9jbG9zZShmKTsKK30KKworc3RhdGlj
IHZvaWQgb25fZG93bmxvYWRfbmV3KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmll
dywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIERvd25sb2FkVGVzdERhdGEqIHRlc3REYXRhID0g
c3RhdGljX2Nhc3Q8RG93bmxvYWRUZXN0RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBFd2tfRG93bmxv
YWQqIGRvd25sb2FkID0gc3RhdGljX2Nhc3Q8RXdrX0Rvd25sb2FkKj4oZXZlbnRJbmZvKTsKKyAg
ICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX3N0YXRlX2dldChkb3dubG9hZCksIEVXS19ET1dOTE9B
RF9TVEFURV9OT1RfU1RBUlRFRCk7CisgICAgQVNTRVJUX0VRKGV3a19kb3dubG9hZF9lc3RpbWF0
ZWRfcHJvZ3Jlc3NfZ2V0KGRvd25sb2FkKSwgMCk7CisgICAgQVNTRVJUX0VRKGV3a19kb3dubG9h
ZF9lbGFwc2VkX3RpbWVfZ2V0KGRvd25sb2FkKSwgMCk7CisKKyAgICBFd2tfVXJsX1JlcXVlc3Qq
IHJlcXVlc3QgPSBld2tfZG93bmxvYWRfcmVxdWVzdF9nZXQoZG93bmxvYWQpOworICAgIEFTU0VS
VF9UUlVFKHJlcXVlc3QpOworICAgIEVYUEVDVF9TVFJFUShld2tfdXJsX3JlcXVlc3RfdXJsX2dl
dChyZXF1ZXN0KSwgdGVzdERhdGEtPmZpbGVVcmwpOworCisgICAgRXdrX1VybF9SZXNwb25zZSog
cmVzcG9uc2UgPSBld2tfZG93bmxvYWRfcmVzcG9uc2VfZ2V0KGRvd25sb2FkKTsKKyAgICBBU1NF
UlRfVFJVRShyZXNwb25zZSk7CisgICAgRVhQRUNUX1NUUkVRKGV3a191cmxfcmVzcG9uc2VfbWlt
ZV90eXBlX2dldChyZXNwb25zZSksICJhcHBsaWNhdGlvbi9wZGYiKTsKKworICAgIEVYUEVDVF9T
VFJFUShld2tfZG93bmxvYWRfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChkb3dubG9hZCksIHNlcnZl
clN1Z2dlc3RlZEZpbGVuYW1lKTsKKworICAgIEFTU0VSVF9GQUxTRShmaWxlRXhpc3RzKHRlc3RE
YXRhLT5kZXN0aW5hdGlvblBhdGgpKTsKKyAgICBld2tfZG93bmxvYWRfZGVzdGluYXRpb25fc2V0
KGRvd25sb2FkLCB0ZXN0RGF0YS0+ZGVzdGluYXRpb25QYXRoKTsKKyAgICBFWFBFQ1RfU1RSRVEo
ZXdrX2Rvd25sb2FkX2Rlc3RpbmF0aW9uX2dldChkb3dubG9hZCksIHRlc3REYXRhLT5kZXN0aW5h
dGlvblBhdGgpOworfQorCitzdGF0aWMgdm9pZCBvbl9kb3dubG9hZF9jYW5jZWxsZWQodm9pZCog
dXNlckRhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2aWV3LCB2b2lkKiBldmVudEluZm8pCit7CisgICAg
ZnByaW50ZihzdGRlcnIsICJEb3dubG9hZCB3YXMgY2FuY2VsbGVkLlxuIik7CisgICAgZWNvcmVf
bWFpbl9sb29wX3F1aXQoKTsKKyAgICBGQUlMKCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rvd25s
b2FkX2ZhaWxlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2
ZW50SW5mbykKK3sKKyAgICBFd2tfRG93bmxvYWRfRXJyb3IqIGRvd25sb2FkRXJyb3IgPSBzdGF0
aWNfY2FzdDxFd2tfRG93bmxvYWRfRXJyb3IqPihldmVudEluZm8pOworICAgIGZwcmludGYoc3Rk
ZXJyLCAiRG93bmxvYWQgZXJyb3I6ICVzXG4iLCBld2tfd2ViX2Vycm9yX2Rlc2NyaXB0aW9uX2dl
dChkb3dubG9hZEVycm9yLT5lcnJvcikpOworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cisg
ICAgRkFJTCgpOworfQorCitzdGF0aWMgdm9pZCBvbl9kb3dubG9hZF9maW5pc2hlZCh2b2lkKiB1
c2VyRGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZvaWQqIGV2ZW50SW5mbykKK3sKKyAgICBE
b3dubG9hZFRlc3REYXRhKiB0ZXN0RGF0YSA9IHN0YXRpY19jYXN0PERvd25sb2FkVGVzdERhdGEq
Pih1c2VyRGF0YSk7CisgICAgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCA9IHN0YXRpY19jYXN0PEV3
a19Eb3dubG9hZCo+KGV2ZW50SW5mbyk7CisKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2Vz
dGltYXRlZF9wcm9ncmVzc19nZXQoZG93bmxvYWQpLCAxKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rv
d25sb2FkX3N0YXRlX2dldChkb3dubG9hZCksIEVXS19ET1dOTE9BRF9TVEFURV9GSU5JU0hFRCk7
CisgICAgQVNTRVJUX0dUKGV3a19kb3dubG9hZF9lbGFwc2VkX3RpbWVfZ2V0KGRvd25sb2FkKSwg
MCk7CisKKyAgICBBU1NFUlRfVFJVRShmaWxlRXhpc3RzKHRlc3REYXRhLT5kZXN0aW5hdGlvblBh
dGgpKTsKKworICAgIGVjb3JlX21haW5fbG9vcF9xdWl0KCk7Cit9CisKK1RFU1RfRihFV0syVW5p
dFRlc3RCYXNlLCBld2tfZG93bmxvYWQpCit7CisgICAgT3duUHRyPEVXSzJVbml0VGVzdFNlcnZl
cj4gaHR0cFNlcnZlciA9IGFkb3B0UHRyKG5ldyBFV0syVW5pdFRlc3RTZXJ2ZXIpOworICAgIGh0
dHBTZXJ2ZXItPnJ1bihzZXJ2ZXJDYWxsYmFjayk7CisKKyAgICAvLyBHZW5lcmF0ZSB1bmlxdWUg
bmFtZSBmb3IgZGVzdGluYXRpb24gZmlsZS4KKyAgICBjaGFyIGRlc3RpbmF0aW9uUGF0aFtdID0g
Ii90bXAvcGRmLWZpbGUuWFhYWFhYIjsKKyAgICBBU1NFUlRfVFJVRShta3RlbXAoZGVzdGluYXRp
b25QYXRoKSk7CisKKyAgICBDU3RyaW5nIGZpbGVVcmwgPSBodHRwU2VydmVyLT5nZXRVUklGb3JQ
YXRoKHRlc3RGaWxlUGF0aCk7CisKKyAgICBEb3dubG9hZFRlc3REYXRhIHVzZXJEYXRhID0geyBm
aWxlVXJsLmRhdGEoKSwgZGVzdGluYXRpb25QYXRoIH07CisgICAgQVNTRVJUX0ZBTFNFKGZpbGVF
eGlzdHMoZGVzdGluYXRpb25QYXRoKSk7CisKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19hZGQod2ViVmlldygpLCAiZG93bmxvYWQsbmV3Iiwgb25fZG93bmxvYWRfbmV3LCAmdXNlckRh
dGEpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3du
bG9hZCxjYW5jZWwiLCBvbl9kb3dubG9hZF9jYW5jZWxsZWQsICZ1c2VyRGF0YSk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXcoKSwgImRvd25sb2FkLGZhaWxlZCIs
IG9uX2Rvd25sb2FkX2ZhaWxlZCwgJnVzZXJEYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19hZGQod2ViVmlldygpLCAiZG93bmxvYWQsZmluaXNoZWQiLCBvbl9kb3dubG9hZF9m
aW5pc2hlZCwgJnVzZXJEYXRhKTsKKworICAgIC8vIERvd25sb2FkIHRlc3QgcGRmCisgICAgZXdr
X3ZpZXdfdXJpX3NldCh3ZWJWaWV3KCksIGZpbGVVcmwuZGF0YSgpKTsKKyAgICBlY29yZV9tYWlu
X2xvb3BfYmVnaW4oKTsKKworICAgIC8vIENsZWFuIHVwCisgICAgdW5saW5rKGRlc3RpbmF0aW9u
UGF0aCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBmYzVkNzQ3
Li41MThkYjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTEyMSwx
MyArMTIxLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNT
aXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZp
bmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZp
Z2F0b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGhhbmRs
ZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVUZXh0SW5wdXRTdGF0ZSgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlQXV0aGVu
dGljYXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgY29uc3QgU3Ry
aW5nJiByZWFsbSwgY29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2Vy
bmFtZSwgU3RyaW5nJiBwYXNzd29yZCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVDZXJ0
aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYg
aWdub3JlRXJyb3JzKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhhbmRsZVByb3h5QXV0aGVudGlj
YXRpb25SZXF1aXJlZFJlcXVlc3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgdWludDE2X3QgcG9y
dCwgY29uc3QgU3RyaW5nJiBwcmVmaWxsZWRVc2VybmFtZSwgU3RyaW5nJiB1c2VybmFtZSwgU3Ry
aW5nJiBwYXNzd29yZCkgPSAwOwogI2VuZGlmIC8vIFBMQVRGT1JNKFFUKS4KIAorI2lmIFBMQVRG
T1JNKFFUKSB8fCBQTEFURk9STShFRkwpCisgICAgdmlydHVhbCB2b2lkIGhhbmRsZURvd25sb2Fk
UmVxdWVzdChEb3dubG9hZFByb3h5KikgPSAwOworI2VuZGlmIC8vIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShFRkwpCisKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZp
cnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKSA9IDA7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggNGVmMmRhNS4uNmNmMjYwYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTEyMjEsNyArMTIyMSw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpyZWNlaXZlZFBvbGljeURlY2lzaW9uKFBvbGljeUFjdGlv
biBhY3Rpb24sIFdlYkZyYW1lUHJveHkqIGZyCiAgICAgICAgIC8vIENyZWF0ZSBhIGRvd25sb2Fk
IHByb3h5LgogICAgICAgICBEb3dubG9hZFByb3h5KiBkb3dubG9hZCA9IG1fcHJvY2Vzcy0+Y29u
dGV4dCgpLT5jcmVhdGVEb3dubG9hZFByb3h5KCk7CiAgICAgICAgIGRvd25sb2FkSUQgPSBkb3du
bG9hZC0+ZG93bmxvYWRJRCgpOwotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8
fCBQTEFURk9STShFRkwpCiAgICAgICAgIC8vIE91ciBkZXNpZ24gZG9lcyBub3Qgc3VwcHBvcnQg
ZG93bmxvYWRzIHdpdGhvdXQgYSBXZWJQYWdlLgogICAgICAgICBoYW5kbGVEb3dubG9hZFJlcXVl
c3QoZG93bmxvYWQpOwogI2VuZGlmCkBAIC0yNjQyLDExICsyNjQyLDYgQEAgdm9pZCBXZWJQYWdl
UHJveHk6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYgY29udGVudHMKICAgICBtX3BhZ2VDbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRnJvbU5hdmln
YXRvclF0T2JqZWN0KGNvbnRlbnRzKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OmhhbmRsZURv
d25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKLXsKLSAgICBtX3BhZ2VDbGll
bnQtPmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7Ci19Ci0KIHZvaWQgV2ViUGFnZVBy
b3h5OjphdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1l
LCBjb25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBT
dHJpbmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKQogewogICAgIG1fcGFnZUNsaWVudC0+
aGFuZGxlQXV0aGVudGljYXRpb25SZXF1aXJlZFJlcXVlc3QoaG9zdG5hbWUsIHJlYWxtLCBwcmVm
aWxsZWRVc2VybmFtZSwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKQEAgLTI2NjMsNiArMjY1OCwxMyBA
QCB2b2lkIFdlYlBhZ2VQcm94eTo6Y2VydGlmaWNhdGVWZXJpZmljYXRpb25SZXF1ZXN0KGNvbnN0
IFN0cmluZyYgaG9zdG5hbWUsIGJvb2wmCiB9CiAjZW5kaWYgLy8gUExBVEZPUk0oUVQpLgogCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKK3ZvaWQgV2ViUGFnZVByb3h5OjpoYW5k
bGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSogZG93bmxvYWQpCit7CisgICAgbV9wYWdl
Q2xpZW50LT5oYW5kbGVEb3dubG9hZFJlcXVlc3QoZG93bmxvYWQpOworfQorI2VuZGlmIC8vIFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShFRkwpCisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQog
dm9pZCBXZWJQYWdlUHJveHk6Om5lZWRUb3VjaEV2ZW50cyhib29sIG5lZWRUb3VjaEV2ZW50cykK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAzM2M0OWEzLi41
NjMzY2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC02MzUs
NiArNjM1LDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFFUKQogICAgIHZvaWQgZmluZFpvb21h
YmxlQXJlYUZvclBvaW50KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmpl
Y3QoY29uc3QgU3RyaW5nJik7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShFRkwpCiAgICAgdm9pZCBoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQcm94eSopOwog
I2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154932</attachid>
            <date>2012-07-27 06:41:58 -0700</date>
            <delta_ts>2012-07-27 10:25:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>91345_download_manager.patch</filename>
            <type>text/plain</type>
            <size>66992</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBkNGZlMDkyLi40NTY2YmVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTEw
IEBACiAyMDEyLTA3LTI3ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRl
bC5jb20+CiAKKyAgICAgICAgW0VGTF1bV0syXSBBZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tf
Q29udGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTEzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgZG93bmxvYWQgY2xpZW50IGZvciBFd2tfQ29udGV4dCBzbyB0aGF0CisgICAgICAgIGluZm9y
bWF0aW9uIGFib3V0IGRvd25sb2FkcyBjYW4gYmUgcmVwb3J0ZWQKKyAgICAgICAgdG8gdGhlIGNs
aWVudCBhcHBsaWNhdGlvbiB2aWEgRXdrX1ZpZXcgc2lnbmFscy4KKworICAgICAgICBUaGUgY2xp
ZW50IGFwcGxpY2F0aW9uIG5lZWRzIHRvIGxpc3RlbiBmb3IKKyAgICAgICAgImRvd25sb2FkLHJl
cXVlc3QiIHNpZ25hbCBvbiB0aGUgdmlldyBhbmQgc2V0CisgICAgICAgIHRoZSBkb3dubG9hZCBw
YXRoIGZvciB0aGUgZG93bmxvYWQgaW4gdGhlCisgICAgICAgIGNhbGxiYWNrIGluIG9yZGVyIHRv
IGFjY2VwdCBpdC4gSWYgdGhlIHNpZ25hbAorICAgICAgICBpcyBpZ25vcmVkIG9yIGlmIHRoZSBk
b3dubG9hZCBwYXRoIGlzIG5vdCBzZXQKKyAgICAgICAgdGhlIGRvd25sb2FkIHdpbGwgZmFpbC4K
KworICAgICAgICBBIG5ldyBFd2tfRG93bmxvYWRfSm9iIHR5cGUgaXMgaW50cm9kdWNlZCB0byBw
cm92aWRlCisgICAgICAgIGluZm9ybWF0aW9uIHJlbGF0aXZlIHRvIGEgZG93bmxvYWQgdG8gdGhl
IGNsaWVudAorICAgICAgICBhbmQgdG8gYWxsb3cgdGhlIGNsaWVudCB0byBpbnRlcmFjdCB3aXRo
IGl0IChlLmcuCisgICAgICAgIHNldCBpdHMgZG93bmxvYWQgcGF0aCwgY2FuY2VsIGl0LCAuLi4p
LgorCisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9lZmwvRVdlYktpdDIuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50
SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9h
ZFJlcXVlc3QpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAoUGFnZUNsaWVudEltcGwpOgorICAgICAgICAq
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAgICAgICAgKF9Fd2tfQ29udGV4
dCk6CisgICAgICAgIChfRXdrX0NvbnRleHQ6Ol9Fd2tfQ29udGV4dCk6CisgICAgICAgIChfRXdr
X0NvbnRleHQ6On5fRXdrX0NvbnRleHQpOgorICAgICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRf
am9iX2FkZCk6CisgICAgICAgIChld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KToKKyAgICAg
ICAgKGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHA6IEFkZGVkLgorICAgICAg
ICAodG9Fd2tDb250ZXh0KToKKyAgICAgICAgKGRlY2lkZURlc3RpbmF0aW9uV2l0aFN1Z2dlc3Rl
ZEZpbGVuYW1lKToKKyAgICAgICAgKGRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChkaWRD
cmVhdGVEZXN0aW5hdGlvbik6CisgICAgICAgIChkaWRSZWNlaXZlRGF0YSk6CisgICAgICAgIChk
aWRGYWlsKToKKyAgICAgICAgKGRpZENhbmNlbCk6CisgICAgICAgIChkaWRGaW5pc2gpOgorICAg
ICAgICAoZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFjaCk6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaDogQWRk
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKF9Fd2tfRG93bmxvYWRfSm9iKToKKyAgICAgICAgKF9Fd2tfRG93bmxvYWRfSm9i
OjpfRXdrX0Rvd25sb2FkX0pvYik6CisgICAgICAgIChfRXdrX0Rvd25sb2FkX0pvYjo6fl9Fd2tf
RG93bmxvYWRfSm9iKToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVmKToKKyAgICAgICAg
KGV3a19kb3dubG9hZF9qb2JfdW5yZWYpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9pZF9n
ZXQpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldCk6CisgICAgICAgIChld2tf
ZG93bmxvYWRfam9iX3N0YXRlX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3JlcXVl
c3RfZ2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KToKKyAgICAg
ICAgKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KToKKyAgICAgICAgKGV3a19kb3du
bG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jfc3Vn
Z2VzdGVkX2ZpbGVuYW1lX2dldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2NhbmNlbCk6
CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX2VzdGltYXRlZF9wcm9ncmVzc19nZXQpOgorICAg
ICAgICAoZXdrX2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KToKKyAgICAgICAgKGV3a19k
b3dubG9hZF9qb2JfcmVzcG9uc2Vfc2V0KToKKyAgICAgICAgKGV3a19kb3dubG9hZF9qb2Jfc3Vn
Z2VzdGVkX2ZpbGVuYW1lX3NldCk6CisgICAgICAgIChld2tfZG93bmxvYWRfam9iX3JlY2VpdmVk
X2RhdGEpOgorICAgICAgICAoZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQpOgorICAgICAgICAo
ZXdrX2Rvd25sb2FkX2pvYl9uZXcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19k
b3dubG9hZF9qb2IuaDogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Rv
d25sb2FkX2pvYl9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmNwcDoKKyAgICAgICAgKGV3a191
cmxfcmVzcG9uc2VfY29udGVudF9sZW5ndGhfZ2V0KTogQWRkIGEgZnVuY3Rpb24gdG8KKyAgICAg
ICAgcmV0cmlldmUgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIGEgVVJMIHJlc3BvbnNlLgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuaDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHA6CisgICAgICAgIChld2tfdmlld19kb3dubG9hZF9q
b2JfY2FuY2VsbGVkKToKKyAgICAgICAgKGV3a192aWV3X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQp
OgorICAgICAgICAoZXdrX3ZpZXdfZG93bmxvYWRfam9iX2ZhaWxlZCk6CisgICAgICAgIChld2tf
dmlld19kb3dubG9hZF9qb2JfZmluaXNoZWQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L2V3a192aWV3Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0
ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Jlc291cmNlcy90ZXN0LnBk
ZjogQWRkZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Rv
d25sb2FkX2pvYi5jcHA6IEFkZGVkLiBUaGlzIHRlc3RzCisgICAgICAgIHRoZSBkb3dubG9hZCBm
dW5jdGlvbmFsaXR5LgorICAgICAgICAoRG93bmxvYWRUZXN0RGF0YSk6CisgICAgICAgIChmaWxl
RXhpc3RzKToKKyAgICAgICAgKHNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKG9uX2Rvd25sb2Fk
X3JlcXVlc3RlZCk6CisgICAgICAgIChvbl9kb3dubG9hZF9jYW5jZWxsZWQpOgorICAgICAgICAo
b25fZG93bmxvYWRfZmFpbGVkKToKKyAgICAgICAgKG9uX2Rvd25sb2FkX2ZpbmlzaGVkKToKKyAg
ICAgICAgKFRFU1RfRik6CisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDoKKyAgICAg
ICAgKFBhZ2VDbGllbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24pOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpoYW5kbGVE
b3dubG9hZFJlcXVlc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKFdlYlBhZ2VQcm94eSk6CisKKzIwMTItMDctMjcgIENocmlzdG9waGUgRHVtZXogIDxj
aHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KKwogICAgICAgICBbRUZMXVtXSzJdIFN0b3AgdXNp
bmcgQyBBUEkgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgcGFnZSBpbiBFd2tfVmlldwogICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTI0NjMKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybUVmbC5jbWFrZQppbmRleCBiNGZhMGFjLi4wNTkxMTA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybUVm
bC5jbWFrZQpAQCAtNDIsOCArNDIsMTAgQEAgTElTVChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAg
ICAgVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuY3BwCiAgICAgVUlQcm9jZXNzL0FQ
SS9lZmwvVmlicmF0aW9uUHJvdmlkZXIuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nv
bnRleHQuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xp
ZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3JlcXVlc3RfbWFuYWdl
cl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmNw
cAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuY3BwCiAgICAgVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmNwcAogICAgIFVJUHJvY2Vz
cy9BUEkvZWZsL2V3a19pbnRlbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVu
dF9zZXJ2aWNlLmNwcApAQCAtMTg2LDYgKzE4OCw3IEBAIFNFVCAoRVdlYktpdDJfSEVBREVSUwog
ICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktp
dDIuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19jb250ZXh0LmgiCiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29va2llX21hbmFnZXIuaCIKKyAgICAiJHtDTUFLRV9DVVJSRU5UX1NP
VVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2IuaCIKICAgICAiJHtD
TUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1p
c3Npb25fcmVxdWVzdC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2ludGVudC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJ
Un0vVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2ludGVudF9zZXJ2aWNlLmgiCkBAIC0yNDksNiArMjUy
LDcgQEAgVEFSR0VUX0xJTktfTElCUkFSSUVTKGV3azJVbml0VGVzdFV0aWxzICR7RVdLMlVuaXRU
ZXN0c19MSUJSQVJJRVN9KQogU0VUKEVXSzJVbml0VGVzdHNfQklOQVJJRVMKICAgICB0ZXN0X2V3
azJfY29udGV4dAogICAgIHRlc3RfZXdrMl9jb29raWVfbWFuYWdlcgorICAgIHRlc3RfZXdrMl9k
b3dubG9hZF9qb2IKICAgICB0ZXN0X2V3azJfdmlldwogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaAppbmRleCA3NDRmYzE2Li45YTA1MmRhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9FV2ViS2l0Mi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiZXdrX2NvbnRl
eHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIKKyNpbmNsdWRlICJld2tfZG93
bmxvYWRfam9iLmgiCiAjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCiAj
aW5jbHVkZSAiZXdrX2ludGVudC5oIgogI2luY2x1ZGUgImV3a19pbnRlbnRfc2VydmljZS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudElt
cGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwu
Y3BwCmluZGV4IDExOGVkYjEuLjZkMDAzOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5jcHAKQEAgLTMyLDYgKzMyLDEwIEBACiAj
aW5jbHVkZSAiV2ViQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkNvbnRleHRNZW51UHJveHkuaCIK
ICNpbmNsdWRlICJXZWJQYWdlUHJveHkuaCIKKyNpbmNsdWRlICJld2tfY29udGV4dC5oIgorI2lu
Y2x1ZGUgImV3a19jb250ZXh0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9i
LmgiCisjaW5jbHVkZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdr
X3ZpZXdfcHJpdmF0ZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI3Niw0ICsy
ODAsMTQgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21S
ZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW4KICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpoYW5kbGVEb3dubG9hZFJlcXVlc3QoRG93bmxvYWRQ
cm94eSogZG93bmxvYWQpCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZXdrRG93bmxvYWQgPSBl
d2tfZG93bmxvYWRfam9iX25ldyhkb3dubG9hZCwgbV92aWV3V2lkZ2V0KTsKKyAgICAvLyBGb3Ig
bm93IHdlIG9ubHkgc3VwcG9ydCBvbmUgZGVmYXVsdCBjb250ZXh0LCBidXQgb25jZSB3ZSBzdXBw
b3J0CisgICAgLy8gbXVsdGlwbGUgY29udGV4dHMsIHdlIHdpbGwgbmVlZCB0byByZXRyaWV2ZSB0
aGUgY29udGV4dCBmcm9tIHRoZQorICAgIC8vIHZpZXcuCisgICAgZXdrX2NvbnRleHRfZG93bmxv
YWRfam9iX2FkZChld2tfY29udGV4dF9kZWZhdWx0X2dldCgpLCBld2tEb3dubG9hZCk7CisgICAg
ZXdrX2Rvd25sb2FkX2pvYl91bnJlZihld2tEb3dubG9hZCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFn
ZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL1BhZ2VDbGll
bnRJbXBsLmgKaW5kZXggNDI3ZWY1Mi4uN2RmYzk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9QYWdlQ2xpZW50SW1wbC5oCkBAIC03Niw2ICs3Niw4IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBXZWJDb3JlOjpJbnRQb2ludCBzY3JlZW5Ub1dpbmRvdyhjb25z
dCBXZWJDb3JlOjpJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgV2ViQ29yZTo6SW50UmVjdCB3aW5k
b3dUb1NjcmVlbihjb25zdCBXZWJDb3JlOjpJbnRSZWN0Jik7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKTsKKwogICAgIHZpcnR1YWwgdm9p
ZCBkb25lV2l0aEtleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBib29sKTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIHZpcnR1YWwgdm9pZCBkb25lV2l0aFRvdWNo
RXZlbnQoY29uc3QgTmF0aXZlV2ViVG91Y2hFdmVudCYsIGJvb2wgd2FzRXZlbnRIYW5kbGVkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcApp
bmRleCBjMmY5MjQ3Li5mMmVkNDE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC0yNyw5ICsyNywxMiBAQAogI2luY2x1ZGUgIldL
Q29udGV4dFNvdXAuaCIKICNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUgIldLU3Ry
aW5nLmgiCisjaW5jbHVkZSAiZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X3ByaXZhdGUuaCIK
ICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2NvbnRleHRf
cmVxdWVzdF9tYW5hZ2VyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX2Nvb2tpZV9t
YW5hZ2VyX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCisjaW5jbHVk
ZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAtNjIsNiArNjUsNyBAQCBzdHJ1
Y3QgX0V3a19Db250ZXh0IHsKICNpZiBFTkFCTEUoVklCUkFUSU9OKQogICAgIFJlZlB0cjxWaWJy
YXRpb25Qcm92aWRlcj4gdmlicmF0aW9uUHJvdmlkZXI7CiAjZW5kaWYKKyAgICBIYXNoTWFwPHVp
bnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj4gZG93bmxvYWRKb2JzOwogCiAgICAgV0tSZXRhaW5Q
dHI8V0tTb3VwUmVxdWVzdE1hbmFnZXJSZWY+IHJlcXVlc3RNYW5hZ2VyOwogICAgIFVSTFNjaGVt
ZUhhbmRsZXJNYXAgdXJsU2NoZW1lSGFuZGxlcnM7CkBAIC04MiwxMiArODYsMTggQEAgc3RydWN0
IF9Fd2tfQ29udGV4dCB7CiAjZW5kaWYKIAogICAgICAgICBld2tfY29udGV4dF9yZXF1ZXN0X21h
bmFnZXJfY2xpZW50X2F0dGFjaCh0aGlzKTsKKyAgICAgICAgZXdrX2NvbnRleHRfZG93bmxvYWRf
Y2xpZW50X2F0dGFjaCh0aGlzKTsKICAgICB9CiAKICAgICB+X0V3a19Db250ZXh0KCkKICAgICB7
CiAgICAgICAgIGlmIChjb29raWVNYW5hZ2VyKQogICAgICAgICAgICAgZXdrX2Nvb2tpZV9tYW5h
Z2VyX2ZyZWUoY29va2llTWFuYWdlcik7CisKKyAgICAgICAgSGFzaE1hcDx1aW50NjRfdCwgRXdr
X0Rvd25sb2FkX0pvYio+OjppdGVyYXRvciBpdCA9IGRvd25sb2FkSm9icy5iZWdpbigpOworICAg
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBFd2tfRG93bmxvYWRfSm9iKj46Oml0ZXJhdG9yIGVuZCA9
IGRvd25sb2FkSm9icy5lbmQoKTsKKyAgICAgICAgZm9yICggOyBpdCAhPSBlbmQ7ICsraXQpCisg
ICAgICAgICAgICBld2tfZG93bmxvYWRfam9iX3VucmVmKGl0LT5zZWNvbmQpOwogICAgIH0KIH07
CiAKQEAgLTEwOCw2ICsxMTgsNDcgQEAgV0tDb250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29udGV4
dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0NvbnRleHQpCiAKIC8qKgogICogQGludGVybmFs
CisgKiBSZWdpc3RlcnMgdGhhdCBhIG5ldyBkb3dubG9hZCBoYXMgYmVlbiByZXF1ZXN0ZWQuCisg
Ki8KK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2FkZChFd2tfQ29udGV4dCogZXdrQ29u
dGV4dCwgRXdrX0Rvd25sb2FkX0pvYiogZXdrRG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oZXdrRG93bmxvYWQpOworCisgICAgdWludDY0X3QgZG93bmxvYWRJZCA9IGV3a19kb3dubG9h
ZF9qb2JfaWRfZ2V0KGV3a0Rvd25sb2FkKTsKKyAgICBpZiAoZXdrQ29udGV4dC0+ZG93bmxvYWRK
b2JzLmNvbnRhaW5zKGRvd25sb2FkSWQpKQorICAgICAgICByZXR1cm47CisKKyAgICBld2tfZG93
bmxvYWRfam9iX3JlZihld2tEb3dubG9hZCk7CisgICAgZXdrQ29udGV4dC0+ZG93bmxvYWRKb2Jz
LmFkZChkb3dubG9hZElkLCBld2tEb3dubG9hZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisg
KiBSZXR1cm5zIHRoZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9h
ZElkLCBvcgorICogQGMgMCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK0V3a19Eb3dubG9hZF9K
b2IqIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQoY29uc3QgRXdrX0NvbnRleHQqIGV3a0Nv
bnRleHQsIHVpbnQ2NF90IGRvd25sb2FkSWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV3a0NvbnRleHQsIDApOworCisgICAgcmV0dXJuIGV3a0NvbnRleHQtPmRvd25s
b2FkSm9icy5nZXQoZG93bmxvYWRJZCk7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBSZW1v
dmVzIHRoZSAjRXdrX0Rvd25sb2FkX0pvYiB3aXRoIHRoZSBnaXZlbiBAYSBkb3dubG9hZElkIGZy
b20gdGhlIGludGVybmFsCisgKiBIYXNoTWFwLgorICovCit2b2lkIGV3a19jb250ZXh0X2Rvd25s
b2FkX2pvYl9yZW1vdmUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIHVpbnQ2NF90IGRvd25sb2Fk
SWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZXdrQ29udGV4dCk7CisgICAg
RXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tDb250ZXh0LT5kb3dubG9hZEpvYnMudGFr
ZShkb3dubG9hZElkKTsKKyAgICBpZiAoZG93bmxvYWQpCisgICAgICAgIGV3a19kb3dubG9hZF9q
b2JfdW5yZWYoZG93bmxvYWQpOworfQorCisvKioKICAqIFJldHJpZXZlIHRoZSByZXF1ZXN0IG1h
bmFnZXIgZm9yIEBhIGV3a0NvbnRleHQuCiAgKgogICogQHBhcmFtIGV3a0NvbnRleHQgYSAjRXdr
X0NvbnRleHQgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiN2UxNwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVu
dC5jcHAKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwg
Q29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIkRvd25sb2FkUHJveHkuaCIKKyNpbmNsdWRlICJXS0FQSUNh
c3QuaCIKKyNpbmNsdWRlICJXS0NvbnRleHQuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgorI2lu
Y2x1ZGUgImV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgiCisjaW5jbHVkZSAi
ZXdrX2NvbnRleHRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a19kb3dubG9hZF9qb2IuaCIKKyNp
bmNsdWRlICJld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jl
c3BvbnNlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZV9wcml2YXRlLmgiCisjaW5jbHVk
ZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImV3a193ZWJfZXJyb3IuaCIKKyNpbmNs
dWRlICJld2tfd2ViX2Vycm9yX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0
YXRpYyBpbmxpbmUgRXdrX0NvbnRleHQqIHRvRXdrQ29udGV4dChjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxFd2tfQ29udGV4dCo+KGNvbnN0X2Nhc3Q8
dm9pZCo+KGNsaWVudEluZm8pKTsKK30KKworc3RhdGljIFdLU3RyaW5nUmVmIGRlY2lkZURlc3Rp
bmF0aW9uV2l0aFN1Z2dlc3RlZEZpbGVuYW1lKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3
a0Rvd25sb2FkLCBXS1N0cmluZ1JlZiBmaWxlbmFtZSwgYm9vbCogYWxsb3dPdmVyd3JpdGUsIGNv
bnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQg
PSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
dG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7
CisKKyAgICBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9zZXQoZG93bmxvYWQs
IHRvSW1wbChmaWxlbmFtZSktPnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgLy8gV2Ug
c2VuZCB0aGUgbmV3IGRvd25sb2FkIHNpZ25hbCBvbiB0aGUgRXdrX1ZpZXcgb25seSBvbmNlIHdl
IGhhdmUgcmVjZWl2ZWQgdGhlIHJlc3BvbnNlCisgICAgLy8gYW5kIHRoZSBzdWdnZXN0ZWQgZmls
ZSBuYW1lLgorICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9yZXF1ZXN0ZWQoZXdrX2Rvd25sb2Fk
X2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKworICAgIC8vIERvd25sb2FkU291
cCBleHBlY3RzIHRoZSBkZXN0aW5hdGlvbiB0byBiZSBhIFVSSS4KKyAgICBTdHJpbmcgZGVzdGlu
YXRpb24gPSBTdHJpbmcoImZpbGU6Ly8iKSArIFN0cmluZzo6ZnJvbVVURjgoZXdrX2Rvd25sb2Fk
X2pvYl9kZXN0aW5hdGlvbl9nZXQoZG93bmxvYWQpKTsKKworICAgIHJldHVybiBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhkZXN0aW5hdGlvbi51dGY4KCkuZGF0YSgpKTsKK30KKworc3Rh
dGljIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3
a0Rvd25sb2FkLCBXS1VSTFJlc3BvbnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9k
b3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdrRG93bmxv
YWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAgRXdrX1VybF9S
ZXNwb25zZSogcmVzcG9uc2UgPSBld2tfdXJsX3Jlc3BvbnNlX25ldyh0b0ltcGwod2tSZXNwb25z
ZSktPnJlc291cmNlUmVzcG9uc2UoKSk7CisgICAgZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25zZV9z
ZXQoZG93bmxvYWQsIHJlc3BvbnNlKTsKKyAgICBld2tfdXJsX3Jlc3BvbnNlX3VucmVmKHJlc3Bv
bnNlKTsKK30KKworc3RhdGljIHZvaWQgZGlkQ3JlYXRlRGVzdGluYXRpb24oV0tDb250ZXh0UmVm
LCBXS0Rvd25sb2FkUmVmIHdrRG93bmxvYWQsIFdLU3RyaW5nUmVmIHBhdGgsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBsKHdr
RG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAgICBl
d2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9TVEFU
RV9ET1dOTE9BRElORyk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVEYXRhKFdLQ29udGV4
dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2FkLCB1aW50NjRfdCBsZW5ndGgsIGNvbnN0IHZv
aWQqIGNsaWVudEluZm8pCit7CisgICAgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tf
Y29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgdG9JbXBs
KHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCkpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisgICAg
ZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKGRvd25sb2FkLCBsZW5ndGgpOworfQorCitz
dGF0aWMgdm9pZCBkaWRGYWlsKFdLQ29udGV4dFJlZiwgV0tEb3dubG9hZFJlZiB3a0Rvd25sb2Fk
LCBXS0Vycm9yUmVmIGVycm9yLCBjb25zdCB2b2lkICpjbGllbnRJbmZvKQoreworICAgIHVpbnQ2
NF90IGRvd25sb2FkSWQgPSB0b0ltcGwod2tEb3dubG9hZCktPmRvd25sb2FkSUQoKTsKKyAgICBF
d2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9nZXQo
dG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLCBkb3dubG9hZElkKTsKKyAgICBBU1NFUlQoZG93bmxv
YWQpOworCisgICAgRXdrX1dlYl9FcnJvciogZXdrRXJyb3IgPSBld2tfd2ViX2Vycm9yX25ldyhl
cnJvcik7CisgICAgZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoZG93bmxvYWQsIEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfRkFJTEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVk
KGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQoZG93bmxvYWQpLCBkb3dubG9hZCwgZXdrRXJyb3Ip
OworICAgIGV3a193ZWJfZXJyb3JfZnJlZShld2tFcnJvcik7CisgICAgZXdrX2NvbnRleHRfZG93
bmxvYWRfam9iX3JlbW92ZSh0b0V3a0NvbnRleHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOwor
fQorCitzdGF0aWMgdm9pZCBkaWRDYW5jZWwoV0tDb250ZXh0UmVmLCBXS0Rvd25sb2FkUmVmIHdr
RG93bmxvYWQsIGNvbnN0IHZvaWQgKmNsaWVudEluZm8pCit7CisgICAgdWludDY0X3QgZG93bmxv
YWRJZCA9IHRvSW1wbCh3a0Rvd25sb2FkKS0+ZG93bmxvYWRJRCgpOworICAgIEV3a19Eb3dubG9h
ZF9Kb2IqIGRvd25sb2FkID0gZXdrX2NvbnRleHRfZG93bmxvYWRfam9iX2dldCh0b0V3a0NvbnRl
eHQoY2xpZW50SW5mbyksIGRvd25sb2FkSWQpOworICAgIEFTU0VSVChkb3dubG9hZCk7CisKKyAg
ICBld2tfZG93bmxvYWRfam9iX3N0YXRlX3NldChkb3dubG9hZCwgRVdLX0RPV05MT0FEX0pPQl9T
VEFURV9DQU5DRUxMRUQpOworICAgIGV3a192aWV3X2Rvd25sb2FkX2pvYl9jYW5jZWxsZWQoZXdr
X2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBld2tfY29u
dGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxv
YWRJZCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaChXS0NvbnRleHRSZWYsIFdLRG93bmxv
YWRSZWYgd2tEb3dubG9hZCwgY29uc3Qgdm9pZCAqY2xpZW50SW5mbykKK3sKKyAgICB1aW50NjRf
dCBkb3dubG9hZElkID0gdG9JbXBsKHdrRG93bmxvYWQpLT5kb3dubG9hZElEKCk7CisgICAgRXdr
X0Rvd25sb2FkX0pvYiogZG93bmxvYWQgPSBld2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KHRv
RXdrQ29udGV4dChjbGllbnRJbmZvKSwgZG93bmxvYWRJZCk7CisgICAgQVNTRVJUKGRvd25sb2Fk
KTsKKworICAgIGV3a19kb3dubG9hZF9qb2Jfc3RhdGVfc2V0KGRvd25sb2FkLCBFV0tfRE9XTkxP
QURfSk9CX1NUQVRFX0ZJTklTSEVEKTsKKyAgICBld2tfdmlld19kb3dubG9hZF9qb2JfZmluaXNo
ZWQoZXdrX2Rvd25sb2FkX2pvYl92aWV3X2dldChkb3dubG9hZCksIGRvd25sb2FkKTsKKyAgICBl
d2tfY29udGV4dF9kb3dubG9hZF9qb2JfcmVtb3ZlKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKSwg
ZG93bmxvYWRJZCk7Cit9CisKK3ZvaWQgZXdrX2NvbnRleHRfZG93bmxvYWRfY2xpZW50X2F0dGFj
aChFd2tfQ29udGV4dCogZXdrQ29udGV4dCkKK3sKKyAgICBXS0NvbnRleHREb3dubG9hZENsaWVu
dCB3a0Rvd25sb2FkQ2xpZW50OworICAgIG1lbXNldCgmd2tEb3dubG9hZENsaWVudCwgMCwgc2l6
ZW9mKFdLQ29udGV4dERvd25sb2FkQ2xpZW50KSk7CisKKyAgICB3a0Rvd25sb2FkQ2xpZW50LnZl
cnNpb24gPSBrV0tDb250ZXh0RG93bmxvYWRDbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICB3a0Rv
d25sb2FkQ2xpZW50LmNsaWVudEluZm8gPSBld2tDb250ZXh0OworICAgIHdrRG93bmxvYWRDbGll
bnQuZGlkQ2FuY2VsID0gZGlkQ2FuY2VsOworICAgIHdrRG93bmxvYWRDbGllbnQuZGVjaWRlRGVz
dGluYXRpb25XaXRoU3VnZ2VzdGVkRmlsZW5hbWUgPSBkZWNpZGVEZXN0aW5hdGlvbldpdGhTdWdn
ZXN0ZWRGaWxlbmFtZTsKKyAgICB3a0Rvd25sb2FkQ2xpZW50LmRpZENyZWF0ZURlc3RpbmF0aW9u
ID0gZGlkQ3JlYXRlRGVzdGluYXRpb247CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRSZWNlaXZl
UmVzcG9uc2UgPSBkaWRSZWNlaXZlUmVzcG9uc2U7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRS
ZWNlaXZlRGF0YSA9IGRpZFJlY2VpdmVEYXRhOworICAgIHdrRG93bmxvYWRDbGllbnQuZGlkRmFp
bCA9IGRpZEZhaWw7CisgICAgd2tEb3dubG9hZENsaWVudC5kaWRGaW5pc2ggPSBkaWRGaW5pc2g7
CisKKyAgICBXS0NvbnRleHRTZXREb3dubG9hZENsaWVudChld2tfY29udGV4dF9XS0NvbnRleHRf
Z2V0KGV3a0NvbnRleHQpLCAmd2tEb3dubG9hZENsaWVudCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfZG93bmxvYWRfY2xp
ZW50X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjcwMTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlLmgKQEAgLTAs
MCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfY29udGV4dF9kb3du
bG9hZF9jbGllbnRfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVu
dF9wcml2YXRlX2gKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Db250ZXh0IEV3a19Db250ZXh0Owor
Cit2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9hdHRhY2goRXdrX0NvbnRleHQqKTsK
KworI2VuZGlmIC8vIGV3a19jb250ZXh0X2Rvd25sb2FkX2NsaWVudF9wcml2YXRlX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZh
dGUuaAppbmRleCBkNzhlMWU5Li5kYjllOTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCkBAIC0yMywxMCArMjMs
MTUgQEAKICNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgogCiB0eXBlZGVmIHN0cnVjdCBfRXdr
X0NvbnRleHQgRXdrX0NvbnRleHQ7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2FkX0pvYiBF
d2tfRG93bmxvYWRfSm9iOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfU2NoZW1lX1JlcXVlc3Qg
RXdrX1VybF9TY2hlbWVfUmVxdWVzdDsKIAogV0tDb250ZXh0UmVmIGV3a19jb250ZXh0X1dLQ29u
dGV4dF9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKIFdLU291cFJlcXVlc3RNYW5hZ2VyUmVmIGV3
a19jb250ZXh0X3JlcXVlc3RfbWFuYWdlcl9nZXQoY29uc3QgRXdrX0NvbnRleHQqKTsKIHZvaWQg
ZXdrX2NvbnRleHRfdXJsX3NjaGVtZV9yZXF1ZXN0X3JlY2VpdmVkKEV3a19Db250ZXh0KiwgRXdr
X1VybF9TY2hlbWVfUmVxdWVzdCopOwogCit2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9h
ZGQoRXdrX0NvbnRleHQqLCBFd2tfRG93bmxvYWRfSm9iKik7CitFd2tfRG93bmxvYWRfSm9iKiBl
d2tfY29udGV4dF9kb3dubG9hZF9qb2JfZ2V0KGNvbnN0IEV3a19Db250ZXh0KiwgdWludDY0X3Qg
ZG93bmxvYWRJZCk7Cit2b2lkIGV3a19jb250ZXh0X2Rvd25sb2FkX2pvYl9yZW1vdmUoRXdrX0Nv
bnRleHQqLCB1aW50NjRfdCBkb3dubG9hZElkKTsKKwogI2VuZGlmIC8vIGV3a19jb250ZXh0X3By
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X2Rvd25sb2FkX2pvYi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
ZG93bmxvYWRfam9iLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDE2
ODEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Rvd25sb2FkX2pvYi5jcHAKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJld2tfZG93bmxvYWRfam9iLmgiCisK
KyNpbmNsdWRlICJEb3dubG9hZFByb3h5LmgiCisjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5j
bHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiZXdrX2Rvd25sb2FkX2pvYl9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3VybF9yZXF1ZXN0
X3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxFY29yZS5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCisvKioKKyAqIFxzdHJ1Y3QgIF9Fd2tfRG93bmxvYWRfSm9iCisgKiBAYnJpZWYgICBDb250
YWlucyB0aGUgZG93bmxvYWQgZGF0YS4KKyAqLworc3RydWN0IF9Fd2tfRG93bmxvYWRfSm9iIHsK
KyAgICB1bnNpZ25lZCBpbnQgX19yZWY7IC8qKjwgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiB0aGUg
b2JqZWN0ICovCisgICAgRG93bmxvYWRQcm94eSogZG93bmxvYWRQcm94eTsKKyAgICBFdmFzX09i
amVjdCogdmlldzsKKyAgICBFd2tfRG93bmxvYWRfSm9iX1N0YXRlIHN0YXRlOworICAgIEV3a19V
cmxfUmVxdWVzdCogcmVxdWVzdDsKKyAgICBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZTsKKyAg
ICBkb3VibGUgc3RhcnRUaW1lOworICAgIGRvdWJsZSBlbmRUaW1lOworICAgIHVpbnQ2NF90IGRv
d25sb2FkZWQ7IC8qKjwgbGVuZ3RoIGFscmVhZHkgZG93bmxvYWRlZCAqLworICAgIGNvbnN0IGNo
YXIqIGRlc3RpbmF0aW9uOworICAgIGNvbnN0IGNoYXIqIHN1Z2dlc3RlZEZpbGVuYW1lOworCisg
ICAgX0V3a19Eb3dubG9hZF9Kb2IoRG93bmxvYWRQcm94eSogZG93bmxvYWQsIEV2YXNfT2JqZWN0
KiBld2tWaWV3KQorICAgICAgICA6IF9fcmVmKDEpCisgICAgICAgICwgZG93bmxvYWRQcm94eShk
b3dubG9hZCkKKyAgICAgICAgLCB2aWV3KGV3a1ZpZXcpCisgICAgICAgICwgc3RhdGUoRVdLX0RP
V05MT0FEX0pPQl9TVEFURV9OT1RfU1RBUlRFRCkKKyAgICAgICAgLCByZXF1ZXN0KDApCisgICAg
ICAgICwgcmVzcG9uc2UoMCkKKyAgICAgICAgLCBzdGFydFRpbWUoLTEpCisgICAgICAgICwgZW5k
VGltZSgtMSkKKyAgICAgICAgLCBkb3dubG9hZGVkKDApCisgICAgICAgICwgZGVzdGluYXRpb24o
MCkKKyAgICAgICAgLCBzdWdnZXN0ZWRGaWxlbmFtZSgwKQorICAgIHsgfQorCisgICAgfl9Fd2tf
RG93bmxvYWRfSm9iKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghX19yZWYpOworICAgICAgICBp
ZiAocmVxdWVzdCkKKyAgICAgICAgICAgIGV3a191cmxfcmVxdWVzdF91bnJlZihyZXF1ZXN0KTsK
KyAgICAgICAgaWYgKHJlc3BvbnNlKQorICAgICAgICAgICAgZXdrX3VybF9yZXNwb25zZV91bnJl
ZihyZXNwb25zZSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGRlc3RpbmF0aW9uKTsK
KyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIH0K
K307CisKK3ZvaWQgZXdrX2Rvd25sb2FkX2pvYl9yZWYoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisgICAg
Kytkb3dubG9hZC0+X19yZWY7Cit9CisKK3ZvaWQgZXdrX2Rvd25sb2FkX2pvYl91bnJlZihFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihkb3dubG9hZCk7CisKKyAgICBpZiAoLS1kb3dubG9hZC0+X19yZWYpCisgICAgICAgIHJldHVy
bjsKKworICAgIGRlbGV0ZSBkb3dubG9hZDsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFF1
ZXJpZXMgdGhlIGlkZW50aWZpZXIgZm9yIHRoaXMgZG93bmxvYWQKKyAqLwordWludDY0X3QgZXdr
X2Rvd25sb2FkX2pvYl9pZF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCit7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQtPmRvd25sb2FkUHJveHksIDAp
OworCisgICAgcmV0dXJuIGRvd25sb2FkLT5kb3dubG9hZFByb3h5LT5kb3dubG9hZElEKCk7Cit9
CisKKy8qKgorICogQGludGVybmFsCisgKiBSZXR1cm5zIHRoZSB2aWV3IHRoaXMgZG93bmxvYWQg
aXMgYXR0YWNoZWQgdG8uCisgKiBUaGUgdmlldyBpcyBuZWVkZWQgdG8gc2VuZCBub3RpZmljYXRp
b24gc2lnbmFscy4KKyAqLworRXZhc19PYmplY3QqIGV3a19kb3dubG9hZF9qb2Jfdmlld19nZXQo
Y29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+dmll
dzsKK30KKworRXdrX0Rvd25sb2FkX0pvYl9TdGF0ZSBld2tfZG93bmxvYWRfam9iX3N0YXRlX2dl
dChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfVU5LTk9X
Tik7CisKKyAgICByZXR1cm4gZG93bmxvYWQtPnN0YXRlOworfQorCitFd2tfVXJsX1JlcXVlc3Qq
IGV3a19kb3dubG9hZF9qb2JfcmVxdWVzdF9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiogZG93
bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCAw
KTsKKworICAgIGlmICghZG93bmxvYWQtPnJlcXVlc3QpIHsKKyAgICAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LCAwKTsKKyAgICAgICAg
V0tSZXRhaW5QdHI8V0tVUkxSZXF1ZXN0UmVmPiB3a1VSTFJlcXVlc3QoQWRvcHRXSywgdG9BUEko
V2ViVVJMUmVxdWVzdDo6Y3JlYXRlKGRvd25sb2FkLT5kb3dubG9hZFByb3h5LT5yZXF1ZXN0KCkp
LmxlYWtSZWYoKSkpOworICAgICAgICBjb25zdF9jYXN0PEV3a19Eb3dubG9hZF9Kb2IqPihkb3du
bG9hZCktPnJlcXVlc3QgPSBld2tfdXJsX3JlcXVlc3RfbmV3KHdrVVJMUmVxdWVzdC5nZXQoKSk7
CisgICAgfQorCisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXF1ZXN0OworfQorCitFd2tfVXJsX1Jl
c3BvbnNlKiBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX2dldChjb25zdCBFd2tfRG93bmxvYWRf
Sm9iKiBkb3dubG9hZCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93
bmxvYWQsIDApOworCisgICAgcmV0dXJuIGRvd25sb2FkLT5yZXNwb25zZTsKK30KKworY29uc3Qg
Y2hhciogZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25sb2Fk
X0pvYiogZG93bmxvYWQpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRv
d25sb2FkLCAwKTsKKworICAgIHJldHVybiBkb3dubG9hZC0+ZGVzdGluYXRpb247Cit9CisKK0Vp
bmFfQm9vbCBld2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX3NldChFd2tfRG93bmxvYWRfSm9i
KiBkb3dubG9hZCwgY29uc3QgY2hhciogZGVzdGluYXRpb24pCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25sb2FkLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGRlc3RpbmF0aW9uLCBmYWxzZSk7CisKKyAgICBlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJmRvd25sb2FkLT5kZXN0aW5hdGlvbiwgZGVzdGluYXRpb24pOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2NvbnN0IGNoYXIgKmV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVk
X2ZpbGVuYW1lX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3sKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bmxvYWQsIDApOworCisgICAgcmV0dXJu
IGRvd25sb2FkLT5zdWdnZXN0ZWRGaWxlbmFtZTsKK30KKworRWluYV9Cb29sIGV3a19kb3dubG9h
ZF9qb2JfY2FuY2VsKEV3a19Eb3dubG9hZF9Kb2IqIGRvd25sb2FkKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZC0+ZG93bmxvYWRQcm94eSwgZmFsc2UpOworCisg
ICAgaWYgKGRvd25sb2FkLT5zdGF0ZSAhPSBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0RPV05MT0FE
SU5HKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBkb3dubG9hZC0+c3RhdGUgPSBFV0tf
RE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkc7CisgICAgZG93bmxvYWQtPmRvd25sb2FkUHJv
eHktPmNhbmNlbCgpOworICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUgZXdrX2Rvd25sb2Fk
X2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRvd25s
b2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwgMCk7
CisKKyAgICBpZiAoIWRvd25sb2FkLT5yZXNwb25zZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBjb25zdCB1bnNpZ25lZCBsb25nIGNvbnRlbnRMZW5ndGggPSBld2tfdXJsX3Jlc3BvbnNlX2Nv
bnRlbnRfbGVuZ3RoX2dldChkb3dubG9hZC0+cmVzcG9uc2UpOworICAgIGlmICghY29udGVudExl
bmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pihkb3dubG9hZC0+ZG93bmxvYWRlZCkgLyBjb250ZW50TGVuZ3RoOworfQorCitkb3VibGUgZXdr
X2Rvd25sb2FkX2pvYl9lbGFwc2VkX3RpbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IqIGRv
d25sb2FkKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3dubG9hZCwg
MCk7CisKKyAgICAvLyBEb3dubG9hZCBoYXMgbm90IHN0YXJ0ZWQgeWV0LgorICAgIGlmIChkb3du
bG9hZC0+c3RhcnRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBEb3dubG9h
ZCBoYWQgZW5kZWQsIHJldHVybiB0aGUgdGltZSBlbGFwc2VkIGJldHdlZW4gdGhlCisgICAgLy8g
ZG93bmxvYWQgc3RhcnQgYW5kIHRoZSBlbmQgZXZlbnQuCisgICAgaWYgKGRvd25sb2FkLT5lbmRU
aW1lID49IDApCisgICAgICAgIHJldHVybiBkb3dubG9hZC0+ZW5kVGltZSAtIGRvd25sb2FkLT5z
dGFydFRpbWU7CisKKyAgICAvLyBEb3dubG9hZCBpcyBzdGlsbCBnb2luZy4KKyAgICByZXR1cm4g
ZWNvcmVfdGltZV9nZXQoKSAtIGRvd25sb2FkLT5zdGFydFRpbWU7Cit9CisKKy8qKgorICogQGlu
dGVybmFsCisgKiBTZXRzIHRoZSBVUkwgQGEgcmVzcG9uc2UgZm9yIHRoaXMgQGEgZG93bmxvYWQu
CisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25zZV9zZXQoRXdrX0Rvd25sb2FkX0pv
YiogZG93bmxvYWQsIEV3a19VcmxfUmVzcG9uc2UqIHJlc3BvbnNlKQoreworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGRvd25sb2FkKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihyZXNwb25zZSk7CisKKyAgICBld2tfdXJsX3Jlc3BvbnNlX3JlZihyZXNwb25zZSk7Cisg
ICAgZG93bmxvYWQtPnJlc3BvbnNlID0gcmVzcG9uc2U7Cit9CisKKy8qKgorICogQGludGVybmFs
CisgKiBTZXRzIHRoZSBzdWdnZXN0ZWQgZmlsZSBuYW1lIGZvciB0aGlzIEBhIGRvd25sb2FkLgor
ICovCit2b2lkIGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX3NldChFd2tfRG93
bmxvYWRfSm9iKiBkb3dubG9hZCwgY29uc3QgY2hhciogc3VnZ2VzdGVkRmlsZW5hbWUpCit7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oZG93bmxvYWQpOworCisgICAgZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZkb3dubG9hZC0+c3VnZ2VzdGVkRmlsZW5hbWUsIHN1Z2dlc3RlZEZp
bGVuYW1lKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFJlcG9ydCBhIGdpdmVuIGFtb3Vu
dCBvZiBkYXRhIHdhcyByZWNlaXZlZC4KKyAqLwordm9pZCBld2tfZG93bmxvYWRfam9iX3JlY2Vp
dmVkX2RhdGEoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIHVpbnQ2NF90IGxlbmd0aCkKK3sK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihkb3dubG9hZCk7CisKKyAgICBkb3dubG9h
ZC0+ZG93bmxvYWRlZCArPSBsZW5ndGg7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBTZXRz
IHRoZSBzdGF0ZSBvZiB0aGUgZG93bmxvYWQuCisgKi8KK3ZvaWQgZXdrX2Rvd25sb2FkX2pvYl9z
dGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQsIEV3a19Eb3dubG9hZF9Kb2JfU3Rh
dGUgc3RhdGUpCit7CisgICAgZG93bmxvYWQtPnN0YXRlID0gc3RhdGU7CisKKyAgICAvLyBVcGRh
dGUgc3RhcnQgdGltZSBpZiB0aGUgZG93bmxvYWQgaGFzIHN0YXJ0ZWQKKyAgICBpZiAoc3RhdGUg
PT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9ET1dOTE9BRElORykKKyAgICAgICAgZG93bmxvYWQt
PnN0YXJ0VGltZSA9IGVjb3JlX3RpbWVfZ2V0KCk7CisKKyAgICAvLyBVcGRhdGUgZW5kIHRpbWUg
aWYgdGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZCAoc3VjY2Vzc2Z1bGx5IG9yIG5vdCkKKyAgICBp
ZiAoc3RhdGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GQUlMRUQKKyAgICAgICAgfHwgc3Rh
dGUgPT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9DQU5DRUxMRUQKKyAgICAgICAgfHwgc3RhdGUg
PT0gRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCkKKyAgICAgICAgZG93bmxvYWQtPmVu
ZFRpbWUgPSBlY29yZV90aW1lX2dldCgpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICogQ29u
c3RydWN0cyBhIEV3a19Eb3dubG9hZF9Kb2IgZnJvbSBhIERvd25sb2FkUHJveHkuCisgKi8KK0V3
a19Eb3dubG9hZF9Kb2IqIGV3a19kb3dubG9hZF9qb2JfbmV3KERvd25sb2FkUHJveHkqIGRvd25s
b2FkLCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoZG93bmxvYWQsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChld2tWaWV3LCAwKTsKKworICAgIHJldHVybiBuZXcgX0V3a19Eb3dubG9hZF9Kb2IoZG93bmxv
YWQsIGV3a1ZpZXcpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Rvd25sb2FkX2pvYi5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2Rvd25sb2FkX2pvYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjY4ZjAzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfZG93bmxvYWRfam9iLmgKQEAgLTAsMCArMSwyMDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8qKgorICogQGZpbGUgICAgZXdrX2Rvd25sb2FkX2pvYi5oCisgKiBAYnJpZWYgICBE
ZXNjcmliZXMgdGhlIERvd25sb2FkIEpvYiBBUEkuCisgKgorICogQG5vdGUgRXdrX0Rvd25sb2Fk
X0pvYiBlbmNhcHN1bGF0ZXMgYSBXZWJLaXQgZG93bmxvYWQgam9iIGluIG9yZGVyIHRvIHByb3Zp
ZGUKKyAqIGluZm9ybWF0aW9uIGFib3V0IGl0IGFuZCBpbnRlcmFjdCB3aXRoIGl0IChlLmcuIHNl
dCB0aGUgZGVzdGluYXRpb24KKyAqIHBhdGgsIGNhbmNlbCB0aGUgZG93bmxvYWQsIC4uLikuCisg
Ki8KKworI2lmbmRlZiBld2tfZG93bmxvYWRfam9iX2gKKyNkZWZpbmUgZXdrX2Rvd25sb2FkX2pv
Yl9oCisKKyNpbmNsdWRlICJld2tfdXJsX3JlcXVlc3QuaCIKKyNpbmNsdWRlICJld2tfdXJsX3Jl
c3BvbnNlLmgiCisjaW5jbHVkZSA8RWluYS5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qKiBDcmVhdGVzIGEgdHlwZSBuYW1lIGZvciBfRXdrX0Rvd25s
b2FkX0pvYl9Kb2IgKi8KK3R5cGVkZWYgc3RydWN0IF9Fd2tfRG93bmxvYWRfSm9iIEV3a19Eb3du
bG9hZF9Kb2I7CisKKy8vLyBEZWZpbmVzIHRoZSBwb3NzaWJsZSBzdGF0ZXMgb2YgYSBkb3dubG9h
ZC4KK2VudW0gX0V3a19Eb3dubG9hZF9Kb2JfU3RhdGUgeworICAgIC8vLyBUaGUgZG93bmxvYWQg
c3RhdGUgaXMgdW5rbm93bgorICAgIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfVU5LTk9XTiA9IC0x
LAorICAgIC8vLyBUaGUgZG93bmxvYWQgaGFzIG5vdCBzdGFydGVkIHlldAorICAgIEVXS19ET1dO
TE9BRF9KT0JfU1RBVEVfTk9UX1NUQVJURUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBoYXMgc3Rh
cnRlZAorICAgIEVXS19ET1dOTE9BRF9KT0JfU1RBVEVfRE9XTkxPQURJTkcsCisgICAgLy8vIFRo
ZSBkb3dubG9hZCBzdG9wcGVkIGJlY2F1c2Ugb2YgYSBmYWlsdXJlCisgICAgRVdLX0RPV05MT0FE
X0pPQl9TVEFURV9GQUlMRUQsCisgICAgLy8vIFRoZSBkb3dubG9hZCBpcyBiZWluZyBjYW5jZWxs
ZWQKKyAgICBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0NBTkNFTExJTkcsCisgICAgLy8vIFRoZSBk
b3dubG9hZCBzdG9wcGVkIGJlY2F1c2UgaXQgd2FzIGNhbmNlbGxlZAorICAgIEVXS19ET1dOTE9B
RF9KT0JfU1RBVEVfQ0FOQ0VMTEVELAorICAgIC8vLyBUaGUgZG93bmxvYWQgY29tcGxldGVkIHN1
Y2Nlc3NmdWxseS4KKyAgICBFV0tfRE9XTkxPQURfSk9CX1NUQVRFX0ZJTklTSEVECit9OworLy8v
IENyZWF0ZXMgYSB0eXBlIG5hbWUgZm9yIEBhIF9Fd2tfRG93bmxvYWRfSm9iX1N0YXRlLgordHlw
ZWRlZiBlbnVtIF9Fd2tfRG93bmxvYWRfSm9iX1N0YXRlIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGU7
CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9i
amVjdC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgdGhlIGRvd25sb2FkIG9iamVjdCB0byBpbmNy
ZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50CisgKi8KK0VBUEkgdm9pZCBld2tfZG93bmxvYWRfam9i
X3JlZihFd2tfRG93bmxvYWRfSm9iICpkb3dubG9hZCk7CisKKy8qKgorICogRGVjcmVhc2VzIHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9iamVjdCwgcG9zc2libHkgZnJlZWluZyBp
dC4KKyAqCisgKiBXaGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcyAwLCB0aGUgZG93bmxv
YWQgaXMgZnJlZWQuCisgKgorICogQHBhcmFtIGRvd25sb2FkIHRoZSBkb3dubG9hZCBvYmplY3Qg
dG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Rvd25s
b2FkX2pvYl91bnJlZihFd2tfRG93bmxvYWRfSm9iICpkb3dubG9hZCk7CisKKy8qKgorICogUXVl
cnkgdGhlIHN0YXRlIGZvciB0aGlzIGRvd25sb2FkLgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBh
ICNFd2tfRG93bmxvYWRfSm9iIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gdGhlIGRvd25sb2Fk
IHN0YXRlLgorICovCitFQVBJIEV3a19Eb3dubG9hZF9Kb2JfU3RhdGUgZXdrX2Rvd25sb2FkX2pv
Yl9zdGF0ZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pvYiAqZG93bmxvYWQpOworCisvKioKKyAq
IFF1ZXJ5IHRoZSBVUkwgcmVxdWVzdCBmb3IgdGhpcyBkb3dubG9hZC4KKyAqCisgKiBAcGFyYW0g
ZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkX0pvYiB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRo
ZSAjRXdrX1VybF9SZXF1ZXN0IGZvciB0aGlzIGRvd25sb2FkLgorICovCitFQVBJIEV3a19Vcmxf
UmVxdWVzdCAqZXdrX2Rvd25sb2FkX2pvYl9yZXF1ZXN0X2dldChjb25zdCBFd2tfRG93bmxvYWRf
Sm9iICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIFVSTCByZXNwb25zZSBmb3IgdGhp
cyBkb3dubG9hZC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkX0pvYiB0
byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIHRoZSAjRXdrX1VybF9SZXNwb25zZSBmb3IgdGhpcyBk
b3dubG9hZCBvciBAYyBOVUxMIGlmIGl0IHdhcyBub3QgcmVjZWl2ZWQgeWV0LgorICovCitFQVBJ
IEV3a19VcmxfUmVzcG9uc2UgKmV3a19kb3dubG9hZF9qb2JfcmVzcG9uc2VfZ2V0KGNvbnN0IEV3
a19Eb3dubG9hZF9Kb2IgKmRvd25sb2FkKTsKKworLyoqCisgKiBRdWVyeSB0aGUgVVJJIHRvIHdo
aWNoIHRoZSBkb3dubG9hZGVkIGZpbGUgd2lsbCBiZSB3cml0dGVuLgorICoKKyAqIEBwYXJhbSBk
b3dubG9hZCBhICNFd2tfRG93bmxvYWRfSm9iIHRvIHF1ZXJ5LgorICoKKyAqIEByZXR1cm4gdGhl
IGRlc3RpbmF0aW9uIHBvaW50ZXIsIHRoYXQgbWF5IGJlIEBjIE5VTEwuIFRoaXMgcG9pbnRlciBp
cworICogICAgICAgICBndWFyYW50ZWVkIHRvIGJlIGVpbmFfc3RyaW5nc2hhcmUsIHNvIHdoZW5l
dmVyIHBvc3NpYmxlCisgKiAgICAgICAgIHNhdmUgeW91cnNlbGYgc29tZSBjcHUgY3ljbGVzIGFu
ZCB1c2UKKyAqICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9yZWYoKSBpbnN0ZWFkIG9mIGVpbmFf
c3RyaW5nc2hhcmVfYWRkKCkgb3IKKyAqICAgICAgICAgc3RyZHVwKCkuCisgKi8KK0VBUEkgY29u
c3QgY2hhciAqZXdrX2Rvd25sb2FkX2pvYl9kZXN0aW5hdGlvbl9nZXQoY29uc3QgRXdrX0Rvd25s
b2FkX0pvYiAqZG93bmxvYWQpOworCisvKioKKyAqIFNldHMgdGhlIGRlc3RpbmF0aW9uIHBhdGgg
Zm9yIHRoaXMgZG93bmxvYWQuCisgKgorICogU2V0cyB0aGUgcGF0aCB0byB3aGljaCB0aGUgZG93
bmxvYWRlZCBmaWxlIHdpbGwgYmUgd3JpdHRlbi4KKyAqCisgKiBUaGlzIG1ldGhvZCBuZWVkcyB0
byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkb3dubG9hZCB0cmFuc2ZlcgorICogc3RhcnRzLCBieSBj
b25uZWN0aW5nIHRvIHRoZSAiZG93bmxvYWQsbmV3IiBzaWduYWwgb24gdGhlCisgKiBFd2tfVmll
dyBhbmQgc2V0dGluZyB0aGUgZGVzdGluYXRpb24gaW4gdGhlIGNhbGxiYWNrLiBUbyBzZXQKKyAq
IHRoZSBkZXN0aW5hdGlvbiB1c2luZyB0aGUgZmlsZW5hbWUgc3VnZ2VzdGVkIGJ5IHRoZSBzZXJ2
ZXIKKyAqIHVzZSBld2tfZG93bmxvYWRfam9iX3N1Z2dlc3RlZF9maWxlbmFtZV9nZXQoKS4KKyAq
CisgKiBAcGFyYW0gZG93bmxvYWQgI0V3a19Eb3dubG9hZF9Kb2IgdG8gdXBkYXRlLgorICogQHBh
cmFtIGRlc3RpbmF0aW9uIHRoZSBkZXN0aW5hdGlvbiBwYXRoLgorICoKKyAqIEByZXR1cm4gQGMg
RUlOQV9UUlVFIGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICoKKyAq
IEBzZWUgZXdrX2Rvd25sb2FkX2pvYl9zdWdnZXN0ZWRfZmlsZW5hbWVfZ2V0CisgKi8KK0VBUEkg
RWluYV9Cb29sIGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fc2V0KEV3a19Eb3dubG9hZF9K
b2IgKmRvd25sb2FkLCBjb25zdCBjaGFyICpkZXN0aW5hdGlvbik7CisKKy8qKgorICogUXVlcmll
cyB0aGUgc3VnZ2VzdGVkIGZpbGUgbmFtZSBmb3IgdGhpcyBkb3dubG9hZC4KKyAqCisgKiBJdCBj
YW4gYmUgdXNlZnVsIHRvIHVzZSB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiB0
byBjb25zdHJ1Y3QKKyAqIHRoZSBkZXN0aW5hdGlvbiBwYXRoIHRvIHBhc3MgdG8gZXdrX2Rvd25s
b2FkX2pvYl9kZXN0aW5hdGlvbl9zZXQoKS4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgI0V3a19E
b3dubG9hZF9Kb2IgdG8gcXVlcnkuCisgKgorICogQHJldHVybiBUaGUgc3VnZ2VzdGVkIGZpbGUg
bmFtZSBmb3IgdGhpcyBkb3dubG9hZC4gVGhpcyBwb2ludGVyIGlzCisgKiAgICAgICAgIGd1YXJh
bnRlZWQgdG8gYmUgZWluYV9zdHJpbmdzaGFyZSwgc28gd2hlbmV2ZXIgcG9zc2libGUKKyAqICAg
ICAgICAgc2F2ZSB5b3Vyc2VsZiBzb21lIGNwdSBjeWNsZXMgYW5kIHVzZQorICogICAgICAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlZigpIGluc3RlYWQgb2YgZWluYV9zdHJpbmdzaGFyZV9hZGQoKSBv
cgorICogICAgICAgICBzdHJkdXAoKS4KKyAqCisgKiBAc2VlIGV3a19kb3dubG9hZF9qb2JfZGVz
dGluYXRpb25fc2V0CisgKi8KK0VBUEkgY29uc3QgY2hhciAqZXdrX2Rvd25sb2FkX2pvYl9zdWdn
ZXN0ZWRfZmlsZW5hbWVfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IgKmRvd25sb2FkKTsKKwor
LyoqCisgKiBDYW5jZWxzIHRoZSBkb3dubG9hZCBhc3luY2hyb25vdXNseS4KKyAqCisgKiBXaGVu
IHRoZSBvbmdvaW5nIGRvd25sb2FkIG9wZXJhdGlvbiBpcyBlZmZlY3RpdmVseSBjYW5jZWxsZWQg
YSAiZG93bmxvYWQsY2FuY2VsbGVkIgorICogc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCBvbiB0aGUg
dmlldy4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAjRXdrX0Rvd25sb2FkX0pvYiB0byBjYW5j
ZWwuCisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgdGhlIGNhbmNlbGxhdGlvbiByZXF1
ZXN0IHdhcyB0YWtlbiBpbnRvIGFjY291bnQsIG9yCisgKiAgICAgICAgIEBjIEVJTkFfRkFMU0Ug
b3RoZXJ3aXNlLgorICovCitFQVBJIEVpbmFfQm9vbCBld2tfZG93bmxvYWRfam9iX2NhbmNlbChF
d2tfRG93bmxvYWRfSm9iICpkb3dubG9hZCk7CisKKy8qKgorICogUXVlcnkgdGhlIGVzdGltYXRl
ZCBwcm9ncmVzcyBmb3IgdGhpcyBkb3dubG9hZC4KKyAqCisgKiBAcGFyYW0gZG93bmxvYWQgYSAj
RXdrX0Rvd25sb2FkX0pvYiB0byBxdWVyeS4KKyAqCisgKiBAcmV0dXJuIGFuIGVzdGltYXRlIG9m
IHRoZSBvZiB0aGUgcGVyY2VudCBjb21wbGV0ZSBmb3IgYSBkb3dubG9hZAorICogICAgICAgICBh
cyBhIHJhbmdlIGZyb20gMC4wIHRvIDEuMC4KKyAqLworRUFQSSBkb3VibGUgZXdrX2Rvd25sb2Fk
X2pvYl9lc3RpbWF0ZWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV3a19Eb3dubG9hZF9Kb2IgKmRvd25s
b2FkKTsKKworLyoqCisgKiBHZXRzIHRoZSBlbGFwc2VkIHRpbWUgaW4gc2Vjb25kcywgaW5jbHVk
aW5nIGFueSBmcmFjdGlvbmFsIHBhcnQuCisgKgorICogSWYgdGhlIGRvd25sb2FkIGZpbmlzaGVk
LCBoYWQgYW4gZXJyb3Igb3Igd2FzIGNhbmNlbGxlZCB0aGlzIGlzCisgKiB0aGUgdGltZSBiZXR3
ZWVuIGl0cyBzdGFydCBhbmQgdGhlIGV2ZW50LgorICoKKyAqIEBwYXJhbSBkb3dubG9hZCBhICNF
d2tfRG93bmxvYWRfSm9iCisgKgorICogQHJldHVybiBzZWNvbmRzIHNpbmNlIHRoZSBkb3dubG9h
ZCB3YXMgc3RhcnRlZCBvciAwLjAgaW4gY2FzZSBvZiBmYWlsdXJlLgorICovCitFQVBJIGRvdWJs
ZSBld2tfZG93bmxvYWRfam9iX2VsYXBzZWRfdGltZV9nZXQoY29uc3QgRXdrX0Rvd25sb2FkX0pv
YiAqZG93bmxvYWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYg
Ly8gZXdrX2Rvd25sb2FkX2pvYl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a19kb3dubG9hZF9qb2JfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwNDM0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZG93bmxvYWRfam9iX3ByaXZhdGUuaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a19kb3dubG9hZF9q
b2JfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCisKKyNpbmNs
dWRlICJXS0Jhc2UuaCIKKyNpbmNsdWRlIDxFdmFzLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Fd2tf
RG93bmxvYWRfSm9iIEV3a19Eb3dubG9hZF9Kb2I7Cit0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9S
ZXNwb25zZSBFd2tfVXJsX1Jlc3BvbnNlOwordHlwZWRlZiBzdHJ1Y3QgX0V3a19XZWJfRXJyb3Ig
RXdrX1dlYl9FcnJvcjsKKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBEb3dubG9hZFByb3h5
OworfQorCitFd2tfRG93bmxvYWRfSm9iKiBld2tfZG93bmxvYWRfam9iX25ldyhXZWJLaXQ6OkRv
d25sb2FkUHJveHkqLCBFdmFzX09iamVjdCogZXdrVmlldyk7Cit1aW50NjRfdCBld2tfZG93bmxv
YWRfam9iX2lkX2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7CitFdmFzX09iamVjdCogZXdr
X2Rvd25sb2FkX2pvYl92aWV3X2dldChjb25zdCBFd2tfRG93bmxvYWRfSm9iKik7CisKK3ZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9zdGF0ZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiosIEV3a19Eb3dubG9h
ZF9Kb2JfU3RhdGUpOwordm9pZCBld2tfZG93bmxvYWRfam9iX2NhbmNlbGxlZChFd2tfRG93bmxv
YWRfSm9iKik7Cit2b2lkIGV3a19kb3dubG9hZF9qb2JfZmFpbGVkKEV3a19Eb3dubG9hZF9Kb2Iq
KTsKK3ZvaWQgZXdrX2Rvd25sb2FkX2pvYl9maW5pc2hlZChFd2tfRG93bmxvYWRfSm9iKik7Cit2
b2lkIGV3a19kb3dubG9hZF9qb2Jfc3RhcnRlZChFd2tfRG93bmxvYWRfSm9iKik7CisKK3ZvaWQg
ZXdrX2Rvd25sb2FkX2pvYl9yZWNlaXZlZF9kYXRhKEV3a19Eb3dubG9hZF9Kb2IqLCB1aW50NjRf
dCBsZW5ndGgpOwordm9pZCBld2tfZG93bmxvYWRfam9iX3Jlc3BvbnNlX3NldChFd2tfRG93bmxv
YWRfSm9iKiwgRXdrX1VybF9SZXNwb25zZSopOwordm9pZCBld2tfZG93bmxvYWRfam9iX3N1Z2dl
c3RlZF9maWxlbmFtZV9zZXQoRXdrX0Rvd25sb2FkX0pvYiosIGNvbnN0IGNoYXIqIHN1Z2dlc3Rl
ZEZpbGVuYW1lKTsKKworI2VuZGlmIC8vIGV3a19kb3dubG9hZF9qb2JfcHJpdmF0ZV9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2Uu
Y3BwCmluZGV4IDEzNzc1M2QuLjhmOWY1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191cmxfcmVzcG9uc2UuY3BwCkBAIC05OCw2ICs5OCwxMyBA
QCBjb25zdCBjaGFyKiBld2tfdXJsX3Jlc3BvbnNlX21pbWVfdHlwZV9nZXQoY29uc3QgRXdrX1Vy
bF9SZXNwb25zZSogcmVzcG9uc2UpCiAgICAgcmV0dXJuIHJlc3BvbnNlLT5taW1lVHlwZTsKIH0K
IAordW5zaWduZWQgbG9uZyBld2tfdXJsX3Jlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX2dldChjb25z
dCBFd2tfVXJsX1Jlc3BvbnNlKiByZXNwb25zZSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocmVzcG9uc2UsIDApOworCisgICAgcmV0dXJuIHJlc3BvbnNlLT5jb3JlUmVz
cG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7Cit9CisKIC8qKgogICogQGludGVybmFsCiAg
KiBDb25zdHJ1Y3RzIGEgRXdrX1VybF9SZXNwb25zZSBmcm9tIGEgV2ViQ29yZTo6UmVzb3VyY2VS
ZXNwb25zZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a191cmxfcmVzcG9uc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a191
cmxfcmVzcG9uc2UuaAppbmRleCBjMDI2MjJkLi4zNTYzMWViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3Jlc3BvbnNlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5oCkBAIC05NCw2ICs5
NCwxNyBAQCBFQVBJIGludCBld2tfdXJsX3Jlc3BvbnNlX3N0YXR1c19jb2RlX2dldChjb25zdCBF
d2tfVXJsX1Jlc3BvbnNlICpyZXNwb25zZSk7CiAgKi8KIEVBUEkgY29uc3QgY2hhciAqZXdrX3Vy
bF9yZXNwb25zZV9taW1lX3R5cGVfZ2V0KGNvbnN0IEV3a19VcmxfUmVzcG9uc2UgKnJlc3BvbnNl
KTsKIAorLyoqCisgKiBHZXQgdGhlIGV4cGVjdGVkIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSAjRXdr
X1VybF9SZXNwb25zZS4KKyAqCisgKiBJdCBjYW4gYmUgMCBpZiB0aGUgc2VydmVyIHByb3ZpZGVk
IGFuIGluY29ycmVjdCBvciBtaXNzaW5nIENvbnRlbnQtTGVuZ3RoLgorICoKKyAqIEBwYXJhbSBy
ZXNwb25zZSBhICNFd2tfVXJsX1Jlc3BvbnNlLgorICoKKyAqIEByZXR1cm4gdGhlIGV4cGVjdGVk
IGNvbnRlbnQgbGVuZ3RoIG9mIEBhIHJlc3BvbnNlIG9yIDAgaW4gY2FzZSBvZiBmYWlsdXJlLgor
ICovCitFQVBJIHVuc2lnbmVkIGxvbmcgZXdrX3VybF9yZXNwb25zZV9jb250ZW50X2xlbmd0aF9n
ZXQoY29uc3QgRXdrX1VybF9SZXNwb25zZSAqcmVzcG9uc2UpOworCiAjaWZkZWYgX19jcGx1c3Bs
dXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXcuY3BwCmluZGV4IGIyOTUzMDcuLjE5ZDI3Y2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTg5Myw2ICs4OTMsNTEgQEAgdm9pZCBld2tf
dmlld19kaXNwbGF5KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmltYWdlLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiB9CiAKKy8q
KgorICogQGludGVybmFsCisgKiBBIGRvd25sb2FkIGZvciB0aGF0IHZpZXcgd2FzIGNhbmNlbGxl
ZC4KKyAqCisgKiBFbWl0cyBzaWduYWw6ICJkb3dubG9hZCxjYW5jZWxsZWQiIHdpdGggcG9pbnRl
ciB0byBhIEV3a19Eb3dubG9hZF9Kb2IuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfam9i
X2NhbmNlbGxlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxv
YWQpCit7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93
bmxvYWQsY2FuY2VsbGVkIiwgZG93bmxvYWQpOworfQorCisvKioKKyAqIEBpbnRlcm5hbAorICog
QSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkIGZvciB0aGF0IHZpZXcuCisgKgorICog
RW1pdHMgc2lnbmFsOiAiZG93bmxvYWQscmVxdWVzdCIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rv
d25sb2FkX0pvYi4KKyAqLwordm9pZCBld2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCkKK3sKKyAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQscmVxdWVz
dCIsIGRvd25sb2FkKTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEEgZG93bmxvYWQgZm9y
IHRoYXQgdmlldyBoYXMgZmFpbGVkLgorICoKKyAqIEVtaXRzIHNpZ25hbDogImRvd25sb2FkLGZh
aWxlZCIgd2l0aCBwb2ludGVyIHRvIGEgRXdrX0Rvd25sb2FkX0pvYl9FcnJvci4KKyAqLwordm9p
ZCBld2tfdmlld19kb3dubG9hZF9qb2JfZmFpbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
RG93bmxvYWRfSm9iKiBkb3dubG9hZCwgRXdrX1dlYl9FcnJvciogZXJyb3IpCit7CisgICAgRXdr
X0Rvd25sb2FkX0pvYl9FcnJvciBkb3dubG9hZEVycm9yID0geyBkb3dubG9hZCwgZXJyb3IgfTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJkb3dubG9hZCxm
YWlsZWQiLCAmZG93bmxvYWRFcnJvcik7Cit9CisKKy8qKgorICogQGludGVybmFsCisgKiBBIGRv
d25sb2FkIGZvciB0aGF0IHZpZXcgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5LgorICoKKyAqIEVtaXRz
IHNpZ25hbDogImRvd25sb2FkLGZpbmlzaGVkIiB3aXRoIHBvaW50ZXIgdG8gYSBFd2tfRG93bmxv
YWRfSm9iLgorICovCit2b2lkIGV3a192aWV3X2Rvd25sb2FkX2pvYl9maW5pc2hlZChFdmFzX09i
amVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkX0pvYiogZG93bmxvYWQpCit7CisgICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLGZpbmlzaGVkIiwg
ZG93bmxvYWQpOworfQorCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCogZXdr
VmlldykKIHsKICAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgZmFsc2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgK
aW5kZXggYTE4ZWE3OC4uOTFlYmIzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfdmlldy5oCkBAIC0yNiw2ICsyNiwxMSBAQAogICoKICAqIFRoZSBmb2xsb3dpbmcg
c2lnbmFscyAoc2VlIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCgpKSBhcmUgZW1pdHRl
ZDoKICAqCisgKiAtICJkb3dubG9hZCxjYW5jZWxsZWQiLCBFd2tfRG93bmxvYWRfSm9iKjogcmVw
b3J0cyB0aGF0IGEgZG93bmxvYWQgd2FzIGVmZmVjdGl2ZWx5IGNhbmNlbGxlZC4KKyAqIC0gImRv
d25sb2FkLGZhaWxlZCIsIEV3a19Eb3dubG9hZF9Kb2JfRXJyb3IqOiByZXBvcnRzIHRoYXQgYSBk
b3dubG9hZCBmYWlsZWQgd2l0aCB0aGUgZ2l2ZW4gZXJyb3IuCisgKiAtICJkb3dubG9hZCxmaW5p
c2hlZCIsIEV3a19Eb3dubG9hZF9Kb2IqOiByZXBvcnRzIHRoYXQgYSBkb3dubG9hZCBjb21wbGV0
ZWQgc3VjY2Vzc2Z1bGx5LgorICogLSAiZG93bmxvYWQscmVxdWVzdCIsIEV3a19Eb3dubG9hZF9K
b2IqOiByZXBvcnRzIHRoYXQgYSBuZXcgZG93bmxvYWQgaGFzIGJlZW4gcmVxdWVzdGVkLiBUaGUg
Y2xpZW50IHNob3VsZCBzZXQgdGhlCisgKiAgIGRlc3RpbmF0aW9uIHBhdGggYnkgY2FsbGluZyBl
d2tfZG93bmxvYWRfam9iX2Rlc3RpbmF0aW9uX3NldCgpIG9yIHRoZSBkb3dubG9hZCB3aWxsIGZh
aWwuCiAgKiAtICJmb3JtLHN1Ym1pc3Npb24scmVxdWVzdCIsIEV3a19Gb3JtX1N1Ym1pc3Npb25f
UmVxdWVzdCo6IFJlcG9ydHMgdGhhdCBhIGZvcm0gcmVxdWVzdCBpcyBhYm91dCB0byBiZSBzdWJt
aXR0ZWQuCiAgKiAgIFRoZSBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgcGFzc2VkIGNvbnRh
aW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0ZXh0IGZpZWxkcyBvZiB0aGUgZm9ybS4gVGhpcwog
ICogICBpcyB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBsb2dpbiBpbmZvcm1hdGlvbiB0aGF0IGNh
biBiZSB1c2VkIGxhdGVyIHRvIHByZS1maWxsIHRoZSBmb3JtLgpAQCAtNjIsNiArNjcsNyBAQAog
I2RlZmluZSBld2tfdmlld19oCiAKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgorI2luY2x1ZGUg
ImV3a19kb3dubG9hZF9qb2IuaCIKICNpbmNsdWRlICJld2tfaW50ZW50LmgiCiAjaW5jbHVkZSAi
ZXdrX3VybF9yZXF1ZXN0LmgiCiAjaW5jbHVkZSAiZXdrX3VybF9yZXNwb25zZS5oIgpAQCAtMTk4
LDYgKzIwNCwxNyBAQCBzdHJ1Y3QgX0V3a19XZWJfUmVzb3VyY2VfTG9hZF9FcnJvciB7CiAgICAg
RXdrX1dlYl9FcnJvciAqZXJyb3I7IC8qKjwgbG9hZCBlcnJvciAqLwogfTsKIAorLy8vIENyZWF0
ZXMgYSB0eXBlIG5hbWUgZm9yIF9Fd2tfRG93bmxvYWRfSm9iX0Vycm9yLgordHlwZWRlZiBzdHJ1
Y3QgX0V3a19Eb3dubG9hZF9Kb2JfRXJyb3IgRXdrX0Rvd25sb2FkX0pvYl9FcnJvcjsKKworLyoq
CisgKiBAYnJpZWYgU3RydWN0dXJlIGNvbnRhaW5pbmcgZGV0YWlscyBhYm91dCBhIGRvd25sb2Fk
IGZhaWx1cmUuCisgKi8KK3N0cnVjdCBfRXdrX0Rvd25sb2FkX0pvYl9FcnJvciB7CisgICAgRXdr
X0Rvd25sb2FkX0pvYiAqZG93bmxvYWRfam9iOyAvKio8IGRvd25sb2FkIHRoYXQgZmFpbGVkICov
CisgICAgRXdrX1dlYl9FcnJvciAqZXJyb3I7IC8qKjwgZG93bmxvYWQgZXJyb3IgKi8KK307CisK
IC8qKgogICogQ3JlYXRlcyBhIG5ldyBFRkwgV2ViS2l0IHZpZXcgb2JqZWN0LgogICoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApp
bmRleCA0MzEyN2NmLi42ZjhmODU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCkBAIC0zMSw2ICszMSw3IEBAIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBJbnRTaXplOwogfQogCit0eXBlZGVmIHN0cnVjdCBfRXdrX0Rvd25sb2Fk
X0pvYiBFd2tfRG93bmxvYWRfSm9iOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBf
RXdrX1VybF9SZXF1ZXN0IEV3a19VcmxfUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVXJs
X1Jlc3BvbnNlIEV3a19VcmxfUmVzcG9uc2U7CkBAIC00Niw2ICs0NywxMCBAQCB0eXBlZGVmIHN0
cnVjdCBfRXdrX0ludGVudF9TZXJ2aWNlIEV3a19JbnRlbnRfU2VydmljZTsKIAogdm9pZCBld2tf
dmlld19jdXJzb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpDdXJz
b3ImIGN1cnNvcik7CiB2b2lkIGV3a192aWV3X2Rpc3BsYXkoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpOwordm9pZCBld2tfdmlld19kb3dubG9hZF9q
b2JfY2FuY2VsbGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWRfSm9iKik7Cit2
b2lkIGV3a192aWV3X2Rvd25sb2FkX2pvYl9mYWlsZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3
a19Eb3dubG9hZF9Kb2IqLCBFd2tfV2ViX0Vycm9yKik7Cit2b2lkIGV3a192aWV3X2Rvd25sb2Fk
X2pvYl9maW5pc2hlZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Rvd25sb2FkX0pvYiopOwor
dm9pZCBld2tfdmlld19kb3dubG9hZF9qb2JfcmVxdWVzdGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFd2tfRG93bmxvYWRfSm9iKik7CiB2b2lkIGV3a192aWV3X2Zvcm1fc3VibWlzc2lvbl9yZXF1
ZXN0X25ldyhFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0
Kik7CiB2b2lkIGV3a192aWV3X2ltYWdlX2RhdGFfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2
b2lkKiBpbWFnZURhdGEsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpOwogdm9pZCBld2tf
dmlld19sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfV2ViX0Vycm9y
KiBlcnJvcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy9yZXNvdXJjZXMvdGVzdC5wZGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQyNGMxOWQ5OGI2MjFmZWFk
ZjNlNGQ2MWY3YmZmNDcxMDdhMzc0ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzQyMQp6Y21h
aTNieSQ/IXdeb3JGNUpYVD84NUtsd2RJJUFPZnVYeHdWclhWeTJtdUtKTmtLIztnYHE9MlFqbkJK
cShNPzcKekM4USgtcjFae3MmK28pTl9kZlN+bzt+d0BZcD95VCp6ZXdkdGlgUF5nQkZBYyEyI1RA
KnskYGhSanB8TkM9ZCs5CnpTPWEtXyNYLXMjdGN7eTM1SnI/fWczeHgzWld1Zlc/UCVfWGstPUV2
dFN9TjEwOVE5VyNAcT91blpnfVcyUko4bgp6QCUtKiMjOGRMSUJ3dFFpTWhASGk5Xm1eeFlsKDYp
KERzMnpPaHsmV2E/bVVhMmxtdVlRan1qWVhuREw1JmByMVkKekYzSmclb1RfLT9ZVm80V3t2QTQ9
MEdTYFYxcD5OdGMoe2dZbUQtMWlPI0VSNmVnUHtpSVhxfldMMmxOISE3MntHCnpWNkZiSk9uZjZi
M24yTU9kVnhTN3F9a3N4I0o/Z3p7dlZQMjVoKDtIMCl2YkVKKi04MlV2Pjg3Qj4oQnBhUlpiPAp6
PmN7dEUlPUw8YiZ0OWl+Mkk7dGtlI0deLUVDQFZII2RIckVNKnFvMnxNfHdgdE51I3RDQztZflg1
UHpPJSspUzkKelh6S25YSklKR0NwfFUxPGlmZ1BVPjZVNjw/e3xDQGB3Wk9tXnlifDkoKF50USNA
NCZ2NmxiSHdIY1hhKCoyUUBvCno5UXZnI0E0blc7JUpJMj89X2JJRzAta2NZNzhPMkVQMDd3a1FV
SllmaEhCMCRjNTlzKjU8YkpTSkhHeHlKOXdHLQp6KlYhaCZeVXJlRlg4ZiVqNTllUC1wSWViPUtY
cWw/OT1Ed15lRmFEZDIxQWY0PkZFeEtAPmgwZHIySjBYdnt6bHAKemRYQyVRemYoOW9oMjFRfXRe
NntIN1ZqWTIpbjBlNEQwIylYZGAxOUg9Xn09X3tOU1RLMG97MTZ2cmdocHRhNFAjCnooZDk+KXZY
VT51YHUpVldYb3F0MFpCYFBgYEA0MGNIQzRQcTdQVkllRX1aeSgqM1FjfjZJYy0xYmYpNk5IWC1W
aQp6WnRIdmZQSUUpJjsjS340JE0xUz4xcFRWbXk2ezZOQzhYTE1vSkRueT5lZGBrYWRYLTxBVDlq
YF9Celg+Y2ZwN0sKelJMNTd9MXxDKEtGIWVSTHJrT0piK1JRPnZSdE9yPlZEZX5sQSVBKll0bDx3
RSQyaXM+JnVuTER3JUV8ODdjcUFACnpuSWdLe1ROOTw5ZSYjK1U3dz1DQSt+fDR1VVIofGxgNFpB
bj11RHRCfEgzcnQ8eX0wVko0MThDI25FYT51aVNKIQp6SjVGVjlBbnpBb0dWV0pmIVA5MXNBMiV3
U2UlNlZiLVU1fTFyTXhyc0pQWXhhamo3UiNHbSFFQz9jTlFrSWxYTjQKel5JVjVaRyglQ1VYbThh
Y0hPJFZAYWpTMmAtTVUobzNIYFVKIUozQWY8SlkjMUNrPjcyZHB9KlhwUkNQc2FjI3sjCnpucTtm
KUhaVXA2bX0pZlR0RHUmKGp2YWpWR0hjOFpWUEpvYDZNRFlqUjE/VmVWTm9OQUtPczx4WEVCRWJW
RFclRAp6dnBnKWJzUjNFZXFTTXAlUF9WJlApRlVsTip5KmNEMXNBJUVJeXEkfCk5bGpYbkQyQVhV
fFA0KDc+U004QlV2d24KemowYiNoejFMdlRfdjROJCpOPmp1XjJ0PXIlcnY5cE5LUVBFXkpUJEZs
e215cyZXcVV+MVhqTXd1Znt5KiZ6Pk9ICnpFUWA4KlVUYmNxeXk/LWNQJiluITR9VjgoSWBgMDFp
TmZCfFokK0VXVClFUlMxQ2lYPk1jQ01pN3RpTG9SSWFMcQp6KH5MYVhSV3BJSzVifCQ2KU1rc2kl
TjlTdWFAMUd4XllELWQ2TmBITiFVdy1OY28wIyNeVlY0S0BUNUVseSlwRiQKenNrKXFjSi1uISNv
IWpON1dmTUwtaGtpNHo0U01PIz1OfU10PSVjTl5lbzhJfm1AX3JuIzMxUkAmMlk0eC19TzVXCnp7
WUlteVBgNHZaXj5pRWtLayFpIVJ1aUhJc21yO3c5UGpKcHJPYUhWP3ZBXypSQmNsYXtBSngkSERN
M2lFMTcmTwp6cD4lPWpkYG0jJHEre2lsbVJAfStDOUJ1I0oxSS1EPENZRVFPez1yYXRUVk1NLVdL
cSNXRl48PV5kPipsWmticUwKenJ8JDFnWHxVQVp4IUk5dHVgX2pUSitIeHlrMUgkWCpyLXE/eGdR
b0R3ZHZRYytnMm9vPTgta2ZkMEx1Ml9MKiorCnpfYWtPSEE2KVpKQmB2OzQ8WCNRMG4mUyZGWlBZ
QC0kemFjfjBUfjkwaT5We3tmZiZOa2Jte3V1Xnw+Z18oKSlNbgp6MytRTmxyYWFyQkptc3xZY3h6
MD4kNjkwPlQ9MThibiFaY2QrcFotZll2eFQ+KDhSe1VWMnRjOXBOfFF1MFVnaDQKelRSe09maXli
WktMR0tBTl9LWD8xQ18kJWp5flVyMFRQdWtJR1IwWSpJWkAlfWcofn58MytFNCU8fiR7eDs0PTk7
Cno2bSZMUD1vZCo8KTZPPjBBMUNmIW9LOHtURG8mcGhzciVJaykqTWYhM2xpalVTWjlPdT11aH47
O2hGYm5mIUUoNAp6PVFSNHQ5aGAtNCV0cE1adlVpQU94dXZXQnJVVSooYWdnJT52d3F1T1A1clZ7
VWUmQlU5RCN3VDhWJVU1UnAkdVgKekFjRXs2RnRFNG4/ZmhuKSVNUDchWEUzeE84WnUxWEh6cyMy
XmRwb2BoYVRVNGglel4xNTA7WT5CP300a3ZWUUlUCnpaRW9gJWpybHFEMHpGbmhFe0MpSkh3cnpo
LVZYJVFHcCpLQU4zaFEheU59Py1YOGhzJmBKUT9kI2JuRUxAMnhgbwp6LXRkfE1wbCQwJDJmdHdy
VlZTdyEpTFQkKHB4ZVdBbF9mUjd5RzExZUBmejQhQj09UntZZH1IbHA7Nzl7K3ImM1EKekA/V2VE
MHV4ZiFTKmhNeHdST0lWWkoxTXtISns4WktCWmFIVkQ/aXV6czA4K3FXSjA9XmFqUUArdkw0MSk1
QTMtCnooP19EUi1Ncl81SWN1Y3YjbnxhJCZaQSQwP1VHentJP15NUnk2WW4ldV84KmNqQTQtMUdr
entGYHVkbFRkNnUkSAp6RD82SjUhKURYbyVTP3U+JGJZJiptREx5VHUzNGAkcyNMNSF0LVJRNFND
am1xcTcpVnVFSyhUViQ5XzgwRFhZM3oKemJ3TlRydmZ5YXp0MXlpKiZHeypuZ21SSHkmQ2h7YGQj
YzBTQGx1enI9PTE0blowODhQKiZvaFRkaT4kO3QoUlJgCnoqbzA1eStqQGR7b3B7RlRAI2t2YXNr
TTcpKGk+LXtfPHoqdiRvbm1yWGU9Xik4RiRyQiZEQyRVeSYhSVkrJWg9PAp6YD0+fkBua34qTz5V
czdHNT5uPk9XPXBvJDE9TUtrQTk/U3k2PH5MWWRTYVA5cGBEQlk1MygzKCNKd3ktLWh+bF8KenlA
WF9uS2x7TT9VdkdVO0FzOD1xa3JVdXEkMWE0K1VVLWZtKUFteVNkY0ZeX0xXR2ElbHNoOVlCaV83
QmxkNXxuCnpaaigoSTFKNDViUXhgIzdKdVU+OVJ+VDZUUlFrNFZ0V0oydUZOdk9tV2F2aiQhYz49
dFZFZn14MilIPTNhSVFnbwp6IUI9eVpJYD5wYTVWZSRLeyRYVVJONE12JnFreDl8M3ZLX1hgVnhp
ejZQd3xmJVNIXnZjRndlPWBSUzFFe19WKFQKekxMNmtGPDsmJVo+K096MEZJaChrZ1FnPjwhfSFV
LXYkclRLV2VPMSQ4ZHJeKVhpP1lUcHBtKG1nPV5uMDkmQipaCnp2LXlpQlBTNmJxVzttaThQUUVG
UHpITFVGNHkyeHU5fiVZWTNVT2NzajZHUlFESnVKZCg1UkdoRnVCIzU1ckh2Ygp6ZUg2Sl8tPTkx
dDBrNm99RlpTaj9QX0EweXYwQkA0a2V2SS13OyRefWRnTnZucUFQS3FZfjJCUD97YXAxcFFMY0MK
eiYyRzVGRktyM1N2VW5wX0NrOFdaZ1lVKStkQSMlaD8qe2I/QlVZYmBfa3ZmQU1qWkZ6O0BaMk5K
X1VWVzdjOWIpCnpaKlh9SU5lZiZvfDFARnxDUnxYYmFeLVFSN2pNYTZnVW5Rcmt+Pnt6SyEoJTt5
RX1IX3gjbjRIYzlaYzMmKCRpKAp6MUBmOUE/SW52PFZlSFB3STRKa3k3bUhCeHN3a2xsWFkkX2c9
QXFHMXJ9a2gkYHB7SSRjTV51RDlWMn49NTdgcFoKekNaPGdLV0Fqdj0wPUAyKEVRRGB8WU98JCFT
Mld2cVpVM0EmaCg2aEdqbVJqdUl3eyolX2R2NEJ2ZVU5SWojQlNqCnoxM3hFTnZPUmZpWmYkeisp
N3NLblZuNElFUExwR3FWPlFRezl3VSpzeWU3K29Ra0N7UTV0MyNuK0teNlRnRnxMcQp6MjlpaExG
dVJ2LXZZe2d8e1dGMns1ayotNWR8PSl8KFcmYCQkWHYqaTNxYE99KWVeSVdaYHdNK2pfbHBPaV5e
VSMKenl8JVFra2dMOCYlekgpb0psK2llanBrXzx4WEByTSE8LSEjbWZpeG9CNjl5XkBwPFApZXpB
KVBnO1lSaU8xSFc7CnpeNWE4KlFnfEwjPmxCPyg+JGlZPitAcT1nQ3wwJFU/NG1TY2NsYmc+Rz0w
cllkUiYqd0RCeihYPCRfTTUrPlBpVAp6MTslJDMtaEYkYnZSTj5IUl8lZFZvYUJrXnhTMUB4SCNS
bFNKNGo9MWpkNnt5X0lUQj5LdU5MdENCPFpZbUlTWmwKekAhcVNKJXhDPj8tanIoPmVWMCYjejsw
VHJacW9kP2F1OE0+R2ZATn43ZSY8QWF6RGA+YUA7Nn4pPXFnS3QpMz5jCnpSKjJIKi17ZGJaM1J4
Xmk4SX5aMF5Mdk5iMG1gNTYpaW4+VmQkcEVuJVQxd3p1SF91bkhhRSpTXmBAaEFiV0wmMwp6UzZA
PFJuZ05xfnRfWn5NcFo1fEdJfmd6WS0waztvZUE2Kn5veUVTb0R3JVBpTT15bmErUG07emU+K3xg
d059OyEKenhpV09SLWg/OTlRK2AyRnJ5VDR6Y3tGVCNlWGUkMktkeDFDPnEmNXY+OHhKc3JHcExJ
Snh4cCNfUDFFTlR8SUsqCnp2YGdSZj9kMXIlcUl4P2MtQyp7N01IQWVRPnNpRyliTGtkeHNWaTU9
SHc3KzUtbTlCN1ZBU3JEKW0+YWlFVV5SPwp6VHFEIXQ7RGFPe3MrJnVCbGlRbCFwaTZtQSo3fCkx
KFlWMEVDalJYMERYYyFNPnt5UW5je2RANCk9MitlJD99Q2cKejxXQXpOJGAqP1diJGUoV3dwNT1f
UUtoeTd3OTk7cmhpPno4VTVAUlpnNzchREFAWHNCV3ZXanZQbGVZVnMyZE0xCnorM0kzRjNvQVEt
ZERxIzM3Pi1CcEpDM2MqaktRdW5vWFh5clRlbShnKyZAQDFVVTskfXkmanBXdE1NaERUNVA/fAp6
az5gbnJ6JGFEZjRjR2smazlhOzE0TXdXe2VHLW1aK1UxenpUKzVeVE9mcD40T2pzKVdDfTBRfHMh
UmopN19TN18KemErO31FIWVsZElUWEBZMTNRXilLKl9gUXhYUVRyaWxGMmtnQEI3JDwzRExUVkl6
TXZ+MituTUooUDNkKF5IfUwjCnp7OHVfP3F4K3FRNTY1dDl3cS1vPTJVcGlOampEQFpOcXFhVUdm
aFMqazdQJUAySzlvUks3YUIkPTh6NGhLQTxmYAp6Y3lEX0F5YyglYjEpPzBVN1VoQGR0VV5oT1pV
fkNjXlZCKFgrOXclbSM5cE54NFJQU0hSfnlCQHNuaXghT3VQeyMKenApYmUkJFQka313KCo9U2Q7
YVpaejxpeU5DNiFAKlRCJClTQk5QOT9qbHpiYXpNT2NHNmBJTkpkTEw+YlgzeUlkCnoyQF84VUo9
YD9gLVomUzkoI0EmRSU5JE45QVYqQHJwbWVzZGJVaX5rTTdvVkNlNHVSaUQ2NkBLTjxtZzBGNVNy
UAp6Zz1vMkx2RFA7fDglI0JLQlJsRGQ1QVRrfVZfeWIkJHRVJjliTk41PE81cHNJSEJRQn10SnVa
JC1wPFNSUEdgYE8KekFGYndWWHhwMVJvVVU+c1dWN1czTWB+KkxrVzJ5LU1aKUtVKTk8YEQ5Zihi
ciRqOHdIN2VxUWBvVlh7QWFGfVUyCno/fEM9JHl8djxOJVc9NHZId0Y9amR+aj5zZ1I8ZjcxK2tU
PTRebFlHNGx9eUprV05gQUpOMGNoNSRBUygkTHQ0Wgp6PGg7b29zcGl1aVFWc2R8WFB5UEdyNDt2
UkkqKllMJjA0SW5mNnhRUHdTLTdsbndRO210WFdeKDIpZUN3NkxsdmYKelYhWGAlIzF6d0NZbUl5
eHUxYDJzSmVfT0wrZlFYTG17MHZReD9FRUA+YnYyPFpmU04renEoIVBiJVJoVVV4ZzBFCnpXV3Vs
VmQtSlh8Pjw1bVZCNHVePiF5V0RIclVweGApO19+MElvNmJ9XlNIKGdvaXVRcUFNWGZXcGh7PTVz
PDVOIwp6amsjc25xflZDVmh1IWZmNlMtUmM1ZCVZeTR3b3dOIT48U0k0UEtqM2RuWlQ1STxsSSgq
eGM+JD9XTn0ycGBxTzcKenJLTElScWE7UnhAIUA2QmJHU0xOSF9oRnhxNX0qQXRuU3JyaiFXNXR0
T1VKOSlLYW5uUD1FalUzTjQ8PyV4JE5BCnojS055cC09eWJHYC0kQTR5XiZ2SWFkSTlscFZUMipL
fDgwISo4a00zSDYlQSRPNVVJSUlIdH5PQ1JJKG1gPmFwawp6SUAhXjdXTE1ZI3NKbSlDUkJrbCN5
fDNCeCR7eHp1MXdWMytlZlo8P09EaDwqPUUlQXJHVXRWQio3cHV1dntnS3cKemBDRFo2SmVVeU0q
Tkg9cVdYbFktb0gyZCFfNDIyJXdiMyZZP1ctZUV4M2ViUXRxdndWcns5IU84K3lhd0wyODI7Cnp3
N3Izc2NhP2BaQ2JeKU1mYnpLfnRjRGpUZSY5cDswPCpTOFhwN0luY3pYczYtKloydUUkLXhDOCpB
TEVse1g5Tgp6M3QwRmY2VmdYYyoqWHZARHV7UURnck9LT0NjV3oocCMxX1p2OVl+Xmd1SHR7eiE2
ciZpei1ZSEVBQWJ6em0yJkEKemItVXV6X1NEQXFnMF4hRVpFPipzUjUpI01YenZzYXN+RyNXTUwk
QUA+d1NhOHU3UjNUQmFeazQ5QklsYipQQH4kCnp2ZFhsVFB2WjZVdzEkQ0lUeXBjblM9KjF0aytG
JVgzVD5MUHV3a0p4JXI4RihMe3VWMUYoVFgoTilUYjxibCpzdgp6VnBMbWVDd04tbTlyYilwV2BG
OGkydEx4UHBQQmRiZG10V0B0ejJBfnlaTG19WkA0UilnOzZWZit9NExMZXc/US0KekdRMUFGZHx5
Q0UmX2ctO0VqVk1sJVppVjFafCtPd2AwfWJ0YyFvWm9NQ3Y4VztWZ0A5JChDY3w8NnE+QjhKQE49
Cnp6RzdrUCYlT203WUBsUn0/SGNUMjVIbFJ3MUReNUwrKHg7JCphKlokQFl2Kz9YdWdeZCMyKERH
aE1KVGBaY3xPeAp6cU9FaE17TilxR3B6TkdjSlVwRndXIU56cGR3WUt+c09wLTYlS2ZNWkleeEtu
RSpfZj4lfX5wNWt6ej9OPWw8eSoKekBgfXA2PX15S3woZUJEdzR2eWpzKFExUT1ebjkkR2doWTt7
aV90d0NPcU1ycVpjaX1Ya25XWV9GSkdoUXVKaTl6Cno9d2RSezx1VF90VkFfPHNQTH5Db3psTT9z
YEI/Mi02Mnh8YjBGSW5mVjNCJWhSfmZkQCZMaHA8R3dZPSorVk8kfgp6bWhhQTZiLWN9IW5iTUpW
JnFRLT4tWlFyYF5oS0YqRGNSbWJybW4wMDRCa3YjVCM/Tn0qJlREaGopO3NlMlFjVVAKenBQZCNi
a1cqfjE7JWhzNU5De2lmdjZQPmB6LXFROFByRmMjdHR+LUlhcjBPbThSVkMjJD1FS01AMlB1cEIl
dHZvCnowODU9PyVFcTEzcmZRX2hTOVV5KkRPVSNJQmB9NClmS0ZDZ2oydTU9c0I+PEVlOXoxT1Qq
amVjRilYU29OMDlRcQp6NXd2MHxiMEA8SlQ9MWlLR2A9bjdTS2lmdUVVTzNkdGdkLUMpT2NaUD91
LUNvOGx4QGkqXnQlYHtsVWxzXnRHLXcKemNpeFhvaENnNVZAcm5mYzchVUhxVk4/MmdzK0diO2dC
d1FqKyFqfCkpQ0dvaWY2UihyKTlQYjclJHw+RlFNVU1DCnpULUBoPjJ7SUtWLSpOZkd3az04Nyp1
RnYlI3lPbSVWVlRJZG0lQ2RmbVBoJW08d3hvQmV5VkctTUhtWUFrMlcmbAp6a1Y0PWNaQHVyb29j
ZGwldlFDYFJ2d1dxP3tjdmhIcTNnJnBmQSYpI0AoQUBqX2Ajc3txR3oxKnY+JCF9Uz55M0MKenRo
I0drT0A0KERkTjRPWnBFTlU3eiQ3JFg+OzI/d3QqRm9MeWhfIzVFeXhyWG4/NikxSTZoT1VMV3cj
NHFnWDI/Cno3eUMzJXVHIX50ZiU+KFk9PncoeUpIRjFUQFppX3xDSjd9Sy14KWstWXRmdTxSbVU0
Mj1zJnF7JSo1PCkjZkV3TAp6JThZUytuV3V2Vz80WSRtKCgzME5ydXgzOGZvQnFmJjt0Xyp6b2FP
P1NlOGEhcElHWDxvVzJDbmhYal5CbiZyPlMKejZZdT1geFcmZ3pgTlVuWkxDeTxQI2pkbSQlPjBF
cW5PSmBFPDQ/WkEpTDwyQUokR0k5c1hhRWdFMjNle15kQClQCnp4S01FfEooWnxMWXs/fjBINFVA
KSY8KDgke3RycXl4YWZ1KDdxOUxFVDVYd0ZeQkV7NmBHYkFiT3ckMGRpdnQ1cQp6MDd1eFRfUCRi
XkBqfU9WWXJUQiFtNXgqTmlmJE9oam9NXldEODRiYlAwV2VLX0lRMjJYMlZlflU2Wk5gY1pHSUMK
enh+fWZqQFZJVjZffHIpMSN1eEd2TitGOFo2I0JVSXB7clhJaWNTSVVRVndiRFNfM3hVUyZtckZg
TD5ieVZwfTV1CnpBU0B2bEl4aUhSTyU2el54T2xsbng9LWwpejZlTEVVYihKXmAtZno4bk9pKVZo
eEIqNz5uTkBFNmorWmFacEBLTwp6SCV8VGZAcFg4PmFFTnpvQEEwQ29mYDZXUCNOJmladUpTQk9S
fEV6bykwQV54SlJ0SzRLPEB5ckhNP0F0TVJpcVAKejxTNFh2PTJDIUNjWDdGPnIlR3BAZUBANGpk
dWJJbDtDaD8tYEBKYEc/R2MoP1IpWWluV0VUfTw/KkFfKE87V0x2CnpSTDRYPnB+OFJHRz09fUZY
PS1+cFY/YnllKT1kV0VZS2dhVmNFYl4/diYydFRiMC1XKVQ4aX1XRThBSU1AYUFySQp6SUlJPjFa
KVhpNG0yWWlhZnBGcHJRQnp0UD1WPkdlNWs+KzlWUEZeIzB0Tz8xcTlQQ3prYjt9SnFuKUpgKjJX
UDcKejFPcUApdTlnX0E4JkVfUDBzeFZXa3Y7Xlc1RmBNRUdJeTU4KnhBXitrPTZrflQ1Y0Y4VTch
ZVkyPz9IOUZ+JmZGCnpxJDtjP3Y4TVc7czt0T2c1JlRoS2g5YmZMUGolVmtuRl9XUWNyb31PQkBq
fl5SKz1pSiVINkZRY2s0T3hzbUFBUAp6WElqVWxCRj51RVoqOTxeQ0tYS3tINGZIeVppUz55RjY7
OTVQcDJ8bV4lVDE7Yyh1cGM8KHdeaikoe3NjVSVPPzcKenpyTVhxKDdnRm1hWWc4PmspVCUmRWZV
aFdlUWVINDl5QFBPO0Npb3V2dHFRe3VLVEw9WFRqMHdge3k/Nyg4KGMrCnpFRz42SFE7aj4rRVZX
Z3x2YCZqLVBOZ1QqNV8mWTFPPTQ8aDRDb2ZlbmxxaHlSTX55eUEpXlVPc0MoVzE0VkwpdAp6TDJ2
UVFGVEIqUDRRZz1ibkJSdiZjaiMmK1d2Ni0yRG9PQ0A4MmElM244RyVsRkV7Wm45ZnQ9QitkTTho
bEdMeUMKelEpcz9Bcj9LITtYdE1kflZXWG1pI0FsQDh6OChKeUtTY2paPGV5WGtYfU1kdGskOW52
Y2dPc2VOfUljNE5TcEQwCnpHcnx0PD5WfnA0JENHd2krNUNAcDVkY1dmJmRTWiEpZCs/fTBGZStk
NUR0ZHtWSXJiSHNJYyh3ZmRHU25xeWFeTQp6ZmhQYUc7ZVFia05hQ3BgMEhscjYhUD0yfTF3aGlh
WVhiaHAxMHYqfmpScklYTlEmbTReTl8jSTY5WFg5XlMyNX0KejlnbmxyIW5oZk1oYGtHdEhwYko8
PFI3cXF0QDw2bXkxNU1vcTs4SFVhVFpQajBCS0BlYXFmNmFqNEtkQUdOQjFsCnohQzJYdWxhMnoo
MDc0VzI2b0VyY0t5ckFUeUVDeH5xRDlRNUlvOCNnMVl6an5MVE0zP2ZRT3dXTXBJNTJxeVRneQp6
PTI9MWxnZCNkZndCUU9QYng7MXpjOUtjYkF0bk8tPjVlUGxVcEBmLWEpUCt2UGNLTWBSa0V7a0gz
SShqbD1PK2gKenhzITc3X2VCMSFXQW9idiVBOXo3YVc9JUxaSFBoczRqS1NiYkgtcSRFSi0oayhT
S3VzXmJISndTYShPcXxOYTNKCnp2NmFvU0huJVpZS3s7dk9mMjh6MyVAdHgwUXRvY0hJSmBKbzdM
NWpqO2xnMEJGcCZlb0Z5ZXJOITk8I1hnXnxSNgp6O3Y1dUF5aUpJNXEkcUtxeypYZj9oeWY1Z00j
UVY/NCtzUGFmflpTVWB3YztZZ0Emejx5S0xvZGlUUkhub1R4KzYKemdBPHtWQm9tfVRmK20/RHU3
UyFEfEF9K0l2NTElP15EeUVaTmU9dGRFSFFjK1YqQmQwajJMbFY2YXBvQkVDTG1VCnohVWUlbDl4
I31QX2l0SkMjQUI9aFU/Mm56QVJfKG8wRmVqOzM8MHpUe3ZrdWM1WDlffjl3N0VWR0I2bElyMUps
ZQp6TEJZaEZ8NUp2OWl4U1ZzS1ZASmpean5eSmleVG8/cnloYlJ7Rmg3Xnt4M1d2YVgwPl85dWtX
RHc7b2pWVXBeeGQKenFXQGx0NiNiaUJIQHJGVmcyJDdudCEzd3BBKktxWGlOZ2BPYFRHbjJLbmhy
RTkxdWR7NClHI1RrTzNNMiNnVzNZCnphRmkkKkNXVkJkcktNent2TGF3ODhaSGYlS31rISZwa1Jh
cTtRdj00OVJlQWdDQ1YwSz5FUDxfMU95PmJENm9gXwp4Q18pTT9EfXFLS0x7SkR9REpjO1Y1ZDti
JWpZTFZJTkt8JXBHc25DQS1jbikrQV4+aH5TdjU0XnpXe25AX1dKKzsKCmxpdGVyYWwgMApIY21W
P2QwMDAwMQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL3Rlc3RfZXdrMl9kb3dubG9hZF9qb2IuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2Rvd25sb2FkX2pvYi5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjOTdhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdrMl9kb3dubG9hZF9qb2IuY3Bw
CkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBv
cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCIKKyNpbmNs
dWRlICJVbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgiCisjaW5jbHVkZSAi
VW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RTZXJ2ZXIuaCIKKyNpbmNsdWRlIDxFV2ViS2l0Mi5o
PgorI2luY2x1ZGUgPEVjb3JlLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRl
IDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgRVdLMlVuaXRUZXN0OwordXNpbmcgbmFtZXNwYWNlIFdURjsKKwor
ZXh0ZXJuIEVXSzJVbml0VGVzdEVudmlyb25tZW50KiBlbnZpcm9ubWVudDsKKworc3RhdGljIGNv
bnN0IGNoYXIgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWVbXSA9ICJ3ZWJraXQtZG93bmxvYWRlZC1m
aWxlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RGaWxlUGF0aFtdID0gIi90ZXN0LnBkZiI7CisK
K3N0cnVjdCBEb3dubG9hZFRlc3REYXRhIHsKKyAgICBjb25zdCBjaGFyKiBmaWxlVXJsOworICAg
IGNvbnN0IGNoYXIqIGRlc3RpbmF0aW9uUGF0aDsKK307CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBm
aWxlRXhpc3RzKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgc3RydWN0IHN0YXQgYnVmOworICAg
IHJldHVybiAhc3RhdChwYXRoLCAmYnVmKTsKK30KKworc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhciog
cGF0aCwgR0hhc2hUYWJsZSosIFNvdXBDbGllbnRDb250ZXh0Kiwgdm9pZCopCit7CisgICAgaWYg
KG1lc3NhZ2UtPm1ldGhvZCAhPSBTT1VQX01FVEhPRF9HRVQpIHsKKyAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfTk9UX0lNUExFTUVOVEVEKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEVpbmFfU3RyYnVmKiBmaWxlUGF0aCA9IGVpbmFf
c3RyYnVmX25ldygpOworICAgIGVpbmFfc3RyYnVmX2FwcGVuZChmaWxlUGF0aCwgVEVTVF9SRVNP
VVJDRVNfRElSKTsKKyAgICBlaW5hX3N0cmJ1Zl9hcHBlbmQoZmlsZVBhdGgsIHBhdGgpOworCisg
ICAgRWluYV9GaWxlKiBmID0gZWluYV9maWxlX29wZW4oZWluYV9zdHJidWZfc3RyaW5nX2dldChm
aWxlUGF0aCksIGZhbHNlKTsKKyAgICBlaW5hX3N0cmJ1Zl9mcmVlKGZpbGVQYXRoKTsKKyAgICBp
ZiAoIWYpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0ZPVU5EKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVz
c2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXpl
X3QgZmlsZVNpemUgPSBlaW5hX2ZpbGVfc2l6ZV9nZXQoZik7CisKKyAgICB2b2lkKiBjb250ZW50
cyA9IGVpbmFfZmlsZV9tYXBfYWxsKGYsIEVJTkFfRklMRV9QT1BVTEFURSk7CisgICAgaWYgKCFj
b250ZW50cykgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19OT1RfRk9VTkQpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKKworICAgIEVp
bmFfU3RyYnVmKiBjb250ZW50RGlzcG9zaXRpb24gPSBlaW5hX3N0cmJ1Zl9uZXcoKTsKKyAgICBl
aW5hX3N0cmJ1Zl9hcHBlbmRfcHJpbnRmKGNvbnRlbnREaXNwb3NpdGlvbiwgImZpbGVuYW1lPSVz
Iiwgc2VydmVyU3VnZ2VzdGVkRmlsZW5hbWUpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2Fw
cGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAiQ29udGVudC1EaXNwb3NpdGlvbiIsIGVp
bmFfc3RyYnVmX3N0cmluZ19nZXQoY29udGVudERpc3Bvc2l0aW9uKSk7CisgICAgZWluYV9zdHJi
dWZfZnJlZShjb250ZW50RGlzcG9zaXRpb24pOworCisgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX0NPUFksIGNvbnRlbnRzLCBm
aWxlU2l6ZSk7CisgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSk7CisKKyAgICBlaW5hX2ZpbGVfbWFwX2ZyZWUoZiwgY29udGVudHMpOworICAgIGVp
bmFfZmlsZV9jbG9zZShmKTsKK30KKworc3RhdGljIHZvaWQgb25fZG93bmxvYWRfcmVxdWVzdGVk
KHZvaWQqIHVzZXJEYXRhLCBFdmFzX09iamVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQor
eworICAgIERvd25sb2FkVGVzdERhdGEqIHRlc3REYXRhID0gc3RhdGljX2Nhc3Q8RG93bmxvYWRU
ZXN0RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBFd2tfRG93bmxvYWRfSm9iKiBkb3dubG9hZCA9IHN0
YXRpY19jYXN0PEV3a19Eb3dubG9hZF9Kb2IqPihldmVudEluZm8pOworICAgIEFTU0VSVF9FUShl
d2tfZG93bmxvYWRfam9iX3N0YXRlX2dldChkb3dubG9hZCksIEVXS19ET1dOTE9BRF9KT0JfU1RB
VEVfTk9UX1NUQVJURUQpOworICAgIEFTU0VSVF9FUShld2tfZG93bmxvYWRfam9iX2VzdGltYXRl
ZF9wcm9ncmVzc19nZXQoZG93bmxvYWQpLCAwKTsKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2Fk
X2pvYl9lbGFwc2VkX3RpbWVfZ2V0KGRvd25sb2FkKSwgMCk7CisKKyAgICBFd2tfVXJsX1JlcXVl
c3QqIHJlcXVlc3QgPSBld2tfZG93bmxvYWRfam9iX3JlcXVlc3RfZ2V0KGRvd25sb2FkKTsKKyAg
ICBBU1NFUlRfVFJVRShyZXF1ZXN0KTsKKyAgICBFWFBFQ1RfU1RSRVEoZXdrX3VybF9yZXF1ZXN0
X3VybF9nZXQocmVxdWVzdCksIHRlc3REYXRhLT5maWxlVXJsKTsKKworICAgIEV3a19VcmxfUmVz
cG9uc2UqIHJlc3BvbnNlID0gZXdrX2Rvd25sb2FkX2pvYl9yZXNwb25zZV9nZXQoZG93bmxvYWQp
OworICAgIEFTU0VSVF9UUlVFKHJlc3BvbnNlKTsKKyAgICBFWFBFQ1RfU1RSRVEoZXdrX3VybF9y
ZXNwb25zZV9taW1lX3R5cGVfZ2V0KHJlc3BvbnNlKSwgImFwcGxpY2F0aW9uL3BkZiIpOworCisg
ICAgRVhQRUNUX1NUUkVRKGV3a19kb3dubG9hZF9qb2Jfc3VnZ2VzdGVkX2ZpbGVuYW1lX2dldChk
b3dubG9hZCksIHNlcnZlclN1Z2dlc3RlZEZpbGVuYW1lKTsKKworICAgIEFTU0VSVF9GQUxTRShm
aWxlRXhpc3RzKHRlc3REYXRhLT5kZXN0aW5hdGlvblBhdGgpKTsKKyAgICBld2tfZG93bmxvYWRf
am9iX2Rlc3RpbmF0aW9uX3NldChkb3dubG9hZCwgdGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCk7
CisgICAgRVhQRUNUX1NUUkVRKGV3a19kb3dubG9hZF9qb2JfZGVzdGluYXRpb25fZ2V0KGRvd25s
b2FkKSwgdGVzdERhdGEtPmRlc3RpbmF0aW9uUGF0aCk7Cit9CisKK3N0YXRpYyB2b2lkIG9uX2Rv
d25sb2FkX2NhbmNlbGxlZCh2b2lkKiB1c2VyRGF0YSwgRXZhc19PYmplY3QqIHdlYnZpZXcsIHZv
aWQqIGV2ZW50SW5mbykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRvd25sb2FkIHdhcyBjYW5j
ZWxsZWQuXG4iKTsKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgIEZBSUwoKTsKK30K
Kworc3RhdGljIHZvaWQgb25fZG93bmxvYWRfZmFpbGVkKHZvaWQqIHVzZXJEYXRhLCBFdmFzX09i
amVjdCogd2Vidmlldywgdm9pZCogZXZlbnRJbmZvKQoreworICAgIEV3a19Eb3dubG9hZF9Kb2Jf
RXJyb3IqIGRvd25sb2FkRXJyb3IgPSBzdGF0aWNfY2FzdDxFd2tfRG93bmxvYWRfSm9iX0Vycm9y
Kj4oZXZlbnRJbmZvKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkRvd25sb2FkIGVycm9yOiAlc1xu
IiwgZXdrX3dlYl9lcnJvcl9kZXNjcmlwdGlvbl9nZXQoZG93bmxvYWRFcnJvci0+ZXJyb3IpKTsK
KyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworICAgIEZBSUwoKTsKK30KKworc3RhdGljIHZv
aWQgb25fZG93bmxvYWRfZmluaXNoZWQodm9pZCogdXNlckRhdGEsIEV2YXNfT2JqZWN0KiB3ZWJ2
aWV3LCB2b2lkKiBldmVudEluZm8pCit7CisgICAgRG93bmxvYWRUZXN0RGF0YSogdGVzdERhdGEg
PSBzdGF0aWNfY2FzdDxEb3dubG9hZFRlc3REYXRhKj4odXNlckRhdGEpOworICAgIEV3a19Eb3du
bG9hZF9Kb2IqIGRvd25sb2FkID0gc3RhdGljX2Nhc3Q8RXdrX0Rvd25sb2FkX0pvYio+KGV2ZW50
SW5mbyk7CisKKyAgICBBU1NFUlRfRVEoZXdrX2Rvd25sb2FkX2pvYl9lc3RpbWF0ZWRfcHJvZ3Jl
c3NfZ2V0KGRvd25sb2FkKSwgMSk7CisgICAgQVNTRVJUX0VRKGV3a19kb3dubG9hZF9qb2Jfc3Rh
dGVfZ2V0KGRvd25sb2FkKSwgRVdLX0RPV05MT0FEX0pPQl9TVEFURV9GSU5JU0hFRCk7CisgICAg
QVNTRVJUX0dUKGV3a19kb3dubG9hZF9qb2JfZWxhcHNlZF90aW1lX2dldChkb3dubG9hZCksIDAp
OworCisgICAgQVNTRVJUX1RSVUUoZmlsZUV4aXN0cyh0ZXN0RGF0YS0+ZGVzdGluYXRpb25QYXRo
KSk7CisKKyAgICBlY29yZV9tYWluX2xvb3BfcXVpdCgpOworfQorCitURVNUX0YoRVdLMlVuaXRU
ZXN0QmFzZSwgZXdrX2Rvd25sb2FkKQoreworICAgIE93blB0cjxFV0syVW5pdFRlc3RTZXJ2ZXI+
IGh0dHBTZXJ2ZXIgPSBhZG9wdFB0cihuZXcgRVdLMlVuaXRUZXN0U2VydmVyKTsKKyAgICBodHRw
U2VydmVyLT5ydW4oc2VydmVyQ2FsbGJhY2spOworCisgICAgLy8gR2VuZXJhdGUgdW5pcXVlIG5h
bWUgZm9yIGRlc3RpbmF0aW9uIGZpbGUuCisgICAgY2hhciBkZXN0aW5hdGlvblBhdGhbXSA9ICIv
dG1wL3BkZi1maWxlLlhYWFhYWCI7CisgICAgQVNTRVJUX1RSVUUobWt0ZW1wKGRlc3RpbmF0aW9u
UGF0aCkpOworCisgICAgQ1N0cmluZyBmaWxlVXJsID0gaHR0cFNlcnZlci0+Z2V0VVJJRm9yUGF0
aCh0ZXN0RmlsZVBhdGgpOworCisgICAgRG93bmxvYWRUZXN0RGF0YSB1c2VyRGF0YSA9IHsgZmls
ZVVybC5kYXRhKCksIGRlc3RpbmF0aW9uUGF0aCB9OworICAgIEFTU0VSVF9GQUxTRShmaWxlRXhp
c3RzKGRlc3RpbmF0aW9uUGF0aCkpOworCisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
YWRkKHdlYlZpZXcoKSwgImRvd25sb2FkLHJlcXVlc3QiLCBvbl9kb3dubG9hZF9yZXF1ZXN0ZWQs
ICZ1c2VyRGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfYWRkKHdlYlZpZXco
KSwgImRvd25sb2FkLGNhbmNlbCIsIG9uX2Rvd25sb2FkX2NhbmNlbGxlZCwgJnVzZXJEYXRhKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19hZGQod2ViVmlldygpLCAiZG93bmxvYWQs
ZmFpbGVkIiwgb25fZG93bmxvYWRfZmFpbGVkLCAmdXNlckRhdGEpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2FkZCh3ZWJWaWV3KCksICJkb3dubG9hZCxmaW5pc2hlZCIsIG9uX2Rv
d25sb2FkX2ZpbmlzaGVkLCAmdXNlckRhdGEpOworCisgICAgLy8gRG93bmxvYWQgdGVzdCBwZGYK
KyAgICBld2tfdmlld191cmlfc2V0KHdlYlZpZXcoKSwgZmlsZVVybC5kYXRhKCkpOworICAgIGVj
b3JlX21haW5fbG9vcF9iZWdpbigpOworCisgICAgLy8gQ2xlYW4gdXAKKyAgICB1bmxpbmsoZGVz
dGluYXRpb25QYXRoKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmluZGV4
IGZjNWQ3NDcuLjUxOGRiOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Q
YWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaApA
QCAtMTIxLDEzICsxMjEsMTYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VD
b250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdl
RnJvbU5hdmlnYXRvclF0T2JqZWN0KGNvbnN0IFN0cmluZyYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZVRleHRJbnB1dFN0YXRlKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCBj
b25zdCBTdHJpbmcmIHJlYWxtLCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJp
bmcmIHVzZXJuYW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGhh
bmRsZUNlcnRpZmljYXRlVmVyaWZpY2F0aW9uUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1l
LCBib29sJiBpZ25vcmVFcnJvcnMpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlUHJveHlB
dXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChjb25zdCBTdHJpbmcmIGhvc3RuYW1lLCB1aW50
MTZfdCBwb3J0LCBjb25zdCBTdHJpbmcmIHByZWZpbGxlZFVzZXJuYW1lLCBTdHJpbmcmIHVzZXJu
YW1lLCBTdHJpbmcmIHBhc3N3b3JkKSA9IDA7CiAjZW5kaWYgLy8gUExBVEZPUk0oUVQpLgogCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKyAgICB2aXJ0dWFsIHZvaWQgaGFuZGxl
RG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqKSA9IDA7CisjZW5kaWYgLy8gUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEsp
CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpID0gMDsKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA0ZWYyZGE1Li42Y2YyNjBh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtMTIyMSw3
ICsxMjIxLDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnJlY2VpdmVkUG9saWN5RGVjaXNpb24oUG9s
aWN5QWN0aW9uIGFjdGlvbiwgV2ViRnJhbWVQcm94eSogZnIKICAgICAgICAgLy8gQ3JlYXRlIGEg
ZG93bmxvYWQgcHJveHkuCiAgICAgICAgIERvd25sb2FkUHJveHkqIGRvd25sb2FkID0gbV9wcm9j
ZXNzLT5jb250ZXh0KCktPmNyZWF0ZURvd25sb2FkUHJveHkoKTsKICAgICAgICAgZG93bmxvYWRJ
RCA9IGRvd25sb2FkLT5kb3dubG9hZElEKCk7Ci0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKICAgICAgICAgLy8gT3VyIGRlc2lnbiBkb2VzIG5vdCBz
dXBwcG9ydCBkb3dubG9hZHMgd2l0aG91dCBhIFdlYlBhZ2UuCiAgICAgICAgIGhhbmRsZURvd25s
b2FkUmVxdWVzdChkb3dubG9hZCk7CiAjZW5kaWYKQEAgLTI2NDIsMTEgKzI2NDIsNiBAQCB2b2lk
IFdlYlBhZ2VQcm94eTo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tTmF2aWdhdG9yUXRPYmplY3QoY29u
c3QgU3RyaW5nJiBjb250ZW50cwogICAgIG1fcGFnZUNsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tTmF2aWdhdG9yUXRPYmplY3QoY29udGVudHMpOwogfQogCi12b2lkIFdlYlBhZ2VQcm94eTo6
aGFuZGxlRG93bmxvYWRSZXF1ZXN0KERvd25sb2FkUHJveHkqIGRvd25sb2FkKQotewotICAgIG1f
cGFnZUNsaWVudC0+aGFuZGxlRG93bmxvYWRSZXF1ZXN0KGRvd25sb2FkKTsKLX0KLQogdm9pZCBX
ZWJQYWdlUHJveHk6OmF1dGhlbnRpY2F0aW9uUmVxdWlyZWRSZXF1ZXN0KGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUsIGNvbnN0IFN0cmluZyYgcmVhbG0sIGNvbnN0IFN0cmluZyYgcHJlZmlsbGVkVXNl
cm5hbWUsIFN0cmluZyYgdXNlcm5hbWUsIFN0cmluZyYgcGFzc3dvcmQpCiB7CiAgICAgbV9wYWdl
Q2xpZW50LT5oYW5kbGVBdXRoZW50aWNhdGlvblJlcXVpcmVkUmVxdWVzdChob3N0bmFtZSwgcmVh
bG0sIHByZWZpbGxlZFVzZXJuYW1lLCB1c2VybmFtZSwgcGFzc3dvcmQpOwpAQCAtMjY2Myw2ICsy
NjU4LDEzIEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjZXJ0aWZpY2F0ZVZlcmlmaWNhdGlvblJlcXVl
c3QoY29uc3QgU3RyaW5nJiBob3N0bmFtZSwgYm9vbCYKIH0KICNlbmRpZiAvLyBQTEFURk9STShR
VCkuCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oRUZMKQordm9pZCBXZWJQYWdlUHJv
eHk6OmhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFByb3h5KiBkb3dubG9hZCkKK3sKKyAg
ICBtX3BhZ2VDbGllbnQtPmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3dubG9hZCk7Cit9CisjZW5k
aWYgLy8gUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEVGTCkKKwogI2lmIEVOQUJMRShUT1VDSF9F
VkVOVFMpCiB2b2lkIFdlYlBhZ2VQcm94eTo6bmVlZFRvdWNoRXZlbnRzKGJvb2wgbmVlZFRvdWNo
RXZlbnRzKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDMz
YzQ5YTMuLjU2MzNjZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
QEAgLTYzNSw2ICs2MzUsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdm9pZCBm
aW5kWm9vbWFibGVBcmVhRm9yUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBX
ZWJDb3JlOjpJbnRTaXplJik7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZUZyb21OYXZpZ2F0
b3JRdE9iamVjdChjb25zdCBTdHJpbmcmKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEVGTCkKICAgICB2b2lkIGhhbmRsZURvd25sb2FkUmVxdWVzdChEb3dubG9hZFBy
b3h5Kik7CiAjZW5kaWYKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>