<?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>203165</bug_id>
          
          <creation_ts>2019-10-18 14:30:15 -0700</creation_ts>
          <short_desc>First page load after WKWebView init waits for Networking process creation</short_desc>
          <delta_ts>2019-10-31 14:42:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Nham">nham</reporter>
          <assigned_to name="Ben Nham">nham</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>nham</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1581521</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2019-10-18 14:30:15 -0700</bug_when>
    <thetext>The very first page loaded by PLT5 is usually delayed by ~100-150 ms (i.e. time from when we ask the browser to load the URL to the time the first bytes are put on the wire). The reason for this is that WebProcess makes a sync call back to UIProcess, which is in the middle of doing other work, like making more views and then committing a CATransaction. I think this could be more than a test artifact, e.g. opening a URL in a new window seems like it would trigger a similar flow.

PLT5 starts by creating a new browser window, which creates a WKWebView. Among other things, this causes us to take a WebProcess out of the pool and call SetWebsiteDataStore on it, which passes along some parameters like the session ID:

```
bool WebKit::AuxiliaryProcessProxy::send&lt;Messages::WebProcess::SetWebsiteDataStoreParameters&gt;
WebKit::WebProcessProxy::setWebsiteDataStore
WebKit::WebProcessPool::tryTakePrewarmedProcess
WebKit::WebProcessPool::processForRegistrableDomain
WebKit::WebPageProxy::launchProcess
WebKit::WebPageProxy::launchInitialProcessIfNecessary
...
+[BrowserWindowController openEmptyBrowserWindowController]
Safari::PageLoadTestWithChrome::createNewWindow
Safari::PageLoadTest::run
```

The WebProcess responds to this by turning right back around and issuing a sync IPC back to the UIProcess asking for a connection to the NetworkProcess:

```
bool IPC::Connection::sendSync&lt;Messages::WebProcessProxy::GetNetworkProcessConnection&gt;
WebKit::getNetworkProcessConnection
WebKit::WebProcess::ensureNetworkProcessConnection()
void IPC::handleMessage&lt;Messages::WebProcess::SetWebsiteDataStoreParameters, WebKit::WebProcess, void (WebKit::WebProcess::*)(WebKit::WebProcessDataStoreParameters&amp;&amp;)&gt;
IPC::Connection::dispatchMessage
IPC::Connection::dispatchOneIncomingMessage
WTF::RunLoop::performWork
...
WebKit::XPCServiceMain
```

Since the main thread of the UIProcess is busy doing other things (like sending even more messages to WebProcess, building up its view hierarchy, committing a CATransaction, etc.), this sync IPC ends up blocking for 85 ms in the trace that I&apos;m looking at. Importantly, it blocks the WebProcess from processing web page&apos;s LoadRequest method:

```
void IPC::handleMessage&lt;Messages::WebPage::LoadRequest, WebKit::WebPage, void (WebKit::WebPage::*)(WebKit::LoadParameters&amp;&amp;)&gt;(IPC::Decoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(WebKit::LoadParameters&amp;&amp;))
IPC::MessageReceiverMap::dispatchMessage
WebKit::WebProcess::didReceiveMessage
IPC::Connection::dispatchMessage
IPC::Connection::dispatchOneIncomingMessage
WTF::RunLoop::performWork
...
WebKit::XPCServiceMain(int, char const**)
```

WebProcess still seems to wait on UIProcess before it actually begins loading the main resource (since it waits for a policy decision from the UIProcess before doing so), but I think that removing the sync IPC will allow for better parallelization between UIProcess and WebProcess init during first-page-load scenarios and win us back some tens of ms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581533</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-18 14:35:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/56419771&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581570</commentid>
    <comment_count>2</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2019-10-18 15:41:23 -0700</bug_when>
    <thetext>The UIProcess responds to the WebProcessProxy::GetNetworkProcessConnection message by turning around and sending a sync NetworkProcess::CreateNetworkConnectionToWebProcess message to NetworkProcess. So basically the sync call to WebProcessProxy::GetNetworkProcessConnection in WebProcess ends up blocking on the main threads of both UIProcess and NetworkProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581740</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2019-10-19 15:36:21 -0700</bug_when>
    <thetext>This is about the webcontent process getting the ipc connection to the network process from the uiprocess. While this could be made async, this would require all call sites to ensureNetworkProcess() to deal this it be async. It is also unclear what the WebProcess would be able to do in the mean time. Pretty much the first thing it needs to do is schedule loads with the network process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1581895</commentid>
    <comment_count>4</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2019-10-21 11:07:57 -0700</bug_when>
    <thetext>I think the idea would be to keep the sync ensureNetworkProcessConnection() code in there because that would be a pretty large refactoring. Instead maybe the UIProcess could change the init path when it picks a WebProcess out of the reuse pool. Perhaps it could give the WebProcess send rights to an already-running NetworkProcess so that the sync IPC becomes unnecessary in the common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585948</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2019-10-31 09:56:53 -0700</bug_when>
    <thetext>(In reply to Ben Nham from comment #4)
&gt; I think the idea would be to keep the sync ensureNetworkProcessConnection()
&gt; code in there because that would be a pretty large refactoring. Instead
&gt; maybe the UIProcess could change the init path when it picks a WebProcess
&gt; out of the reuse pool. Perhaps it could give the WebProcess send rights to
&gt; an already-running NetworkProcess so that the sync IPC becomes unnecessary
&gt; in the common case.

NetworkProcess vending connections to itself is pretty engrained at this point.

An idea would be for the UIProcess to always keep a spare NetworkToWebProcess connection around so it can always hand it directly off to the WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586080</commentid>
    <comment_count>6</comment_count>
      <attachid>382503</attachid>
    <who name="Ben Nham">nham</who>
    <bug_when>2019-10-31 14:37:29 -0700</bug_when>
    <thetext>Created attachment 382503
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586081</commentid>
    <comment_count>7</comment_count>
    <who name="Ben Nham">nham</who>
    <bug_when>2019-10-31 14:42:22 -0700</bug_when>
    <thetext>In the attached patch, I went with one of Chris&apos;s ideas, which is to make setting the session ID on NetworkConnectionToWebProcess lazy. That way we can eagerly create that connection rather than waiting to create it in setWebsiteDataStoreParameters.

On the plus side, this does remove two sync IPCs from first page load for a WebProcess in the common case. On the minus side, as I suspected, this doesn&apos;t actually make anything faster. This is because while WebProcess no longer blocks on sync IPC, it still is logically blocked waiting for the UIProcess to respond to the navigation delegate callback, which is handled on the UIProcess main thread.

So for now the extra complexity in the patch is probably not worth it. I&apos;ve still uploaded the patch in case we decide we want to revive it later on.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382503</attachid>
            <date>2019-10-31 14:37:29 -0700</date>
            <delta_ts>2019-10-31 14:37:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203165-20191031143728.patch</filename>
            <type>text/plain</type>
            <size>15519</size>
            <attacher name="Ben Nham">nham</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ1NTg3MzY5ZDE2NjIwZGVm
ODgyN2QzYzU4ODJkYWIxYzYwMTU0NDEuLjk2YTg3ZjAwY2I0NzgzNmRiZGE0NGUwNDdkOWY0YzEz
NTI3Yzg3ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTktMTAtMzEgIEJlbmphbWlu
IE5oYW0gIDxuaGFtQGFwcGxlLmNvbT4KKworICAgICAgICBGaXJzdCBwYWdlIGxvYWQgYWZ0ZXIg
V0tXZWJWaWV3IGluaXQgd2FpdHMgZm9yIE5ldHdvcmtpbmcgcHJvY2VzcyBjcmVhdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAzMTY1CisgICAg
ICAgIDxyZGFyOi8vcHJvYmxlbS81NjQxOTc3MT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHNldHRpbmcgdGhlIHNlc3Np
b24gSUQgb24gTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MgbGF6eSwKKyAgICAgICAgc28g
dGhhdCB3ZSBjYW4gb3BlbiB0aGF0IGNvbm5lY3Rpb24gYXMgc29vbiBhcyBXZWJQcm9jZXNzIHN0
YXJ0cyByYXRoZXIgdGhhbgorICAgICAgICB3YWl0aW5nIHVudGlsIFVJUHJvY2VzcyBjYWxscyBX
ZWJQcm9jZXNzUHJveHk6OnNldFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzLgorICAgICAgICBU
aGlzIHJlbW92ZXMgdHdvIHN5bmMgSVBDcyAoV2ViUHJvY2VzcyA9PiBVSVByb2Nlc3MgPT4gTmV0
d29ya1Byb2Nlc3MpIG9uIHRoZQorICAgICAgICBmaXJzdCBwYWdlIGxvYWRlZCBieSBhIFdlYlBy
b2Nlc3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChX
ZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGUpOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzczo6c2V0U2Vzc2lvbklEKToKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKToKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdv
cmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpvcGVuTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjppbml0aWFsaXplV2Vi
UHJvY2Vzcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlByb2Nlc3M6OnNldFdlYnNpdGVEYXRhU3Rv
cmVQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzczo6dHJ5U2VuZFNlc3Np
b25JRFRvTmV0d29ya1Byb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzOjplbnN1
cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
OjpuZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb25DbG9zZWQpOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUHJvY2Vzcy5oOgorCiAyMDE5LTEwLTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhA
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBlbnRlcmtleWhpbnQgc3VwcG9ydApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAppbmRleCAzODE3M2Y3MjY2MWI2NTc5ODAxM2M1MTE2YzBjMzE1MDBi
ZGZhYmZmLi5mZmNkZWE2MzI3YTA5MTY2OGFiMTEzMmE3NDQzY2UzODRmYTI2M2I0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtODIsMTUgKzgyLDE1IEBACiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1SZWY8TmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3M+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGUoTmV0d29y
a1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3ZWJQ
cm9jZXNzSWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCitSZWY8TmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M+IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpjcmVhdGUoTmV0
d29ya1Byb2Nlc3MmIG5ldHdvcmtQcm9jZXNzLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciB3
ZWJQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGNvbm5lY3Rp
b25JZGVudGlmaWVyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE5ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzKG5ldHdvcmtQcm9jZXNzLCB3ZWJQcm9jZXNzSWRlbnRpZmllciwgc2Vz
c2lvbklELCBjb25uZWN0aW9uSWRlbnRpZmllcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKG5ldHdvcmtQcm9jZXNzLCB3ZWJQcm9jZXNz
SWRlbnRpZmllciwgY29ubmVjdGlvbklkZW50aWZpZXIpKTsKIH0KIAotTmV0d29ya0Nvbm5lY3Rp
b25Ub1dlYlByb2Nlc3M6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKE5ldHdvcmtQcm9j
ZXNzJiBuZXR3b3JrUHJvY2VzcywgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vz
c0lkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgSVBDOjpDb25uZWN0aW9uOjpJ
ZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVyKQorTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3M6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKE5ldHdvcmtQcm9jZXNzJiBuZXR3
b3JrUHJvY2VzcywgV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZpZXIgd2ViUHJvY2Vzc0lkZW50aWZp
ZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKICAg
ICA6IG1fY29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb246OmNyZWF0ZVNlcnZlckNvbm5lY3Rpb24o
Y29ubmVjdGlvbklkZW50aWZpZXIsICp0aGlzKSkKICAgICAsIG1fbmV0d29ya1Byb2Nlc3MobmV0
d29ya1Byb2Nlc3MpCi0gICAgLCBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCisgICAgLCBtX3Nlc3Np
b25JRChQQUw6OlNlc3Npb25JRDo6U2Vzc2lvbkNvbnN0YW50czo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlSUQpCiAjaWYgRU5BQkxFKFdFQl9SVEMpCiAgICAgLCBtX21kbnNSZWdpc3RlcigqdGhpcykK
ICNlbmRpZgpAQCAtMTA0LDExICsxMDQsNiBAQCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoTmV0d29ya1Byb2Nlc3MmIG5ldAogICAg
IC8vIHJlcGx5IGZyb20gdGhlIE5ldHdvcmsgcHJvY2Vzcywgd2hpY2ggd291bGQgYmUgdW5zYWZl
LgogICAgIG1fY29ubmVjdGlvbi0+c2V0T25seVNlbmRNZXNzYWdlc0FzRGlzcGF0Y2hXaGVuV2Fp
dGluZ0ZvclN5bmNSZXBseVdoZW5Qcm9jZXNzaW5nU3VjaEFNZXNzYWdlKHRydWUpOwogICAgIG1f
Y29ubmVjdGlvbi0+b3BlbigpOwotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQotICAgIGlm
IChuZXR3b3JrUHJvY2Vzcy5wYXJlbnRQcm9jZXNzSGFzU2VydmljZVdvcmtlckVudGl0bGVtZW50
KCkpCi0gICAgICAgIGVzdGFibGlzaFNXU2VydmVyQ29ubmVjdGlvbigpOwotI2VuZGlmCiB9CiAK
IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp+TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlBy
b2Nlc3MoKQpAQCAtMTMwLDYgKzEyNSwxOSBAQCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vz
czo6fk5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzKCkKICNlbmRpZgogfQogCit2b2lkIE5l
dHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjpzZXRTZXNzaW9uSUQoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQoreworICAgIC8vIFdlYlByb2Nlc3Mgc2hvdWxkIG9ubHkgc2V0IHRoZSBzZXNz
aW9uIElEIG9uIHRoaXMgY29ubmVjdGlvbiBvbmNlLgorICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Nl
c3Npb25JRC5pc1ZhbGlkKCkpOworCisgICAgbV9zZXNzaW9uSUQgPSBzZXNzaW9uSUQ7CisKKyNp
ZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgaWYgKG5ldHdvcmtQcm9jZXNzKCkucGFyZW50
UHJvY2Vzc0hhc1NlcnZpY2VXb3JrZXJFbnRpdGxlbWVudCgpKQorICAgICAgICBlc3RhYmxpc2hT
V1NlcnZlckNvbm5lY3Rpb24oKTsKKyNlbmRpZgorfQorCiB2b2lkIE5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzOjpkaWRDbGVhbnVwUmVzb3VyY2VMb2FkZXIoTmV0d29ya1Jlc291cmNlTG9h
ZGVyJiBsb2FkZXIpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobG9hZGVyLmlkZW50aWZpZXIoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0
aW9uVG9XZWJQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmgKaW5kZXggZjM5YWJlMmRiNTNlMTA5NzgxMmQyYmVlMGE1
YjgyYWQwYTQwNWViNy4uZWY5Njk2ZGVkMTBjN2MzNTljZTYzZDE3NjFkN2MxYzI2ZWViNTIxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuaApAQCAtOTAsOCArOTAsMTAgQEAgY2xhc3MgTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MKIHB1YmxpYzoKICAgICB1c2luZyBSZWdpc3RyYWJsZURv
bWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluOwogCi0gICAgc3RhdGljIFJlZjxOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcz4gY3JlYXRlKE5ldHdvcmtQcm9jZXNzJiwgV2ViQ29y
ZTo6UHJvY2Vzc0lkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklELCBJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIpOworICAgIHN0YXRpYyBSZWY8TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M+
IGNyZWF0ZShOZXR3b3JrUHJvY2VzcyYsIFdlYkNvcmU6OlByb2Nlc3NJZGVudGlmaWVyLCBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIpOwogICAgIHZpcnR1YWwgfk5ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzKCk7CisKKyAgICB2b2lkIHNldFNlc3Npb25JRChQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQpOwogICAgIAogICAgIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2Vzc2lvbklEOyB9CiAgICAgTmV0d29ya1Nlc3Npb24qIG5ldHdvcmtTZXNzaW9u
KCk7CkBAIC0xNjgsNyArMTcwLDcgQEAgcHVibGljOgogICAgIE5ldHdvcmtTY2hlbWVSZWdpc3Ry
eSYgc2NoZW1lUmVnaXN0cnkoKSB7IHJldHVybiBtX3NjaGVtZVJlZ2lzdHJ5LmdldCgpOyB9CiAK
IHByaXZhdGU6Ci0gICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoTmV0d29ya1Byb2Nl
c3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQsIElQQzo6Q29u
bmVjdGlvbjo6SWRlbnRpZmllcik7CisgICAgTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3Mo
TmV0d29ya1Byb2Nlc3MmLCBXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgSVBDOjpDb25uZWN0
aW9uOjpJZGVudGlmaWVyKTsKIAogICAgIHZvaWQgZGlkRmluaXNoUHJlY29ubmVjdGlvbih1aW50
NjRfdCBwcmVjb25uZWN0aW9uSWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciYpOwogICAgIFdlYkNvcmU6Ok5ldHdvcmtTdG9yYWdlU2Vzc2lvbiogc3RvcmFnZVNlc3Npb24o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDhhN2Mw
NDE3ZjE4MzJjMjVhYTMwODU3MTQwNDZkNGZiMTQ1ZjAyY2QuLjJmYTZiNDdkYTk4OTNmMzZjOTg2
ZmNhYjI4NjhlZWNkN2VmYzZiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5t
ZXNzYWdlcy5pbgpAQCAtMjIsNiArMjIsOCBAQAogCiBtZXNzYWdlcyAtPiBOZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAKKyAgICBTZXRTZXNzaW9uSUQoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQorCiAgICAgU2NoZWR1bGVSZXNvdXJjZUxvYWQoV2ViS2l0
OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKQog
ICAgIFBlcmZvcm1TeW5jaHJvbm91c0xvYWQoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVycyByZXNvdXJjZUxvYWRQYXJhbWV0ZXJzKSAtPiAoV2ViQ29yZTo6UmVzb3VyY2VFcnJv
ciBlcnJvciwgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgVmVjdG9yPGNoYXI+
IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgVGVzdFByb2Nlc3NJbmNvbWluZ1N5bmNNZXNzYWdlc1do
ZW5XYWl0aW5nRm9yU3luY1JlcGx5KFdlYktpdDo6V2ViUGFnZVByb3h5SWRlbnRpZmllciBwYWdl
SUQpIC0+IChib29sIGhhbmRsZWQpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGViYjNlZTNmODZlOGUxZGE1ZWQx
MDQ1ZjZlNDY0MTdkYTZlYTdkNzkuLmJhZDUyNTg5ZGU3YTg1MjljNmFkOTZjYmFiZDdhMDgzNjkx
MDkyMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCkBAIC0zOTYsNyArMzk2LDcgQEAgc3RhdGljIGlubGluZSBPcHRpb25hbDxzdGQ6OnBh
aXI8SVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyLCBJUEM6OkF0dGFjaG1lbnQ+PgogI2VuZGlm
CiB9CiAKLXZvaWQgTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzKFByb2Nlc3NJZGVudGlmaWVyIGlkZW50aWZpZXIsIFBBTDo6U2Vzc2lvbklEIHNlc3Np
b25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJUEM6OkF0dGFjaG1lbnQ+JiYp
PiYmIGNvbXBsZXRpb25IYW5kbGVyKQordm9pZCBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29y
a0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MoUHJvY2Vzc0lkZW50aWZpZXIgaWRlbnRpZmllciwgIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SVBDOjpBdHRhY2htZW50PiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKIHsKICAgICBhdXRvIGlwY0Nvbm5lY3Rpb24gPSBjcmVhdGVJUENDb25u
ZWN0aW9uVG9XZWJQcm9jZXNzKCk7CiAgICAgaWYgKCFpcGNDb25uZWN0aW9uKSB7CkBAIC00MDQs
NyArNDA0LDcgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlTmV0d29ya0Nvbm5lY3Rpb25U
b1dlYlByb2Nlc3MoUHJvY2Vzc0lkZW50aWZpZXIgaWRlbnQKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gbmV3Q29ubmVjdGlvbiA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzOjpjcmVhdGUoKnRoaXMsIGlkZW50aWZpZXIsIHNlc3Npb25JRCwgaXBjQ29ubmVjdGlvbi0+
Zmlyc3QpOworICAgIGF1dG8gbmV3Q29ubmVjdGlvbiA9IE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzOjpjcmVhdGUoKnRoaXMsIGlkZW50aWZpZXIsIGlwY0Nvbm5lY3Rpb24tPmZpcnN0KTsK
ICAgICBhdXRvJiBjb25uZWN0aW9uID0gbmV3Q29ubmVjdGlvbi5nZXQoKTsKIAogICAgIEFTU0VS
VCghbV93ZWJQcm9jZXNzQ29ubmVjdGlvbnMuY29udGFpbnMoaWRlbnRpZmllcikpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291
cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGFkYjVjOTcy
YTQ0ZjJjYzJiYjFlYmVhZGFjZTE3ODFlODRmMmRiMzkuLjg2NmQ3YmUwNTJkY2M0ZjYzYmI0OWQy
MzdkYjA0OTE1MjFjODI3NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKQEAgLTM4MCw3ICszODAsNyBAQCBwcml2YXRlOgogICAgIC8vIE1lc3Nh
Z2UgSGFuZGxlcnMKICAgICB2b2lkIGRpZFJlY2VpdmVTeW5jTmV0d29ya1Byb2Nlc3NNZXNzYWdl
KElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYsIHN0ZDo6dW5pcXVlX3B0cjxJUEM6OkVu
Y29kZXI+Jik7CiAgICAgdm9pZCBpbml0aWFsaXplTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nl
c3NDcmVhdGlvblBhcmFtZXRlcnMmJik7Ci0gICAgdm9pZCBjcmVhdGVOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoT3B0aW9uYWw8SVBDOjpBdHRhY2htZW50PiYmKT4mJik7
CisgICAgdm9pZCBjcmVhdGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhXZWJDb3JlOjpQ
cm9jZXNzSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChPcHRpb25hbDxJUEM6OkF0
dGFjaG1lbnQ+JiYpPiYmKTsKIAogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShQQUw6OlNlc3Np
b25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIE9wdGlvblNldDxXZWJzaXRlRGF0YUZl
dGNoT3B0aW9uPiwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRl
RGF0YShQQUw6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4sIFdhbGxUaW1l
IG1vZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXgg
ODg5NTIxNGVhYTdhNWMyM2ZmNWQ3OTI5Mzk4ZTdkNWZiZjhkZmYzZC4uOTFlMjI0NjJlM2RlYzM1
YzMyZTFkNzkyODA5YzM5NDkzYWFiNjFiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0yNSw3ICsyNSw3
IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBJbml0
aWFsaXplTmV0d29ya1Byb2Nlc3Moc3RydWN0IFdlYktpdDo6TmV0d29ya1Byb2Nlc3NDcmVhdGlv
blBhcmFtZXRlcnMgcHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycykKIAogICAgICMgQ3JlYXRlcyBh
IGNvbm5lY3Rpb24gZm9yIGNvbW11bmljYXRpb24gd2l0aCBhIFdlYlByb2Nlc3MKLSAgICBDcmVh
dGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzSWRlbnRpZmllciwgUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKSAtPiAoT3B0aW9u
YWw8SVBDOjpBdHRhY2htZW50PiBjb25uZWN0aW9uSWRlbnRpZmllcikgQXN5bmMKKyAgICBDcmVh
dGVOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2VzcyhXZWJDb3JlOjpQcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzSWRlbnRpZmllcikgLT4gKE9wdGlvbmFsPElQQzo6QXR0YWNobWVudD4gY29ubmVj
dGlvbklkZW50aWZpZXIpIEFzeW5jCiAKICNpZiBVU0UoU09VUCkKICAgICBTZXRJZ25vcmVUTFNF
cnJvcnMoYm9vbCBpZ25vcmVUTFNFcnJvcnMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBhZjVjNTUyOGIy
N2VmMDRkMDM5MjAwNzE3N2VlYTg0ZmUyODZlMTQxLi5lMjZhMjg4N2NiYzkxNTdmNjUyZmY5M2Rm
MTQ0NWM2YzdmNWRjNGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lk
IE5ldHdvcmtQcm9jZXNzUHJveHk6OmdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbihXZWJQcm9j
ZXNzUHJveHkmIHdlYlByb2NlcwogCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6Om9wZW5OZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24odWludDY0X3QgY29ubmVjdGlvblJlcXVlc3RJZGVudGlmaWVy
LCBXZWJQcm9jZXNzUHJveHkmIHdlYlByb2Nlc3NQcm94eSkKIHsKLSAgICBjb25uZWN0aW9uKCkt
PnNlbmRXaXRoQXN5bmNSZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNyZWF0ZU5ldHdv
cmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzIHsgd2ViUHJvY2Vzc1Byb3h5LmNvcmVQcm9jZXNzSWRl
bnRpZmllcigpLCB3ZWJQcm9jZXNzUHJveHkuc2Vzc2lvbklEKCkgfSwgW3RoaXMsIHdlYWtUaGlz
ID0gbWFrZVdlYWtQdHIodGhpcyksIHdlYlByb2Nlc3NQcm94eSA9IG1ha2VXZWFrUHRyKHdlYlBy
b2Nlc3NQcm94eSksIGNvbm5lY3Rpb25SZXF1ZXN0SWRlbnRpZmllcl0oYXV0byYmIGNvbm5lY3Rp
b25JZGVudGlmaWVyKSBtdXRhYmxlIHsKKyAgICBjb25uZWN0aW9uKCktPnNlbmRXaXRoQXN5bmNS
ZXBseShNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkNyZWF0ZU5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzIHsgd2ViUHJvY2Vzc1Byb3h5LmNvcmVQcm9jZXNzSWRlbnRpZmllcigpIH0sIFt0
aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpLCB3ZWJQcm9jZXNzUHJveHkgPSBtYWtl
V2Vha1B0cih3ZWJQcm9jZXNzUHJveHkpLCBjb25uZWN0aW9uUmVxdWVzdElkZW50aWZpZXJdKGF1
dG8mJiBjb25uZWN0aW9uSWRlbnRpZmllcikgbXV0YWJsZSB7CiAgICAgICAgIGlmICghd2Vha1Ro
aXMpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9j
ZXNzLmNwcAppbmRleCBkMDAzYzBmNmY4YjlkMTlhODNhZGJlZGVlZjlkMDY2OGMwNDQ5MzlhLi41
MzEwYmMxOTVlMDMyOWMyN2M0NjY0NjM3YjM4YTZkZjcyOWFmMjhjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlByb2Nlc3MuY3BwCkBAIC00MzMsNiArNDMzLDEwIEBAIHZvaWQgV2ViUHJv
Y2Vzczo6aW5pdGlhbGl6ZVdlYlByb2Nlc3MoV2ViUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyYm
IHBhcmFtZXRlcnMpCiAgICAgV2ViUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6OnNldFNob3VsZExvZ1Vz
ZXJJbnRlcmFjdGlvbihwYXJhbWV0ZXJzLnNob3VsZExvZ1VzZXJJbnRlcmFjdGlvbik7CiAjZW5k
aWYKIAorICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbdGhpc10geworICAgICAgICBlbnN1
cmVOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKTsKKyAgICB9KTsKKwogICAgIFJFTEVBU0VfTE9H
KFByb2Nlc3MsICIlcCAtIFdlYlByb2Nlc3M6OmluaXRpYWxpemVXZWJQcm9jZXNzOiBQcmVzZW50
aW5nIHByb2Nlc3MgPSAlZCIsIHRoaXMsIFdlYkNvcmU6OnByZXNlbnRpbmdBcHBsaWNhdGlvblBJ
RCgpKTsKIH0KIApAQCAtNDcwLDYgKzQ3NCwxNiBAQCB2b2lkIFdlYlByb2Nlc3M6OnNldFdlYnNp
dGVEYXRhU3RvcmVQYXJhbWV0ZXJzKFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzJiYgcAog
ICAgIHBsYXRmb3JtU2V0V2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMoV1RGTW92ZShwYXJhbWV0
ZXJzKSk7CiAgICAgCiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCk7CisgICAg
dHJ5U2VuZFNlc3Npb25JRFRvTmV0d29ya1Byb2Nlc3MoKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
Ojp0cnlTZW5kU2Vzc2lvbklEVG9OZXR3b3JrUHJvY2VzcygpIHsKKyAgICBBU1NFUlQobV9uZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pOworCisgICAgaWYgKG1fc2Vzc2lvbklEICYmICFtX3NlbnRT
ZXNzaW9uSURUb05ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIG1fc2VudFNlc3Npb25JRFRvTmV0
d29ya1Byb2Nlc3MgPSB0cnVlOworICAgICAgICBtX25ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbi0+
Y29ubmVjdGlvbigpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNz
OjpTZXRTZXNzaW9uSUQoeyBtX3Nlc3Npb25JRC52YWx1ZSgpIH0pLCAwKTsKKyAgICB9CiB9CiAK
IGJvb2wgV2ViUHJvY2Vzczo6YXJlQWxsUGFnZXNTdXNwZW5kZWQoKSBjb25zdApAQCAtMTE1NSw3
ICsxMTY5LDYgQEAgc3RhdGljIE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbkluZm8gZ2V0TmV0d29y
a1Byb2Nlc3NDb25uZWN0aW9uKElQQzo6Q29ubmVjdGlvbiYKIE5ldHdvcmtQcm9jZXNzQ29ubmVj
dGlvbiYgV2ViUHJvY2Vzczo6ZW5zdXJlTmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uKCkKIHsKICAg
ICBSRUxFQVNFX0FTU0VSVChSdW5Mb29wOjppc01haW4oKSk7Ci0gICAgQVNTRVJUKG1fc2Vzc2lv
bklEKTsKIAogICAgIC8vIElmIHdlJ3ZlIGxvc3Qgb3VyIGNvbm5lY3Rpb24gdG8gdGhlIG5ldHdv
cmsgcHJvY2VzcyAoZS5nLiBpdCBjcmFzaGVkKSB0cnkgdG8gcmUtZXN0YWJsaXNoIGl0LgogICAg
IGlmICghbV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24pIHsKQEAgLTExNzAsNiArMTE4Myw4IEBA
IE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbiYgV2ViUHJvY2Vzczo6ZW5zdXJlTmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uKCkKICAgICAgICAgICAgIENSQVNIKCk7CiAKICAgICAgICAgbV9uZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb24gPSBOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0ZShjb25u
ZWN0aW9uSW5mby5yZWxlYXNlSWRlbnRpZmllcigpKTsKKyAgICAgICAgdHJ5U2VuZFNlc3Npb25J
RFRvTmV0d29ya1Byb2Nlc3MoKTsKKwogI2lmIEhBVkUoQVVESVRfVE9LRU4pCiAgICAgICAgIG1f
bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uLT5zZXROZXR3b3JrUHJvY2Vzc0F1ZGl0VG9rZW4oV1RG
TW92ZShjb25uZWN0aW9uSW5mby5hdWRpdFRva2VuKSk7CiAjZW5kaWYKQEAgLTEyMjYsNiArMTI0
MSw3IEBAIHZvaWQgV2ViUHJvY2Vzczo6bmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uQ2xvc2VkKE5l
dHdvcmtQcm9jZXNzQ29ubmVjdGlvbiogY29ubmVjCiAjZW5kaWYKIAogICAgIG1fbmV0d29ya1By
b2Nlc3NDb25uZWN0aW9uID0gbnVsbHB0cjsKKyAgICBtX3NlbnRTZXNzaW9uSURUb05ldHdvcmtQ
cm9jZXNzID0gZmFsc2U7CiAKICAgICBsb2dEaWFnbm9zdGljTWVzc2FnZUZvck5ldHdvcmtQcm9j
ZXNzQ3Jhc2goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBy
b2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQcm9jZXNzLmgKaW5kZXggNDk4
MDIyMzQ5NjMxYTlkZjlmY2UzMTk0ZTg3MjU4OGI5MzljNDg0Mi4uYTI4NGZlYjk2MGY3MzJiMWY1
MjFlOTMxZGQ5MjgyOGUxZjY0YzIyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUHJvY2Vz
cy5oCkBAIC0zMDUsNiArMzA1LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFdlYnNpdGVEYXRh
U3RvcmVQYXJhbWV0ZXJzKFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzJiYpOwogICAgIHZv
aWQgcGxhdGZvcm1TZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyhXZWJQcm9jZXNzRGF0YVN0
b3JlUGFyYW1ldGVycyYmKTsKIAorICAgIHZvaWQgdHJ5U2VuZFNlc3Npb25JRFRvTmV0d29ya1By
b2Nlc3MoKTsKKwogICAgIHZvaWQgcHJld2FybUdsb2JhbGx5KCk7CiAgICAgdm9pZCBwcmV3YXJt
V2l0aERvbWFpbkluZm9ybWF0aW9uKGNvbnN0IFdlYkNvcmU6OlByZXdhcm1JbmZvcm1hdGlvbiYp
OwogCkBAIC01MDUsNiArNTA3LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX3VpUHJvY2Vz
c0J1bmRsZUlkZW50aWZpZXI7CiAgICAgUmVmUHRyPE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbj4g
bV9uZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb247CisgICAgYm9vbCBtX3NlbnRTZXNzaW9uSURUb05l
dHdvcmtQcm9jZXNzIHsgZmFsc2UgfTsKICAgICBXZWJMb2FkZXJTdHJhdGVneSYgbV93ZWJMb2Fk
ZXJTdHJhdGVneTsKIAogICAgIFJlZjxXZWJDYWNoZVN0b3JhZ2VQcm92aWRlcj4gbV9jYWNoZVN0
b3JhZ2VQcm92aWRlcjsK
</data>

          </attachment>
      

    </bug>

</bugzilla>