<?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>213493</bug_id>
          
          <creation_ts>2020-06-22 15:57:43 -0700</creation_ts>
          <short_desc>[WPE][GTK] Add API to support &quot;Privacy Report&quot;</short_desc>
          <delta_ts>2020-07-27 01:35:44 -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>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=214590</see_also>
          <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>214401</dependson>
          <blocked>210184</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>benjamin</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>katherine_cheney</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>wilander</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1665209</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-06-22 15:57:43 -0700</bug_when>
    <thetext>&quot;&quot;&quot;
Apple also announced that its upcoming macOS Big Sur will include an update to the company’s web browser that gives users an easy-to-access “Privacy Report” right up next to the URL field. In a single click, the report will tell users which website trackers the browser has blocked.
&quot;&quot;&quot;

https://cdn.vox-cdn.com/thumbor/nuA_JNtgc1U3xSaOVIpoYcgR8VY=/0x0:653x653/920x0/filters:focal(0x0:653x653):format(webp):no_upscale()/cdn.vox-cdn.com/uploads/chorus_asset/file/20047451/tracker.jpg

There must be some Cocoa SPI somewhere to enable this (where?). We could expose an equivalent API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1665716</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-06-24 06:42:14 -0700</bug_when>
    <thetext>John, Youenn is WebsiteDataStore::getResourceLoadStatisticsDataSummary() the function returning the data needed to create the privacy report?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670373</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-09 23:44:16 -0700</bug_when>
    <thetext>Ping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670383</commentid>
    <comment_count>3</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-07-10 00:25:19 -0700</bug_when>
    <thetext>Sorry for the delay and thanks for the ping. I’m cc’ing my coworker who implemented the data reporting functionality from ITP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670489</commentid>
    <comment_count>4</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-07-10 10:24:30 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #1)
&gt; John, Youenn is WebsiteDataStore::getResourceLoadStatisticsDataSummary() the
&gt; function returning the data needed to create the privacy report?

Yes, WebsiteDataStore::getResourceLoadStatisticsDataSummary() is the correct function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670494</commentid>
    <comment_count>5</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-07-10 10:33:02 -0700</bug_when>
    <thetext>One thing to note here is that the reporting relies on full third-party cookie blocking. If your implementation only blocks some third-party cookies, you need to make sure the reporting only reports on those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670504</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-07-10 11:04:05 -0700</bug_when>
    <thetext>We use ThirdPartyCookieBlockingMode::All since that&apos;s default in Safari. Our goal is to match what Safari does.

I wonder if the other ThirdPartyCookieBlockingMode options can be removed? I guess nobody is using ITP with any of the other modes anymore?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1670505</commentid>
    <comment_count>7</comment_count>
    <who name="John Wilander">wilander</who>
    <bug_when>2020-07-10 11:10:36 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #6)
&gt; We use ThirdPartyCookieBlockingMode::All since that&apos;s default in Safari. Our
&gt; goal is to match what Safari does.
&gt; 
&gt; I wonder if the other ThirdPartyCookieBlockingMode options can be removed? I
&gt; guess nobody is using ITP with any of the other modes anymore?

Yes, I started working on removing all of that in https://bugs.webkit.org/show_bug.cgi?id=208819 but we decided we wanted to wait with such refactoring until we&apos;ve branched trunk for the upcoming releases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672084</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-16 03:37:31 -0700</bug_when>
    <thetext>(In reply to katherine_cheney from comment #4)
&gt; (In reply to Carlos Garcia Campos from comment #1)
&gt; &gt; John, Youenn is WebsiteDataStore::getResourceLoadStatisticsDataSummary() the
&gt; &gt; function returning the data needed to create the privacy report?
&gt; 
&gt; Yes, WebsiteDataStore::getResourceLoadStatisticsDataSummary() is the correct
&gt; function.

Thanks! I started to play with this, but I noticed I was not getting the same results than Safari, actually I was getting no entries in the report. So, I tried using the database store and then I got the same results. It seems to be a bug in the memory store (see bug #214401). This makes me wonder if we should be using the database store like Safari. Why do we have memory and db stores? When are you supposed to use one or the other? Should we also expose a setting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672089</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-16 03:56:07 -0700</bug_when>
    <thetext>I&apos;ve also noticed that with the memory store ThirdPartyDataForSpecificFirstParty::timeLastUpdated is always NoExistingTimestamp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672094</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-07-16 05:55:06 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #8)
&gt; Thanks! I started to play with this, but I noticed I was not getting the
&gt; same results than Safari, actually I was getting no entries in the report.
&gt; So, I tried using the database store and then I got the same results. It
&gt; seems to be a bug in the memory store (see bug #214401). This makes me
&gt; wonder if we should be using the database store like Safari. Why do we have
&gt; memory and db stores? When are you supposed to use one or the other? Should
&gt; we also expose a setting?

Good catch.

I don&apos;t think we need a setting for this. Memory store is for ephemeral mode and database store is for normal browsing mode. You can see if you restart Epiphany that all ITP data tracked in the Clear Data dialog gets deleted... oops, right? That&apos;s supposed to be persistent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672095</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-16 06:04:53 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #10)
&gt; (In reply to Carlos Garcia Campos from comment #8)
&gt; &gt; Thanks! I started to play with this, but I noticed I was not getting the
&gt; &gt; same results than Safari, actually I was getting no entries in the report.
&gt; &gt; So, I tried using the database store and then I got the same results. It
&gt; &gt; seems to be a bug in the memory store (see bug #214401). This makes me
&gt; &gt; wonder if we should be using the database store like Safari. Why do we have
&gt; &gt; memory and db stores? When are you supposed to use one or the other? Should
&gt; &gt; we also expose a setting?
&gt; 
&gt; Good catch.
&gt; 
&gt; I don&apos;t think we need a setting for this. Memory store is for ephemeral mode
&gt; and database store is for normal browsing mode. You can see if you restart
&gt; Epiphany that all ITP data tracked in the Clear Data dialog gets deleted...
&gt; oops, right? That&apos;s supposed to be persistent.

It&apos;s persistent, stored in full_browsing_session_resourceLog.plist</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672099</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-07-16 06:22:40 -0700</bug_when>
    <thetext>Hm... well then I don&apos;t understand either. How can it be a &quot;memory store&quot; if it&apos;s stored on disk? Maybe it&apos;s considered serialized memory, similar to WebKit session state?

It really does disappear after restarting the browser btw. I&apos;m seeing *very* strange behavior. After restarting the browser and reloading this bug, I have no ITP data stored. After loading a reddit.com, I see ITP data stored for webkit.org (plausible since this bug was reloaded), mozilla.net (???), and firefox.com (???). After doing nothing and just waiting a few more seconds, ITP data appears for several other domains. This can&apos;t be right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672938</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-07-19 12:09:53 -0700</bug_when>
    <thetext>I found this in WebResourceLoadStatisticsStore:

auto legacyPlistFilePath = FileSystem::pathByAppendingComponent(resourceLoadStatisticsDirectory, &quot;full_browsing_session_resourceLog.plist&quot;);
if (FileSystem::fileExists(legacyPlistFilePath))
    FileSystem::deleteFile(legacyPlistFilePath);

Seems that ResourceLoadStatisticsMemoryStore is obsoleted by ResourceLoadStatisticsDatabaseStore, and enabling the database store will cause it to clean up the plist file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1672996</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-20 01:12:51 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #13)
&gt; I found this in WebResourceLoadStatisticsStore:
&gt; 
&gt; auto legacyPlistFilePath =
&gt; FileSystem::pathByAppendingComponent(resourceLoadStatisticsDirectory,
&gt; &quot;full_browsing_session_resourceLog.plist&quot;);
&gt; if (FileSystem::fileExists(legacyPlistFilePath))
&gt;     FileSystem::deleteFile(legacyPlistFilePath);
&gt; 
&gt; Seems that ResourceLoadStatisticsMemoryStore is obsoleted by
&gt; ResourceLoadStatisticsDatabaseStore, and enabling the database store will
&gt; cause it to clean up the plist file.

Let&apos;s switch to use the database store unconditionally then, but I would like someone from Apple to confirm we are right first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673117</commentid>
    <comment_count>15</comment_count>
    <who name="Kate Cheney">katherine_cheney</who>
    <bug_when>2020-07-20 10:14:49 -0700</bug_when>
    <thetext>The database store is a SQLite version of the full_browsing_session_resourceLog.plist file. The &quot;memory&quot; store actually consists of both memory and persistent storage, and in this version data is stored in memory and flushed to disk periodically. The database store is a complete replacement for the memory store, and as you noticed, switching to the memory store from the database store is not supported. I would recommend using the database store unconditionally, as we may not continue to support new behavior with the memory store. Currently we are writing and maintaining tests for both versions, but this is not something we want to keep up indefinitely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673786</commentid>
    <comment_count>16</comment_count>
      <attachid>404913</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-22 03:41:31 -0700</bug_when>
    <thetext>Created attachment 404913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673787</commentid>
    <comment_count>17</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-07-22 03:42:33 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673801</commentid>
    <comment_count>18</comment_count>
      <attachid>404913</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2020-07-22 06:23:03 -0700</bug_when>
    <thetext>Comment on attachment 404913
Patch

Patch LGTM overall, but there are a couple of types and a an introspection
annotation which needs fixing, so please check the comments below before landing.

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

&gt; Source/WTF/ChangeLog:8
&gt; +        Add support for using GRePtr with GDateTime.

Typo: GRePtr → GRefPtr

&gt; Source/WebKit/ChangeLog:8
&gt; +        Add WebKitITPFirstParty and WebKitITPThirdParty bosex types to expose the data returned by the ITP summary.

Typo: bosex → boxed

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:1221
&gt; + * Returns: (transfer full): the last update time as a #GDateTime

The implementation returns the pointer directly, without adding a
reference, therefore the annotation here should be “(transfer none)”.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1673852</commentid>
    <comment_count>19</comment_count>
      <attachid>404913</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-07-22 09:38:46 -0700</bug_when>
    <thetext>Comment on attachment 404913
Patch

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

API looks good.

&gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:1202
&gt; + * Get whether website data access has been granted for a #WebKitITPThirdParty
&gt; + * under @itp_first_party.

Hm, I understand the #WebkitITPFirstParty object corresponds to exactly one #WebKitITPThirdParty, yes? That is not very clear. Perhaps:

Get whether @itp_first_party has granted website data access to its #WebKitITPThirdParty. Each @WebKitITPFirstParty is created by webkit_itp_third_party_get_first_parties() and therefore corresponds to exactly one #WebKitITPThirdParty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675179</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-27 01:31:30 -0700</bug_when>
    <thetext>(In reply to Adrian Perez from comment #18)
&gt; Comment on attachment 404913 [details]
&gt; Patch
&gt; 
&gt; Patch LGTM overall, but there are a couple of types and a an introspection
&gt; annotation which needs fixing, so please check the comments below before
&gt; landing.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404913&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:8
&gt; &gt; +        Add support for using GRePtr with GDateTime.
&gt; 
&gt; Typo: GRePtr → GRefPtr
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:8
&gt; &gt; +        Add WebKitITPFirstParty and WebKitITPThirdParty bosex types to expose the data returned by the ITP summary.
&gt; 
&gt; Typo: bosex → boxed
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:1221
&gt; &gt; + * Returns: (transfer full): the last update time as a #GDateTime
&gt; 
&gt; The implementation returns the pointer directly, without adding a
&gt; reference, therefore the annotation here should be “(transfer none)”.

Right!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675180</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-27 01:32:22 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #19)
&gt; Comment on attachment 404913 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=404913&amp;action=review
&gt; 
&gt; API looks good.
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/glib/WebKitWebsiteDataManager.cpp:1202
&gt; &gt; + * Get whether website data access has been granted for a #WebKitITPThirdParty
&gt; &gt; + * under @itp_first_party.
&gt; 
&gt; Hm, I understand the #WebkitITPFirstParty object corresponds to exactly one
&gt; #WebKitITPThirdParty, yes? That is not very clear. Perhaps:

Right.

&gt; Get whether @itp_first_party has granted website data access to its
&gt; #WebKitITPThirdParty. Each @WebKitITPFirstParty is created by
&gt; webkit_itp_third_party_get_first_parties() and therefore corresponds to
&gt; exactly one #WebKitITPThirdParty.

Great, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675181</commentid>
    <comment_count>22</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-07-27 01:35:44 -0700</bug_when>
    <thetext>Committed r264910: &lt;https://trac.webkit.org/changeset/264910&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>404913</attachid>
            <date>2020-07-22 03:41:31 -0700</date>
            <delta_ts>2020-07-22 06:23:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-itp-summary.diff</filename>
            <type>text/plain</type>
            <size>28525</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggYzBiZmFmMDA5Y2Q1Li5jOWZjMGMyMWQzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MjAtMDctMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFtXUEVdW0dUS10gQWRkIEFQSSB0byBzdXBwb3J0ICJQcml2YWN5IFJlcG9ydCIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzQ5MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzdXBwb3J0
IGZvciB1c2luZyBHUmVQdHIgd2l0aCBHRGF0ZVRpbWUuCisKKyAgICAgICAgKiB3dGYvZ2xpYi9H
UmVmUHRyLmNwcDoKKyAgICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVm
R1B0cik6CisgICAgICAgICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIwLTA3LTIwICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0VDTUEtNDAyXSBJbXBs
ZW1lbnQgSW50bC5EaXNwbGF5TmFtZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIv
R1JlZlB0ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCmluZGV4IGM0MTNl
ZDQyY2M4MC4uMmZhOWRiYzI3YTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dS
ZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKQEAgLTE4Miw2
ICsxODIsMTkgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR01hcHBlZEZpbGUqIHB0cikK
ICAgICAgICAgZ19tYXBwZWRfZmlsZV91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBHRGF0
ZVRpbWUqIHJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z19kYXRlX3RpbWVfcmVmKHB0cik7CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z19kYXRlX3RpbWVfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoR0xJQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5o
IGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKaW5kZXggY2MxYjk3MjQ1MzY4Li5kMTY0
MmI3NDk0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCisrKyBi
L1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yNDEsNiArMjQxLDggQEAgdGVtcGxh
dGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdSZWdleCogcmVmR1B0cihHUmVnZXgqKTsKIHRlbXBs
YXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHUmVnZXgqKTsKIHRlbXBs
YXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHTWFwcGVkRmlsZSogcmVmR1B0cihHTWFwcGVkRmls
ZSopOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdNYXBw
ZWRGaWxlKik7Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RhdGVUaW1lKiByZWZH
UHRyKEdEYXRlVGltZSogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRlcmVmR1B0cihHRGF0ZVRpbWUqIHB0cik7CiAKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBpbmxp
bmUgVCogcmVmR1B0cihUKiBwdHIpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY0NDM1NDAwMDQ0Ny4uNzExNzJk
NThkNDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIwLTA3LTIyICBDYXJsb3MgR2Fy
Y2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbV1BFXVtHVEtdIEFk
ZCBBUEkgdG8gc3VwcG9ydCAiUHJpdmFjeSBSZXBvcnQiCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTM0OTMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0SVRQRmlyc3RQYXJ0eSBhbmQgV2Vi
S2l0SVRQVGhpcmRQYXJ0eSBib3NleCB0eXBlcyB0byBleHBvc2UgdGhlIGRhdGEgcmV0dXJuZWQg
YnkgdGhlIElUUCBzdW1tYXJ5LgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dFdlYnNpdGVEYXRhTWFuYWdlci5jcHA6CisgICAgICAgIChfV2ViS2l0SVRQRmlyc3RQYXJ0eTo6
X1dlYktpdElUUEZpcnN0UGFydHkpOgorICAgICAgICAod2Via2l0SVRQRmlyc3RQYXJ0eUNyZWF0
ZSk6CisgICAgICAgICh3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3JlZik6CisgICAgICAgICh3ZWJr
aXRfaXRwX2ZpcnN0X3BhcnR5X3VucmVmKToKKyAgICAgICAgKHdlYmtpdF9pdHBfZmlyc3RfcGFy
dHlfZ2V0X2RvbWFpbik6CisgICAgICAgICh3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF93ZWJz
aXRlX2RhdGFfYWNjZXNzX2FsbG93ZWQpOgorICAgICAgICAod2Via2l0X2l0cF9maXJzdF9wYXJ0
eV9nZXRfbGFzdF91cGRhdGVfdGltZSk6CisgICAgICAgIChfV2ViS2l0SVRQVGhpcmRQYXJ0eTo6
X1dlYktpdElUUFRoaXJkUGFydHkpOgorICAgICAgICAoX1dlYktpdElUUFRoaXJkUGFydHk6On5f
V2ViS2l0SVRQVGhpcmRQYXJ0eSk6CisgICAgICAgICh3ZWJraXRJVFBUaGlyZFBhcnR5Q3JlYXRl
KToKKyAgICAgICAgKHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmKToKKyAgICAgICAgKHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfdW5yZWYpOgorICAgICAgICAod2Via2l0X2l0cF90aGlyZF9wYXJ0
eV9nZXRfZG9tYWluKToKKyAgICAgICAgKHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfZ2V0X2ZpcnN0
X3BhcnRpZXMpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBf
c3VtbWFyeSk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9z
dW1tYXJ5X2ZpbmlzaCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0b2Ns
ZWFudXBzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQ6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0QXV0b2Ns
ZWFudXBzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNlY3Rp
b25zLnR4dDoKKwogMjAyMC0wNy0yMSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BFXSBJVFA6IHVzZSB0aGUgZGF0YWJhc2Ugc3Rv
cmUgdW5jb25kaXRpb25hbGx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAppbmRleCAyMjMxMDY2
MGE5NzEuLjUwM2JiZmVhOGU4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2dsaWIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3BwCkBAIC0xMTEy
LDMgKzExMTIsMjcyIEBAIGdib29sZWFuIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVh
cl9maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hCiAKICAgICByZXR1cm4gZ190
YXNrX3Byb3BhZ2F0ZV9ib29sZWFuKEdfVEFTSyhyZXN1bHQpLCBlcnJvcik7CiB9CisKK3N0cnVj
dCBfV2ViS2l0SVRQRmlyc3RQYXJ0eSB7CisgICAgZXhwbGljaXQgX1dlYktpdElUUEZpcnN0UGFy
dHkoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZvclNwZWNp
ZmljRmlyc3RQYXJ0eSYmIGRhdGEpCisgICAgICAgIDogZG9tYWluKGRhdGEuZmlyc3RQYXJ0eURv
bWFpbi5zdHJpbmcoKS51dGY4KCkpCisgICAgICAgICwgc3RvcmFnZUFjY2Vzc0dyYW50ZWQoZGF0
YS5zdG9yYWdlQWNjZXNzR3JhbnRlZCkKKyAgICAgICAgLCBsYXN0VXBkYXRlZChhZG9wdEdSZWYo
Z19kYXRlX3RpbWVfbmV3X2Zyb21fdW5peF91dGMoZGF0YS50aW1lTGFzdFVwZGF0ZWQuc2Vjb25k
c0FzPGdpbnQ2ND4oKSkpKQorICAgIHsKKyAgICB9CisKKyAgICBDU3RyaW5nIGRvbWFpbjsKKyAg
ICBib29sIHN0b3JhZ2VBY2Nlc3NHcmFudGVkIHsgZmFsc2UgfTsKKyAgICBHUmVmUHRyPEdEYXRl
VGltZT4gbGFzdFVwZGF0ZWQ7CisgICAgaW50IHJlZmVyZW5jZUNvdW50IHsgMSB9OworfTsKKwor
R19ERUZJTkVfQk9YRURfVFlQRShXZWJLaXRJVFBGaXJzdFBhcnR5LCB3ZWJraXRfaXRwX2ZpcnN0
X3BhcnR5LCB3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3JlZiwgd2Via2l0X2l0cF9maXJzdF9wYXJ0
eV91bnJlZikKKworc3RhdGljIFdlYktpdElUUEZpcnN0UGFydHkqIHdlYmtpdElUUEZpcnN0UGFy
dHlDcmVhdGUoV2ViUmVzb3VyY2VMb2FkU3RhdGlzdGljc1N0b3JlOjpUaGlyZFBhcnR5RGF0YUZv
clNwZWNpZmljRmlyc3RQYXJ0eSYmIGRhdGEpCit7CisgICAgYXV0byogZmlyc3RQYXJ0eSA9IHN0
YXRpY19jYXN0PFdlYktpdElUUEZpcnN0UGFydHkqPihmYXN0TWFsbG9jKHNpemVvZihXZWJLaXRJ
VFBGaXJzdFBhcnR5KSkpOworICAgIG5ldyAoZmlyc3RQYXJ0eSkgV2ViS2l0SVRQRmlyc3RQYXJ0
eShXVEZNb3ZlKGRhdGEpKTsKKyAgICByZXR1cm4gZmlyc3RQYXJ0eTsKK30KKworCisvKioKKyAq
IHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfcmVmOgorICogQGl0cF9maXJzdF9wYXJ0eTogYSAjV2Vi
S2l0SVRQRmlyc3RQYXJ0eQorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUgcmVmZXJl
bmNlIGNvdW50IG9mIEBpdHBfZmlyc3RfcGFydHkgYnkgb25lLgorICogVGhpcyBmdW5jdGlvbiBp
cyBNVC1zYWZlIGFuZCBtYXkgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KKyAqCisgKiBSZXR1
cm5zOiBUaGUgcGFzc2VkICNXZWJLaXRJVFBGaXJzdFBhcnR5CisgKgorICogU2luY2U6IDIuMzAK
KyAqLworV2ViS2l0SVRQRmlyc3RQYXJ0eSogd2Via2l0X2l0cF9maXJzdF9wYXJ0eV9yZWYoV2Vi
S2l0SVRQRmlyc3RQYXJ0eSogZmlyc3RQYXJ0eSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChmaXJzdFBhcnR5LCBudWxscHRyKTsKKworICAgIGdfYXRvbWljX2ludF9pbmMoJmZpcnN0UGFy
dHktPnJlZmVyZW5jZUNvdW50KTsKKyAgICByZXR1cm4gZmlyc3RQYXJ0eTsKK30KKworLyoqCisg
KiB3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3VucmVmOgorICogQGl0cF9maXJzdF9wYXJ0eTogYSAj
V2ViS2l0SVRQRmlyc3RQYXJ0eQorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyB0aGUgcmVm
ZXJlbmNlIGNvdW50IG9mIEBpdHBfZmlyc3RfcGFydHkgYnkgb25lLgorICogSWYgdGhlIHJlZmVy
ZW5jZSBjb3VudCBkcm9wcyB0byAwLCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieQorICogI1dlYktp
dElUUEZpcnN0UGFydHkgaXMgcmVsZWFzZWQuIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2FmZSBhbmQg
bWF5IGJlCisgKiBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICoKKyAqIFNpbmNlOiAyLjMwCisg
Ki8KK3ZvaWQgd2Via2l0X2l0cF9maXJzdF9wYXJ0eV91bnJlZihXZWJLaXRJVFBGaXJzdFBhcnR5
KiBmaXJzdFBhcnR5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoZmlyc3RQYXJ0eSk7CisKKyAg
ICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCgmZmlyc3RQYXJ0eS0+cmVmZXJlbmNlQ291
bnQpKSB7CisgICAgICAgIGZpcnN0UGFydHktPn5XZWJLaXRJVFBGaXJzdFBhcnR5KCk7CisgICAg
ICAgIGZhc3RGcmVlKGZpcnN0UGFydHkpOworICAgIH0KK30KKworLyoqCisgKiB3ZWJraXRfaXRw
X2ZpcnN0X3BhcnR5X2dldF9kb21haW46CisgKiBAaXRwX2ZpcnN0X3BhcnR5OiBhICNXZWJLaXRJ
VFBGaXJzdFBhcnR5CisgKgorICogR2V0IHRoZSBkb21haW4gbmFtZSBvZiBAaXRwX2ZpcnN0X3Bh
cnR5CisgKgorICogUmV0dXJuczogdGhlIGRvbWFpbiBuYW1lCisgKgorICogU2luY2U6IDIuMzAK
KyAqLworY29uc3QgY2hhciogd2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfZG9tYWluKFdlYktp
dElUUEZpcnN0UGFydHkqIGZpcnN0UGFydHkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
Zmlyc3RQYXJ0eSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gZmlyc3RQYXJ0eS0+ZG9tYWluLmRh
dGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF93ZWJzaXRlX2Rh
dGFfYWNjZXNzX2FsbG93ZWQ6CisgKiBAaXRwX2ZpcnN0X3BhcnR5OiBhICNXZWJLaXRJVFBGaXJz
dFBhcnR5CisgKgorICogR2V0IHdoZXRoZXIgd2Vic2l0ZSBkYXRhIGFjY2VzcyBoYXMgYmVlbiBn
cmFudGVkIGZvciBhICNXZWJLaXRJVFBUaGlyZFBhcnR5CisgKiB1bmRlciBAaXRwX2ZpcnN0X3Bh
cnR5LgorICoKKyAqIFJldHVybnM6ICVUUlVFIGlmIHdlYnNpdGUgZGF0YSBhY2Nlc3MgaGFzIGJl
ZW4gZ3JhbnRlZCwgb3IgJUZBTFNFIG90aGVyd2lzZQorICoKKyAqIFNpbmNlOiAyLjMwCisgKi8K
K2dib29sZWFuIHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfZ2V0X3dlYnNpdGVfZGF0YV9hY2Nlc3Nf
YWxsb3dlZChXZWJLaXRJVFBGaXJzdFBhcnR5KiBmaXJzdFBhcnR5KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKGZpcnN0UGFydHksIEZBTFNFKTsKKworICAgIHJldHVybiBmaXJzdFBhcnR5
LT5zdG9yYWdlQWNjZXNzR3JhbnRlZDsKK30KKworLyoqCisgKiB3ZWJraXRfaXRwX2ZpcnN0X3Bh
cnR5X2dldF9sYXN0X3VwZGF0ZV90aW1lOgorICogQGl0cF9maXJzdF9wYXJ0eTogYSAjV2ViS2l0
SVRQRmlyc3RQYXJ0eQorICoKKyAqIEdldCB0aGUgbGFzdCB0aW1lIGEgI1dlYktpdElUUFRoaXJk
UGFydHkgaGFzIGJlZW4gc2VlbiB1bmRlciBAaXRwX2ZpcnN0X3BhcnR5CisgKgorICogUmV0dXJu
czogKHRyYW5zZmVyIGZ1bGwpOiB0aGUgbGFzdCB1cGRhdGUgdGltZSBhcyBhICNHRGF0ZVRpbWUK
KyAqCisgKiBTaW5jZTogMi4zMAorICovCitHRGF0ZVRpbWUqIHdlYmtpdF9pdHBfZmlyc3RfcGFy
dHlfZ2V0X2xhc3RfdXBkYXRlX3RpbWUoV2ViS2l0SVRQRmlyc3RQYXJ0eSogZmlyc3RQYXJ0eSkK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChmaXJzdFBhcnR5LCBudWxscHRyKTsKKworICAg
IHJldHVybiBmaXJzdFBhcnR5LT5sYXN0VXBkYXRlZC5nZXQoKTsKK30KKworc3RydWN0IF9XZWJL
aXRJVFBUaGlyZFBhcnR5IHsKKyAgICBleHBsaWNpdCBfV2ViS2l0SVRQVGhpcmRQYXJ0eShXZWJS
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhJiYgZGF0YSkKKyAgICAg
ICAgOiBkb21haW4oZGF0YS50aGlyZFBhcnR5RG9tYWluLnN0cmluZygpLnV0ZjgoKSkKKyAgICB7
CisgICAgICAgIHdoaWxlICghZGF0YS51bmRlckZpcnN0UGFydGllcy5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBmaXJzdFBhcnRpZXMgPSBnX2xpc3RfcHJlcGVuZChmaXJzdFBhcnRpZXMsIHdlYmtp
dElUUEZpcnN0UGFydHlDcmVhdGUoZGF0YS51bmRlckZpcnN0UGFydGllcy50YWtlTGFzdCgpKSk7
CisgICAgfQorCisgICAgfl9XZWJLaXRJVFBUaGlyZFBhcnR5KCkKKyAgICB7CisgICAgICAgIGdf
bGlzdF9mcmVlX2Z1bGwoZmlyc3RQYXJ0aWVzLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pih3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3VucmVmKSk7CisgICAgfQorCisgICAgQ1N0cmlu
ZyBkb21haW47CisgICAgR0xpc3QqIGZpcnN0UGFydGllcyB7IG51bGxwdHIgfTsKKyAgICBpbnQg
cmVmZXJlbmNlQ291bnQgeyAxIH07Cit9OworCitHX0RFRklORV9CT1hFRF9UWVBFKFdlYktpdElU
UFRoaXJkUGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFy
dHlfcmVmLCB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKQorCitzdGF0aWMgV2ViS2l0SVRQ
VGhpcmRQYXJ0eSogd2Via2l0SVRQVGhpcmRQYXJ0eUNyZWF0ZShXZWJSZXNvdXJjZUxvYWRTdGF0
aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhJiYgZGF0YSkKK3sKKyAgICBhdXRvKiB0aGlyZFBh
cnR5ID0gc3RhdGljX2Nhc3Q8V2ViS2l0SVRQVGhpcmRQYXJ0eSo+KGZhc3RNYWxsb2Moc2l6ZW9m
KFdlYktpdElUUFRoaXJkUGFydHkpKSk7CisgICAgbmV3ICh0aGlyZFBhcnR5KSBXZWJLaXRJVFBU
aGlyZFBhcnR5KFdURk1vdmUoZGF0YSkpOworICAgIHJldHVybiB0aGlyZFBhcnR5OworfQorCisv
KioKKyAqIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmOgorICogQGl0cF90aGlyZF9wYXJ0eTog
YSAjV2ViS2l0SVRQVGhpcmRQYXJ0eQorICoKKyAqIEF0b21pY2FsbHkgaW5jcmVtZW50cyB0aGUg
cmVmZXJlbmNlIGNvdW50IG9mIEBpdHBfdGhpcmRfcGFydHkgYnkgb25lLgorICogVGhpcyBmdW5j
dGlvbiBpcyBNVC1zYWZlIGFuZCBtYXkgYmUgY2FsbGVkIGZyb20gYW55IHRocmVhZC4KKyAqCisg
KiBSZXR1cm5zOiBUaGUgcGFzc2VkICNXZWJLaXRJVFBUaGlyZFBhcnR5CisgKgorICogU2luY2U6
IDIuMzAKKyAqLworV2ViS2l0SVRQVGhpcmRQYXJ0eSogd2Via2l0X2l0cF90aGlyZF9wYXJ0eV9y
ZWYoV2ViS2l0SVRQVGhpcmRQYXJ0eSogdGhpcmRQYXJ0eSkKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbCh0aGlyZFBhcnR5LCBudWxscHRyKTsKKworICAgIGdfYXRvbWljX2ludF9pbmMoJnRo
aXJkUGFydHktPnJlZmVyZW5jZUNvdW50KTsKKyAgICByZXR1cm4gdGhpcmRQYXJ0eTsKK30KKwor
LyoqCisgKiB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmOgorICogQGl0cF90aGlyZF9wYXJ0
eTogYSAjV2ViS2l0SVRQVGhpcmRQYXJ0eQorICoKKyAqIEF0b21pY2FsbHkgZGVjcmVtZW50cyB0
aGUgcmVmZXJlbmNlIGNvdW50IG9mIEBpdHBfdGhpcmRfcGFydHkgYnkgb25lLgorICogSWYgdGhl
IHJlZmVyZW5jZSBjb3VudCBkcm9wcyB0byAwLCBhbGwgbWVtb3J5IGFsbG9jYXRlZCBieQorICog
I1dlYktpdElUUFRoaXJkUGFydHkgaXMgcmVsZWFzZWQuIFRoaXMgZnVuY3Rpb24gaXMgTVQtc2Fm
ZSBhbmQgbWF5IGJlCisgKiBjYWxsZWQgZnJvbSBhbnkgdGhyZWFkLgorICoKKyAqIFNpbmNlOiAy
LjMwCisgKi8KK3ZvaWQgd2Via2l0X2l0cF90aGlyZF9wYXJ0eV91bnJlZihXZWJLaXRJVFBUaGly
ZFBhcnR5KiB0aGlyZFBhcnR5KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwodGhpcmRQYXJ0eSk7
CisKKyAgICBpZiAoZ19hdG9taWNfaW50X2RlY19hbmRfdGVzdCgmdGhpcmRQYXJ0eS0+cmVmZXJl
bmNlQ291bnQpKSB7CisgICAgICAgIHRoaXJkUGFydHktPn5XZWJLaXRJVFBUaGlyZFBhcnR5KCk7
CisgICAgICAgIGZhc3RGcmVlKHRoaXJkUGFydHkpOworICAgIH0KK30KKworLyoqCisgKiB3ZWJr
aXRfaXRwX3RoaXJkX3BhcnR5X2dldF9kb21haW46CisgKiBAaXRwX3RoaXJkX3BhcnR5OiBhICNX
ZWJLaXRJVFBUaGlyZFBhcnR5CisgKgorICogR2V0IHRoZSBkb21haW4gbmFtZSBvZiBAaXRwX3Ro
aXJkX3BhcnR5CisgKgorICogUmV0dXJuczogdGhlIGRvbWFpbiBuYW1lCisgKgorICogU2luY2U6
IDIuMzAKKyAqLworY29uc3QgY2hhciogd2Via2l0X2l0cF90aGlyZF9wYXJ0eV9nZXRfZG9tYWlu
KFdlYktpdElUUFRoaXJkUGFydHkqIHRoaXJkUGFydHkpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwodGhpcmRQYXJ0eSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gdGhpcmRQYXJ0eS0+ZG9t
YWluLmRhdGEoKTsKK30KKworLyoqCisgKiB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF9maXJz
dF9wYXJ0aWVzOgorICogQGl0cF90aGlyZF9wYXJ0eTogYSAjV2ViS2l0SVRQVGhpcmRQYXJ0eQor
ICoKKyAqIEdldCB0aGUgbGlzdCBvZiAjV2ViS2l0SVRQRmlyc3RQYXJ0eSB1bmRlciB3aGljaCBA
aXRwX3RoaXJkX3BhcnR5IGhhcyBiZWVuIHNlZW4uCisgKgorICogUmV0dXJuczogKHRyYW5zZmVy
IG5vbmUpIChlbGVtZW50LXR5cGUgV2ViS2l0SVRQRmlyc3RQYXJ0eSk6IGEgI0dMaXN0IG9mICNX
ZWJLaXRJVFBGaXJzdFBhcnR5CisgKgorICogU2luY2U6IDIuMzAKKyAqLworR0xpc3QqIHdlYmtp
dF9pdHBfdGhpcmRfcGFydHlfZ2V0X2ZpcnN0X3BhcnRpZXMoV2ViS2l0SVRQVGhpcmRQYXJ0eSog
dGhpcmRQYXJ0eSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbCh0aGlyZFBhcnR5LCBudWxs
cHRyKTsKKworICAgIHJldHVybiB0aGlyZFBhcnR5LT5maXJzdFBhcnRpZXM7Cit9CisKKy8qKgor
ICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfc3VtbWFyeToKKyAqIEBtYW5h
Z2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEBjYW5jZWxsYWJsZTogKGFsbG93
LW5vbmUpOiBhICNHQ2FuY2VsbGFibGUgb3IgJU5VTEwgdG8gaWdub3JlCisgKiBAY2FsbGJhY2s6
IChzY29wZSBhc3luYyk6IGEgI0dBc3luY1JlYWR5Q2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBy
ZXF1ZXN0IGlzIHNhdGlzZmllZAorICogQHVzZXJfZGF0YTogKGNsb3N1cmUpOiB0aGUgZGF0YSB0
byBwYXNzIHRvIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogQXN5bmNocm9ub3VzbHkgZ2V0IHRo
ZSBsaXN0IG9mICNXZWJLaXRJVFBUaGlyZFBhcnR5IHNlZW4gZm9yIEBtYW5hZ2VyLiBFdmVyeSAj
V2ViS2l0SVRQVGhpcmRQYXJ0eQorICogY29udGFpbnMgdGhlIGxpc3Qgb2YgI1dlYktpdElUUEZp
cnN0UGFydHkgdW5kZXIgd2hpY2ggaXQgaGFzIGJlZW4gc2Vlbi4KKyAqCisgKiBXaGVuIHRoZSBv
cGVyYXRpb24gaXMgZmluaXNoZWQsIEBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZC4gWW91IGNhbiB0
aGVuIGNhbGwKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1bW1hcnlf
ZmluaXNoKCkgdG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAqCisgKiBTaW5j
ZTogMi4zMAorICovCit2b2lkIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1
bW1hcnkoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQ2FuY2VsbGFibGUqIGNh
bmNlbGxhYmxlLCBHQXN5bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0
YSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdF
UihtYW5hZ2VyKSk7CisKKyAgICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFz
a19uZXcobWFuYWdlciwgY2FuY2VsbGFibGUsIGNhbGxiYWNrLCB1c2VyRGF0YSkpOworICAgIG1h
bmFnZXItPnByaXYtPndlYnNpdGVEYXRhU3RvcmUtPmdldFJlc291cmNlTG9hZFN0YXRpc3RpY3NE
YXRhU3VtbWFyeShbdGFzayA9IFdURk1vdmUodGFzayldKFZlY3RvcjxXZWJSZXNvdXJjZUxvYWRT
dGF0aXN0aWNzU3RvcmU6OlRoaXJkUGFydHlEYXRhPiYmIHRoaXJkUGFydHlMaXN0KSB7CisgICAg
ICAgIEdMaXN0KiByZXN1bHQgPSBudWxscHRyOworICAgICAgICB3aGlsZSAoIXRoaXJkUGFydHlM
aXN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdfbGlzdF9wcmVwZW5kKHJlc3Vs
dCwgd2Via2l0SVRQVGhpcmRQYXJ0eUNyZWF0ZSh0aGlyZFBhcnR5TGlzdC50YWtlTGFzdCgpKSk7
CisgICAgICAgIGdfdGFza19yZXR1cm5fcG9pbnRlcih0YXNrLmdldCgpLCByZXN1bHQsIFtdKGdw
b2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlX2Z1bGwoc3RhdGljX2Nhc3Q8
R0xpc3QqPihkYXRhKSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4od2Via2l0X2l0
cF90aGlyZF9wYXJ0eV91bnJlZikpOworICAgICAgICB9KTsKKyAgICB9KTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaDoKKyAq
IEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqIEByZXN1bHQ6IGEgI0dB
c3luY1Jlc3VsdAorICogQGVycm9yOiByZXR1cm4gbG9jYXRpb24gZm9yIGVycm9yIG9yICVOVUxM
IHRvIGlnbm9yZQorICoKKyAqIEZpbmlzaCBhbiBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHN0YXJ0
ZWQgd2l0aCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5KCkuCisg
KgorICogUmV0dXJuczogKHRyYW5zZmVyIGZ1bGwpIChlbGVtZW50LXR5cGUgV2ViS2l0SVRQVGhp
cmRQYXJ0eSk6IGEgI0dMaXN0IG9mICNXZWJLaXRJVFBUaGlyZFBhcnR5LgorICogICAgWW91IG11
c3QgZnJlZSB0aGUgI0dMaXN0IHdpdGggZ19saXN0X2ZyZWUoKSBhbmQgdW5yZWYgdGhlICNXZWJL
aXRJVFBUaGlyZFBhcnR5PCEtLSAtLT5zIHdpdGgKKyAqICAgIHdlYmtpdF9pdHBfdGhpcmRfcGFy
dHlfdW5yZWYoKSB3aGVuIHlvdSdyZSBkb25lIHdpdGggdGhlbS4KKyAqCisgKiBTaW5jZTogMi4z
MAorICovCitHTGlzdCogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pdHBfc3VtbWFy
eV9maW5pc2goV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyLCBHQXN5bmNSZXN1bHQq
IHJlc3VsdCwgR0Vycm9yKiogZXJyb3IpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChnX3Rhc2tfaXNfdmFsaWQocmVzdWx0LCBtYW5hZ2VyKSwgbnVsbHB0
cik7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R0xpc3QqPihnX3Rhc2tfcHJvcGFnYXRlX3Bv
aW50ZXIoR19UQVNLKHJlc3VsdCksIGVycm9yKSk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dG9jbGVhbnVwcy5oIGIvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRBdXRvY2xlYW51cHMuaAppbmRleCAyZGI4NGU5OTE1
NDAuLjU4OGY0YzE2ZjMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRBdXRvY2xlYW51cHMuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdEF1dG9jbGVhbnVwcy5oCkBAIC03NSw2ICs3NSw4IEBAIEdfREVGSU5FX0FV
VE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLCBnX29iamVjdF91bnJl
ZikKIAogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdEFwcGxpY2F0aW9uSW5m
bywgd2Via2l0X2FwcGxpY2F0aW9uX2luZm9fdW5yZWYpCiBHX0RFRklORV9BVVRPUFRSX0NMRUFO
VVBfRlVOQyAoV2ViS2l0Q3JlZGVudGlhbCwgd2Via2l0X2NyZWRlbnRpYWxfZnJlZSkKK0dfREVG
SU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRJVFBGaXJzdFBhcnR5LCB3ZWJraXRfaXRw
X2ZpcnN0X3BhcnR5X3VucmVmKQorR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dElUUFRoaXJkUGFydHksIHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfdW5yZWYpCiBHX0RFRklORV9B
VVRPUFRSX0NMRUFOVVBfRlVOQyAoV2ViS2l0SmF2YXNjcmlwdFJlc3VsdCwgd2Via2l0X2phdmFz
Y3JpcHRfcmVzdWx0X3VucmVmKQogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktp
dE1pbWVJbmZvLCB3ZWJraXRfbWltZV9pbmZvX3VucmVmKQogR19ERUZJTkVfQVVUT1BUUl9DTEVB
TlVQX0ZVTkMgKFdlYktpdE5hdmlnYXRpb25BY3Rpb24sIHdlYmtpdF9uYXZpZ2F0aW9uX2FjdGlv
bl9mcmVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgKaW5kZXggYzcxMTJjNWJiZDM0Li42YWY2YzAyY2Mx
NDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApAQCAtMTU1LDYgKzE1NSw2MCBAQCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfY2xlYXJfZmluaXNoICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpy
ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAqKmVycm9yKTsK
IAorCisjZGVmaW5lIFdFQktJVF9UWVBFX0lUUF9GSVJTVF9QQVJUWSAgICh3ZWJraXRfaXRwX2Zp
cnN0X3BhcnR5X2dldF90eXBlKCkpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRJVFBGaXJzdFBh
cnR5IFdlYktpdElUUEZpcnN0UGFydHk7CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9pdHBf
Zmlyc3RfcGFydHlfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dF
QktJVF9BUEkgV2ViS2l0SVRQRmlyc3RQYXJ0eSAqCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3Jl
ZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdElUUEZpcnN0UGFydHkgICAgICAq
aXRwX2ZpcnN0X3BhcnR5KTsKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJraXRfaXRwX2ZpcnN0X3Bh
cnR5X3VucmVmICAgICAgICAgICAgICAgICAgICAgICAgICAgKFdlYktpdElUUEZpcnN0UGFydHkg
ICAgICAqaXRwX2ZpcnN0X3BhcnR5KTsKKworV0VCS0lUX0FQSSBjb25zdCBjaGFyICoKK3dlYmtp
dF9pdHBfZmlyc3RfcGFydHlfZ2V0X2RvbWFpbiAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
SVRQRmlyc3RQYXJ0eSAgICAgICppdHBfZmlyc3RfcGFydHkpOworCitXRUJLSVRfQVBJIGdib29s
ZWFuCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF93ZWJzaXRlX2RhdGFfYWNjZXNzX2FsbG93
ZWQgKFdlYktpdElUUEZpcnN0UGFydHkgICAgICAqaXRwX2ZpcnN0X3BhcnR5KTsKKworV0VCS0lU
X0FQSSBHRGF0ZVRpbWUgKgord2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfbGFzdF91cGRhdGVf
dGltZSAgICAgICAgICAgIChXZWJLaXRJVFBGaXJzdFBhcnR5ICAgICAgKml0cF9maXJzdF9wYXJ0
eSk7CisKKworI2RlZmluZSBXRUJLSVRfVFlQRV9JVFBfVEhJUkRfUEFSVFkgICAod2Via2l0X2l0
cF90aGlyZF9wYXJ0eV9nZXRfdHlwZSgpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SVRQVGhp
cmRQYXJ0eSBXZWJLaXRJVFBUaGlyZFBhcnR5OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRf
aXRwX3RoaXJkX3BhcnR5X2dldF90eXBlICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwor
CitXRUJLSVRfQVBJIFdlYktpdElUUFRoaXJkUGFydHkgKgord2Via2l0X2l0cF90aGlyZF9wYXJ0
eV9yZWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRJVFBUaGlyZFBhcnR5ICAg
ICAgKml0cF90aGlyZF9wYXJ0eSk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X2l0cF90aGly
ZF9wYXJ0eV91bnJlZiAgICAgICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRJVFBUaGlyZFBh
cnR5ICAgICAgKml0cF90aGlyZF9wYXJ0eSk7CisKK1dFQktJVF9BUEkgY29uc3QgY2hhciAqCit3
ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF9kb21haW4gICAgICAgICAgICAgICAgICAgICAgKFdl
YktpdElUUFRoaXJkUGFydHkgICAgICAqaXRwX3RoaXJkX3BhcnR5KTsKKworV0VCS0lUX0FQSSBH
TGlzdCAqCit3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF9maXJzdF9wYXJ0aWVzICAgICAgICAg
ICAgICAgKFdlYktpdElUUFRoaXJkUGFydHkgICAgICAqaXRwX3RoaXJkX3BhcnR5KTsKKworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1bW1h
cnkgICAgICAgICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ2FuY2Vs
bGFibGUgICAgICAgICAgICAgKmNhbmNlbGxhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZWFkeUNhbGxiYWNrICAgICAg
IGNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBncG9pbnRlciAgICAgICAgICAgICAgICAgIHVzZXJfZGF0YSk7CitXRUJLSVRf
QVBJIEdMaXN0ICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1bW1hcnlf
ZmluaXNoICAgICAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQXN5bmNSZXN1
bHQgICAgICAgICAgICAgKnJlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0Vycm9yICAgICAgICAgICAgICAgICAgKiplcnJvcik7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQK
aW5kZXggNjJiMGUxMDg2YjA5Li4yZGFiY2NjNDRkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNl
Y3Rpb25zLnR4dApAQCAtMTQ3OSw2ICsxNDc5LDIzIEBAIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9yZW1vdmVfZmluaXNoCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfY2xlYXIKIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2gKIAorPFNVQlNFQ1RJT04gSVRQ
IFN1bW1hcnk+CitXZWJLaXRJVFBGaXJzdFBhcnR5Cit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X3Jl
Zgord2Via2l0X2l0cF9maXJzdF9wYXJ0eV91bnJlZgord2Via2l0X2l0cF9maXJzdF9wYXJ0eV9n
ZXRfZG9tYWluCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF93ZWJzaXRlX2RhdGFfYWNjZXNz
X2FsbG93ZWQKK3dlYmtpdF9pdHBfZmlyc3RfcGFydHlfZ2V0X2xhc3RfdXBkYXRlX3RpbWUKKwor
V2ViS2l0SVRQVGhpcmRQYXJ0eQord2Via2l0X2l0cF90aGlyZF9wYXJ0eV9yZWYKK3dlYmtpdF9p
dHBfdGhpcmRfcGFydHlfdW5yZWYKK3dlYmtpdF9pdHBfdGhpcmRfcGFydHlfZ2V0X2RvbWFpbgor
d2Via2l0X2l0cF90aGlyZF9wYXJ0eV9nZXRfZmlyc3RfcGFydGllcworCit3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaAorCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzCiBXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdF
UgpAQCAtMTQ4NywxMCArMTUwNCwxNCBAQCBXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIK
IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9DTEFTUwogV0VCS0lUX0lTX1dFQlNJVEVfREFU
QV9NQU5BR0VSX0NMQVNTCiBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVJfR0VUX0NMQVNTCitX
RUJLSVRfVFlQRV9JVFBfRklSU1RfUEFSVFkKK1dFQktJVF9UWVBFX0lUUF9USElSRF9QQVJUWQog
CiA8U1VCU0VDVElPTiBQcml2YXRlPgogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZQog
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlCit3ZWJraXRfaXRwX2ZpcnN0X3Bh
cnR5X2dldF90eXBlCit3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF90eXBlCiA8L1NFQ1RJT04+
CiAKIDxTRUNUSU9OPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dw
ZS9XZWJLaXRBdXRvY2xlYW51cHMuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUv
V2ViS2l0QXV0b2NsZWFudXBzLmgKaW5kZXggNDM0OTIwNzljOWQzLi4wZjAwOTQ5YTEwMWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0QXV0b2NsZWFu
dXBzLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRBdXRvY2xl
YW51cHMuaApAQCAtNjksNiArNjksOCBAQCBHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBfRlVOQyAo
V2ViS2l0V2luZG93UHJvcGVydGllcywgZ19vYmplY3RfdW5yZWYpCiAKIEdfREVGSU5FX0FVVE9Q
VFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRBcHBsaWNhdGlvbkluZm8sIHdlYmtpdF9hcHBsaWNhdGlv
bl9pbmZvX3VucmVmKQogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMgKFdlYktpdENyZWRl
bnRpYWwsIHdlYmtpdF9jcmVkZW50aWFsX2ZyZWUpCitHX0RFRklORV9BVVRPUFRSX0NMRUFOVVBf
RlVOQyAoV2ViS2l0SVRQRmlyc3RQYXJ0eSwgd2Via2l0X2l0cF9maXJzdF9wYXJ0eV91bnJlZikK
K0dfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRJVFBUaGlyZFBhcnR5LCB3ZWJr
aXRfaXRwX3RoaXJkX3BhcnR5X3VucmVmKQogR19ERUZJTkVfQVVUT1BUUl9DTEVBTlVQX0ZVTkMg
KFdlYktpdEphdmFzY3JpcHRSZXN1bHQsIHdlYmtpdF9qYXZhc2NyaXB0X3Jlc3VsdF91bnJlZikK
IEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXRNaW1lSW5mbywgd2Via2l0X21p
bWVfaW5mb191bnJlZikKIEdfREVGSU5FX0FVVE9QVFJfQ0xFQU5VUF9GVU5DIChXZWJLaXROYXZp
Z2F0aW9uQWN0aW9uLCB3ZWJraXRfbmF2aWdhdGlvbl9hY3Rpb25fZnJlZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlci5oCmluZGV4IGFlNDM4ZmVhZmViMS4uNDIzMTIxNmIyNzZiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmgKQEAgLTE1NSw2ICsxNTUsNjAgQEAgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2Ns
ZWFyX2ZpbmlzaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdBc3luY1Jlc3VsdCAgICAgICAgICAgICAqcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAgICAgKiplcnJvcik7CiAKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9JVFBfRklSU1RfUEFSVFkgICAod2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfdHlwZSgp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SVRQRmlyc3RQYXJ0eSBXZWJLaXRJVFBGaXJzdFBh
cnR5OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF90eXBl
ICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdlYktpdElUUEZp
cnN0UGFydHkgKgord2Via2l0X2l0cF9maXJzdF9wYXJ0eV9yZWYgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChXZWJLaXRJVFBGaXJzdFBhcnR5ICAgICAgKml0cF9maXJzdF9wYXJ0eSk7CisK
K1dFQktJVF9BUEkgdm9pZAord2Via2l0X2l0cF9maXJzdF9wYXJ0eV91bnJlZiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChXZWJLaXRJVFBGaXJzdFBhcnR5ICAgICAgKml0cF9maXJzdF9wYXJ0
eSk7CisKK1dFQktJVF9BUEkgY29uc3QgY2hhciAqCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dl
dF9kb21haW4gICAgICAgICAgICAgICAgICAgICAgKFdlYktpdElUUEZpcnN0UGFydHkgICAgICAq
aXRwX2ZpcnN0X3BhcnR5KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X2l0cF9maXJz
dF9wYXJ0eV9nZXRfd2Vic2l0ZV9kYXRhX2FjY2Vzc19hbGxvd2VkIChXZWJLaXRJVFBGaXJzdFBh
cnR5ICAgICAgKml0cF9maXJzdF9wYXJ0eSk7CisKK1dFQktJVF9BUEkgR0RhdGVUaW1lICoKK3dl
YmtpdF9pdHBfZmlyc3RfcGFydHlfZ2V0X2xhc3RfdXBkYXRlX3RpbWUgICAgICAgICAgICAoV2Vi
S2l0SVRQRmlyc3RQYXJ0eSAgICAgICppdHBfZmlyc3RfcGFydHkpOworCisKKyNkZWZpbmUgV0VC
S0lUX1RZUEVfSVRQX1RISVJEX1BBUlRZICAgKHdlYmtpdF9pdHBfdGhpcmRfcGFydHlfZ2V0X3R5
cGUoKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdElUUFRoaXJkUGFydHkgV2ViS2l0SVRQVGhp
cmRQYXJ0eTsKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2l0cF90aGlyZF9wYXJ0eV9nZXRf
dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRJ
VFBUaGlyZFBhcnR5ICoKK3dlYmtpdF9pdHBfdGhpcmRfcGFydHlfcmVmICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoV2ViS2l0SVRQVGhpcmRQYXJ0eSAgICAgICppdHBfdGhpcmRfcGFydHkp
OworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pdHBfdGhpcmRfcGFydHlfdW5yZWYgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0SVRQVGhpcmRQYXJ0eSAgICAgICppdHBfdGhpcmRf
cGFydHkpOworCitXRUJLSVRfQVBJIGNvbnN0IGNoYXIgKgord2Via2l0X2l0cF90aGlyZF9wYXJ0
eV9nZXRfZG9tYWluICAgICAgICAgICAgICAgICAgICAgIChXZWJLaXRJVFBUaGlyZFBhcnR5ICAg
ICAgKml0cF90aGlyZF9wYXJ0eSk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X2l0cF90
aGlyZF9wYXJ0eV9nZXRfZmlyc3RfcGFydGllcyAgICAgICAgICAgICAgIChXZWJLaXRJVFBUaGly
ZFBhcnR5ICAgICAgKml0cF90aGlyZF9wYXJ0eSk7CisKKworV0VCS0lUX0FQSSB2b2lkCit3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5ICAgICAgICAgICAgKFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NhbmNlbGxhYmxlICAgICAgICAgICAgICpj
YW5jZWxsYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0FzeW5jUmVhZHlDYWxsYmFjayAgICAgICBjYWxsYmFjaywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIg
ICAgICAgICAgICAgICAgICB1c2VyX2RhdGEpOworV0VCS0lUX0FQSSBHTGlzdCAqCit3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaCAgICAgKFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0FzeW5jUmVzdWx0ICAgICAgICAgICAgICpyZXN1
bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICoqZXJyb3IpOworCiBHX0VORF9ERUNMUwogCiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93
cGUtMS4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9j
cy93cGUtMS4wLXNlY3Rpb25zLnR4dAppbmRleCA3ZDEyMTRiMWNiMTUuLjE1NWFlNjU5ZTljOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAt
c2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93
cGUtMS4wLXNlY3Rpb25zLnR4dApAQCAtMTQxMyw2ICsxNDEzLDIzIEBAIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9yZW1vdmVfZmluaXNoCiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xlYXIKIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9jbGVhcl9maW5pc2gKIAorPFNVQlNF
Q1RJT04gSVRQIFN1bW1hcnk+CitXZWJLaXRJVFBGaXJzdFBhcnR5Cit3ZWJraXRfaXRwX2ZpcnN0
X3BhcnR5X3JlZgord2Via2l0X2l0cF9maXJzdF9wYXJ0eV91bnJlZgord2Via2l0X2l0cF9maXJz
dF9wYXJ0eV9nZXRfZG9tYWluCit3ZWJraXRfaXRwX2ZpcnN0X3BhcnR5X2dldF93ZWJzaXRlX2Rh
dGFfYWNjZXNzX2FsbG93ZWQKK3dlYmtpdF9pdHBfZmlyc3RfcGFydHlfZ2V0X2xhc3RfdXBkYXRl
X3RpbWUKKworV2ViS2l0SVRQVGhpcmRQYXJ0eQord2Via2l0X2l0cF90aGlyZF9wYXJ0eV9yZWYK
K3dlYmtpdF9pdHBfdGhpcmRfcGFydHlfdW5yZWYKK3dlYmtpdF9pdHBfdGhpcmRfcGFydHlfZ2V0
X2RvbWFpbgord2Via2l0X2l0cF90aGlyZF9wYXJ0eV9nZXRfZmlyc3RfcGFydGllcworCit3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5Cit3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaAorCiA8U1VCU0VDVElPTiBTdGFuZGFy
ZD4KIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzCiBXRUJLSVRfVFlQRV9XRUJTSVRFX0RB
VEFfTUFOQUdFUgpAQCAtMTQyMSwxMCArMTQzOCwxNCBAQCBXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIKIFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9DTEFTUwogV0VCS0lUX0lTX1dF
QlNJVEVfREFUQV9NQU5BR0VSX0NMQVNTCiBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVJfR0VU
X0NMQVNTCitXRUJLSVRfVFlQRV9JVFBfRklSU1RfUEFSVFkKK1dFQktJVF9UWVBFX0lUUF9USElS
RF9QQVJUWQogCiA8U1VCU0VDVElPTiBQcml2YXRlPgogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
UHJpdmF0ZQogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBlCit3ZWJraXRfaXRw
X2ZpcnN0X3BhcnR5X2dldF90eXBlCit3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF90eXBlCiA8
L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDM2MzIwN2QzMGE0OC4uZDMxNTUzZmU1ZmE0IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMjAtMDctMjIgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtXUEVdW0dUS10gQWRkIEFQSSB0byBzdXBwb3J0ICJQcml2YWN5IFJlcG9ydCIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMzQ5Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhYm91
dDppdHAgdG8gc2hvdyB0aGUgSVRQIHN1bW1hcnkuCisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9n
dGsvbWFpbi5jOgorICAgICAgICAoYWJvdXRJVFBSZXF1ZXN0TmV3KToKKyAgICAgICAgKGFib3V0
SVRQUmVxdWVzdEZyZWUpOgorICAgICAgICAoZ290SVRQU3VtbWFyeUNhbGxiYWNrKToKKyAgICAg
ICAgKGFib3V0SVRQSGFuZGxlUmVxdWVzdCk6CisgICAgICAgIChhYm91dFVSSVNjaGVtZVJlcXVl
c3RDYWxsYmFjayk6CisKIDIwMjAtMDctMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gSVRQOiB1c2UgdGhlIGRhdGFiYXNl
IHN0b3JlIHVuY29uZGl0aW9uYWxseQpkaWZmIC0tZ2l0IGEvVG9vbHMvTWluaUJyb3dzZXIvZ3Rr
L21haW4uYyBiL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMKaW5kZXggNjFjYjcyOWU5ZThl
Li5kMTQyMzA5ZjdkYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL01pbmlCcm93c2VyL2d0ay9tYWluLmMK
KysrIGIvVG9vbHMvTWluaUJyb3dzZXIvZ3RrL21haW4uYwpAQCAtNDY3LDYgKzQ2Nyw2MSBAQCBz
dGF0aWMgdm9pZCBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KFdlYktpdFVSSVNjaGVtZVJlcXVlc3Qg
KnJlcXVlc3QsIFdlYktpdFdlYkNvbgogICAgIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9m
ZXRjaChtYW5hZ2VyLCBXRUJLSVRfV0VCU0lURV9EQVRBX0FMTCwgTlVMTCwgKEdBc3luY1JlYWR5
Q2FsbGJhY2spZ290V2Vic2l0ZURhdGFDYWxsYmFjaywgZGF0YVJlcXVlc3QpOwogfQogCit0eXBl
ZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0VVJJU2NoZW1lUmVxdWVzdCAqcmVxdWVzdDsKKyAgICBH
TGlzdCAqdGhpcmRQYXJ0eUxpc3Q7Cit9IEFib3V0SVRQUmVxdWVzdDsKKworc3RhdGljIEFib3V0
SVRQUmVxdWVzdCAqYWJvdXRJVFBSZXF1ZXN0TmV3KFdlYktpdFVSSVNjaGVtZVJlcXVlc3QgKnJl
cXVlc3QpCit7CisgICAgQWJvdXRJVFBSZXF1ZXN0ICppdHBSZXF1ZXN0ID0gZ19uZXcwKEFib3V0
SVRQUmVxdWVzdCwgMSk7CisgICAgaXRwUmVxdWVzdC0+cmVxdWVzdCA9IGdfb2JqZWN0X3JlZihy
ZXF1ZXN0KTsKKyAgICByZXR1cm4gaXRwUmVxdWVzdDsKK30KKworc3RhdGljIHZvaWQgYWJvdXRJ
VFBSZXF1ZXN0RnJlZShBYm91dElUUFJlcXVlc3QgKml0cFJlcXVlc3QpCit7CisgICAgZ19jbGVh
cl9vYmplY3QoJml0cFJlcXVlc3QtPnJlcXVlc3QpOworICAgIGdfbGlzdF9mcmVlX2Z1bGwoaXRw
UmVxdWVzdC0+dGhpcmRQYXJ0eUxpc3QsIChHRGVzdHJveU5vdGlmeSl3ZWJraXRfaXRwX3RoaXJk
X3BhcnR5X3VucmVmKTsKKyAgICBnX2ZyZWUoaXRwUmVxdWVzdCk7Cit9CisKK3N0YXRpYyB2b2lk
IGdvdElUUFN1bW1hcnlDYWxsYmFjayhXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIs
IEdBc3luY1Jlc3VsdCAqYXN5bmNSZXN1bHQsIEFib3V0SVRQUmVxdWVzdCAqaXRwUmVxdWVzdCkK
K3sKKyAgICBHTGlzdCAqdGhpcmRQYXJ0eUxpc3QgPSB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFn
ZXJfZ2V0X2l0cF9zdW1tYXJ5X2ZpbmlzaChtYW5hZ2VyLCBhc3luY1Jlc3VsdCwgTlVMTCk7Cisg
ICAgR1N0cmluZyAqcmVzdWx0ID0gZ19zdHJpbmdfbmV3KCI8aHRtbD48Ym9keT5cbjxoMT5UcmFj
a2VyczwvaDE+XG4iKTsKKyAgICBHTGlzdCAqbDsKKyAgICBmb3IgKGwgPSB0aGlyZFBhcnR5TGlz
dDsgbCAmJiBsLT5kYXRhOyBsID0gZ19saXN0X25leHQobCkpIHsKKyAgICAgICAgV2ViS2l0SVRQ
VGhpcmRQYXJ0eSAqdGhpcmRQYXJ0eSA9IChXZWJLaXRJVFBUaGlyZFBhcnR5ICopbC0+ZGF0YTsK
KyAgICAgICAgcmVzdWx0ID0gZ19zdHJpbmdfYXBwZW5kKHJlc3VsdCwgIjxkZXRhaWxzPlxuIik7
CisgICAgICAgIGdfc3RyaW5nX2FwcGVuZF9wcmludGYocmVzdWx0LCAiPHN1bW1hcnk+JXM8L3N1
bW1hcnk+XG4iLCB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF9kb21haW4odGhpcmRQYXJ0eSkp
OworICAgICAgICByZXN1bHQgPSBnX3N0cmluZ19hcHBlbmQocmVzdWx0LCAiPHRhYmxlIGJvcmRl
cj0nMSc+PHRyPjx0aD5GaXJzdCBQYXJ0eTwvdGg+PHRoPldlYnNpdGUgZGF0YSBhY2Nlc3MgZ3Jh
bnRlZDwvdGg+PHRoPkxhc3QgdXBkYXRlZDwvdGg+PC90cj5cbiIpOworICAgICAgICBHTGlzdCAq
Zmlyc3RQYXJ0eUxpc3QgPSB3ZWJraXRfaXRwX3RoaXJkX3BhcnR5X2dldF9maXJzdF9wYXJ0aWVz
KHRoaXJkUGFydHkpOworICAgICAgICBHTGlzdCAqbGw7CisgICAgICAgIGZvciAobGwgPSBmaXJz
dFBhcnR5TGlzdDsgbGwgJiYgbGwtPmRhdGE7IGxsID0gZ19saXN0X25leHQobGwpKSB7CisgICAg
ICAgICAgICBXZWJLaXRJVFBGaXJzdFBhcnR5ICpmaXJzdFBhcnR5ID0gKFdlYktpdElUUEZpcnN0
UGFydHkgKilsbC0+ZGF0YTsKKyAgICAgICAgICAgIGNoYXIgKnVwZGF0ZWRUaW1lID0gZ19kYXRl
X3RpbWVfZm9ybWF0X2lzbzg2MDEod2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfbGFzdF91cGRh
dGVfdGltZShmaXJzdFBhcnR5KSk7CisgICAgICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRm
KHJlc3VsdCwgIjx0cj48dGQ+JXM8L3RkPjx0ZD4lczwvdGQ+PHRkPiVzPC90ZD48L3RyPlxuIiwg
d2Via2l0X2l0cF9maXJzdF9wYXJ0eV9nZXRfZG9tYWluKGZpcnN0UGFydHkpLAorICAgICAgICAg
ICAgICAgIHdlYmtpdF9pdHBfZmlyc3RfcGFydHlfZ2V0X3dlYnNpdGVfZGF0YV9hY2Nlc3NfYWxs
b3dlZChmaXJzdFBhcnR5KSA/ICJ5ZXMiIDogIm5vIiwgdXBkYXRlZFRpbWUpOworICAgICAgICAg
ICAgZ19mcmVlKHVwZGF0ZWRUaW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBnX3N0
cmluZ19hcHBlbmQocmVzdWx0LCAiPC90YWJsZT48L2RldGFpbHM+XG4iKTsKKyAgICB9CisKKyAg
ICByZXN1bHQgPSBnX3N0cmluZ19hcHBlbmQocmVzdWx0LCAiPC9ib2R5PjwvaHRtbD4iKTsKKyAg
ICBnc2l6ZSBzdHJlYW1MZW5ndGggPSByZXN1bHQtPmxlbjsKKyAgICBHSW5wdXRTdHJlYW0gKnN0
cmVhbSA9IGdfbWVtb3J5X2lucHV0X3N0cmVhbV9uZXdfZnJvbV9kYXRhKGdfc3RyaW5nX2ZyZWUo
cmVzdWx0LCBGQUxTRSksIHN0cmVhbUxlbmd0aCwgZ19mcmVlKTsKKyAgICB3ZWJraXRfdXJpX3Nj
aGVtZV9yZXF1ZXN0X2ZpbmlzaChpdHBSZXF1ZXN0LT5yZXF1ZXN0LCBzdHJlYW0sIHN0cmVhbUxl
bmd0aCwgInRleHQvaHRtbCIpOworICAgIGFib3V0SVRQUmVxdWVzdEZyZWUoaXRwUmVxdWVzdCk7
Cit9CisKK3N0YXRpYyB2b2lkIGFib3V0SVRQSGFuZGxlUmVxdWVzdChXZWJLaXRVUklTY2hlbWVS
ZXF1ZXN0ICpyZXF1ZXN0LCBXZWJLaXRXZWJDb250ZXh0ICp3ZWJDb250ZXh0KQoreworICAgIEFi
b3V0SVRQUmVxdWVzdCAqaXRwUmVxdWVzdCA9IGFib3V0SVRQUmVxdWVzdE5ldyhyZXF1ZXN0KTsK
KyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIgPSB3ZWJraXRfd2ViX2NvbnRl
eHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKHdlYkNvbnRleHQpOworICAgIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9nZXRfaXRwX3N1bW1hcnkobWFuYWdlciwgTlVMTCwgKEdBc3luY1Jl
YWR5Q2FsbGJhY2spZ290SVRQU3VtbWFyeUNhbGxiYWNrLCBpdHBSZXF1ZXN0KTsKK30KKwogc3Rh
dGljIHZvaWQgYWJvdXRVUklTY2hlbWVSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0VVJJU2NoZW1lUmVx
dWVzdCAqcmVxdWVzdCwgV2ViS2l0V2ViQ29udGV4dCAqd2ViQ29udGV4dCkKIHsKICAgICBHSW5w
dXRTdHJlYW0gKnN0cmVhbTsKQEAgLTQ4OCw2ICs1NDMsOCBAQCBzdGF0aWMgdm9pZCBhYm91dFVS
SVNjaGVtZVJlcXVlc3RDYWxsYmFjayhXZWJLaXRVUklTY2hlbWVSZXF1ZXN0ICpyZXF1ZXN0LCBX
ZWJLaQogICAgICAgICBnX29iamVjdF91bnJlZihzdHJlYW0pOwogICAgIH0gZWxzZSBpZiAoIWdf
c3RyY21wMChwYXRoLCAiZGF0YSIpKQogICAgICAgICBhYm91dERhdGFIYW5kbGVSZXF1ZXN0KHJl
cXVlc3QsIHdlYkNvbnRleHQpOworICAgIGVsc2UgaWYgKCFnX3N0cmNtcDAocGF0aCwgIml0cCIp
KQorICAgICAgICBhYm91dElUUEhhbmRsZVJlcXVlc3QocmVxdWVzdCwgd2ViQ29udGV4dCk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIGVycm9yID0gZ19lcnJvcl9uZXcoTUlOSV9CUk9XU0VSX0VSUk9S
LCBNSU5JX0JST1dTRVJfRVJST1JfSU5WQUxJRF9BQk9VVF9QQVRILCAiSW52YWxpZCBhYm91dDol
cyBwYWdlLiIsIHBhdGgpOwogICAgICAgICB3ZWJraXRfdXJpX3NjaGVtZV9yZXF1ZXN0X2Zpbmlz
aF9lcnJvcihyZXF1ZXN0LCBlcnJvcik7Cg==
</data>
<flag name="review"
          id="420305"
          type_id="1"
          status="+"
          setter="aperez"
    />
          </attachment>
      

    </bug>

</bugzilla>