<?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>172966</bug_id>
          
          <creation_ts>2017-06-06 01:55:34 -0700</creation_ts>
          <short_desc>Remove legacy INSPECTOR_SERVER implementation</short_desc>
          <delta_ts>2022-03-08 13:07:42 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=237601</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>bburg</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>inspector-bugzilla-changes</cc>
    
    <cc>joepeck</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>Nicolas.Breidinger</cc>
    
    <cc>olivier.blin</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1315947</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-06 01:55:34 -0700</bug_when>
    <thetext>No upstream port is currently using it nowadays, so it&apos;s dead code. WPE still uses it downstream, they didn&apos;t upstream it because they plan to switch to the new Remote Inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1315948</commentid>
    <comment_count>1</comment_count>
      <attachid>312064</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-06 01:58:01 -0700</bug_when>
    <thetext>Created attachment 312064
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316049</commentid>
    <comment_count>2</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-06 09:59:02 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #0)
&gt; No upstream port is currently using it nowadays, so it&apos;s dead code. WPE
&gt; still uses it downstream, they didn&apos;t upstream it because they plan to
&gt; switch to the new Remote Inspector.

We&apos;ve been using it in our PlayStation port and I&apos;m not entirely sure what removing this functionality would mean to our end users as we haven&apos;t yet investigated this. Web Inspector isn&apos;t something I&apos;ve spent any time developing so I&apos;m a bit in the dark here. I would assume we&apos;d have a similar situation to WPE where connecting to the device directly would be a good thing.

Can you explain a bit more about what this change means for providing a remote inspector for our end users?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316431</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-07 03:40:56 -0700</bug_when>
    <thetext>There&apos;s a new remote inspector implementation, already used by apple and GTK+ ports. The old implementation, the one based on web sockets, is not currently used by any upstream port. If any downstream port wants to keep using web sockets for the remote inspector, they will have to maintain it downstream, because right now it&apos;s dead code in upstream. And we don&apos;t want to maintain dead code. You can simply revert this patch in your downstream repo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316432</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-07 03:43:05 -0700</bug_when>
    <thetext>WPE has already switched to the new remote inspector, without a frontend implementation, but it&apos;s possible to use any webkitgtk based web view to debug WPE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316574</commentid>
    <comment_count>5</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-07 12:11:29 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #3)
&gt; There&apos;s a new remote inspector implementation, already used by apple and
&gt; GTK+ ports. The old implementation, the one based on web sockets, is not
&gt; currently used by any upstream port. If any downstream port wants to keep
&gt; using web sockets for the remote inspector, they will have to maintain it
&gt; downstream, because right now it&apos;s dead code in upstream. And we don&apos;t want
&gt; to maintain dead code. You can simply revert this patch in your downstream
&gt; repo.

I&apos;m all for removing dead code. I just wanted to know what it meant for the end users interacting with it. WPE would appear to be in a similar boat to us as you have end users interacting with a device remotely.

I just wanted that information so we can discuss internally what that would mean for us going forward. If the change is going to be a huge headache for our end users then we would probably discuss what to do and whether that would mean enabling it within WinCairo and continuing development there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316843</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-07 23:46:33 -0700</bug_when>
    <thetext>Committed r217924: &lt;http://trac.webkit.org/changeset/217924&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1316988</commentid>
    <comment_count>7</comment_count>
    <who name="Olivier Blin">olivier.blin</who>
    <bug_when>2017-06-08 11:08:06 -0700</bug_when>
    <thetext>We agree with Don, this will be problematic for embedded devices developers, since this requires much more from the client browser running the inspector frontend.
We are WPE users, and we know that in the set-top box market, quite some web app developers are today connecting to the remote web inspector from a Windows OS.

Which Windows browser will be suitable to talk to this new remote inspector?
Should be have a WinCairo build with dbus support?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317149</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-08 17:51:36 -0700</bug_when>
    <thetext>(In reply to Olivier Blin from comment #7)
&gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; app developers are today connecting to the remote web inspector from a
&gt; Windows OS.

I really think compatibility with non-WebKit browsers should be a non-goal. That&apos;s really out there. If it works at all today with the WebSocket server, that&apos;s just due to luck.

I&apos;m not going to object if you want to add a D-Bus remote inspector implementation to WinCairo, though my understanding is that D-Bus is a second-class citizen on Windows.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317204</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-08 22:16:09 -0700</bug_when>
    <thetext>(In reply to Olivier Blin from comment #7)
&gt; We agree with Don, this will be problematic for embedded devices developers,
&gt; since this requires much more from the client browser running the inspector
&gt; frontend.
&gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; app developers are today connecting to the remote web inspector from a
&gt; Windows OS.
&gt; 
&gt; Which Windows browser will be suitable to talk to this new remote inspector?
&gt; Should be have a WinCairo build with dbus support?

You are not forced to switch to the new remote inspector. The legacy one had no implementation upstream, which means that if you are using it is because you are adding it in your downstream fork. You can simply include the changes removed here in your implementation in your fork and keep using it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317291</commentid>
    <comment_count>10</comment_count>
    <who name="Olivier Blin">olivier.blin</who>
    <bug_when>2017-06-09 01:22:54 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; Windows OS.
&gt; 
&gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; that&apos;s just due to luck.

Well, it would make web developers life a lot easier if it just worked from Chrome.

Going from WebSockets to requiring builtin D-Bus support in the client browser make the situation difficult, even from WebKit browsers on Windows.

&gt; I&apos;m not going to object if you want to add a D-Bus remote inspector
&gt; implementation to WinCairo, though my understanding is that D-Bus is a
&gt; second-class citizen on Windows.

Yes, we might get tricky platform support issues with D-Bus on Windows.
Was there any specific reason to pick D-Bus over WebSockets?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317293</commentid>
    <comment_count>11</comment_count>
    <who name="Olivier Blin">olivier.blin</who>
    <bug_when>2017-06-09 01:28:51 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #9)
&gt;
&gt; You are not forced to switch to the new remote inspector. The legacy one had
&gt; no implementation upstream, which means that if you are using it is because
&gt; you are adding it in your downstream fork.

Not so long ago, there was WebInspectorServerGtk upstream.
And there still is WebInspectorServerWPE in the WebPlatformForEmbedded repo, which is the default &quot;remote&quot; inspector implementation in WPE and enabled by default (see WebKit2/config.h).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317320</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-06-09 03:10:19 -0700</bug_when>
    <thetext>BTW, what is the best approach in Windows in terms of platform IPC mechanism? COM?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317467</commentid>
    <comment_count>13</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-09 10:10:03 -0700</bug_when>
    <thetext>(In reply to Olivier Blin from comment #10)
&gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; &gt; Windows OS.
&gt; &gt; 
&gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; that&apos;s just due to luck.
&gt; 
&gt; Well, it would make web developers life a lot easier if it just worked from
&gt; Chrome.

From https://blogs.igalia.com/carlosgc/2017/05/03/webkitgtk-remote-debugging-in-2-18/ it sounds like you couldn&apos;t even use Safari to do a remote debugging session. Is this correct? Our users are primarily developing on Macs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317582</commentid>
    <comment_count>14</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-06-09 12:47:02 -0700</bug_when>
    <thetext>Out of curiosity, how do you debug on device with dbus inspector? Are you using something like Telepathy to connect to the other machine?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317614</commentid>
    <comment_count>15</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2017-06-09 14:03:29 -0700</bug_when>
    <thetext>&gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; that&apos;s just due to luck.
&gt; 
&gt; Well, it would make web developers life a lot easier if it just worked from
&gt; Chrome.

To add to this: The WebKit Web Inspector frontend frequently adopts many features soon after they are added to trunk WebKit / JavaScriptCore. Some of these features may not be implemented / supported by other browsers, including Chrome. We make no effort to ensure the frontend is cross browser compatibility given we are writing it only for WebKit.

One example off the top of my head is we use `-webkit-canvas()` for popovers. I don&apos;t think any other browser implements this. In fact I think Chrome/Blink removed it years ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317723</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-09 17:12:24 -0700</bug_when>
    <thetext>I know our web inspector required ES6 features at least a year before they were enabled in Chrome. I think you must have needed a significant amount of patches to keep web inspector working during this time, or maybe were just using a very old version of WebKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317884</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-10 01:43:28 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #13)
&gt; (In reply to Olivier Blin from comment #10)
&gt; &gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; &gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; &gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; &gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; &gt; &gt; Windows OS.
&gt; &gt; &gt; 
&gt; &gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; &gt; that&apos;s just due to luck.
&gt; &gt; 
&gt; &gt; Well, it would make web developers life a lot easier if it just worked from
&gt; &gt; Chrome.
&gt; 
&gt; From
&gt; https://blogs.igalia.com/carlosgc/2017/05/03/webkitgtk-remote-debugging-in-2-
&gt; 18/ it sounds like you couldn&apos;t even use Safari to do a remote debugging
&gt; session. Is this correct? Our users are primarily developing on Macs.

Correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317885</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-10 01:44:00 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #14)
&gt; Out of curiosity, how do you debug on device with dbus inspector? Are you
&gt; using something like Telepathy to connect to the other machine?

DBus over TCP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317886</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-10 01:46:12 -0700</bug_when>
    <thetext>I&apos;m going to say it again. You are not forced to switch to the new remote inspector in downstream. We have removed the web sockets implementation from upstream because it was dead code. If you are currently using it, is because you have an implementation on top of it downstream. You can now include the code removed upstream in your downstream fork and continue using the web sockets.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317888</commentid>
    <comment_count>20</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-06-10 03:17:19 -0700</bug_when>
    <thetext>Unfortunately, there is no well-defined way how to avoid duplication of work between downstreams when code is not in trunk. In this case WPE, PlayStation and Qt will have to do the same maintenance work 3 times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317889</commentid>
    <comment_count>21</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-06-10 03:17:59 -0700</bug_when>
    <thetext>Oh, and EFL if they will be upgrading their WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317895</commentid>
    <comment_count>22</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-06-10 07:52:09 -0700</bug_when>
    <thetext>WPE is upstream and has decided to not use INSPECTOR_SERVER.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1317902</commentid>
    <comment_count>23</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-06-10 09:27:03 -0700</bug_when>
    <thetext>Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318080</commentid>
    <comment_count>24</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-11 16:24:02 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #17)
&gt; (In reply to Don Olmstead from comment #13)
&gt; &gt; (In reply to Olivier Blin from comment #10)
&gt; &gt; &gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; &gt; &gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; &gt; &gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; &gt; &gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; &gt; &gt; &gt; Windows OS.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; &gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; &gt; &gt; that&apos;s just due to luck.
&gt; &gt; &gt; 
&gt; &gt; &gt; Well, it would make web developers life a lot easier if it just worked from
&gt; &gt; &gt; Chrome.
&gt; &gt; 
&gt; &gt; From
&gt; &gt; https://blogs.igalia.com/carlosgc/2017/05/03/webkitgtk-remote-debugging-in-2-
&gt; &gt; 18/ it sounds like you couldn&apos;t even use Safari to do a remote debugging
&gt; &gt; session. Is this correct? Our users are primarily developing on Macs.
&gt; 
&gt; Correct.

Ok well that&apos;s a pretty big deal breaker for us.

Is there any way to have a cross-platform remote inspector? If not I think we&apos;re going to ask to revert this and then enable the inspector server within wincairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318117</commentid>
    <comment_count>25</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-06-11 22:47:35 -0700</bug_when>
    <thetext>(In reply to Don Olmstead from comment #24)
&gt; (In reply to Carlos Garcia Campos from comment #17)
&gt; &gt; (In reply to Don Olmstead from comment #13)
&gt; &gt; &gt; (In reply to Olivier Blin from comment #10)
&gt; &gt; &gt; &gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; &gt; &gt; &gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; &gt; &gt; &gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; &gt; &gt; &gt; &gt; Windows OS.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; &gt; &gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; &gt; &gt; &gt; that&apos;s just due to luck.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Well, it would make web developers life a lot easier if it just worked from
&gt; &gt; &gt; &gt; Chrome.
&gt; &gt; &gt; 
&gt; &gt; &gt; From
&gt; &gt; &gt; https://blogs.igalia.com/carlosgc/2017/05/03/webkitgtk-remote-debugging-in-2-
&gt; &gt; &gt; 18/ it sounds like you couldn&apos;t even use Safari to do a remote debugging
&gt; &gt; &gt; session. Is this correct? Our users are primarily developing on Macs.
&gt; &gt; 
&gt; &gt; Correct.
&gt; 
&gt; Ok well that&apos;s a pretty big deal breaker for us.

What browser do you currently use for remote debugging? I&apos;m still surprised you could use a non-webkit browser, because it has been impossible for me lately due to the JavaScript features used by WebKit.

&gt; Is there any way to have a cross-platform remote inspector?

You can use a linux virtual machine, I guess. In the case of Mac OS, I think you can build WebKitGTK+ with the quartz backend.

&gt; If not I think
&gt; we&apos;re going to ask to revert this and then enable the inspector server
&gt; within wincairo.

Isn&apos;t WinCairo a WebKit1 port? The inspector server was in WebKit2, or do you mean only the changes in the inspector itself? I still don&apos;t understand why you can add you inspector server implementation to your downstream fork and not the inspector server itself too. You are still assuming you have to switch to the new remote inspector, but again, you don&apos;t have to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318123</commentid>
    <comment_count>26</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-12 00:18:16 -0700</bug_when>
    <thetext>(In reply to Joseph Pecoraro from comment #15)
&gt; &gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; &gt; that&apos;s just due to luck.
&gt; &gt; 
&gt; &gt; Well, it would make web developers life a lot easier if it just worked from
&gt; &gt; Chrome.
&gt; 
&gt; To add to this: The WebKit Web Inspector frontend frequently adopts many
&gt; features soon after they are added to trunk WebKit / JavaScriptCore. Some of
&gt; these features may not be implemented / supported by other browsers,
&gt; including Chrome. We make no effort to ensure the frontend is cross browser
&gt; compatibility given we are writing it only for WebKit.
&gt; 
&gt; One example off the top of my head is we use `-webkit-canvas()` for
&gt; popovers. I don&apos;t think any other browser implements this. In fact I think
&gt; Chrome/Blink removed it years ago.

(In reply to Michael Catanzaro from comment #16)
&gt; I know our web inspector required ES6 features at least a year before they
&gt; were enabled in Chrome. I think you must have needed a significant amount of
&gt; patches to keep web inspector working during this time, or maybe were just
&gt; using a very old version of WebKit?

The WebSocket-based remote inspector did not work properly when not used from WPE, WebKitGTK+ or recent Safari (Technology Preview or a development build).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318125</commentid>
    <comment_count>27</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2017-06-12 00:32:15 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #22)
&gt; WPE is upstream and has decided to not use INSPECTOR_SERVER.

That&apos;s the situation upstream. I really wish it would scale downstream, but it seems unlikely.

Given that the WinCairo port is interested in this feature to be available upstream, we can revert the cross-port code that was removed in the landed patch. At that point upstreaming the WPE bits of INSPECTOR_SERVER can be  discussed again, even if REMOTE_INSPECTOR will stay the preferred feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318127</commentid>
    <comment_count>28</comment_count>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2017-06-12 00:50:32 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #26)
&gt; The WebSocket-based remote inspector did not work properly when not used
&gt; from WPE, WebKitGTK+ or recent Safari (Technology Preview or a development
&gt; build).
It worked from WinApple too (We can download binaries from the build bot, which allows us to give something to the web developers on Windows easily).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318128</commentid>
    <comment_count>29</comment_count>
    <who name="Olivier Blin">olivier.blin</who>
    <bug_when>2017-06-12 01:10:51 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #26)
&gt; The WebSocket-based remote inspector did not work properly when not used
&gt; from WPE, WebKitGTK+ or recent Safari (Technology Preview or a development
&gt; build).

The WinApple builds worked fine as well to load the WebSocket-based remote inspector.
Don also mentioned Otter Browser, based on the QtWebKit revival.

Has this been discussed with the main WPE users of the &quot;downstream&quot; port?
They probably have similar needs, to be able to inspect their applications from Win or Apple systems.

Thanks for your feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1318312</commentid>
    <comment_count>30</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-06-12 11:54:36 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #25)
&gt; (In reply to Don Olmstead from comment #24)
&gt; &gt; (In reply to Carlos Garcia Campos from comment #17)
&gt; &gt; &gt; (In reply to Don Olmstead from comment #13)
&gt; &gt; &gt; &gt; (In reply to Olivier Blin from comment #10)
&gt; &gt; &gt; &gt; &gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; &gt; &gt; &gt; &gt; (In reply to Olivier Blin from comment #7)
&gt; &gt; &gt; &gt; &gt; &gt; &gt; We are WPE users, and we know that in the set-top box market, quite some web
&gt; &gt; &gt; &gt; &gt; &gt; &gt; app developers are today connecting to the remote web inspector from a
&gt; &gt; &gt; &gt; &gt; &gt; &gt; Windows OS.
&gt; &gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; &gt; I really think compatibility with non-WebKit browsers should be a non-goal.
&gt; &gt; &gt; &gt; &gt; &gt; That&apos;s really out there. If it works at all today with the WebSocket server,
&gt; &gt; &gt; &gt; &gt; &gt; that&apos;s just due to luck.
&gt; &gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Well, it would make web developers life a lot easier if it just worked from
&gt; &gt; &gt; &gt; &gt; Chrome.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; From
&gt; &gt; &gt; &gt; https://blogs.igalia.com/carlosgc/2017/05/03/webkitgtk-remote-debugging-in-2-
&gt; &gt; &gt; &gt; 18/ it sounds like you couldn&apos;t even use Safari to do a remote debugging
&gt; &gt; &gt; &gt; session. Is this correct? Our users are primarily developing on Macs.
&gt; &gt; &gt; 
&gt; &gt; &gt; Correct.
&gt; &gt; 
&gt; &gt; Ok well that&apos;s a pretty big deal breaker for us.
&gt; 
&gt; What browser do you currently use for remote debugging? I&apos;m still surprised
&gt; you could use a non-webkit browser, because it has been impossible for me
&gt; lately due to the JavaScript features used by WebKit.

We&apos;re still working through trunk to get that enabled but our current working version uses inspector server and is usable by devs through Safari. The team working on the browser is primarily on Windows so for that we either build out WinCairo or install Otter.

We agree that compatibility with Chrome would be nice but we have no expectation of that. The -webkit-canvas bites you there and if I&apos;m remembering correctly there were some DOM4 Node methods that were not enabled on Chrome but they could be polyfilled successfully. In terms of ES6 if you really want you can use babel to turn it to ES5.

Its doable but a real headache that I think we all can agree is ideal to avoid.

&gt; &gt; Is there any way to have a cross-platform remote inspector?
&gt; 
&gt; You can use a linux virtual machine, I guess. In the case of Mac OS, I think
&gt; you can build WebKitGTK+ with the quartz backend.

Having everyone use a VM or distributing WebKitGTK+ builds is a bit of a nightmare with the number of devs using our platforms. Not all of them are in house either so this becomes more problematic.

&gt; &gt; If not I think
&gt; &gt; we&apos;re going to ask to revert this and then enable the inspector server
&gt; &gt; within wincairo.
&gt; 
&gt; Isn&apos;t WinCairo a WebKit1 port? The inspector server was in WebKit2, or do
&gt; you mean only the changes in the inspector itself?

At the moment its WebKit but we&apos;re currently looking at turning it into a WebKit 2 port. We have people on our team investigating this currently.

&gt; I still don&apos;t understand
&gt; why you can add you inspector server implementation to your downstream fork
&gt; and not the inspector server itself too. You are still assuming you have to
&gt; switch to the new remote inspector, but again, you don&apos;t have to.

We&apos;ve pushed some patches for remote inspector such as https://trac.webkit.org/changeset/215357/webkit which are for inspector server and had planned to push more before seeing this change.

With this whole conversation I&apos;m trying to get an idea on what our next steps are and really appreciated the notification from Michael about this bug. Having less platform specific code is a good thing and we should definitely go forward with that. But like some of the WPE users that have chimed in this seems to bork workflows for developers using WebKit.

Our current requirements are being able to connect to the inspector from a WebKit based browser. This would be WinCairo/Otter on Windows, Safari on Mac, and WebKitGTK+ on Linux. This seems to jive with WPE users as well.

Is there a way to have a Remote Inspector implementation to rule them all? If so we&apos;re happy to assign developer resources to make that a reality. We&apos;re also interested in helping Igalia with an open Web Driver implementation that can be used across ports.

I personally don&apos;t have familiarity with the internals of the Remote Inspector so I&apos;m defaulting to the experts over at Igalia and Apple on what the best path forward is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849381</commentid>
    <comment_count>31</comment_count>
      <attachid>312064</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2022-03-08 13:05:52 -0800</bug_when>
    <thetext>Comment on attachment 312064
Patch

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

Nice! Thanks for catching the WebInspectorUI bits!

&gt; Source/WebInspectorUI/ChangeLog:8
&gt; +        Remove InspectorFrontendHostStub and thr web sockets initialization.

Typo: &quot;thr&quot; =&gt; &quot;the&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849384</commentid>
    <comment_count>32</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2022-03-08 13:07:42 -0800</bug_when>
    <thetext>Ugh another situation of me commenting on a very old thread that I got an email about. Ignore me :/</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>312064</attachid>
            <date>2017-06-06 01:58:01 -0700</date>
            <delta_ts>2017-06-06 02:12:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-legacy-inspector-server.diff</filename>
            <type>text/plain</type>
            <size>74353</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzNzMzOWJiNzQ5NC4uZjg5
M2EyM2ZjZjUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxNy0wNi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGxlZ2FjeSBJTlNQRUNUT1JfU0VSVkVSIGltcGxlbWVu
dGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NzI5NjYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFNvdXJjZS9QbGF0Zm9ybVdpbi5jbWFrZToKKwogMjAxNy0wNi0wMiAgU3RlcGhhbiBTemFibyAg
PHN0ZXBoYW4uc3phYm9AYW0uc29ueS5jb20+CiAKICAgICAgICAgW0pTQ09ubHldIEJ1aWxkIHN0
YXRpYyBqc2MuZXhlIG9uIFdpbmRvd3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybVdpbi5j
bWFrZSBiL1NvdXJjZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCAyNzk1OTVlMmFkNC4uOGYwYmEw
OTYzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysgYi9Tb3VyY2Uv
UGxhdGZvcm1XaW4uY21ha2UKQEAgLTYsNyArNiw2IEBAIGFkZF9jdXN0b21fdGFyZ2V0KAogICAg
IENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5X2RpcmVjdG9yeSAke1dFQklOU1BFQ1RP
UlVJX0RJUn0vVXNlckludGVyZmFjZSAke1dFQl9JTlNQRUNUT1JfRElSfQogICAgIENPTU1BTkQg
JHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7REVSSVZFRF9TT1VSQ0VTX0pBVkFTQ1JJUFRDT1JF
X0RJUn0vaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmRDb21tYW5kcy5qcyAke1dFQl9JTlNQRUNU
T1JfRElSfS9Qcm90b2NvbAogICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5ICR7
V0VCSU5TUEVDVE9SVUlfRElSfS9Mb2NhbGl6YXRpb25zL2VuLmxwcm9qL2xvY2FsaXplZFN0cmlu
Z3MuanMgJHtXRUJfSU5TUEVDVE9SX0RJUn0KLSAgICBDT01NQU5EICR7Q01BS0VfQ09NTUFORH0g
LUUgY29weSAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2Zyb250LWVu
ZC9pbnNwZWN0b3JQYWdlSW5kZXguaHRtbCAke1dFQl9JTlNQRUNUT1JfRElSfQogICAgIERFUEVO
RFMgSmF2YVNjcmlwdENvcmUgV2ViQ29yZQogICAgIFdPUktJTkdfRElSRUNUT1JZICR7Q01BS0Vf
QklOQVJZX0RJUn0KICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCmluZGV4IGY3YTBmODdlNjM5Li43
Yzk5ZjIwODQ5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkluc3BlY3RvclVJL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTctMDYtMDYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisg
ICAgICAgIFJlbW92ZSBsZWdhY3kgSU5TUEVDVE9SX1NFUlZFUiBpbXBsZW1lbnRhdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcyOTY2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIEluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIgYW5kIHRociB3ZWIgc29ja2V0cyBpbml0aWFsaXphdGlvbi4K
KworICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9JbnNwZWN0b3JGcm9udGVuZEhvc3RTdHVi
LmpzOiBSZW1vdmVkLgorICAgICAgICAqIFVzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLmxvYWRlZCk6CisgICAgICAgICogVXNlckludGVyZmFjZS9NYWlu
Lmh0bWw6CisgICAgICAgICogVXNlckludGVyZmFjZS9UZXN0Lmh0bWw6CisgICAgICAgICogV2Vi
SW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qOgorICAgICAgICAqIFdl
Ykluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvai5maWx0ZXJzOgorCiAy
MDE3LTA2LTA1ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViIEluc3BlY3RvcjogSW1wcm92ZSBFUzYgQ2xhc3MgaW5zdGFuY2VzIGluIEhlYXAgU25h
cHNob3QgaW5zdGFuY2VzIHZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9V
c2VySW50ZXJmYWNlL0Jhc2UvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5qcyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1
Yi5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA1Zjk1YTZmNTQuLjAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9Vc2VySW50ZXJmYWNlL0Jhc2UvSW5zcGVj
dG9yRnJvbnRlbmRIb3N0U3R1Yi5qcworKysgL2Rldi9udWxsCkBAIC0xLDIwNyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgU2Vva2p1IEt3b24gKHNlb2tqdS5rd29uQGdtYWlsLmNv
bSkKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAq
IGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0g
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotaWYg
KCF3aW5kb3cuSW5zcGVjdG9yRnJvbnRlbmRIb3N0KSB7Ci0gICAgV2ViSW5zcGVjdG9yLkluc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIgPSBmdW5jdGlvbigpCi0gICAgewotICAgIH07Ci0KLSAgICBX
ZWJJbnNwZWN0b3IuSW5zcGVjdG9yRnJvbnRlbmRIb3N0U3R1Yi5wcm90b3R5cGUgPSB7Ci0gICAg
ICAgIC8vIFB1YmxpYwotCi0gICAgICAgIGluaXRpYWxpemVXZWJTb2NrZXQ6IGZ1bmN0aW9uKHVy
bCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFyIHNvY2tldCA9IG5ldyBXZWJTb2NrZXQodXJs
KTsKLSAgICAgICAgICAgIHNvY2tldC5hZGRFdmVudExpc3RlbmVyKCJvcGVuIiwgc29ja2V0UmVh
ZHkuYmluZCh0aGlzKSk7Ci0KLSAgICAgICAgICAgIGZ1bmN0aW9uIHNvY2tldFJlYWR5KCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9zb2NrZXQgPSBzb2NrZXQ7Ci0KLSAg
ICAgICAgICAgICAgICB0aGlzLl9zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1
bmN0aW9uKG1lc3NhZ2UpIHsgSW5zcGVjdG9yQmFja2VuZC5kaXNwYXRjaChtZXNzYWdlLmRhdGEp
OyB9KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9zb2NrZXQuYWRkRXZlbnRMaXN0ZW5lcigiZXJy
b3IiLCBmdW5jdGlvbihlcnJvcikgeyBjb25zb2xlLmVycm9yKGVycm9yKTsgfSk7Ci0KLSAgICAg
ICAgICAgICAgICB0aGlzLl9zZW5kUGVuZGluZ01lc3NhZ2VzVG9CYWNrZW5kSWZOZWVkZWQoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSwKLQotICAgICAgICBicmluZ1RvRnJvbnQ6IGZ1bmN0
aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IHRydWU7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAgY2xvc2VXaW5kb3c6IGZ1bmN0aW9uKCkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGhpcy5fd2luZG93VmlzaWJsZSA9IGZhbHNlOwotICAgICAgICB9LAot
Ci0gICAgICAgIHVzZXJJbnRlcmZhY2VMYXlvdXREaXJlY3Rpb246IGZ1bmN0aW9uKCkKLSAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuICJsdHIiOwotICAgICAgICB9LAotCi0gICAgICAgIHJl
cXVlc3RTZXREb2NrU2lkZTogZnVuY3Rpb24oc2lkZSkKLSAgICAgICAgewotICAgICAgICAgICAg
SW5zcGVjdG9yRnJvbnRlbmRBUEkuc2V0RG9ja1NpZGUoc2lkZSk7Ci0gICAgICAgIH0sCi0KLSAg
ICAgICAgc2V0QXR0YWNoZWRXaW5kb3dIZWlnaHQ6IGZ1bmN0aW9uKGhlaWdodCkKLSAgICAgICAg
ewotICAgICAgICB9LAotCi0gICAgICAgIHNldEF0dGFjaGVkV2luZG93V2lkdGg6IGZ1bmN0aW9u
KHdpZHRoKQotICAgICAgICB7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc3RhcnRXaW5kb3dEcmFn
OiBmdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgfSwKLQotICAgICAgICBtb3ZlV2luZG93
Qnk6IGZ1bmN0aW9uKHgsIHkpCi0gICAgICAgIHsKLSAgICAgICAgfSwKLQotICAgICAgICBsb2Fk
ZWQ6IGZ1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICB9LAotCi0gICAgICAgIGxvY2FsaXpl
ZFN0cmluZ3NVUkw6IGZ1bmN0aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVu
ZGVmaW5lZDsKLSAgICAgICAgfSwKLQotICAgICAgICBiYWNrZW5kQ29tbWFuZHNVUkw6IGZ1bmN0
aW9uKCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICAgICAg
fSwKLQotICAgICAgICBkZWJ1Z2dhYmxlVHlwZTogZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAg
ICAgICAgICByZXR1cm4gIndlYiI7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgaW5zcGVjdGlvbkxl
dmVsOiBmdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAg
ICB9LAotCi0gICAgICAgIGluc3BlY3RlZFVSTENoYW5nZWQ6IGZ1bmN0aW9uKHRpdGxlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9IHRpdGxlOwotICAgICAgICB9LAot
Ci0gICAgICAgIGNvcHlUZXh0OiBmdW5jdGlvbih0ZXh0KQotICAgICAgICB7Ci0gICAgICAgICAg
ICBsZXQgdGV4dGFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwotICAg
ICAgICAgICAgdGV4dGFyZWEudGV4dENvbnRlbnQgPSB0ZXh0OwotICAgICAgICAgICAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZCh0ZXh0YXJlYSk7Ci0gICAgICAgICAgICB0ZXh0YXJlYS5zZWxl
Y3QoKTsKLQotICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpKQot
ICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkNvdWxkIG5vdCBjb3B5IHRvIGNsaXBib2Fy
ZC4iKTsKLQotICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0YXJlYSk7
Ci0gICAgICAgIH0sCi0KLSAgICAgICAga2lsbFRleHQ6IGZ1bmN0aW9uKHRleHQsIHNob3VsZFN0
YXJ0TmV3U2VxdWVuY2UpCi0gICAgICAgIHsKLSAgICAgICAgfSwKLQotICAgICAgICBvcGVuSW5O
ZXdUYWI6IGZ1bmN0aW9uKHVybCkKLSAgICAgICAgewotICAgICAgICAgICAgd2luZG93Lm9wZW4o
dXJsLCAiX2JsYW5rIik7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2F2ZTogZnVuY3Rpb24odXJs
LCBjb250ZW50LCBiYXNlNjRFbmNvZGVkLCBmb3JjZVNhdmVBcykKLSAgICAgICAgewotICAgICAg
ICB9LAotCi0gICAgICAgIHNlbmRNZXNzYWdlVG9CYWNrZW5kOiBmdW5jdGlvbihtZXNzYWdlKQot
ICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX3NvY2tldCkgewotICAgICAgICAgICAg
ICAgIGlmICghdGhpcy5fcGVuZGluZ01lc3NhZ2VzKQotICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9wZW5kaW5nTWVzc2FnZXMgPSBbXTsKLSAgICAgICAgICAgICAgICB0aGlzLl9wZW5kaW5nTWVz
c2FnZXMucHVzaChtZXNzYWdlKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIHRoaXMuX3NlbmRQZW5kaW5nTWVzc2FnZXNUb0JhY2tlbmRJZk5l
ZWRlZCgpOwotCi0gICAgICAgICAgICB0aGlzLl9zb2NrZXQuc2VuZChtZXNzYWdlKTsKLSAgICAg
ICAgfSwKLQotICAgICAgICBwbGF0Zm9ybTogZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gKG5hdmlnYXRvci5wbGF0Zm9ybS5tYXRjaCgvbWFjfHdpbnxsaW51eC9pKSB8
fCBbIm90aGVyIl0pWzBdLnRvTG93ZXJDYXNlKCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgYmVl
cDogZnVuY3Rpb24oKQotICAgICAgICB7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgc2hvd0NvbnRl
eHRNZW51OiBmdW5jdGlvbihldmVudCwgbWVudU9iamVjdCkKLSAgICAgICAgewotICAgICAgICAg
ICAgbmV3IFdlYkluc3BlY3Rvci5Tb2Z0Q29udGV4dE1lbnUobWVudU9iamVjdCkuc2hvdyhldmVu
dCk7Ci0gICAgICAgIH0sCi0KLSAgICAgICAgdW5idWZmZXJlZExvZzogZnVuY3Rpb24oKQotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zb2xlLmxvZy5hcHBseShjb25zb2xlLCBhcmd1bWVudHMp
OwotICAgICAgICB9LAotCi0gICAgICAgIHNldFpvb21GYWN0b3I6IGZ1bmN0aW9uKHpvb20pCi0g
ICAgICAgIHsKLSAgICAgICAgfSwKLQotICAgICAgICB6b29tRmFjdG9yOiBmdW5jdGlvbigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9LAotCi0gICAgICAgIC8v
IFByaXZhdGUKLQotICAgICAgICBfc2VuZFBlbmRpbmdNZXNzYWdlc1RvQmFja2VuZElmTmVlZGVk
OiBmdW5jdGlvbigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5fcGVuZGluZ01l
c3NhZ2VzKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCB0aGlzLl9wZW5kaW5nTWVzc2FnZXMubGVuZ3RoOyArK2kpCi0gICAgICAgICAg
ICAgICAgdGhpcy5fc29ja2V0LnNlbmQodGhpcy5fcGVuZGluZ01lc3NhZ2VzW2ldKTsKLQotICAg
ICAgICAgICAgZGVsZXRlIHRoaXMuX3BlbmRpbmdNZXNzYWdlczsKLSAgICAgICAgfQotICAgIH07
Ci0KLSAgICBJbnNwZWN0b3JGcm9udGVuZEhvc3QgPSBuZXcgV2ViSW5zcGVjdG9yLkluc3BlY3Rv
ckZyb250ZW5kSG9zdFN0dWI7Ci0KLSAgICBXZWJJbnNwZWN0b3IuZG9udExvY2FsaXplVXNlcklu
dGVyZmFjZSA9IHRydWU7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9CYXNlL01haW4uanMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVy
ZmFjZS9CYXNlL01haW4uanMKaW5kZXggM2NmMjQ4NTYxYWEuLjdlYzU3NTY3YzIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9CYXNlL01haW4uanMKKysr
IGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvQmFzZS9NYWluLmpzCkBAIC01
NSw5ICs1NSw2IEBAIFdlYkluc3BlY3Rvci5MYXlvdXREaXJlY3Rpb24gPSB7CiAKIFdlYkluc3Bl
Y3Rvci5sb2FkZWQgPSBmdW5jdGlvbigpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSBXZWJTb2NrZXQg
dG8gY29tbXVuaWNhdGlvbi4KLSAgICB0aGlzLl9pbml0aWFsaXplV2ViU29ja2V0SWZOZWVkZWQo
KTsKLQogICAgIHRoaXMuZGVidWdnYWJsZVR5cGUgPSBJbnNwZWN0b3JGcm9udGVuZEhvc3QuZGVi
dWdnYWJsZVR5cGUoKSA9PT0gIndlYiIgPyBXZWJJbnNwZWN0b3IuRGVidWdnYWJsZVR5cGUuV2Vi
IDogV2ViSW5zcGVjdG9yLkRlYnVnZ2FibGVUeXBlLkphdmFTY3JpcHQ7CiAgICAgdGhpcy5oYXNF
eHRyYURvbWFpbnMgPSBmYWxzZTsKIApAQCAtMTY1MywyNyArMTY1MCw2IEBAIFdlYkluc3BlY3Rv
ci5fdGFiQnJvd3NlclNlbGVjdGVkVGFiQ29udGVudFZpZXdEaWRDaGFuZ2UgPSBmdW5jdGlvbihl
dmVudCkKICAgICAgICAgdGhpcy5xdWlja0NvbnNvbGUuY29uc29sZUxvZ1Zpc2liaWxpdHlDaGFu
Z2VkKHRoaXMuaXNTaG93aW5nQ29uc29sZVRhYigpKTsKIH07CiAKLVdlYkluc3BlY3Rvci5faW5p
dGlhbGl6ZVdlYlNvY2tldElmTmVlZGVkID0gZnVuY3Rpb24oKQotewotICAgIGlmICghSW5zcGVj
dG9yRnJvbnRlbmRIb3N0LmluaXRpYWxpemVXZWJTb2NrZXQpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHZhciBxdWVyeVBhcmFtcyA9IHBhcnNlTG9jYXRpb25RdWVyeVBhcmFtZXRlcnMoKTsKLQot
ICAgIGlmICgid3MiIGluIHF1ZXJ5UGFyYW1zKQotICAgICAgICB2YXIgdXJsID0gIndzOi8vIiAr
IHF1ZXJ5UGFyYW1zLndzOwotICAgIGVsc2UgaWYgKCJwYWdlIiBpbiBxdWVyeVBhcmFtcykgewot
ICAgICAgICB2YXIgcGFnZSA9IHF1ZXJ5UGFyYW1zLnBhZ2U7Ci0gICAgICAgIHZhciBob3N0ID0g
Imhvc3QiIGluIHF1ZXJ5UGFyYW1zID8gcXVlcnlQYXJhbXMuaG9zdCA6IHdpbmRvdy5sb2NhdGlv
bi5ob3N0OwotICAgICAgICB2YXIgdXJsID0gIndzOi8vIiArIGhvc3QgKyAiL2RldnRvb2xzL3Bh
Z2UvIiArIHBhZ2U7Ci0gICAgfQotCi0gICAgaWYgKCF1cmwpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIEluc3BlY3RvckZyb250ZW5kSG9zdC5pbml0aWFsaXplV2ViU29ja2V0KHVybCk7Ci19Owot
CiBXZWJJbnNwZWN0b3IuX3VwZGF0ZVNwbGl0Q29uc29sZUhlaWdodCA9IGZ1bmN0aW9uKGhlaWdo
dCkKIHsKICAgICBjb25zdCBtaW5pbXVtSGVpZ2h0ID0gNjQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwgYi9Tb3VyY2UvV2ViSW5zcGVj
dG9yVUkvVXNlckludGVyZmFjZS9NYWluLmh0bWwKaW5kZXggOGE2ZWJhYWFlNWYuLmVmOTBkMzk2
NjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9NYWlu
Lmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRlcmZhY2UvTWFpbi5odG1s
CkBAIC0yNDEsNyArMjQxLDYgQEAKICAgICA8c2NyaXB0IHNyYz0iRXh0ZXJuYWwvRXNwcmltYS9l
c3ByaW1hLmpzIj48L3NjcmlwdD4KIAogICAgIDxzY3JpcHQgc3JjPSJCYXNlL1dlYkluc3BlY3Rv
ci5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBzcmM9IkJhc2UvSW5zcGVjdG9yRnJvbnRlbmRI
b3N0U3R1Yi5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdCBzcmM9IkJhc2UvUGxhdGZvcm0uanMi
Pjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJCYXNlL0xpbmtlZExpc3QuanMiPjwvc2NyaXB0
PgogICAgIDxzY3JpcHQgc3JjPSJCYXNlL0xpc3RNdWx0aW1hcC5qcyI+PC9zY3JpcHQ+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwgYi9T
b3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNlckludGVyZmFjZS9UZXN0Lmh0bWwKaW5kZXggYWIzYjMw
NGY2ZjEuLjQxZjdmZjY1NDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvVXNl
ckludGVyZmFjZS9UZXN0Lmh0bWwKKysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1VzZXJJbnRl
cmZhY2UvVGVzdC5odG1sCkBAIC0zNiw3ICszNiw2IEBACiAgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsL0VzcHJpbWEvZXNwcmltYS5qcyI+PC9zY3JpcHQ+CiAKICAgICA8c2NyaXB0IHNyYz0iQmFz
ZS9XZWJJbnNwZWN0b3IuanMiPjwvc2NyaXB0PgotICAgIDxzY3JpcHQgc3JjPSJCYXNlL0luc3Bl
Y3RvckZyb250ZW5kSG9zdFN0dWIuanMiPjwvc2NyaXB0PgogICAgIDxzY3JpcHQgc3JjPSJCYXNl
L1BsYXRmb3JtLmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQmFzZS9MaW5rZWRMaXN0
LmpzIj48L3NjcmlwdD4KICAgICA8c2NyaXB0IHNyYz0iQmFzZS9MaXN0TXVsdGltYXAuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJ
LnZjeHByb2ovV2ViSW5zcGVjdG9yVUkudmN4cHJvaiBiL1NvdXJjZS9XZWJJbnNwZWN0b3JVSS9X
ZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHByb2oKaW5kZXggOWE1MjZi
MzE1MjMuLjU3YmU4YWFlMTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2Vi
SW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qCisrKyBiL1NvdXJjZS9X
ZWJJbnNwZWN0b3JVSS9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qL1dlYkluc3BlY3RvclVJLnZjeHBy
b2oKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYt
OCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERl
ZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2No
ZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3Vw
IExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlv
biBJbmNsdWRlPSJEZWJ1Z1N1ZmZpeHxXaW4zMiI+CkBAIC02NjAsNyArNjYwLDYgQEAKICAgICA8
Tm9uZSBJbmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEluZGV0ZXJtaW5hdGVQcm9ncmVzc1NwaW5u
ZXIuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFjZVxJbnNwZWN0b3JC
YWNrZW5kLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcSW5zcGVj
dG9yRnJvbnRlbmRBUEkuanMiIC8+Ci0gICAgPE5vbmUgSW5jbHVkZT0iLi5cVXNlckludGVyZmFj
ZVxJbnNwZWN0b3JGcm9udGVuZEhvc3RTdHViLmpzIiAvPgogICAgIDxOb25lIEluY2x1ZGU9Ii4u
XFVzZXJJbnRlcmZhY2VcSW5zcGVjdG9yT2JzZXJ2ZXIuanMiIC8+CiAgICAgPE5vbmUgSW5jbHVk
ZT0iLi5cVXNlckludGVyZmFjZVxJbnN0cnVtZW50SWNvbnMuY3NzIiAvPgogICAgIDxOb25lIElu
Y2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcSW5zdHJ1bWVudFNpZGViYXJQYW5lbC5jc3MiIC8+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9X
ZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvV2ViSW5zcGVjdG9yVUkvV2Vi
SW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMKaW5kZXgg
NTIxOTc2OTkyNDQuLjA3MTVkYmM5OTAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViSW5zcGVjdG9y
VUkvV2ViSW5zcGVjdG9yVUkudmN4cHJvai9XZWJJbnNwZWN0b3JVSS52Y3hwcm9qLmZpbHRlcnMK
KysrIGIvU291cmNlL1dlYkluc3BlY3RvclVJL1dlYkluc3BlY3RvclVJLnZjeHByb2ovV2ViSW5z
cGVjdG9yVUkudmN4cHJvai5maWx0ZXJzCkBAIC01ODgsOSArNTg4LDYgQEAKICAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEluc3BlY3RvckZyb250ZW5kQVBJLmpzIj4KICAgICAg
IDxGaWx0ZXI+VXNlckludGVyZmFjZTwvRmlsdGVyPgogICAgIDwvTm9uZT4KLSAgICA8Tm9uZSBJ
bmNsdWRlPSIuLlxVc2VySW50ZXJmYWNlXEluc3BlY3RvckZyb250ZW5kSG9zdFN0dWIuanMiPgot
ICAgICAgPEZpbHRlcj5Vc2VySW50ZXJmYWNlPC9GaWx0ZXI+Ci0gICAgPC9Ob25lPgogICAgIDxO
b25lIEluY2x1ZGU9Ii4uXFVzZXJJbnRlcmZhY2VcSW5zcGVjdG9yT2JzZXJ2ZXIuanMiPgogICAg
ICAgPEZpbHRlcj5Vc2VySW50ZXJmYWNlPC9GaWx0ZXI+CiAgICAgPC9Ob25lPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9DTWFrZUxp
c3RzLnR4dAppbmRleCBjOWZhYzgzMzQyYS4uZjhjNGE4ZTVmZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NNYWtlTGlzdHMu
dHh0CkBAIC0zNyw3ICszNyw2IEBAIHNldChXZWJLaXQyX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0RhdGFiYXNlcyIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vVUlQcm9jZXNzL0Rvd25sb2FkcyIKICAgICAiJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0dh
bWVwYWQiCi0gICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIiCiAg
ICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9MYXVuY2hlciIKICAgICAiJHtXRUJLSVQyX0RJ
Un0vVUlQcm9jZXNzL05ldHdvcmsiCiAgICAgIiR7V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9OZXR3
b3JrL0N1c3RvbVByb3RvY29scyIKQEAgLTQxNCwxMSArNDEzLDYgQEAgc2V0KFdlYktpdDJfU09V
UkNFUwogICAgIFVJUHJvY2Vzcy9HYW1lcGFkL1VJR2FtZXBhZC5jcHAKICAgICBVSVByb2Nlc3Mv
R2FtZXBhZC9VSUdhbWVwYWRQcm92aWRlci5jcHAKIAotICAgIFVJUHJvY2Vzcy9JbnNwZWN0b3JT
ZXJ2ZXIvSFRUUFJlcXVlc3QuY3BwCi0gICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJ
bnNwZWN0b3JTZXJ2ZXIuY3BwCi0gICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2Nr
ZXRTZXJ2ZXIuY3BwCi0gICAgVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uLmNwcAotCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1Byb2Nlc3NMYXVuY2hl
ci5jcHAKIAogICAgIFVJUHJvY2Vzcy9OZXR3b3JrL0N1c3RvbVByb3RvY29scy9MZWdhY3lDdXN0
b21Qcm90b2NvbE1hbmFnZXJQcm94eS5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBjNzU4YzcyNDIxNy4uYWZi
ZWNjOGZmMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNyBAQAorMjAxNy0wNi0wNiAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmVtb3ZlIGxl
Z2FjeSBJTlNQRUNUT1JfU0VSVkVSIGltcGxlbWVudGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI5NjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAq
IFBsYXRmb3JtL0xvZ2dpbmcuaDoKKyAgICAgICAgKiBQbGF0Zm9ybVdQRS5jbWFrZToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL0hUVFBSZXF1ZXN0LmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL0hUVFBSZXF1ZXN0Lmg6IFJlbW92
ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2
ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
SW5zcGVjdG9yU2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0luc3BlY3Rv
clNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmg6IFJlbW92ZWQuCisgICAgICAgICog
VUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaDogUmVtb3Zl
ZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb24uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oOiBSZW1vdmVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5kL2luc3BlY3RvclBhZ2VJbmRleC5odG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvc291cC9XZWJTb2Nr
ZXRTZXJ2ZXJTb3VwLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViSW5zcGVj
dG9yUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJbnNwZWN0b3JQcm94eTo6aW52YWxp
ZGF0ZSk6CisgICAgICAgICogVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lmg6CisgICAgICAg
ICogVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OmluaXRpYWxpemVXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjpwcmVm
ZXJlbmNlc0RpZENoYW5nZSk6CisgICAgICAgICogVUlQcm9jZXNzL3dwZS9XZWJQcm9jZXNzUG9v
bFdQRS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYkluc3BlY3Rvcjo6c2VuZE1lc3NhZ2VUb0Zyb250ZW5kKToK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5zcGVjdG9yLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5tZXNzYWdlcy5pbjoKKwogMjAxNy0wNi0w
NSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFTU0VSVElPTiBG
QUlMRUQ6IFJ1bkxvb3A6OmlzTWFpbigpIGluIGNvbS5hcHBsZS5XZWJLaXQ6IElQQzo6Q29ubmVj
dGlvbjo6c2VuZFN5bmNNZXNzYWdlICsgMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Mb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Mb2dnaW5nLmgKaW5k
ZXggZTc1YjhhYTVlZDUuLmUxODU5NWQ0MzFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Mb2dnaW5nLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vTG9nZ2luZy5o
CkBAIC00Nyw3ICs0Nyw2IEBAIGV4dGVybiAiQyIgewogICAgIE0oSWNvbkRhdGFiYXNlKSBcCiAg
ICAgTShJREIpIFwKICAgICBNKEluZGV4ZWREQikgXAotICAgIE0oSW5zcGVjdG9yU2VydmVyKSBc
CiAgICAgTShJUEMpIFwKICAgICBNKEtleUhhbmRsaW5nKSBcCiAgICAgTShMYXllcnMpIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtV1BFLmNtYWtlIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm1XUEUuY21ha2UKaW5kZXggZjUzMzUzYzIyOTkuLmE0YmFiZmIxZDE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybVdQRS5jbWFrZQpAQCAtMTExLDggKzExMSw2IEBAIGxpc3QoQVBQRU5EIFdl
YktpdDJfU09VUkNFUwogICAgIFVJUHJvY2Vzcy9BUEkvd3BlL1dQRVZpZXcuY3BwCiAgICAgVUlQ
cm9jZXNzL0FQSS93cGUvV1BFVmlld0NsaWVudC5jcHAKIAotICAgIFVJUHJvY2Vzcy9JbnNwZWN0
b3JTZXJ2ZXIvc291cC9XZWJTb2NrZXRTZXJ2ZXJTb3VwLmNwcAotCiAgICAgVUlQcm9jZXNzL0xh
dW5jaGVyL3dwZS9Qcm9jZXNzTGF1bmNoZXJXUEUuY3BwCiAKICAgICBVSVByb2Nlc3MvUGx1Z2lu
cy91bml4L1BsdWdpbkluZm9TdG9yZVVuaXguY3BwCkBAIC0zMjAsMTcgKzMxOCw4IEBAIGFkZF9j
dXN0b21fY29tbWFuZCgKICAgICBWRVJCQVRJTQogKQogCi1hZGRfY3VzdG9tX2NvbW1hbmQoCi0g
ICAgT1VUUFVUICR7REVSSVZFRF9TT1VSQ0VTX1dFQklOU1BFQ1RPUlVJX0RJUn0vV2ViS2l0Mklu
c3BlY3RvckdSZXNvdXJjZUJ1bmRsZS5jCi0gICAgREVQRU5EUyAke1dFQktJVDJfRElSfS9VSVBy
b2Nlc3MvQVBJL3dwZS9XZWJLaXQySW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbAotICAgICAg
ICAgICAgJHtXRUJLSVQyX0RJUn0vVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9mcm9udC1lbmQv
aW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwKLSAgICBDT01NQU5EIGdsaWItY29tcGlsZS1yZXNvdXJj
ZXMgLS1nZW5lcmF0ZSAtLXNvdXJjZWRpcj0ke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvSW5zcGVj
dG9yU2VydmVyL2Zyb250LWVuZCAtLXRhcmdldD0ke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNU
T1JVSV9ESVJ9L1dlYktpdDJJbnNwZWN0b3JHUmVzb3VyY2VCdW5kbGUuYyAke1dFQktJVDJfRElS
fS9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXQySW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLnhtbAot
ICAgIFZFUkJBVElNCi0pCi0KIGxpc3QoQVBQRU5EIFdQRVdlYkluc3BlY3RvclJlc291cmNlc19E
RVJJVkVEX1NPVVJDRVMKICAgICAke0RFUklWRURfU09VUkNFU19XRUJJTlNQRUNUT1JVSV9ESVJ9
L0luc3BlY3RvckdSZXNvdXJjZUJ1bmRsZS5jCi0gICAgJHtERVJJVkVEX1NPVVJDRVNfV0VCSU5T
UEVDVE9SVUlfRElSfS9XZWJLaXQySW5zcGVjdG9yR1Jlc291cmNlQnVuZGxlLmMKICkKIAogbGlz
dChBUFBFTkQgV1BFV2ViSW5zcGVjdG9yUmVzb3VyY2VzX0xJQlJBUklFUwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9IVFRQUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL0hUVFBSZXF1ZXN0LmNw
cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ2YTVjOGZjODIuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvSFRUUFJlcXVl
c3QuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVk
ZSAiSFRUUFJlcXVlc3QuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotCi0jaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1ZpZXcu
aD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5hbWVzcGFjZSBXZWJLaXQgewotCi1S
ZWZQdHI8SFRUUFJlcXVlc3Q+IEhUVFBSZXF1ZXN0OjpwYXJzZUhUVFBSZXF1ZXN0RnJvbUJ1ZmZl
cihjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBTdHJpbmcmIGZhaWx1cmVSZWFzb24p
Ci17Ci0gICAgaWYgKCFsZW5ndGgpIHsKLSAgICAgICAgZmFpbHVyZVJlYXNvbiA9ICJObyBkYXRh
IHRvIHBhcnNlLiI7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIC8vIFJl
cXVlc3Qgd2Ugd2lsbCBiZSBidWlsZGluZy4KLSAgICBhdXRvIHJlcXVlc3QgPSBIVFRQUmVxdWVz
dDo6Y3JlYXRlKCk7Ci0KLSAgICAvLyBBZHZhbmNlIGEgcG9pbnRlciB0aHJvdWdoIHRoZSBkYXRh
IGFzIG5lZWRlZC4KLSAgICBjb25zdCBjaGFyKiBwb3MgPSBkYXRhOwotICAgIHNpemVfdCByZW1h
aW5pbmdMZW5ndGggPSBsZW5ndGg7Ci0KLSAgICAvLyAxLiBQYXJzZSBNZXRob2QgKyBVUkwuCi0g
ICAgc2l6ZV90IHJlcXVlc3RMaW5lTGVuZ3RoID0gcmVxdWVzdC0+cGFyc2VSZXF1ZXN0TGluZShw
b3MsIHJlbWFpbmluZ0xlbmd0aCwgZmFpbHVyZVJlYXNvbik7Ci0gICAgaWYgKCFyZXF1ZXN0TGlu
ZUxlbmd0aCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcG9zICs9IHJlcXVlc3RMaW5l
TGVuZ3RoOwotICAgIHJlbWFpbmluZ0xlbmd0aCAtPSByZXF1ZXN0TGluZUxlbmd0aDsKLQotICAg
IC8vIDIuIFBhcnNlIEhUVFAgSGVhZGVycy4KLSAgICBzaXplX3QgaGVhZGVyc0xlbmd0aCA9IHJl
cXVlc3QtPnBhcnNlSGVhZGVycyhwb3MsIHJlbWFpbmluZ0xlbmd0aCwgZmFpbHVyZVJlYXNvbik7
Ci0gICAgaWYgKCFoZWFkZXJzTGVuZ3RoKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBw
b3MgKz0gaGVhZGVyc0xlbmd0aDsKLSAgICByZW1haW5pbmdMZW5ndGggLT0gaGVhZGVyc0xlbmd0
aDsKLQotICAgIC8vIDMuIFBhcnNlIEhUVFAgRGF0YS4KLSAgICBzaXplX3QgZGF0YUxlbmd0aCA9
IHJlcXVlc3QtPnBhcnNlUmVxdWVzdEJvZHkocG9zLCByZW1haW5pbmdMZW5ndGgpOwotICAgIHBv
cyArPSBkYXRhTGVuZ3RoOwotICAgIHJlbWFpbmluZ0xlbmd0aCAtPSBkYXRhTGVuZ3RoOwotCi0g
ICAgLy8gV2Ugc2hvdWxkIGhhdmUgcHJvY2Vzc2VkIHRoZSBlbnRpcmUgaW5wdXQuCi0gICAgQVNT
RVJUKCFyZW1haW5pbmdMZW5ndGgpOwotICAgIHJldHVybiBXVEZNb3ZlKHJlcXVlc3QpOwotfQot
Ci1zaXplX3QgSFRUUFJlcXVlc3Q6OnBhcnNlUmVxdWVzdExpbmUoY29uc3QgY2hhciogZGF0YSwg
c2l6ZV90IGxlbmd0aCwgU3RyaW5nJiBmYWlsdXJlUmVhc29uKQotewotICAgIFN0cmluZyB1cmw7
Ci0gICAgc2l6ZV90IHJlc3VsdCA9IHBhcnNlSFRUUFJlcXVlc3RMaW5lKGRhdGEsIGxlbmd0aCwg
ZmFpbHVyZVJlYXNvbiwgbV9yZXF1ZXN0TWV0aG9kLCB1cmwsIG1faHR0cFZlcnNpb24pOwotICAg
IG1fdXJsID0gVVJMKFVSTCgpLCB1cmwpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXNpemVf
dCBIVFRQUmVxdWVzdDo6cGFyc2VIZWFkZXJzKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5n
dGgsIFN0cmluZyYgZmFpbHVyZVJlYXNvbikKLXsKLSAgICBjb25zdCBjaGFyKiBwID0gZGF0YTsK
LSAgICBjb25zdCBjaGFyKiBlbmQgPSBkYXRhICsgbGVuZ3RoOwotICAgIFN0cmluZ1ZpZXcgbmFt
ZTsKLSAgICBTdHJpbmcgdmFsdWU7Ci0gICAgZm9yICg7IHAgPCBkYXRhICsgbGVuZ3RoOyBwKysp
IHsKLSAgICAgICAgc2l6ZV90IGNvbnN1bWVkTGVuZ3RoID0gcGFyc2VIVFRQSGVhZGVyKHAsIGVu
ZCAtIHAsIGZhaWx1cmVSZWFzb24sIG5hbWUsIHZhbHVlKTsKLSAgICAgICAgaWYgKCFjb25zdW1l
ZExlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBwICs9IGNvbnN1bWVkTGVu
Z3RoOwotICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgbV9oZWFkZXJGaWVsZHMuYWRkKG5hbWUudG9TdHJpbmcoKSwgdmFsdWUpOwotICAgIH0K
LQotICAgIC8vIElmIHdlIGdvdCBoZXJlIGFuZCAibmFtZSIgaXMgZW1wdHksIGl0IG1lYW5zIHRo
ZSBoZWFkZXJzIGFyZSB2YWxpZCBhbmQgZW5kZWQgd2l0aCBhCi0gICAgLy8gYmxhbmsgbGluZSAo
cGFyc2VIVFRQSGVhZGVyIHJldHVybnMgIm5hbWUiIGFzIGVtcHR5IGlmIHBhcnNpbmcgYSBibGFu
ayBsaW5lKSwgb3RoZXJ3aXNlCi0gICAgLy8gdGhlIGhlYWRlcnMgZGlkbid0IGVuZCB3aXRoIGEg
YmxhbmsgbGluZSBhbmQgd2UgaGF2ZSBhbiBpbnZhbGlkIHJlcXVlc3QuCi0gICAgLy8gU2VlIGFs
c28gaHR0cDovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWM0Lmh0bWwK
LSAgICBpZiAoIW5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
cCAtIGRhdGE7Ci19Ci0KLXNpemVfdCBIVFRQUmVxdWVzdDo6cGFyc2VSZXF1ZXN0Qm9keShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHJldHVybiBwYXJzZUhUVFBSZXF1
ZXN0Qm9keShkYXRhLCBsZW5ndGgsIG1fYm9keSk7Ci19Ci0KLUhUVFBSZXF1ZXN0OjpIVFRQUmVx
dWVzdCgpCi0gICAgOiBtX2h0dHBWZXJzaW9uKFdlYkNvcmU6OlVua25vd24pCi17Ci19Ci0KLUhU
VFBSZXF1ZXN0OjpIVFRQUmVxdWVzdChjb25zdCBTdHJpbmcmIHJlcXVlc3RNZXRob2QsIGNvbnN0
IFVSTCYgdXJsLCBIVFRQVmVyc2lvbiB2ZXJzaW9uKQotICAgIDogbV91cmwodXJsKQotICAgICwg
bV9odHRwVmVyc2lvbih2ZXJzaW9uKQotICAgICwgbV9yZXF1ZXN0TWV0aG9kKHJlcXVlc3RNZXRo
b2QpCi17Ci19Ci0KLUhUVFBSZXF1ZXN0Ojp+SFRUUFJlcXVlc3QoKQotewotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvSFRUUFJl
cXVlc3QuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvSFRUUFJl
cXVlc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxNTVmMDZlMjIuLjAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvSFRU
UFJlcXVlc3QuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSFRUUFJlcXVl
c3RfaAotI2RlZmluZSBIVFRQUmVxdWVzdF9oCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKLQotI2luY2x1ZGUgPFdlYkNvcmUvSFRUUEhlYWRlck1hcC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSFRUUFBhcnNlcnMuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL1VSTC5oPgotI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgSFRUUFJlcXVl
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxIVFRQUmVxdWVzdD4gewotcHVibGljOgotICAgIHN0YXRp
YyBSZWY8SFRUUFJlcXVlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSFRUUFJl
cXVlc3QoKSk7IH0KLSAgICBzdGF0aWMgUmVmPEhUVFBSZXF1ZXN0PiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiByZXF1ZXN0TWV0aG9kLCBjb25zdCBXZWJDb3JlOjpVUkwmIHVybCwgV2ViQ29yZTo6SFRU
UFZlcnNpb24gdmVyc2lvbikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBIVFRQUmVxdWVzdChyZXF1
ZXN0TWV0aG9kLCB1cmwsIHZlcnNpb24pKTsgfQotICAgIHN0YXRpYyBSZWZQdHI8SFRUUFJlcXVl
c3Q+IHBhcnNlSFRUUFJlcXVlc3RGcm9tQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBs
ZW5ndGgsIFN0cmluZyYgZmFpbHVyZVJlYXNvbik7Ci0gICAgdmlydHVhbCB+SFRUUFJlcXVlc3Qo
KTsKLQotICAgIFN0cmluZyByZXF1ZXN0TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9yZXF1ZXN0
TWV0aG9kOyB9Ci0gICAgdm9pZCBzZXRSZXF1ZXN0TWV0aG9kKGNvbnN0IFN0cmluZyYgbWV0aG9k
KSB7IG1fcmVxdWVzdE1ldGhvZCA9IG1ldGhvZDsgfQotCi0gICAgV2ViQ29yZTo6VVJMIHVybCgp
IGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgdm9pZCBzZXRVUkwoY29uc3QgV2ViQ29yZTo6
VVJMJiB1cmwpIHsgbV91cmwgPSB1cmw7IH0KLQotICAgIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiYgYm9keSgpIGNvbnN0IHsgcmV0dXJuIG1fYm9keTsgfQotCi0gICAgY29uc3QgV2ViQ29y
ZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzKCkgY29uc3QgeyByZXR1cm4gbV9oZWFkZXJG
aWVsZHM7IH0KLSAgICB2b2lkIGFkZEhlYWRlckZpZWxkKGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX2hlYWRlckZpZWxkcy5hZGQobmFtZSwgdmFsdWUp
OyB9Ci0gICAgdm9pZCBhZGRIZWFkZXJGaWVsZChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZhbHVlKSB7IG1faGVhZGVyRmllbGRzLmFkZChuYW1lLCB2YWx1ZSk7IH0KLQotcHJvdGVj
dGVkOgotICAgIEhUVFBSZXF1ZXN0KCk7Ci0gICAgSFRUUFJlcXVlc3QoY29uc3QgU3RyaW5nJiBy
ZXF1ZXN0TWV0aG9kLCBjb25zdCBXZWJDb3JlOjpVUkwmLCBXZWJDb3JlOjpIVFRQVmVyc2lvbik7
Ci0KLSAgICAvLyBQYXJzaW5nIGhlbHBlcnMuCi0gICAgc2l6ZV90IHBhcnNlUmVxdWVzdExpbmUo
Y29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCwgU3RyaW5nJiBmYWlsdXJlUmVhc29uKTsK
LSAgICBzaXplX3QgcGFyc2VIZWFkZXJzKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgs
IFN0cmluZyYgZmFpbHVyZVJlYXNvbik7Ci0gICAgc2l6ZV90IHBhcnNlUmVxdWVzdEJvZHkoY29u
c3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0KLSAgICBXZWJDb3JlOjpVUkwgbV91cmw7
Ci0gICAgV2ViQ29yZTo6SFRUUFZlcnNpb24gbV9odHRwVmVyc2lvbjsKLSAgICBTdHJpbmcgbV9y
ZXF1ZXN0TWV0aG9kOwotICAgIFdlYkNvcmU6OkhUVFBIZWFkZXJNYXAgbV9oZWFkZXJGaWVsZHM7
Ci0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fYm9keTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYktpdAotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCi0KLSNlbmRpZiAv
LyBIVFRQUmVxdWVzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5z
cGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQ5MDlhMWIyYzhkLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotCi0jaW5jbHVkZSAiV2ViSW5zcGVjdG9yU2Vy
dmVyLmgiCi0KLSNpbmNsdWRlICJIVFRQSGVhZGVyTmFtZXMuaCIKLSNpbmNsdWRlICJIVFRQUmVx
dWVzdC5oIgotI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCi0jaW5jbHVkZSAiV2ViU29j
a2V0U2VydmVyQ29ubmVjdGlvbi5oIgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLXN0YXRpYyB1bnNpZ25lZCBwYWdlSWRGcm9tUmVxdWVzdFBhdGgo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHNpemVfdCBzdGFydCA9IHBhdGgucmV2ZXJzZUZp
bmQoJy8nKTsKLSAgICBTdHJpbmcgbnVtYmVyU3RyaW5nID0gcGF0aC5zdWJzdHJpbmcoc3RhcnQg
KyAxLCBwYXRoLmxlbmd0aCgpIC0gc3RhcnQgLSAxKTsKLQotICAgIGJvb2wgb2sgPSBmYWxzZTsK
LSAgICB1bnNpZ25lZCBudW1iZXIgPSBudW1iZXJTdHJpbmcudG9VSW50U3RyaWN0KCZvayk7Ci0g
ICAgaWYgKCFvaykKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG51bWJlcjsKLX0KLQot
V2ViSW5zcGVjdG9yU2VydmVyJiBXZWJJbnNwZWN0b3JTZXJ2ZXI6OnNpbmdsZXRvbigpCi17Ci0g
ICAgc3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYgc2VydmVyID0gKm5ldyBXZWJJbnNwZWN0b3JT
ZXJ2ZXI7Ci0gICAgcmV0dXJuIHNlcnZlcjsKLX0KLQotV2ViSW5zcGVjdG9yU2VydmVyOjpXZWJJ
bnNwZWN0b3JTZXJ2ZXIoKQotICAgIDogV2ViU29ja2V0U2VydmVyKHRoaXMpCi0gICAgLCBtX25l
eHRBdmFpbGFibGVQYWdlSWQoMSkKLXsKLX0KLQotV2ViSW5zcGVjdG9yU2VydmVyOjp+V2ViSW5z
cGVjdG9yU2VydmVyKCkKLXsKLSAgICAvLyBDbG9zZSBhbnkgcmVtYWluaW5nIG9wZW4gY29ubmVj
dGlvbnMuCi0gICAgSGFzaE1hcDx1bnNpZ25lZCwgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbio+
OjppdGVyYXRvciBlbmQgPSBtX2Nvbm5lY3Rpb25NYXAuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFw
PHVuc2lnbmVkLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9j
b25uZWN0aW9uTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBXZWJTb2Nr
ZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gaXQtPnZhbHVlOwotICAgICAgICBXZWJJ
bnNwZWN0b3JQcm94eSogY2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KGNvbm5lY3Rpb24tPmlkZW50
aWZpZXIoKSk7Ci0gICAgICAgIGNsb3NlQ29ubmVjdGlvbihjbGllbnQsIGNvbm5lY3Rpb24pOwot
ICAgIH0KLX0KLQotaW50IFdlYkluc3BlY3RvclNlcnZlcjo6cmVnaXN0ZXJQYWdlKFdlYkluc3Bl
Y3RvclByb3h5KiBjbGllbnQpCi17Ci0jaWZuZGVmIEFTU0VSVF9ESVNBQkxFRAotICAgIENsaWVu
dE1hcDo6aXRlcmF0b3IgZW5kID0gbV9jbGllbnRNYXAuZW5kKCk7Ci0gICAgZm9yIChDbGllbnRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9jbGllbnRNYXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQot
ICAgICAgICBBU1NFUlQoaXQtPnZhbHVlICE9IGNsaWVudCk7Ci0jZW5kaWYKLQotICAgIGludCBw
YWdlSWQgPSBtX25leHRBdmFpbGFibGVQYWdlSWQrKzsKLSAgICBtX2NsaWVudE1hcC5zZXQocGFn
ZUlkLCBjbGllbnQpOwotICAgIHJldHVybiBwYWdlSWQ7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9y
U2VydmVyOjp1bnJlZ2lzdGVyUGFnZShpbnQgcGFnZUlkKQotewotICAgIG1fY2xpZW50TWFwLnJl
bW92ZShwYWdlSWQpOwotICAgIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24g
PSBtX2Nvbm5lY3Rpb25NYXAuZ2V0KHBhZ2VJZCk7Ci0gICAgaWYgKGNvbm5lY3Rpb24pCi0gICAg
ICAgIGNsb3NlQ29ubmVjdGlvbigwLCBjb25uZWN0aW9uKTsKLX0KLQotU3RyaW5nIFdlYkluc3Bl
Y3RvclNlcnZlcjo6aW5zcGVjdG9yVXJsRm9yUGFnZUlEKGludCkKLXsKLSAgICByZXR1cm4gU3Ry
aW5nKCk7Ci19Ci0KLXZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpzZW5kTWVzc2FnZU92ZXJDb25u
ZWN0aW9uKHVuc2lnbmVkIHBhZ2VJZEZvckNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSkKLXsKLSAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uID0gbV9jb25u
ZWN0aW9uTWFwLmdldChwYWdlSWRGb3JDb25uZWN0aW9uKTsKLSAgICBpZiAoY29ubmVjdGlvbikK
LSAgICAgICAgY29ubmVjdGlvbi0+c2VuZFdlYlNvY2tldE1lc3NhZ2UobWVzc2FnZSk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlVW5yZWNvZ25pemVkSFRUUFJlcXVl
c3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiogY29ubmVjdGlvbiwgUmVmPEhUVFBSZXF1ZXN0
PiYmIHJlcXVlc3QpCi17Ci0gICAgLy8gcmVxdWVzdC0+dXJsKCkgY29udGFpbnMgb25seSB0aGUg
cGF0aCBleHRyYWN0ZWQgZnJvbSB0aGUgSFRUUCByZXF1ZXN0IGxpbmUKLSAgICAvLyBhbmQgVVJM
IGlzIHBvb3IgYXQgcGFyc2luZyBpbmNvbXBsZXRlIFVSTHMsIHNvIGV4dHJhY3QgdGhlIGludGVy
ZXN0aW5nIHBhcnRzIG1hbnVhbGx5LgotICAgIFN0cmluZyBwYXRoID0gcmVxdWVzdC0+dXJsKCk7
Ci0gICAgc2l6ZV90IHBhdGhFbmQgPSBwYXRoLmZpbmQoJz8nKTsKLSAgICBpZiAocGF0aEVuZCA9
PSBub3RGb3VuZCkKLSAgICAgICAgcGF0aEVuZCA9IHBhdGguZmluZCgnIycpOwotICAgIGlmIChw
YXRoRW5kICE9IG5vdEZvdW5kKQotICAgICAgICBwYXRoLnRydW5jYXRlKHBhdGhFbmQpOwotCi0g
ICAgLy8gQXNrIGZvciB0aGUgY29tcGxldGUgcGF5bG9hZCBpbiBtZW1vcnkgZm9yIHRoZSBzYWtl
IG9mIHNpbXBsaWNpdHkuIEEgbW9yZSBlZmZpY2llbnQgd2F5IHdvdWxkIGJlCi0gICAgLy8gdG8g
YXNrIGZvciBoZWFkZXIgZGF0YSBhbmQgdGhlbiBsZXQgdGhlIHBsYXRmb3JtIGFic3RyYWN0aW9u
IHdyaXRlIHRoZSBwYXlsb2FkIHN0cmFpZ2h0IG9uIHRoZSBjb25uZWN0aW9uLgotICAgIFZlY3Rv
cjxjaGFyPiBib2R5OwotICAgIFN0cmluZyBjb250ZW50VHlwZTsKLSAgICBib29sIGZvdW5kID0g
cGxhdGZvcm1SZXNvdXJjZUZvclBhdGgocGF0aCwgYm9keSwgY29udGVudFR5cGUpOwotCi0gICAg
SFRUUEhlYWRlck1hcCBoZWFkZXJGaWVsZHM7Ci0gICAgaGVhZGVyRmllbGRzLnNldChIVFRQSGVh
ZGVyTmFtZTo6Q29ubmVjdGlvbiwgImNsb3NlIik7Ci0gICAgaGVhZGVyRmllbGRzLnNldChIVFRQ
SGVhZGVyTmFtZTo6Q29udGVudExlbmd0aCwgU3RyaW5nOjpudW1iZXIoYm9keS5zaXplKCkpKTsK
LSAgICBpZiAoZm91bmQpCi0gICAgICAgIGhlYWRlckZpZWxkcy5zZXQoSFRUUEhlYWRlck5hbWU6
OkNvbnRlbnRUeXBlLCBjb250ZW50VHlwZSk7Ci0KLSAgICAvLyBTZW5kIHdoZW4gcmVhZHkgYW5k
IGNsb3NlIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMuCi0gICAgY29ubmVjdGlvbi0+c2VuZEhUVFBS
ZXNwb25zZUhlYWRlcihmb3VuZCA/IDIwMCA6IDQwNCwgZm91bmQgPyAiT0siIDogIk5vdCBGb3Vu
ZCIsIGhlYWRlckZpZWxkcyk7Ci0gICAgY29ubmVjdGlvbi0+c2VuZFJhd0RhdGEoYm9keS5kYXRh
KCksIGJvZHkuc2l6ZSgpKTsKLSAgICBjb25uZWN0aW9uLT5zaHV0ZG93bkFmdGVyU2VuZE9yTm93
KCk7Ci19Ci0KLWJvb2wgV2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlV2ViU29ja2V0VXBn
cmFkZUhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBSZWY8SFRUUFJlcXVl
c3Q+JiYgcmVxdWVzdCkKLXsKLSAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QtPnVybCgpOwotCi0g
ICAgLy8gTk9URTogS2VlcCB0aGlzIGluIHN5bmMgd2l0aCBXZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvaW5zcGVjdG9yLmpzLgotICAgIERFUFJFQ0FURURfREVGSU5FX1NUQVRJQ19MT0NBTChj
b25zdCBTdHJpbmcsIGluc3BlY3RvcldlYlNvY2tldENvbm5lY3Rpb25QYXRoUHJlZml4LCAoQVND
SUlMaXRlcmFsKCIvZGV2dG9vbHMvcGFnZS8iKSkpOwotCi0gICAgLy8gVW5rbm93biBwYXRoIHJl
cXVlc3RlZC4KLSAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChpbnNwZWN0b3JXZWJTb2NrZXRDb25u
ZWN0aW9uUGF0aFByZWZpeCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGludCBwYWdl
SWQgPSBwYWdlSWRGcm9tUmVxdWVzdFBhdGgocGF0aCk7Ci0gICAgLy8gSW52YWxpZCBwYWdlIGlk
LgotICAgIGlmICghcGFnZUlkKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBUaGVy
ZSBpcyBubyBjbGllbnQgZm9yIHRoYXQgcGFnZSBpZC4KLSAgICBXZWJJbnNwZWN0b3JQcm94eSog
Y2xpZW50ID0gbV9jbGllbnRNYXAuZ2V0KHBhZ2VJZCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkluc3Bl
Y3RvclNlcnZlcjo6ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2
ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBSZWY8SFRUUFJlcXVlc3Q+JiYgcmVxdWVzdCkKLXsK
LSAgICBTdHJpbmcgcGF0aCA9IHJlcXVlc3QtPnVybCgpOwotICAgIHVuc2lnbmVkIHBhZ2VJZCA9
IHBhZ2VJZEZyb21SZXF1ZXN0UGF0aChwYXRoKTsKLSAgICBBU1NFUlQocGFnZUlkKTsKLQotICAg
IC8vIElnbm9yZSBjb25uZWN0aW9ucyB0byBhIHBhZ2UgdGhhdCBhbHJlYWR5IGhhdmUgYSByZW1v
dGUgaW5zcGVjdG9yIGNvbm5lY3RlZC4KLSAgICBpZiAobV9jb25uZWN0aW9uTWFwLmNvbnRhaW5z
KHBhZ2VJZCkpIHsKLSAgICAgICAgTE9HX0VSUk9SKCJBIHJlbW90ZSBpbnNwZWN0b3IgY29ubmVj
dGlvbiBhbHJlYWR5IGV4aXN0IGZvciBwYWdlIElEICVkLiBJZ25vcmluZy4iLCBwYWdlSWQpOwot
ICAgICAgICBjb25uZWN0aW9uLT5zaHV0ZG93bk5vdygpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgLy8gTWFwIHRoZSBwYWdlSWQgdG8gdGhlIGNvbm5lY3Rpb24gaW4gY2FzZSB3ZSBu
ZWVkIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGxvY2FsbHkuCi0gICAgY29ubmVjdGlvbi0+c2V0
SWRlbnRpZmllcihwYWdlSWQpOwotICAgIG1fY29ubmVjdGlvbk1hcC5zZXQocGFnZUlkLCBjb25u
ZWN0aW9uKTsKLQotICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQgPSBtX2NsaWVudE1hcC5n
ZXQocGFnZUlkKTsKLSAgICBjbGllbnQtPnJlbW90ZUZyb250ZW5kQ29ubmVjdGVkKCk7Ci19Ci0K
LXZvaWQgV2ViSW5zcGVjdG9yU2VydmVyOjpkaWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZShXZWJT
b2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBjb25uZWN0aW9uLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2Up
Ci17Ci0gICAgLy8gRGlzcGF0Y2ggaW5jb21pbmcgcmVtb3RlIG1lc3NhZ2UgbG9jYWxseS4KLSAg
ICB1bnNpZ25lZCBwYWdlSWQgPSBjb25uZWN0aW9uLT5pZGVudGlmaWVyKCk7Ci0gICAgQVNTRVJU
KHBhZ2VJZCk7Ci0gICAgV2ViSW5zcGVjdG9yUHJveHkqIGNsaWVudCA9IG1fY2xpZW50TWFwLmdl
dChwYWdlSWQpOwotICAgIGNsaWVudC0+ZGlzcGF0Y2hNZXNzYWdlRnJvbVJlbW90ZUZyb250ZW5k
KG1lc3NhZ2UpOwotfQotCi12b2lkIFdlYkluc3BlY3RvclNlcnZlcjo6ZGlkQ2xvc2VXZWJTb2Nr
ZXRDb25uZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0g
ICAgLy8gQ29ubmVjdGlvbiBoYXMgYWxyZWFkeSBzaHV0IGRvd24uCi0gICAgdW5zaWduZWQgcGFn
ZUlkID0gY29ubmVjdGlvbi0+aWRlbnRpZmllcigpOwotICAgIGlmICghcGFnZUlkKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBUaGUgc29ja2V0IGNsb3NpbmcgbWVhbnMgdGhlIHJlbW90ZSBz
aWRlIGhhcyBjYXVzZWQgdGhlIGNsb3NlLgotICAgIFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQg
PSBtX2NsaWVudE1hcC5nZXQocGFnZUlkKTsKLSAgICBjbG9zZUNvbm5lY3Rpb24oY2xpZW50LCBj
b25uZWN0aW9uKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0b3JTZXJ2ZXI6OmNsb3NlQ29ubmVjdGlv
bihXZWJJbnNwZWN0b3JQcm94eSogY2xpZW50LCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiBj
b25uZWN0aW9uKQotewotICAgIC8vIExvY2FsIHNpZGUgY2xlYW51cC4KLSAgICBpZiAoY2xpZW50
KQotICAgICAgICBjbGllbnQtPnJlbW90ZUZyb250ZW5kRGlzY29ubmVjdGVkKCk7Ci0KLSAgICAv
LyBSZW1vdGUgc2lkZSBjbGVhbnVwLgotICAgIG1fY29ubmVjdGlvbk1hcC5yZW1vdmUoY29ubmVj
dGlvbi0+aWRlbnRpZmllcigpKTsKLSAgICBjb25uZWN0aW9uLT5zZXRJZGVudGlmaWVyKDApOwot
ICAgIGNvbm5lY3Rpb24tPnNodXRkb3duTm93KCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJM
RShJTlNQRUNUT1JfU0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0luc3BlY3RvclNlcnZlci9XZWJJbnNwZWN0b3JTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViSW5zcGVjdG9yU2VydmVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE0YmE1MjI5OTBiLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYkluc3BlY3RvclNlcnZlci5oCisr
KyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9r
aWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxF
KElOU1BFQ1RPUl9TRVJWRVIpCi0KLSNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXIuaCIKLSNpbmNs
dWRlICJXZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
Y2xhc3MgV2ViSW5zcGVjdG9yUHJveHk7Ci0KLWNsYXNzIFdlYkluc3BlY3RvclNlcnZlciBmaW5h
bCA6IHB1YmxpYyBXZWJTb2NrZXRTZXJ2ZXIsIHB1YmxpYyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQg
ewotcHVibGljOgotICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgV2ViSW5zcGVjdG9yUHJv
eHkqPiBDbGllbnRNYXA7Ci0gICAgc3RhdGljIFdlYkluc3BlY3RvclNlcnZlciYgc2luZ2xldG9u
KCk7Ci0KLSAgICAvLyBQYWdlIHJlZ2lzdHJ5IHRvIG1hbmFnZSBrbm93biBwYWdlcy4KLSAgICBp
bnQgcmVnaXN0ZXJQYWdlKFdlYkluc3BlY3RvclByb3h5KiBjbGllbnQpOwotICAgIHZvaWQgdW5y
ZWdpc3RlclBhZ2UoaW50IHBhZ2VJZCk7Ci0gICAgU3RyaW5nIGluc3BlY3RvclVybEZvclBhZ2VJ
RChpbnQgcGFnZUlkKTsKLSAgICB2b2lkIHNlbmRNZXNzYWdlT3ZlckNvbm5lY3Rpb24odW5zaWdu
ZWQgcGFnZUlkRm9yQ29ubmVjdGlvbiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLQotcHJpdmF0
ZToKLSAgICBXZWJJbnNwZWN0b3JTZXJ2ZXIoKTsKLSAgICB+V2ViSW5zcGVjdG9yU2VydmVyKCk7
Ci0KLSAgICAvLyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQgaW1wbGVtZW50YXRpb24uIEV2ZW50cyBj
b21pbmcgZnJvbSByZW1vdGUgY29ubmVjdGlvbnMuCi0gICAgdm9pZCBkaWRSZWNlaXZlVW5yZWNv
Z25pemVkSFRUUFJlcXVlc3QoV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbiosIFJlZjxIVFRQUmVx
dWVzdD4mJikgZmluYWw7Ci0gICAgYm9vbCBkaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBS
ZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBSZWY8SFRUUFJlcXVlc3Q+JiYpIGZp
bmFsOwotICAgIHZvaWQgZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRT
ZXJ2ZXJDb25uZWN0aW9uKiwgUmVmPEhUVFBSZXF1ZXN0PiYmKSBmaW5hbDsKLSAgICB2b2lkIGRp
ZFJlY2VpdmVXZWJTb2NrZXRNZXNzYWdlKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwotICAgIHZvaWQgZGlkQ2xvc2VXZWJTb2NrZXRDb25u
ZWN0aW9uKFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qKSBmaW5hbDsKLQotICAgIGJvb2wgcGxh
dGZvcm1SZXNvdXJjZUZvclBhdGgoY29uc3QgU3RyaW5nJiBwYXRoLCBWZWN0b3I8Y2hhcj4mIGRh
dGEsIFN0cmluZyYgY29udGVudFR5cGUpOwotCi0gICAgdm9pZCBjbG9zZUNvbm5lY3Rpb24oV2Vi
SW5zcGVjdG9yUHJveHkqLCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKik7Ci0KLSAgICB1bnNp
Z25lZCBtX25leHRBdmFpbGFibGVQYWdlSWQ7Ci0gICAgQ2xpZW50TWFwIG1fY2xpZW50TWFwOwot
ICAgIEhhc2hNYXA8dW5zaWduZWQsIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qPiBtX2Nvbm5l
Y3Rpb25NYXA7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2Vi
U29ja2V0U2VydmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzUz
NGI0ZmNiZjUuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNw
ZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJl
c2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZF
UikKLQotI2luY2x1ZGUgIldlYlNvY2tldFNlcnZlci5oIgotCi0jaW5jbHVkZSAiV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxl
Lmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQot
V2ViU29ja2V0U2VydmVyOjpXZWJTb2NrZXRTZXJ2ZXIoV2ViU29ja2V0U2VydmVyQ2xpZW50KiBj
bGllbnQpCi0gICAgOiBtX3N0YXRlKENsb3NlZCkKLSAgICAsIG1fY2xpZW50KGNsaWVudCkKLSAg
ICAsIG1fcG9ydCgwKQotewotICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOwotfQotCi1XZWJTb2Nr
ZXRTZXJ2ZXI6On5XZWJTb2NrZXRTZXJ2ZXIoKQotewotICAgIGNsb3NlKCk7Ci19Ci0KLWJvb2wg
V2ViU29ja2V0U2VydmVyOjpsaXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWdu
ZWQgc2hvcnQgcG9ydCkKLXsKLSAgICBBU1NFUlQocG9ydCk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9
PSBMaXN0ZW5pbmcpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvb2wgaXNOb3dMaXN0
ZW5pbmcgPSBwbGF0Zm9ybUxpc3RlbihiaW5kQWRkcmVzcywgcG9ydCk7Ci0gICAgaWYgKGlzTm93
TGlzdGVuaW5nKSB7Ci0gICAgICAgIG1fYmluZEFkZHJlc3MgPSBiaW5kQWRkcmVzczsKLSAgICAg
ICAgbV9wb3J0ID0gcG9ydDsKLSAgICAgICAgbV9zdGF0ZSA9IExpc3RlbmluZzsKLSAgICB9Ci0g
ICAgcmV0dXJuIGlzTm93TGlzdGVuaW5nOwotfQotCi12b2lkIFdlYlNvY2tldFNlcnZlcjo6Y2xv
c2UoKQotewotICAgIGlmIChtX3N0YXRlID09IENsb3NlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgbV9wb3J0ID0gMDsKLSAgICBtX2JpbmRBZGRyZXNz
ID0gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyOjpkaWRBY2NlcHRDb25uZWN0
aW9uKHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPiBjb25uZWN0aW9u
KQotewotICAgIG1fY29ubmVjdGlvbnMuYXBwZW5kKFdURk1vdmUoY29ubmVjdGlvbikpOwotfQot
Ci12b2lkIFdlYlNvY2tldFNlcnZlcjo6ZGlkQ2xvc2VXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qIGNvbm5lY3Rpb24pCi17Ci0gICAgZm9yIChhdXRv
IGl0ID0gbV9jb25uZWN0aW9ucy5iZWdpbigpLCBlbmQgPSBtX2Nvbm5lY3Rpb25zLmVuZCgpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5nZXQoKSA9PSBjb25uZWN0aW9uKSB7
Ci0gICAgICAgICAgICBtX2Nvbm5lY3Rpb25zLnJlbW92ZShpdCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlci5oIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXIu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyMjdlZjAwMjYuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0
U2VydmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJTb2Nr
ZXRTZXJ2ZXJfaAotI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJfaAotCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9TRVJWRVIpCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL0RlcXVlLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLSNpZiBVU0UoU09VUCkKLSNpbmNs
dWRlIDxnaW8vZ2lvLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgotI2VuZGlmCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIFNvY2tldFN0cmVhbUhhbmRsZTsKLX0KLQotbmFt
ZXNwYWNlIFdlYktpdCB7Ci0KLWNsYXNzIFdlYlNvY2tldFNlcnZlckNsaWVudDsKLWNsYXNzIFdl
YlNvY2tldFNlcnZlckNvbm5lY3Rpb247Ci0KLWNsYXNzIFdlYlNvY2tldFNlcnZlciB7Ci1wdWJs
aWM6Ci0gICAgZW51bSBTZXJ2ZXJTdGF0ZSB7IENsb3NlZCwgTGlzdGVuaW5nIH07Ci0gICAgZXhw
bGljaXQgV2ViU29ja2V0U2VydmVyKFdlYlNvY2tldFNlcnZlckNsaWVudCopOwotICAgIHZpcnR1
YWwgfldlYlNvY2tldFNlcnZlcigpOwotCi0gICAgLy8gU2VydmVyIG9wZXJhdGlvbnMuCi0gICAg
Ym9vbCBsaXN0ZW4oY29uc3QgU3RyaW5nJiBiaW5kQWRkcmVzcywgdW5zaWduZWQgc2hvcnQgcG9y
dCk7Ci0gICAgU3RyaW5nIGJpbmRBZGRyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9iaW5kQWRkcmVz
czsgfTsKLSAgICB1bnNpZ25lZCBzaG9ydCBwb3J0KCkgY29uc3QgeyByZXR1cm4gbV9wb3J0OyB9
OwotICAgIFNlcnZlclN0YXRlIHNlcnZlclN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsg
fTsKLSAgICB2b2lkIGNsb3NlKCk7Ci0KLSAgICBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQqIGNsaWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xpZW50OyB9Ci0gICAgdm9pZCBkaWRBY2NlcHRDb25uZWN0
aW9uKHN0ZDo6dW5pcXVlX3B0cjxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPik7Ci0KLXByaXZh
dGU6Ci0gICAgdm9pZCBkaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oV2ViU29ja2V0
U2VydmVyQ29ubmVjdGlvbiopOwotCi0gICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemUoKTsKLSAg
ICBib29sIHBsYXRmb3JtTGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVk
IHNob3J0IHBvcnQpOwotICAgIHZvaWQgcGxhdGZvcm1DbG9zZSgpOwotCi0gICAgU2VydmVyU3Rh
dGUgbV9zdGF0ZTsKLSAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViU29ja2V0U2VydmVyQ29u
bmVjdGlvbj4+IG1fY29ubmVjdGlvbnM7Ci0gICAgV2ViU29ja2V0U2VydmVyQ2xpZW50KiBtX2Ns
aWVudDsKLSAgICBTdHJpbmcgbV9iaW5kQWRkcmVzczsKLSAgICB1bnNpZ25lZCBzaG9ydCBtX3Bv
cnQ7Ci0jaWYgVVNFKFNPVVApCi0gICAgR1JlZlB0cjxHU29ja2V0U2VydmljZT4gbV9zb2NrZXRT
ZXJ2aWNlOwotI2VuZGlmCi0gICAgZnJpZW5kIGNsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rp
b247Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLQotI2Vu
ZGlmIC8vIFdlYlNvY2tldFNlcnZlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNsaWVudC5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZmYWMzOTM1MmQuLjAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2Vy
dmVyQ2xpZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJTb2NrZXRTZXJ2ZXJD
bGllbnRfaAotI2RlZmluZSBXZWJTb2NrZXRTZXJ2ZXJDbGllbnRfaAotCi0jaWYgRU5BQkxFKElO
U1BFQ1RPUl9TRVJWRVIpCi0KLSNpbmNsdWRlICJIVFRQUmVxdWVzdC5oIgotI2luY2x1ZGUgPHd0
Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YktpdCB7Ci0KLWNsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb247Ci0KLWNsYXNzIFdlYlNv
Y2tldFNlcnZlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+V2ViU29ja2V0U2VydmVy
Q2xpZW50KCkgeyB9Ci0KLSAgICAvLyBSZWNlaXZlZCBhbiBIVFRQIHJlcXVlc3QgYnV0IGRpZG4n
dCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdC4KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVVu
cmVjb2duaXplZEhUVFBSZXF1ZXN0KFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24qLCBSZWY8SFRU
UFJlcXVlc3Q+JiYpIHsgfQotCi0gICAgLy8gUmVjZWl2ZWQgYSBXZWJTb2NrZXQgVXBncmFkZSBI
VFRQIHJlcXVlc3QuIEFzayBpZiB3ZSBzaG91bGQgaGFuZGxlIGl0IGFuZCB1cGdyYWRlLgotICAg
IHZpcnR1YWwgYm9vbCBkaWRSZWNlaXZlV2ViU29ja2V0VXBncmFkZUhUVFBSZXF1ZXN0KFdlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24qLCBSZWY8SFRUUFJlcXVlc3Q+JiYpIHsgcmV0dXJuIHRydWU7
IH0KLQotICAgIC8vIEVzdGFibGlzaGVkIGEgV2ViU29ja2V0IENvbm5lY3Rpb24uCi0gICAgdmly
dHVhbCB2b2lkIGRpZEVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oV2ViU29ja2V0U2VydmVy
Q29ubmVjdGlvbiosIFJlZjxIVFRQUmVxdWVzdD4mJikgeyB9Ci0KLSAgICAvLyBSZWNlaXZlZCBh
IFdlYlNvY2tldCBtZXNzYWdlLgotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlV2ViU29ja2V0
TWVzc2FnZShXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKiwgY29uc3QgU3RyaW5nJikgeyB9Ci0K
LSAgICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBjbG9zZWQuCi0gICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlV2ViU29ja2V0Q29ubmVjdGlvbihXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uKikgeyB9
Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLQotI2VuZGlm
IC8vIFdlYlNvY2tldFNlcnZlckNsaWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24uY3BwIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTE3N2Y2ZjVlMmMu
LjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2
ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTAg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBSaWdodHMg
UmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VS
VkVSKQotCi0jaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgotCi0jaW5jbHVk
ZSAiSFRUUEhlYWRlck5hbWVzLmgiCi0jaW5jbHVkZSAiSFRUUFJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJXZWJTb2NrZXRTZXJ2ZXIuaCIKLSNpbmNsdWRlICJXZWJTb2NrZXRTZXJ2ZXJDbGllbnQuaCIK
LSNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVudGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9T
b2NrZXRTdHJlYW1FcnJvci5oPgotI2luY2x1ZGUgPFdlYkNvcmUvU29ja2V0U3RyZWFtSGFuZGxl
Lmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9XZWJTb2NrZXRDaGFubmVsLmg+Ci0jaW5jbHVkZSA8V2Vi
Q29yZS9XZWJTb2NrZXRIYW5kc2hha2UuaD4KLSNpbmNsdWRlIDx3dGYvRnVuY3Rpb24uaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotbmFtZXNwYWNlIFdlYktpdCB7
Ci0KLVdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24o
V2ViU29ja2V0U2VydmVyQ2xpZW50KiBjbGllbnQsIFdlYlNvY2tldFNlcnZlciogc2VydmVyKQot
ICAgIDogbV9zZXJ2ZXIoc2VydmVyKQotICAgICwgbV9jbGllbnQoY2xpZW50KQotewotfQotCi1X
ZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjp+V2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbigpCi17
Ci0gICAgc2h1dGRvd25Ob3coKTsKLX0KLQotdm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpzZXRTb2NrZXRIYW5kbGUoUmVmPFNvY2tldFN0cmVhbUhhbmRsZT4mJiBzb2NrZXQpCi17Ci0g
ICAgQVNTRVJUKCFtX3NvY2tldCk7Ci0gICAgbV9zb2NrZXQgPSBXVEZNb3ZlKHNvY2tldCk7Ci19
Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRvd25Ob3coKQotewotICAg
IGlmICghbV9zb2NrZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBhdXRvIHNvY2tldCA9IFdURk1v
dmUobV9zb2NrZXQpOwotICAgIHNvY2tldC0+Y2xvc2UoKTsKLSAgICBtX3NodXRkb3duQWZ0ZXJT
ZW5kID0gZmFsc2U7Ci19Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6c2h1dGRv
d25BZnRlclNlbmRPck5vdygpCi17Ci0gICAgaWYgKG1fc29ja2V0LT5idWZmZXJlZEFtb3VudCgp
KSB7Ci0gICAgICAgIG1fc2h1dGRvd25BZnRlclNlbmQgPSB0cnVlOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgc2h1dGRvd25Ob3coKTsKLX0KLQotdm9pZCBXZWJTb2NrZXRTZXJ2ZXJD
b25uZWN0aW9uOjpzZW5kV2ViU29ja2V0TWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17
Ci0gICAgQ1N0cmluZyBwYXlsb2FkID0gbWVzc2FnZS51dGY4KCk7Ci0gICAgY29uc3QgYm9vbCBm
aW5hbCA9IHRydWUsIGNvbXByZXNzID0gZmFsc2UsIG1hc2tlZCA9IGZhbHNlOwotICAgIFdlYlNv
Y2tldEZyYW1lIGZyYW1lKFdlYlNvY2tldEZyYW1lOjpPcENvZGVUZXh0LCBmaW5hbCwgY29tcHJl
c3MsIG1hc2tlZCwgcGF5bG9hZC5kYXRhKCksIHBheWxvYWQubGVuZ3RoKCkpOwotCi0gICAgVmVj
dG9yPGNoYXI+IGZyYW1lRGF0YTsKLSAgICBmcmFtZS5tYWtlRnJhbWVEYXRhKGZyYW1lRGF0YSk7
Ci0KLSAgICBtX3NvY2tldC0+c2VuZERhdGEoZnJhbWVEYXRhLmRhdGEoKSwgZnJhbWVEYXRhLnNp
emUoKSwgW10oYm9vbCkgeyB9KTsKLX0KLQotdm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9u
OjpzZW5kSFRUUFJlc3BvbnNlSGVhZGVyKGludCBzdGF0dXNDb2RlLCBjb25zdCBTdHJpbmcmIHN0
YXR1c1RleHQsIGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlckZpZWxkcykKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgYnVpbGRlci5hcHBlbmRMaXRlcmFsKCJIVFRQLzEuMSAi
KTsKLSAgICBidWlsZGVyLmFwcGVuZE51bWJlcihzdGF0dXNDb2RlKTsKLSAgICBidWlsZGVyLmFw
cGVuZCgnICcpOwotICAgIGJ1aWxkZXIuYXBwZW5kKHN0YXR1c1RleHQpOwotICAgIGJ1aWxkZXIu
YXBwZW5kTGl0ZXJhbCgiXHJcbiIpOwotICAgIEhUVFBIZWFkZXJNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IGhlYWRlckZpZWxkcy5lbmQoKTsKLSAgICBmb3IgKEhUVFBIZWFkZXJNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gaGVhZGVyRmllbGRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+a2V5KTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmRM
aXRlcmFsKCI6ICIpOwotICAgICAgICBidWlsZGVyLmFwcGVuZChpdC0+dmFsdWUpOwotICAgICAg
ICBidWlsZGVyLmFwcGVuZExpdGVyYWwoIlxyXG4iKTsKLSAgICB9Ci0gICAgYnVpbGRlci5hcHBl
bmRMaXRlcmFsKCJcclxuIik7Ci0KLSAgICBDU3RyaW5nIGhlYWRlciA9IGJ1aWxkZXIudG9TdHJp
bmcoKS5sYXRpbjEoKTsKLSAgICBtX3NvY2tldC0+c2VuZERhdGEoaGVhZGVyLmRhdGEoKSwgaGVh
ZGVyLmxlbmd0aCgpLCBbXShib29sKSB7IH0pOwotfQotCi12b2lkIFdlYlNvY2tldFNlcnZlckNv
bm5lY3Rpb246OnNlbmRSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpCi17
Ci0gICAgbV9zb2NrZXQtPnNlbmREYXRhKGRhdGEsIGxlbmd0aCwgW10oYm9vbCkgeyB9KTsKLX0K
LQotdm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpkaWRDbG9zZVNvY2tldFN0cmVhbShT
b2NrZXRTdHJlYW1IYW5kbGUmKQotewotICAgIC8vIERlc3Ryb3kgdGhlIFNvY2tldFN0cmVhbUhh
bmRsZSBub3cgdG8gcHJldmVudCBjbG9zaW5nIGFuIGFscmVhZHkgY2xvc2VkIHNvY2tldCBsYXRl
ci4KLSAgICBtX3NvY2tldCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZWIgU29ja2V0IE1vZGUuCi0g
ICAgaWYgKG1fbW9kZSA9PSBXZWJTb2NrZXQpCi0gICAgICAgIG1fY2xpZW50LT5kaWRDbG9zZVdl
YlNvY2tldENvbm5lY3Rpb24odGhpcyk7Ci0KLSAgICAvLyBUZWxsIHRoZSBzZXJ2ZXIgdG8gZ2V0
IHJpZCBvZiB0aGlzLgotICAgIG1fc2VydmVyLT5kaWRDbG9zZVdlYlNvY2tldFNlcnZlckNvbm5l
Y3Rpb24odGhpcyk7Ci19Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6ZGlkUmVj
ZWl2ZVNvY2tldFN0cmVhbURhdGEoU29ja2V0U3RyZWFtSGFuZGxlJiwgY29uc3QgY2hhciogZGF0
YSwgc2l6ZV90IGxlbmd0aCkKLXsKLSAgICAvLyBFYWNoIGRpZFJlY2VpdmVEYXRhIGNhbGwgYWRk
cyBtb3JlIGRhdGEgdG8gb3VyIGJ1ZmZlci4KLSAgICAvLyBXZSBjbGVhciB0aGUgYnVmZmVyIHdo
ZW4gd2UgaGF2ZSBoYW5kbGVkIGRhdGEgZnJvbSBpdC4KLSAgICBtX2J1ZmZlcmVkRGF0YS5hcHBl
bmQoZGF0YSwgbGVuZ3RoKTsKLQotICAgIHN3aXRjaCAobV9tb2RlKSB7Ci0gICAgY2FzZSBIVFRQ
OgotICAgICAgICByZWFkSFRUUE1lc3NhZ2UoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBX
ZWJTb2NrZXQ6Ci0gICAgICAgIHJlYWRXZWJTb2NrZXRGcmFtZXMoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgLy8gRm9yIGFueSBuZXcgbW9kZXMgYWRkZWQgaW4gdGhl
IGZ1dHVyZS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lk
IFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb246OmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KFNvY2tl
dFN0cmVhbUhhbmRsZSYsIHNpemVfdCkKLXsKLSAgICBpZiAobV9zaHV0ZG93bkFmdGVyU2VuZCAm
JiAhbV9zb2NrZXQtPmJ1ZmZlcmVkQW1vdW50KCkpCi0gICAgICAgIHNodXRkb3duTm93KCk7Ci19
Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6cmVhZEhUVFBNZXNzYWdlKCkKLXsK
LSAgICBTdHJpbmcgZmFpbHVyZVJlYXNvbjsKLSAgICBSZWZQdHI8SFRUUFJlcXVlc3Q+IHJlcXVl
c3QgPSBIVFRQUmVxdWVzdDo6cGFyc2VIVFRQUmVxdWVzdEZyb21CdWZmZXIobV9idWZmZXJlZERh
dGEuZGF0YSgpLCBtX2J1ZmZlcmVkRGF0YS5zaXplKCksIGZhaWx1cmVSZWFzb24pOwotICAgIGlm
ICghcmVxdWVzdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gQXNzdW1lIGFsbCB0aGUgaW5w
dXQgaGFzIGJlZW4gcmVhZCBpZiB3ZSBhcmUgcmVhZGluZyBhbiBIVFRQIFJlcXVlc3QuCi0gICAg
bV9idWZmZXJlZERhdGEuY2xlYXIoKTsKLQotICAgIC8vIElmIHRoaXMgaXMgYSBXZWJTb2NrZXQg
cmVxdWVzdCwgcGVyZm9ybSB0aGUgV2ViU29ja2V0IEhhbmRzaGFrZS4KLSAgICBjb25zdCBIVFRQ
SGVhZGVyTWFwJiBoZWFkZXJzID0gcmVxdWVzdC0+aGVhZGVyRmllbGRzKCk7Ci0gICAgU3RyaW5n
IHVwZ3JhZGVIZWFkZXJWYWx1ZSA9IGhlYWRlcnMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpVcGdyYWRl
KTsKLSAgICBpZiAodXBncmFkZUhlYWRlclZhbHVlID09ICJ3ZWJzb2NrZXQiKSB7Ci0gICAgICAg
IHVwZ3JhZGVUb1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24ocmVxdWVzdC5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodXBncmFkZUhlYWRlclZhbHVl
ID09ICJXZWJTb2NrZXQiKSB7Ci0gICAgICAgIExPR19FUlJPUigiV2ViU29ja2V0IHByb3RvY29s
IHZlcnNpb24gPCBIeWJpLTEwIG5vdCBzdXBwb3J0ZWQuIFVwZ3JhZGUgeW91ciBjbGllbnQuIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHRoaXMgaXMgYW4g
SFRUUCBSZXF1ZXN0IHdlIGRvbid0IGtub3cgaG93IHRvIGRlYWwgd2l0aC4KLSAgICBtX2NsaWVu
dC0+ZGlkUmVjZWl2ZVVucmVjb2duaXplZEhUVFBSZXF1ZXN0KHRoaXMsIHJlcXVlc3QucmVsZWFz
ZU5vbk51bGwoKSk7Ci19Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbjo6dXBncmFk
ZVRvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbihSZWY8SFRUUFJlcXVlc3Q+JiYgcmVxdWVzdCkK
LXsKLSAgICBBU1NFUlQobV9tb2RlID09IEhUVFApOwotICAgIG1fbW9kZSA9IFdlYlNvY2tldDsK
LSAgICAvLyBBc2sgdGhlIGNsaWVudCBpZiB3ZSBzaG91bGQgdXBncmFkZSBmb3IgdGhpcyBvciBu
b3QuCi0gICAgaWYgKCFtX2NsaWVudC0+ZGlkUmVjZWl2ZVdlYlNvY2tldFVwZ3JhZGVIVFRQUmVx
dWVzdCh0aGlzLCByZXF1ZXN0LmNvcHlSZWYoKSkpIHsKLSAgICAgICAgc2h1dGRvd25Ob3coKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEJ1aWxkIGFuZCBzZW5kIHRoZSBXZWJT
b2NrZXQgaGFuZHNoYWtlIHJlc3BvbnNlLgotICAgIGNvbnN0IEhUVFBIZWFkZXJNYXAmIHJlcXVl
c3RIZWFkZXJzID0gcmVxdWVzdC0+aGVhZGVyRmllbGRzKCk7Ci0gICAgU3RyaW5nIGFjY2VwdCA9
IFdlYlNvY2tldEhhbmRzaGFrZTo6Z2V0RXhwZWN0ZWRXZWJTb2NrZXRBY2NlcHQocmVxdWVzdEhl
YWRlcnMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpTZWNXZWJTb2NrZXRLZXkpKTsKLSAgICBIVFRQSGVh
ZGVyTWFwIHJlc3BvbnNlSGVhZGVyczsKLSAgICByZXNwb25zZUhlYWRlcnMuYWRkKCJVcGdyYWRl
IiwgcmVxdWVzdEhlYWRlcnMuZ2V0KEhUVFBIZWFkZXJOYW1lOjpVcGdyYWRlKSk7Ci0gICAgcmVz
cG9uc2VIZWFkZXJzLmFkZCgiQ29ubmVjdGlvbiIsIHJlcXVlc3RIZWFkZXJzLmdldChIVFRQSGVh
ZGVyTmFtZTo6Q29ubmVjdGlvbikpOwotICAgIHJlc3BvbnNlSGVhZGVycy5hZGQoIlNlYy1XZWJT
b2NrZXQtQWNjZXB0IiwgYWNjZXB0KTsKLQotICAgIHNlbmRIVFRQUmVzcG9uc2VIZWFkZXIoMTAx
LCAiV2ViU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZSIsIHJlc3BvbnNlSGVhZGVycyk7Ci0KLSAg
ICBtX2NsaWVudC0+ZGlkRXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbih0aGlzLCBXVEZNb3Zl
KHJlcXVlc3QpKTsKLX0KLQotdm9pZCBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uOjpyZWFkV2Vi
U29ja2V0RnJhbWVzKCkKLXsKLSAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBib29sIGRpZFJl
YWRPbmVGcmFtZSA9IHJlYWRXZWJTb2NrZXRGcmFtZSgpOwotICAgICAgICBpZiAoIWRpZFJlYWRP
bmVGcmFtZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAobV9idWZmZXJlZERhdGEu
aXNFbXB0eSgpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi1ib29sIFdlYlNvY2tl
dFNlcnZlckNvbm5lY3Rpb246OnJlYWRXZWJTb2NrZXRGcmFtZSgpCi17Ci0gICAgV2ViU29ja2V0
RnJhbWUgZnJhbWU7Ci0gICAgY29uc3QgY2hhciogZnJhbWVFbmQ7Ci0gICAgU3RyaW5nIGVycm9y
U3RyaW5nOwotICAgIFdlYlNvY2tldEZyYW1lOjpQYXJzZUZyYW1lUmVzdWx0IHJlc3VsdCA9IFdl
YlNvY2tldEZyYW1lOjpwYXJzZUZyYW1lKG1fYnVmZmVyZWREYXRhLmRhdGEoKSwgbV9idWZmZXJl
ZERhdGEuc2l6ZSgpLCBmcmFtZSwgZnJhbWVFbmQsIGVycm9yU3RyaW5nKTsKLQotICAgIC8vIElu
Y29tcGxldGUgZnJhbWUuIFdhaXQgdG8gcmVjZWl2ZSBtb3JlIGRhdGEuCi0gICAgaWYgKHJlc3Vs
dCA9PSBXZWJTb2NrZXRGcmFtZTo6RnJhbWVJbmNvbXBsZXRlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAocmVzdWx0ID09IFdlYlNvY2tldEZyYW1lOjpGcmFtZUVycm9yKSB7Ci0g
ICAgICAgIHNodXRkb3duTm93KCk7Ci0gICAgfSBlbHNlIGlmIChmcmFtZS5vcENvZGUgPT0gV2Vi
U29ja2V0RnJhbWU6Ok9wQ29kZVRleHQpIHsKLSAgICAgICAgLy8gRGVsZWdhdGUgVGV4dCBmcmFt
ZXMgdG8gb3VyIGNsaWVudC4KLSAgICAgICAgU3RyaW5nIG1zZyA9IFN0cmluZzo6ZnJvbVVURjgo
ZnJhbWUucGF5bG9hZCwgZnJhbWUucGF5bG9hZExlbmd0aCk7Ci0gICAgICAgIG1fY2xpZW50LT5k
aWRSZWNlaXZlV2ViU29ja2V0TWVzc2FnZSh0aGlzLCBtc2cpOwotICAgIH0gZWxzZQotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBmcmFtZSBmcm9tIG91ciBi
dWZmZXIuCi0gICAgbV9idWZmZXJlZERhdGEucmVtb3ZlKDAsIGZyYW1lRW5kIC0gbV9idWZmZXJl
ZERhdGEuZGF0YSgpKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBF
TkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNlcnZlci9XZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlY2Y3NTFhYzVmLi4wMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL1dlYlNv
Y2tldFNlcnZlckNvbm5lY3Rpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lk
aWFyeSgtaWVzKQotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
cHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotCi0jaW5jbHVkZSA8
V2ViQ29yZS9Tb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQuaD4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNs
dWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
SFRUUEhlYWRlck1hcDsKLWNsYXNzIFNvY2tldFN0cmVhbUVycm9yOwotY2xhc3MgU29ja2V0U3Ry
ZWFtSGFuZGxlOwotfQotCi1uYW1lc3BhY2UgV2ViS2l0IHsKLQotY2xhc3MgSFRUUFJlcXVlc3Q7
Ci1jbGFzcyBXZWJTb2NrZXRTZXJ2ZXI7Ci1jbGFzcyBXZWJTb2NrZXRTZXJ2ZXJDbGllbnQ7Ci0K
LWNsYXNzIFdlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24gZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
U29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50IHsKLXB1YmxpYzoKLSAgICBlbnVtIFdlYlNvY2tldFNl
cnZlck1vZGUgeyBIVFRQLCBXZWJTb2NrZXQgfTsKLSAgICBXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0
aW9uKFdlYlNvY2tldFNlcnZlckNsaWVudCosIFdlYlNvY2tldFNlcnZlciopOwotICAgIHZpcnR1
YWwgfldlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oKTsKLQotICAgIHVuc2lnbmVkIGlkZW50aWZp
ZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KLSAgICB2b2lkIHNldElkZW50aWZp
ZXIodW5zaWduZWQgaWQpIHsgbV9pZGVudGlmaWVyID0gaWQ7IH0KLSAgICB2b2lkIHNldFNvY2tl
dEhhbmRsZShSZWY8V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlPiYmKTsKLQotICAgIC8vIFNl
bmRpbmcgZGF0YSBvdmVyIHRoZSBjb25uZWN0aW9uLgotICAgIHZvaWQgc2VuZFdlYlNvY2tldE1l
c3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKLSAgICB2b2lkIHNlbmRIVFRQUmVzcG9uc2VI
ZWFkZXIoaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0cmluZyYgc3RhdHVzVGV4dCwgY29uc3QgV2Vi
Q29yZTo6SFRUUEhlYWRlck1hcCYgaGVhZGVyRmllbGRzKTsKLSAgICB2b2lkIHNlbmRSYXdEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW5ndGgpOwotCi0gICAgLy8gVGVybWluYXRpbmcg
dGhlIGNvbm5lY3Rpb24uCi0gICAgdm9pZCBzaHV0ZG93bk5vdygpOwotICAgIHZvaWQgc2h1dGRv
d25BZnRlclNlbmRPck5vdygpOwotCi1wcml2YXRlOgotICAgIC8vIFNvY2tldFN0cmVhbUhhbmRs
ZUNsaWVudCBpbXBsZW1lbnRhdGlvbi4KLSAgICB2b2lkIGRpZE9wZW5Tb2NrZXRTdHJlYW0oV2Vi
Q29yZTo6U29ja2V0U3RyZWFtSGFuZGxlJikgZmluYWwgeyB9Ci0gICAgdm9pZCBkaWRDbG9zZVNv
Y2tldFN0cmVhbShXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGUmKSBmaW5hbDsKLSAgICB2b2lk
IGRpZFJlY2VpdmVTb2NrZXRTdHJlYW1EYXRhKFdlYkNvcmU6OlNvY2tldFN0cmVhbUhhbmRsZSYs
IGNvbnN0IGNoYXIqLCBzaXplX3QpIGZpbmFsOwotICAgIHZvaWQgZGlkRmFpbFRvUmVjZWl2ZVNv
Y2tldFN0cmVhbURhdGEoV2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlJikgZmluYWwgeyB9Ci0g
ICAgdm9pZCBkaWRVcGRhdGVCdWZmZXJlZEFtb3VudChXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5k
bGUmLCBzaXplX3QgYnVmZmVyZWRBbW91bnQpIGZpbmFsOwotICAgIHZvaWQgZGlkRmFpbFNvY2tl
dFN0cmVhbShXZWJDb3JlOjpTb2NrZXRTdHJlYW1IYW5kbGUmLCBjb25zdCBXZWJDb3JlOjpTb2Nr
ZXRTdHJlYW1FcnJvciYpIGZpbmFsIHsgfQotCi0gICAgLy8gSFRUUCBNb2RlLgotICAgIHZvaWQg
cmVhZEhUVFBNZXNzYWdlKCk7Ci0KLSAgICAvLyBXZWJTb2NrZXQgTW9kZS4KLSAgICB2b2lkIHVw
Z3JhZGVUb1dlYlNvY2tldFNlcnZlckNvbm5lY3Rpb24oUmVmPEhUVFBSZXF1ZXN0PiYmKTsKLSAg
ICB2b2lkIHJlYWRXZWJTb2NrZXRGcmFtZXMoKTsKLSAgICBib29sIHJlYWRXZWJTb2NrZXRGcmFt
ZSgpOwotCi0gICAgdW5zaWduZWQgbV9pZGVudGlmaWVyIHsgMCB9OwotICAgIFZlY3RvcjxjaGFy
PiBtX2J1ZmZlcmVkRGF0YTsKLSAgICBXZWJTb2NrZXRTZXJ2ZXJNb2RlIG1fbW9kZSB7IEhUVFAg
fTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6U29ja2V0U3RyZWFtSGFuZGxlPiBtX3NvY2tldDsKLSAg
ICBXZWJTb2NrZXRTZXJ2ZXIqIG1fc2VydmVyIHsgbnVsbHB0ciB9OwotICAgIFdlYlNvY2tldFNl
cnZlckNsaWVudCogbV9jbGllbnQgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX3NodXRkb3duQWZ0
ZXJTZW5kIHsgZmFsc2UgfTsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1Jf
U0VSVkVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0luc3BlY3RvclNl
cnZlci9mcm9udC1lbmQvaW5zcGVjdG9yUGFnZUluZGV4Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL2Zyb250LWVuZC9pbnNwZWN0b3JQYWdlSW5kZXguaHRt
bApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUyOGQxNzdmMmQuLjAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9JbnNwZWN0b3JTZXJ2ZXIvZnJvbnQtZW5k
L2luc3BlY3RvclBhZ2VJbmRleC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAot
PCFET0NUWVBFIGh0bWw+Ci08aHRtbD48aGVhZD4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2Ny
aXB0Ij4KLWZ1bmN0aW9uIGNyZWF0ZVBhZ2VMaXN0KCkgewotICAgIHZhciB4aHIgPSBuZXcgWE1M
SHR0cFJlcXVlc3Q7Ci0gICAgeGhyLm9wZW4oIkdFVCIsICIvcGFnZWxpc3QuanNvbiIpOwotICAg
IHhoci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7Ci0gICAgICAgIGlmICh4aHIuc3RhdHVzID09IDIw
MCkgewotICAgICAgICAgICAgdmFyIHBhZ2VzID0gSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0
KTsKLSAgICAgICAgICAgIGlmIChwYWdlcy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm5vUGFnZU5vdGljZSIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7
Ci0KLSAgICAgICAgICAgIHZhciBwYWdlTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9s
Iik7Ci0gICAgICAgICAgICBmb3IgKHZhciBpIGluIHBhZ2VzKSB7Ci0gICAgICAgICAgICAgICAg
dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0gICAgICAgICAgICAgICAg
dmFyIHRpdGxlID0gcGFnZXNbaV0udGl0bGUgPyBwYWdlc1tpXS50aXRsZSA6ICgiUGFnZSAiICsg
KE51bWJlcihwYWdlc1tpXS5pZCkpKTsKLSAgICAgICAgICAgICAgICB2YXIgdXJsID0gcGFnZXNb
aV0udXJsOwotICAgICAgICAgICAgICAgIGxpbmsuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGl0bGUgKyAodXJsID8gKCIgWyIgKyB1cmwgKyAiXSIpIDogIiIgKSkpOwotICAg
ICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCJocmVmIiwgcGFnZXNbaV0uaW5zcGVjdG9y
VXJsKTsKLSAgICAgICAgICAgICAgICB2YXIgcGFnZUxpc3RJdGVtID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgibGkiKTsKLSAgICAgICAgICAgICAgICBwYWdlTGlzdEl0ZW0uYXBwZW5kQ2hpbGQo
bGluayk7Ci0gICAgICAgICAgICAgICAgcGFnZUxpc3QuYXBwZW5kQ2hpbGQocGFnZUxpc3RJdGVt
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
cGFnZUxpc3QpOwotICAgICAgICB9Ci0gICAgfTsKLSAgICB4aHIuc2VuZCgpOwotfQotCi1kb2N1
bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgY3JlYXRlUGFnZUxpc3Qs
IGZhbHNlKTsKLTwvc2NyaXB0PgotPC9oZWFkPjxib2R5PgotPGgxPkluc3BlY3RhYmxlIHdlYiB2
aWV3czwvaDE+Ci08cCBpZD0ibm9QYWdlTm90aWNlIiBzdHlsZT0iY29sb3I6Z3JleSI+Tm9uZSBm
b3VuZCwgbWFrZSBzdXJlIHRoYXQgeW91IGhhdmUgc2V0IHRoZSBkZXZlbG9wZXJFeHRyYXNFbmFi
bGVkIHByZWZlcmVuY2UgcHJvcGVydHkgb24geW91ciBXZWJWaWV3LjwvcD4KLTwvYm9keT48L2h0
bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVy
L3NvdXAvV2ViU29ja2V0U2VydmVyU291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
SW5zcGVjdG9yU2VydmVyL3NvdXAvV2ViU29ja2V0U2VydmVyU291cC5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGJmM2UwMTllNmQ1Li4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvSW5zcGVjdG9yU2VydmVyL3NvdXAvV2ViU29ja2V0U2VydmVyU291
cC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEyIFNhbXN1bmcgRWxlY3Ryb25pY3MgTHRkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCi0gKiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0g
KiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaWYgRU5BQkxFKElOU1BFQ1RPUl9T
RVJWRVIpCi0jaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyLmgiCi0KLSNpbmNsdWRlICJMb2dnaW5n
LmgiCi0jaW5jbHVkZSAiV2ViU29ja2V0U2VydmVyQ29ubmVjdGlvbi5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvU29ja2V0U3RyZWFtSGFuZGxlSW1wbC5oPgotI2luY2x1ZGUgPGdpby9naW8uaD4KLSNp
bmNsdWRlIDxnbGliLmg+Ci0jaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Ci0KLW5h
bWVzcGFjZSBXZWJLaXQgewotCi1zdGF0aWMgZ2Jvb2xlYW4gY29ubmVjdGlvbkNhbGxiYWNrKEdT
b2NrZXRTZXJ2aWNlKiAvKnNlcnZpY2UqLywgR1NvY2tldENvbm5lY3Rpb24qIGNvbm5lY3Rpb24s
IEdPYmplY3QqIC8qc291cmNlT2JqZWN0Ki8sIFdlYlNvY2tldFNlcnZlciogc2VydmVyKQotewot
I2lmICFMT0dfRElTQUJMRUQKLSAgICBHUmVmUHRyPEdTb2NrZXRBZGRyZXNzPiBzb2NrZXRBZGRy
ZXNzID0gYWRvcHRHUmVmKGdfc29ja2V0X2Nvbm5lY3Rpb25fZ2V0X3JlbW90ZV9hZGRyZXNzKGNv
bm5lY3Rpb24sIDApKTsKLSAgICBHVW5pcXVlUHRyPGdjaGFyPiBhZGRyZXNzU3RyaW5nKGdfaW5l
dF9hZGRyZXNzX3RvX3N0cmluZyhnX2luZXRfc29ja2V0X2FkZHJlc3NfZ2V0X2FkZHJlc3MoR19J
TkVUX1NPQ0tFVF9BRERSRVNTKHNvY2tldEFkZHJlc3MuZ2V0KCkpKSkpOwotICAgIExPRyhJbnNw
ZWN0b3JTZXJ2ZXIsICJOZXcgQ29ubmVjdGlvbiBmcm9tICVzOiVkLiIsIGFkZHJlc3NTdHJpbmcu
Z2V0KCksIGdfaW5ldF9zb2NrZXRfYWRkcmVzc19nZXRfcG9ydChHX0lORVRfU09DS0VUX0FERFJF
U1Moc29ja2V0QWRkcmVzcy5nZXQoKSkpKTsKLSNlbmRpZgotCi0gICAgYXV0byB3ZWJTb2NrZXRD
b25uZWN0aW9uID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJTb2NrZXRTZXJ2ZXJDb25uZWN0aW9uPihz
ZXJ2ZXItPmNsaWVudCgpLCBzZXJ2ZXIpOwotICAgIHdlYlNvY2tldENvbm5lY3Rpb24tPnNldFNv
Y2tldEhhbmRsZShTb2NrZXRTdHJlYW1IYW5kbGVJbXBsOjpjcmVhdGUoY29ubmVjdGlvbiwgKndl
YlNvY2tldENvbm5lY3Rpb24pKTsKLSAgICBzZXJ2ZXItPmRpZEFjY2VwdENvbm5lY3Rpb24oV1RG
TW92ZSh3ZWJTb2NrZXRDb25uZWN0aW9uKSk7Ci0KLSAgICByZXR1cm4gVFJVRTsKLX0KLQotdm9p
ZCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3JtSW5pdGlhbGl6ZSgpCi17Ci0gICAgbV9zb2NrZXRT
ZXJ2aWNlID0gYWRvcHRHUmVmKGdfc29ja2V0X3NlcnZpY2VfbmV3KCkpOwotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9zb2NrZXRTZXJ2aWNlLmdldCgpLCAiaW5jb21pbmciLCBHX0NBTExCQUNLKGNv
bm5lY3Rpb25DYWxsYmFjayksIHRoaXMpOwotICAgIGdfc29ja2V0X3NlcnZpY2Vfc3RhcnQobV9z
b2NrZXRTZXJ2aWNlLmdldCgpKTsKLX0KLQotYm9vbCBXZWJTb2NrZXRTZXJ2ZXI6OnBsYXRmb3Jt
TGlzdGVuKGNvbnN0IFN0cmluZyYgYmluZEFkZHJlc3MsIHVuc2lnbmVkIHNob3J0IHBvcnQpCi17
Ci0gICAgTE9HKEluc3BlY3RvclNlcnZlciwgIkxpc3RlbiB0byBhZGRyZXNzPSVzLCBwb3J0PSVk
LiIsIGJpbmRBZGRyZXNzLnV0ZjgoKS5kYXRhKCksIHBvcnQpOwotICAgIEdSZWZQdHI8R0luZXRB
ZGRyZXNzPiBhZGRyZXNzID0gYWRvcHRHUmVmKGdfaW5ldF9hZGRyZXNzX25ld19mcm9tX3N0cmlu
ZyhiaW5kQWRkcmVzcy51dGY4KCkuZGF0YSgpKSk7Ci0gICAgR1JlZlB0cjxHU29ja2V0QWRkcmVz
cz4gc29ja2V0QWRkcmVzcyA9IGFkb3B0R1JlZihnX2luZXRfc29ja2V0X2FkZHJlc3NfbmV3KGFk
ZHJlc3MuZ2V0KCksIHBvcnQpKTsKLSAgICByZXR1cm4gZ19zb2NrZXRfbGlzdGVuZXJfYWRkX2Fk
ZHJlc3MoR19TT0NLRVRfTElTVEVORVIobV9zb2NrZXRTZXJ2aWNlLmdldCgpKSwgc29ja2V0QWRk
cmVzcy5nZXQoKSwgR19TT0NLRVRfVFlQRV9TVFJFQU0sIEdfU09DS0VUX1BST1RPQ09MX1RDUCwg
MCwgMCwgMCk7Ci19Ci0KLXZvaWQgV2ViU29ja2V0U2VydmVyOjpwbGF0Zm9ybUNsb3NlKCkKLXsK
LSAgICBnX3NvY2tldF9zZXJ2aWNlX3N0b3AobV9zb2NrZXRTZXJ2aWNlLmdldCgpKTsKLX0KLQot
fQotCi0jZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmNwcAppbmRleCAxNTVkODRlYzJhZS4uNmY0
ZDA4NmViNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0
b3JQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclBy
b3h5LmNwcApAQCAtNDcsMTAgKzQ3LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAKLSNpZiBFTkFCTEUoSU5T
UEVDVE9SX1NFUlZFUikKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JTZXJ2ZXIuaCIKLSNlbmRpZgot
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBAIC04Nywx
MSArODMsNiBAQCBXZWJQcmVmZXJlbmNlcyYgV2ViSW5zcGVjdG9yUHJveHk6Omluc3BlY3RvclBh
Z2VQcmVmZXJlbmNlcygpIGNvbnN0CiAKIHZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmludmFsaWRh
dGUoKQogewotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotICAgIGlmIChtX3JlbW90ZUlu
c3BlY3Rpb25QYWdlSWQpCi0gICAgICAgIFdlYkluc3BlY3RvclNlcnZlcjo6c2luZ2xldG9uKCku
dW5yZWdpc3RlclBhZ2UobV9yZW1vdGVJbnNwZWN0aW9uUGFnZUlkKTsKLSNlbmRpZgotCiAgICAg
bV9pbnNwZWN0ZWRQYWdlLT5wcm9jZXNzKCkucmVtb3ZlTWVzc2FnZVJlY2VpdmVyKE1lc3NhZ2Vz
OjpXZWJJbnNwZWN0b3JQcm94eTo6bWVzc2FnZVJlY2VpdmVyTmFtZSgpLCBtX2luc3BlY3RlZFBh
Z2UtPnBhZ2VJRCgpKTsKIAogICAgIGRpZENsb3NlKCk7CkBAIC0zOTEsMjkgKzM4Miw2IEBAIHN0
YXRpYyB2b2lkIGdldENvbnRleHRNZW51RnJvbVByb3Bvc2VkTWVudShXS1BhZ2VSZWYgcGFnZVJl
ZiwgV0tBcnJheVJlZiBwcm9wb3NlCiAgICAgKm5ld01lbnVSZWYgPSBtZW51SXRlbXM7CiB9CiAK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLXZvaWQgV2ViSW5zcGVjdG9yUHJveHk6OmVu
YWJsZVJlbW90ZUluc3BlY3Rpb24oKQotewotICAgIGlmICghbV9yZW1vdGVJbnNwZWN0aW9uUGFn
ZUlkKQotICAgICAgICBtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQgPSBXZWJJbnNwZWN0b3JTZXJ2
ZXI6OnNpbmdsZXRvbigpLnJlZ2lzdGVyUGFnZSh0aGlzKTsKLX0KLQotdm9pZCBXZWJJbnNwZWN0
b3JQcm94eTo6cmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQoKQotewotICAgIG1faW5zcGVjdGVkUGFn
ZS0+cHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6UmVtb3RlRnJvbnRlbmRD
b25uZWN0ZWQoKSwgbV9pbnNwZWN0ZWRQYWdlLT5wYWdlSUQoKSk7Ci19Ci0KLXZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OnJlbW90ZUZyb250ZW5kRGlzY29ubmVjdGVkKCkKLXsKLSAgICBtX2luc3Bl
Y3RlZFBhZ2UtPnByb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpXZWJJbnNwZWN0b3I6OlJlbW90ZUZy
b250ZW5kRGlzY29ubmVjdGVkKCksIG1faW5zcGVjdGVkUGFnZS0+cGFnZUlEKCkpOwotfQotCi12
b2lkIFdlYkluc3BlY3RvclByb3h5OjpkaXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlRnJvbnRlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIG1faW5zcGVjdGVkUGFnZS0+cHJvY2Vzcygp
LnNlbmQoTWVzc2FnZXM6OldlYkluc3BlY3Rvcjo6U2VuZE1lc3NhZ2VUb0JhY2tlbmQobWVzc2Fn
ZSksIG1faW5zcGVjdGVkUGFnZS0+cGFnZUlEKCkpOwotfQotI2VuZGlmCi0KIHZvaWQgV2ViSW5z
cGVjdG9yUHJveHk6OmVhZ2VybHlDcmVhdGVJbnNwZWN0b3JQYWdlKCkKIHsKICAgICBpZiAobV9p
bnNwZWN0b3JQYWdlKQpAQCAtNjM0LDE0ICs2MDIsNiBAQCBib29sIFdlYkluc3BlY3RvclByb3h5
OjpzaG91bGRPcGVuQXR0YWNoZWQoKQogICAgIHJldHVybiBpbnNwZWN0b3JQYWdlUHJlZmVyZW5j
ZXMoKS5pbnNwZWN0b3JTdGFydHNBdHRhY2hlZCgpICYmIGNhbkF0dGFjaCgpOwogfQogCi0jaWYg
RU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCi12b2lkIFdlYkluc3BlY3RvclByb3h5OjpzZW5kTWVz
c2FnZVRvUmVtb3RlRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIEFTU0VS
VChtX3JlbW90ZUluc3BlY3Rpb25QYWdlSWQpOwotICAgIFdlYkluc3BlY3RvclNlcnZlcjo6c2lu
Z2xldG9uKCkuc2VuZE1lc3NhZ2VPdmVyQ29ubmVjdGlvbihtX3JlbW90ZUluc3BlY3Rpb25QYWdl
SWQsIG1lc3NhZ2UpOwotfQotI2VuZGlmCi0KIC8vIFVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb25z
IGNhbiB1c2UgdGhlIHN0dWJzIHByb3ZpZGVkIGhlcmUuCiAKICNpZiBQTEFURk9STShJT1MpIHx8
IChQTEFURk9STShNQUMpICYmICFXS19BUElfRU5BQkxFRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9XZWJJbnNwZWN0b3JQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYkluc3BlY3RvclByb3h5LmgKaW5kZXggODQ3ZmI1YzMyMjYuLjg3NjI3NTE3ZWNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkuaApAQCAt
MTQ4LDE0ICsxNDgsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cmluZyBpbnNwZWN0b3JCYXNl
VVJMKCk7CiAgICAgc3RhdGljIGJvb2wgaXNNYWluT3JUZXN0SW5zcGVjdG9yUGFnZShjb25zdCBX
ZWJDb3JlOjpVUkwmKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotICAgIHZvaWQg
ZW5hYmxlUmVtb3RlSW5zcGVjdGlvbigpOwotICAgIHZvaWQgcmVtb3RlRnJvbnRlbmRDb25uZWN0
ZWQoKTsKLSAgICB2b2lkIHJlbW90ZUZyb250ZW5kRGlzY29ubmVjdGVkKCk7Ci0gICAgdm9pZCBk
aXNwYXRjaE1lc3NhZ2VGcm9tUmVtb3RlRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
LSAgICBpbnQgcmVtb3RlSW5zcGVjdGlvblBhZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVtb3Rl
SW5zcGVjdGlvblBhZ2VJZDsgfQotI2VuZGlmCi0KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bWluaW11bVdpbmRvd1dpZHRoOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtaW5pbXVtV2lu
ZG93SGVpZ2h0OwogCkBAIC0yMDksMTAgKzIwMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzYXZl
KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudCwgYm9vbCBiYXNl
NjRFbmNvZGVkLCBib29sIGZvcmNlU2F2ZUFzKTsKICAgICB2b2lkIGFwcGVuZChjb25zdCBTdHJp
bmcmIGZpbGVuYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQpOwogCi0jaWYgRU5BQkxFKElOU1BF
Q1RPUl9TRVJWRVIpCi0gICAgdm9pZCBzZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKTsKLSNlbmRpZgotCiAgICAgYm9vbCBjYW5BdHRhY2goKSBjb25zdCB7
IHJldHVybiBtX2NhbkF0dGFjaDsgfQogICAgIGJvb2wgc2hvdWxkT3BlbkF0dGFjaGVkKCk7CiAK
QEAgLTI2MCw5ICsyNDgsNiBAQCBwcml2YXRlOgogICAgIEd0a1dpZGdldCogbV9oZWFkZXJCYXIg
eyBudWxscHRyIH07CiAgICAgU3RyaW5nIG1faW5zcGVjdGVkVVJMU3RyaW5nOwogI2VuZGlmCi0j
aWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIpCi0gICAgaW50IG1fcmVtb3RlSW5zcGVjdGlvblBh
Z2VJZCB7IDAgfTsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMu
aW4KaW5kZXggY2IxOTQ2ZGI3NDguLjNiMjhlOGZmMmI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViSW5zcGVjdG9yUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYkluc3BlY3RvclByb3h5Lm1lc3NhZ2VzLmluCkBAIC00NCw4
ICs0NCw0IEBAIG1lc3NhZ2VzIC0+IFdlYkluc3BlY3RvclByb3h5IHsKICAgICBTZXRBdHRhY2hl
ZFdpbmRvd1dpZHRoKHVuc2lnbmVkIHdpZHRoKQogCiAgICAgU3RhcnRXaW5kb3dEcmFnKCkKLQot
I2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotICAgIFNlbmRNZXNzYWdlVG9SZW1vdGVGcm9u
dGVuZChTdHJpbmcgbWVzc2FnZSkKLSNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmNwcAppbmRleCBjYjE3ZjYwZGMzYy4uZTIzN2NlZjUxZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03OTYsMTEgKzc5Niw2IEBA
IHZvaWQgV2ViUGFnZVByb3h5Ojppbml0aWFsaXplV2ViUGFnZSgpCiAgICAgfQogI2VuZGlmCiAK
LSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLSAgICBpZiAobV9wcmVmZXJlbmNlcy0+ZGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZCgpKQotICAgICAgICBpbnNwZWN0b3IoKS0+ZW5hYmxlUmVtb3Rl
SW5zcGVjdGlvbigpOwotI2VuZGlmCi0KICAgICBwcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6Q3JlYXRlV2ViUGFnZShtX3BhZ2VJRCwgY3JlYXRpb25QYXJhbWV0ZXJzKCkpLCAw
KTsKIAogICAgIG1fbmVlZHNUb0ZpbmlzaEluaXRpYWxpemluZ1dlYlBhZ2VBZnRlclByb2Nlc3NM
YXVuY2ggPSB0cnVlOwpAQCAtMzA3MiwxMSArMzA2Nyw2IEBAIHZvaWQgV2ViUGFnZVByb3h5Ojpw
cmVmZXJlbmNlc0RpZENoYW5nZSgpCiAgICAgaWYgKCFpc1ZhbGlkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotICAgIGlmIChtX3ByZWZlcmVuY2Vz
LT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCkpCi0gICAgICAgIGluc3BlY3RvcigpLT5lbmFibGVS
ZW1vdGVJbnNwZWN0aW9uKCk7Ci0jZW5kaWYKLQogICAgIHVwZGF0ZVRocm90dGxlU3RhdGUoKTsK
ICAgICB1cGRhdGVIaWRkZW5QYWdlVGhyb3R0bGluZ0F1dG9JbmNyZWFzZXMoKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL3dwZS9XZWJQcm9jZXNzUG9vbFdQRS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mvd3BlL1dlYlByb2Nlc3NQb29sV1BFLmNwcAppbmRl
eCA0MDE1NTJiMmE3OC4uYjFiODI5MWI1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93cGUvV2ViUHJvY2Vzc1Bvb2xXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy93cGUvV2ViUHJvY2Vzc1Bvb2xXUEUuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKICNp
bmNsdWRlICJXZWJDb29raWVNYW5hZ2VyUHJveHkuaCIKLSNpbmNsdWRlICJXZWJJbnNwZWN0b3JT
ZXJ2ZXIuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5j
bHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GaWxlU3lzdGVt
Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViSW5z
cGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0
b3IuY3BwCmluZGV4IDVmNTk3MDZmZmQzLi41MGNhYWE0N2QyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5jcHAKQEAgLTI4NiwzMCAr
Mjg2LDcgQEAgdm9pZCBXZWJJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9CYWNrZW5kKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKIAogdm9pZCBXZWJJbnNwZWN0b3I6OnNlbmRNZXNzYWdlVG9Gcm9udGVu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0jaWYgRU5BQkxFKElOU1BFQ1RPUl9TRVJWRVIp
Ci0gICAgaWYgKG1fcmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQpCi0gICAgICAgIFdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6Oldl
Ykluc3BlY3RvclByb3h5OjpTZW5kTWVzc2FnZVRvUmVtb3RlRnJvbnRlbmQobWVzc2FnZSksIG1f
cGFnZS0+cGFnZUlEKCkpOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBtX2Zyb250ZW5kQ29u
bmVjdGlvbi0+c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9u
dGVuZChtZXNzYWdlKSwgMCk7Ci19Ci0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLXZv
aWQgV2ViSW5zcGVjdG9yOjpyZW1vdGVGcm9udGVuZENvbm5lY3RlZCgpCi17Ci0gICAgaWYgKG1f
cGFnZS0+Y29yZVBhZ2UoKSkgewotICAgICAgICBtX3JlbW90ZUZyb250ZW5kQ29ubmVjdGVkID0g
dHJ1ZTsKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNwZWN0b3JDb250cm9sbGVyKCku
Y29ubmVjdEZyb250ZW5kKHRoaXMpOwotICAgIH0KKyAgICBtX2Zyb250ZW5kQ29ubmVjdGlvbi0+
c2VuZChNZXNzYWdlczo6V2ViSW5zcGVjdG9yVUk6OlNlbmRNZXNzYWdlVG9Gcm9udGVuZChtZXNz
YWdlKSwgMCk7CiB9CiAKLXZvaWQgV2ViSW5zcGVjdG9yOjpyZW1vdGVGcm9udGVuZERpc2Nvbm5l
Y3RlZCgpCi17Ci0gICAgbV9yZW1vdGVGcm9udGVuZENvbm5lY3RlZCA9IGZhbHNlOwotCi0gICAg
aWYgKG1fcGFnZS0+Y29yZVBhZ2UoKSkKLSAgICAgICAgbV9wYWdlLT5jb3JlUGFnZSgpLT5pbnNw
ZWN0b3JDb250cm9sbGVyKCkuZGlzY29ubmVjdEZyb250ZW5kKHRoaXMpOwotfQotI2VuZGlmCi0K
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYkluc3BlY3Rvci5oCmluZGV4IGMxYTY3YTc3OWYxLi4wMDkwNzdhYzAyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkluc3BlY3Rvci5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJJbnNwZWN0b3IuaApA
QCAtODMsMTEgKzgzLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZW5kTWVzc2FnZVRvQmFja2Vu
ZChjb25zdCBTdHJpbmcmKTsKIAotI2lmIEVOQUJMRShJTlNQRUNUT1JfU0VSVkVSKQotICAgIHZv
aWQgcmVtb3RlRnJvbnRlbmRDb25uZWN0ZWQoKTsKLSAgICB2b2lkIHJlbW90ZUZyb250ZW5kRGlz
Y29ubmVjdGVkKCk7Ci0jZW5kaWYKLQogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkgeyBj
bG9zZSgpOyB9CiAKIHByaXZhdGU6CkBAIC0xMTAsOSArMTA1LDYgQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9hdHRhY2hlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX3ByZXZpb3VzQ2FuQXR0YWNo
IHsgZmFsc2UgfTsKLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NFUlZFUikKLSAgICBib29sIG1fcmVt
b3RlRnJvbnRlbmRDb25uZWN0ZWQgeyBmYWxzZSB9OwotI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJJbnNwZWN0b3IubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCmluZGV4IDQ1ZWNjZDgyMjMxLi4wN2U4ZjJk
NTMyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYklu
c3BlY3Rvci5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViSW5zcGVjdG9yLm1lc3NhZ2VzLmluCkBAIC00MSw5ICs0MSw0IEBAIG1lc3NhZ2VzIC0+
IFdlYkluc3BlY3RvciB7CiAgICAgU3RvcEVsZW1lbnRTZWxlY3Rpb24oKQogCiAgICAgU2VuZE1l
c3NhZ2VUb0JhY2tlbmQoU3RyaW5nIG1lc3NhZ2UpCi0KLSNpZiBFTkFCTEUoSU5TUEVDVE9SX1NF
UlZFUikKLSAgICBSZW1vdGVGcm9udGVuZENvbm5lY3RlZCgpCi0gICAgUmVtb3RlRnJvbnRlbmRE
aXNjb25uZWN0ZWQoKQotI2VuZGlmCiB9Cg==
</data>
<flag name="review"
          id="332997"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>