<?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>132229</bug_id>
          
          <creation_ts>2014-04-27 02:03:33 -0700</creation_ts>
          <short_desc>Coalesce responses on network process side</short_desc>
          <delta_ts>2014-07-13 07:28:30 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>134560</dup_id>
          
          <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>
          <dependson>132288</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1004391</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-27 02:03:33 -0700</bug_when>
    <thetext>To reduce IPC we should coalesce responses in network process and send them over with single IPC call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004392</commentid>
    <comment_count>1</comment_count>
      <attachid>230258</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-27 02:13:12 -0700</bug_when>
    <thetext>Created attachment 230258
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004393</commentid>
    <comment_count>2</comment_count>
      <attachid>230258</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-04-27 02:20:49 -0700</bug_when>
    <thetext>Comment on attachment 230258
patch

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

r=me, this looks really sweet.

&gt; Source/WebKit2/ChangeLog:30
&gt; +            Add a new message type that covers didReceiveResonse, didReceiveBuffer and didFinishLoading in a single message.

Typo, didReceiveResponse.

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:31
&gt; +#include &lt;Webcore/ResourceResponse.h&gt;

Webcore :|

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:58
&gt; +    NetworkResourceLoader* m_coalesingLoader;

Typo, m_coalescingLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004394</commentid>
    <comment_count>3</comment_count>
      <attachid>230259</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-27 02:36:10 -0700</bug_when>
    <thetext>Created attachment 230259
updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004399</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-27 04:54:59 -0700</bug_when>
    <thetext>https://trac.webkit.org/r167853</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004405</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-27 07:15:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/16737186&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004633</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-28 10:27:18 -0700</bug_when>
    <thetext>This regressed an XHR test: http://webkit-test-results.appspot.com/dashboards/flakiness_dashboard.html#showAllRuns=true&amp;tests=http%2Ftests%2Fxmlhttprequest%2Finteractive-state.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004645</commentid>
    <comment_count>7</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-28 10:43:22 -0700</bug_when>
    <thetext>And a multipart test: http://webkit-test-results.appspot.com/dashboards/flakiness_dashboard.html#tests=http%2Ftests%2Fmultipart%2Finvalid-image-data.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004648</commentid>
    <comment_count>8</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2014-04-28 10:45:01 -0700</bug_when>
    <thetext>And also http/tests/multipart/multipart-html.php. The bots didn&apos;t pick up the crash logs, but they look like this:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000000008c8
0   com.apple.WebKit2               0x0000000116d5ae2c WebKit::WebDocumentLoader::navigationID() const + 12 (WebDocumentLoader.h:40)
1   com.apple.WebKit2               0x0000000116d559cb WebKit::WebFrameLoaderClient::dispatchDidFailProvisionalLoad(WebCore::ResourceError const&amp;) + 203 (WebFrameLoaderClient.cpp:470)
2   com.apple.WebCore               0x000000011a99cbe8 WebCore::FrameLoader::checkLoadCompleteForThisFrame() + 584 (FrameLoader.cpp:2210)
3   com.apple.WebCore               0x000000011a995974 WebCore::FrameLoader::checkLoadComplete() + 324 (FrameLoader.cpp:2442)
4   com.apple.WebCore               0x000000011a99ec88 WebCore::FrameLoader::receivedMainResourceError(WebCore::ResourceError const&amp;) + 408 (FrameLoader.cpp:2731)
5   com.apple.WebCore               0x000000011a6a4ba4 WebCore::DocumentLoader::mainReceivedError(WebCore::ResourceError const&amp;) + 324 (DocumentLoader.cpp:267)
6   com.apple.WebCore               0x000000011a6a55fe WebCore::DocumentLoader::notifyFinished(WebCore::CachedResource*) + 398 (DocumentLoader.cpp:384)
7   com.apple.WebCore               0x000000011a2c6ccd WebCore::CachedResource::checkNotify() + 109 (CachedResource.cpp:332)
8   com.apple.WebCore               0x000000011a2c6ea1 WebCore::CachedResource::error(WebCore::CachedResource::Status) + 145 (CachedResource.cpp:359)
9   com.apple.WebCore               0x000000011bde8ac9 WebCore::SubresourceLoader::didFail(WebCore::ResourceError const&amp;) + 377 (SubresourceLoader.cpp:339)
10  com.apple.WebKit2               0x0000000116fd6fc5 WebKit::WebResourceLoadScheduler::internallyFailedLoadTimerFired() + 213 (WebResourceLoadScheduler.cpp:166)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004651</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-04-28 10:47:15 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 132288</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1004942</commentid>
    <comment_count>10</comment_count>
      <attachid>230377</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 07:44:14 -0700</bug_when>
    <thetext>Created attachment 230377
disable coalescing for xhr and multipart responses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005001</commentid>
    <comment_count>11</comment_count>
      <attachid>230377</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 09:59:53 -0700</bug_when>
    <thetext>Comment on attachment 230377
disable coalescing for xhr and multipart responses

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

&gt; Source/WebKit2/ChangeLog:8
&gt; +        To reduce IPC we should coalesce responses in network process and send them over with single IPC call.

I don&apos;t object to this change, however I also don&apos;t understand why &quot;reducing IPC&quot; improves performance.

I understand that we see a lot of IPC on profiles, but combining responses into one doesn&apos;t get rid of any serialization that we perform - we still need to send requests and responses as many times as before, don&apos;t we?

A better understanding of where the benefit comes from may help come up with a safer fix that won&apos;t be a long-term liability due to added complexity.

&gt; Source/WebKit2/ChangeLog:39
&gt; +            Add allowResponseCoalescing flag. Main resource and XHR is not allowed to coalesce as it may alter
&gt; +            observable semantics.

One place where coalescing would be a substantial win is actually most XHR use cases. We don&apos;t need the partial data for Blob responses, we don&apos;t need it for XML responses, and so on. Yet we still need progress notifications for these.

For blobs especially, what we do today is buffer the data on WebProcess side, and then send it back to NetworkProcess to register as a blob - crazy!

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:71
&gt; +        static const double responseCoalescingTime = 0.5;

How did you come up with this number?

This seems to mean that slow loading pages will now be committed half a second later than before, which I expect to be observable.

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:88
&gt; +            loader-&gt;send(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(m_coalescingResponse, CertificateInfo(m_coalescingResponse), false));

This looks like the best place to send a coalesced response - we already have all the data. What is the reason to not use this technique here?

&gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:61
&gt; +    long long m_coalescingResponseEncodedDataLength;

Is a signed value appropriate here?

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:137
&gt; +    Ref&lt;WebResourceLoader&gt; protect(*this);

I&apos;m somewhat worried that protecting only the loader is insufficient. I don&apos;t know to to tell what would be sufficient. Maybe run API tests with GuardMalloc? But the coverage is very sketchy.

Maybe it&apos;s OK because the loader protects both Frame and DocumentLoader. But it doesn&apos;t protect the Document, which can be closed and replaced.

&gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:143
&gt; +        didReceiveData(data, encodedDataLength);

Seems like we shouldn&apos;t do this if client cancels the load while handling didReceiveResponse. Or does m_coreLoader become null in this case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005047</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 12:04:02 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:71
&gt; &gt; +        static const double responseCoalescingTime = 0.5;
&gt; 
&gt; How did you come up with this number?

It seemed reasonable. Only thing that it really should affect are progressively rendered images (the first display may be delayed up to 0.5s but will be more complete). Scripts and stylesheets are not processed until they finished in any case.

&gt; This seems to mean that slow loading pages will now be committed half a second later than before, which I expect to be observable.

Coalescing is not enabled for the main document (or XHR).

&gt; &gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:88
&gt; &gt; +            loader-&gt;send(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(m_coalescingResponse, CertificateInfo(m_coalescingResponse), false));
&gt; 
&gt; This looks like the best place to send a coalesced response - we already have all the data. What is the reason to not use this technique here?

I guess I don&apos;t understand what you mean here.

&gt; &gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:61
&gt; &gt; +    long long m_coalescingResponseEncodedDataLength;
&gt; 
&gt; Is a signed value appropriate here?

It is the same type as used elsewhere for this data.

&gt; 
&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:137
&gt; &gt; +    Ref&lt;WebResourceLoader&gt; protect(*this);
&gt; 
&gt; I&apos;m somewhat worried that protecting only the loader is insufficient. I don&apos;t know to to tell what would be sufficient. Maybe run API tests with GuardMalloc? But the coverage is very sketchy.
&gt; 
&gt; Maybe it&apos;s OK because the loader protects both Frame and DocumentLoader. But it doesn&apos;t protect the Document, which can be closed and replaced.

This is the same protection other functions here have.

&gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:143
&gt; &gt; +        didReceiveData(data, encodedDataLength);
&gt; 
&gt; Seems like we shouldn&apos;t do this if client cancels the load while handling didReceiveResponse. Or does m_coreLoader become null in this case?

This case shouldn&apos;t be any different from the separate-messages case. You may have both didReceiveResponse and didReceiveData messages in-flight at the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005058</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 12:30:38 -0700</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.cpp:88
&gt; &gt; &gt; +            loader-&gt;send(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(m_coalescingResponse, CertificateInfo(m_coalescingResponse), false));
&gt; &gt; 
&gt; &gt; This looks like the best place to send a coalesced response - we already have all the data. What is the reason to not use this technique here?
&gt; 
&gt; I guess I don&apos;t understand what you mean here.

This is a missed optimization - a place where we could send a coalesced response, but don&apos;t.

&gt; &gt; &gt; Source/WebKit2/NetworkProcess/AsynchronousNetworkLoaderClient.h:61
&gt; &gt; &gt; +    long long m_coalescingResponseEncodedDataLength;
&gt; &gt; 
&gt; &gt; Is a signed value appropriate here?
&gt; 
&gt; It is the same type as used elsewhere for this data.

This is not sufficient. You are adding new code, and we don&apos;t have to copy old mistakes unless there is a reason to.

Using signed values for sizes causes all sorts of bugs.

&gt; &gt; Maybe it&apos;s OK because the loader protects both Frame and DocumentLoader. But it doesn&apos;t protect the Document, which can be closed and replaced.
&gt; 
&gt; This is the same protection other functions here have.

Do other functions make multiple calls to client? This new function is very different from others, as it&apos;s multi-step.

&gt; &gt; &gt; Source/WebKit2/WebProcess/Network/WebResourceLoader.cpp:143
&gt; &gt; &gt; +        didReceiveData(data, encodedDataLength);
&gt; &gt; 
&gt; &gt; Seems like we shouldn&apos;t do this if client cancels the load while handling didReceiveResponse. Or does m_coreLoader become null in this case?
&gt; 
&gt; This case shouldn&apos;t be any different from the separate-messages case. You may have both didReceiveResponse and didReceiveData messages in-flight at the same time.

I don&apos;t understand this answer. There can be multiple messages, but each gets a lot of additional checks before it reaches WebResourceLoader, they don&apos;t share the same stack when executed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005069</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 12:49:39 -0700</bug_when>
    <thetext>&gt; This is a missed optimization - a place where we could send a coalesced response, but don&apos;t.

Right, this path is an existing optimization that coalesces didReceiveData and didFinishLoading for disk cache hit (along with passing an mmapped buffer). It could be improved further but that is bit of a separate topic.

&gt; This is not sufficient. You are adding new code, and we don&apos;t have to copy old mistakes unless there is a reason to.
&gt; 
&gt; Using signed values for sizes causes all sorts of bugs.

I disagree. Consistency is more important. We should fix this everywhere as a separate change. Conversions cause bugs.

&gt; Do other functions make multiple calls to client? This new function is very different from others, as it&apos;s multi-step.

Yes, didReceiveResource does (which is a similar existing optimization, see above).

&gt; I don&apos;t understand this answer. There can be multiple messages, but each gets a lot of additional checks before it reaches WebResourceLoader, they don&apos;t share the same stack when executed.

Maybe you could suggest concrete improvements to the patch as I&apos;m not sure what you are after here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005081</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 13:18:37 -0700</bug_when>
    <thetext>The biggest concrete improvement would be one I requested in the first comment - it would be helpful to understand why this improves our metrics.

Without this understanding, and given the quality of implementation concerns that I listed, I&apos;m not willing to give an r+ - the risk of regressions and the cost in complexity are relatively high.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005084</commentid>
    <comment_count>16</comment_count>
      <attachid>230377</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 13:19:14 -0700</bug_when>
    <thetext>Comment on attachment 230377
disable coalescing for xhr and multipart responses

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

&gt; Source/WebKit2/ChangeLog:14
&gt; +            Disable coalesing for multipart/x-response-mixed as they may generate multiple responses.

I think that the code is correct, but the comment is not - multipart/x-response-mixed is not the only kind of multipart response that we support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005090</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 13:35:18 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; The biggest concrete improvement would be one I requested in the first comment - it would be helpful to understand why this improves our metrics.

Doing less work, in this case constructing and sending IPC messages, generally improves performance. I&apos;m not sure what further understanding is needed.
 
&gt; Without this understanding, and given the quality of implementation concerns that I listed, I&apos;m not willing to give an r+ - the risk of regressions and the cost in complexity are relatively high.

I haven&apos;t seen any actionable concerns.

Since you &quot;don&apos;t object to this change&quot; I suppose I will seek the review elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005106</commentid>
    <comment_count>18</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 14:20:12 -0700</bug_when>
    <thetext>&gt; Doing less work, in this case constructing and sending IPC messages, generally improves performance. I&apos;m not sure what further understanding is needed.

I find this explanation implausible. There must be something else at play.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005169</commentid>
    <comment_count>19</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 15:25:26 -0700</bug_when>
    <thetext>&gt; I find this explanation implausible. There must be something else at play.

For example the network process side profiles for sending messages (over PLT run) look like this:

Running Time	Self		Symbol Name
501.0ms    6.0%	1,0	 	                 bool IPC::Connection::send&lt;Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo&gt;(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo&amp;&amp;, unsigned long long, unsigned int)
425.0ms    5.1%	1,0	 	                  IPC::ArgumentCoder&lt;WebCore::ResourceResponse&gt;::encode(IPC::ArgumentEncoder&amp;, WebCore::ResourceResponse const&amp;)
66.0ms    0.7%	1,0	 	                  IPC::Connection::sendMessage(std::__1::unique_ptr&lt;IPC::MessageEncoder, std::__1::default_delete&lt;IPC::MessageEncoder&gt; &gt;, unsigned int)

Running Time	Self		Symbol Name
306.0ms    3.6%	0,0	 	                 bool IPC::Connection::send&lt;Messages::WebResourceLoader::DidReceiveData&gt;(Messages::WebResourceLoader::DidReceiveData&amp;&amp;, unsigned long long, unsigned int)
229.0ms    2.7%	0,0	 	                  IPC::ArgumentEncoder::encodeVariableLengthByteArray(IPC::DataReference const&amp;)
67.0ms    0.8%	3,0	 	                  IPC::Connection::sendMessage(std::__1::unique_ptr&lt;IPC::MessageEncoder, std::__1::default_delete&lt;IPC::MessageEncoder&gt; &gt;, unsigned int)

Running Time	Self		Symbol Name
63.0ms    0.7%	1,0	 	               bool IPC::MessageSender::send&lt;Messages::WebResourceLoader::DidFinishResourceLoad&gt;(Messages::WebResourceLoader::DidFinishResourceLoad const&amp;, unsigned long long, unsigned int)
58.0ms    0.7%	1,0	 	                IPC::MessageSender::sendMessage(std::__1::unique_ptr&lt;IPC::MessageEncoder, std::__1::default_delete&lt;IPC::MessageEncoder&gt; &gt;, unsigned int)
54.0ms    0.6%	1,0	 	                 IPC::Connection::sendMessage(std::__1::unique_ptr&lt;IPC::MessageEncoder, std::__1::default_delete&lt;IPC::MessageEncoder&gt; &gt;, unsigned int)
2.0ms    0.0%	2,0	 	                 non-virtual thunk to WebKit::NetworkResourceLoader::messageSenderConnection()
1.0ms    0.0%	1,0	 	                 DYLD-STUB$$operator new(unsigned long)

Simply combining sendMessage calls (practically all combine) wins 1.5% of main thread time. A portion of encodeVariableLengthByteArray overhead (2.7%) will go away as well as we now do do a single encode per resource instead of multiple ones.

There are comparable wins in receiving web process side. Does this make it sound more plausible? These things are not free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005193</commentid>
    <comment_count>20</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 16:15:29 -0700</bug_when>
    <thetext>Don&apos;t these include data serialization, which will still happen with this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005291</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 22:51:54 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Don&apos;t these include data serialization, which will still happen with this patch?

No, sendMessage functions are pure low level/kernel overhead. The IPC::ArgumentCoder&lt;&gt;::encode functions do the serialization.

ResourceResponse serialization is indeed very slow and should be optimised too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005306</commentid>
    <comment_count>22</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-29 23:36:37 -0700</bug_when>
    <thetext>On web process side we spend 1.1% of total CPU time simply receiving IPC messages (this includes UI process messages too) and forwarding them to client. This does not include any type-specific decoding.

Running Time	Self		Symbol Name
771.0ms    1.2%	7,0	 	     _dispatch_source_invoke$VARIANT$mp
760.0ms    1.1%	2,0	 	      _dispatch_source_latch_and_call
719.0ms    1.1%	10,0	 	       IPC::Connection::receiveSourceEventHandler()
275.0ms    0.4%	4,0	 	        IPC::MessageDecoder::MessageDecoder(IPC::DataReference const&amp;, WTF::Vector&lt;IPC::Attachment, 0ul, WTF::CrashOnOverflow&gt;)
215.0ms    0.3%	11,0	 	        IPC::Connection::processIncomingMessage(std::__1::unique_ptr&lt;IPC::MessageDecoder, std::__1::default_delete&lt;IPC::MessageDecoder&gt; &gt;)
158.0ms    0.2%	1,0	 	        mach_msg
43.0ms    0.0%	1,0	 	        vm_deallocate
13.0ms    0.0%	12,0	 	        WTF::fastMalloc(unsigned long)
3.0ms    0.0%	3,0	 	        WTF::Vector&lt;char, 4160ul, WTF::CrashOnOverflow&gt;::resize(unsigned long)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005308</commentid>
    <comment_count>23</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-29 23:56:07 -0700</bug_when>
    <thetext>This is certainly interesting - there aren&apos;t a lot of messages sent, after all. Recently I debugged a problem by printing out all messages between all WebKit processes while loading a complex web page, and that was still very manageable.

I wonder how many of these messages are didReceiveData ones - perhaps coalescing only these would be sufficient. It has certainly come up before that parsing data in smaller chunks (due to CFNetworks callbacks never being blocked) might cause trouble, although I don&apos;t think that&apos;s we&apos;ve ever seen a confirmation.

This makes me think about something that this patch appears to regress. How do we handle Content-Disposition: attachment for subresources? A client needs to make a decision in didReceiveResponse before the delegate call even returns. In fact, the API contract is for the client to get callbacks right away, although I&apos;m not sure if that&apos;s readily observable for anything but downloads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005323</commentid>
    <comment_count>24</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-30 01:21:13 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; This is certainly interesting - there aren&apos;t a lot of messages sent, after all. Recently I debugged a problem by printing out all messages between all WebKit processes while loading a complex web page, and that was still very manageable.

It is just that the &quot;IPC is free&quot; theory is wrong. Note that there is also context switch overhead that doesn&apos;t show up in profiles.

&gt; I wonder how many of these messages are didReceiveData ones - perhaps coalescing only these would be sufficient. It has certainly come up before that parsing data in smaller chunks (due to CFNetworks callbacks never being blocked) might cause trouble, although I don&apos;t think that&apos;s we&apos;ve ever seen a confirmation.

This approach is strictly better since it coalesces more messages, at least 3-&gt;1 in all non-disk-cache cases.

Generally there is no reason to keep our internal IPC looking like the external webkit API.

&gt; This makes me think about something that this patch appears to regress. How do we handle Content-Disposition: attachment for subresources? A client needs to make a decision in didReceiveResponse before the delegate call even returns. In fact, the API contract is for the client to get callbacks right away, although I&apos;m not sure if that&apos;s readily observable for anything but downloads.

I don&apos;t understand the mechanism this patch would affect &quot;Content-Disposition: attachment&quot; handling. The client is still free to make decisions in didReceiveResponse. But we can certainly disable coalescing in that case if it is a concern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005392</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 09:36:47 -0700</bug_when>
    <thetext>&gt; I don&apos;t understand the mechanism this patch would affect &quot;Content-Disposition: attachment&quot; handling. The client is still free to make decisions in didReceiveResponse. But we can certainly disable coalescing in that case if it is a concern.

The decision to convert to download must be made during didReceiveResponse handling, not after the delegate returns control to CFNetwork.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005427</commentid>
    <comment_count>26</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-30 11:03:59 -0700</bug_when>
    <thetext>&gt; The decision to convert to download must be made during didReceiveResponse handling, not after the delegate returns control to CFNetwork.

I don&apos;t see how that works with existing code that uses asynchronous didReceiveResponse messages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005432</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 11:15:10 -0700</bug_when>
    <thetext>What counts is that delegate calls are synchronous, see -connection:didReceiveResponse: in WebCoreResourceHandleAsOperationQueueDelegate.mm.

We do convert that into a async message + async completion message for IPC. Once a completion message is received, -continueDidReceiveResponse is called, which signals a semaphore, and unblocks the delegate. I&apos;m not exactly sure where the code that converts an NSURLConnection to download is, but it has to be there somewhere, running before the delegate returns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005439</commentid>
    <comment_count>28</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-04-30 11:28:02 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; What counts is that delegate calls are synchronous, see -connection:didReceiveResponse: in WebCoreResourceHandleAsOperationQueueDelegate.mm.
&gt; 
&gt; We do convert that into a async message + async completion message for IPC. Once a completion message is received, -continueDidReceiveResponse is called, which signals a semaphore, and unblocks the delegate. I&apos;m not exactly sure where the code that converts an NSURLConnection to download is, but it has to be there somewhere, running before the delegate returns.

The continueDidReceiveResponse callback is only requested for the main resource (the third parameter here):

    loader-&gt;sendAbortingOnFailure(Messages::WebResourceLoader::DidReceiveResponseWithCertificateInfo(response, CertificateInfo(response), loader-&gt;isLoadingMainResource()));

This patch does not affect main resource load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1005448</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-04-30 11:41:29 -0700</bug_when>
    <thetext>Is it correct behavior that we ignore Content-Disposition for non-main resources? Do other browsers do the same?

If it&apos;s just a bug, making our performance depend on it would be not great.

I&apos;m not sure why we need to go back and forth on this. This is essentially the same question I had in comment 23, and it needs a complete answer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1013292</commentid>
    <comment_count>30</comment_count>
      <attachid>230258</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-06-04 03:32:12 -0700</bug_when>
    <thetext>Comment on attachment 230258
patch

Cleared Andreas Kling&apos;s review+ from obsolete attachment 230258 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022017</commentid>
    <comment_count>31</comment_count>
      <attachid>230377</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-07-12 16:46:48 -0700</bug_when>
    <thetext>Comment on attachment 230377
disable coalescing for xhr and multipart responses

Antti, what’s the status on this 3 month old unreviewed patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022112</commentid>
    <comment_count>32</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-07-13 07:27:49 -0700</bug_when>
    <thetext>Pratik landed similar change in bug 134560</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022113</commentid>
    <comment_count>33</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-07-13 07:28:30 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 134560 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230258</attachid>
            <date>2014-04-27 02:13:12 -0700</date>
            <delta_ts>2014-06-04 03:32:12 -0700</delta_ts>
            <desc>patch</desc>
            <filename>response-coalesce-3.patch</filename>
            <type>text/plain</type>
            <size>14298</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzg1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDb2FsZXNjZSByZXNwb25zZXMg
b24gbmV0d29yayBwcm9jZXNzIHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMjIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKIDIwMTQtMDQtMjcgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsIG91dCBjaGFuZ2VzIG5v
dCBwYXJ0IG9mIHRoZSBwYXRjaCByZXZpZXdlZCBmb3IgQnVnIDEzMjA4OQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE2Nzc5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgX19aTjdXZWJDb3JlMTJT
aGFyZWRCdWZmZXIxMmNyZWF0ZUNGRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNy
ZWF0ZU5TRGF0YUV2CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjI0Y3JlYXRlV2l0aENvbnRl
bnRzT2ZGaWxlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXI2YXBw
ZW5kRVBLY2oKK19fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyNmFwcGVuZEVQUzBfCiBfX1pON1dl
YkNvcmUxMlNoYXJlZEJ1ZmZlckMxRVBLY2oKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyQzFF
UEtoagogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXJDMUV2CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNjc4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzNCBAQAorMjAxNC0wNC0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQ29hbGVzY2UgcmVzcG9uc2VzIG9uIG5ldHdvcmsgcHJvY2VzcyBz
aWRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIy
MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRvIHJlZHVjZSBJUEMgd2Ugc2hvdWxkIGNvYWxlc2NlIHJlc3BvbnNlcyBpbiBuZXR3b3Jr
IHByb2Nlc3MgYW5kIHNlbmQgdGhlbSBvdmVyIHdpdGggc2luZ2xlIElQQyBjYWxsLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OkFzeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
S2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJD
bGllbnQ6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmNsZWFyQ29hbGVzY2VkUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
OjpyZXNwb25zZUNvYWxlc2NlVGltZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAgICAgQ29h
bGVzY2UgdGhlIHJlc3BvbnNlLiBDb21wbGV0ZWQgcmVzcG9uc2UgaXMgc2VudCBvbiBkaWRGaW5p
c2hMb2FkaW5nLiBJZiB0aGUgY29hbGVzY2UgdGltZXIgZmlyZXMKKyAgICAgICAgICAgIGJlZm9y
ZSB0aGF0IHRoZSBkYXRhIGFjY3VtdWxhdGVkIHNvIGZhciBpcyBkaXNwYXRjaGVkLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25zZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAKKyAgICAgICAgICAgIEFkZCBhIG5ldyBtZXNzYWdlIHR5cGUgdGhhdCBjb3ZlcnMgZGlk
UmVjZWl2ZVJlc29uc2UsIGRpZFJlY2VpdmVCdWZmZXIgYW5kIGRpZEZpbmlzaExvYWRpbmcgaW4g
YSBzaW5nbGUgbWVzc2FnZS4KKwogMjAxNC0wNC0yNiAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9y
dG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTY3Nzc1KTogU2FmYXJpIGNy
YXNoZXMgaW4gVmlld1NuYXBzaG90U3RvcmU6OnBydW5lU25hcHNob3RzIGFmdGVyIGxvYWRpbmcg
MjAgcGFnZXMKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91
c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQuY3BwCShyZXZpc2lv
biAxNjc3OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Bc3luY2hyb25vdXNO
ZXR3b3JrTG9hZGVyQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50KCkK
KyAgICA6IG1fcmVzcG9uc2VDb2FsZXNjaW5nVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAm
QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6cmVzcG9uc2VDb2FsZXNjaW5nVGltZXJG
aXJlZCkKKyAgICAsIG1fY29hbGVzaW5nTG9hZGVyKG51bGxwdHIpCisgICAgLCBtX2NvYWxlc2Np
bmdSZXNwb25zZUVuY29kZWREYXRhTGVuZ3RoKDApCiB7CiB9CiAKQEAgLTYzLDYgKzY2LDE3IEBA
IHZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y2EKIAogdm9pZCBBc3luY2hy
b25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0d29ya1Jlc291
cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewor
ICAgIGlmICghbG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkgeworICAgICAgICBBU1NF
UlQoIW1fY29hbGVzaW5nTG9hZGVyKTsKKyAgICAgICAgbV9jb2FsZXNjaW5nUmVzcG9uc2UgPSBy
ZXNwb25zZTsKKyAgICAgICAgbV9jb2FsZXNpbmdMb2FkZXIgPSBsb2FkZXI7CisKKyAgICAgICAg
Ly8gRklYTUU6IFNvbWUgcmVzb3VyY2VzIGNhbiBvbmx5IGJlIHVzZWQgd2hlbiBjb21wbGV0ZWx5
IGxvYWRlZC4gV2Ugc2hvdWxkIGFsd2F5cyBkZWxheSB0aG9zZSB1bnRpbCBjb21wbGV0aW9uLgor
ICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHJlc3BvbnNlQ29hbGVzY2luZ1RpbWUgPSAwLjU7
CisgICAgICAgIG1fcmVzcG9uc2VDb2FsZXNjaW5nVGltZXIuc3RhcnRPbmVTaG90KHJlc3BvbnNl
Q29hbGVzY2luZ1RpbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbG9hZGVyLT5z
ZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNl
aXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNlLCBDZXJ0aWZpY2F0ZUluZm8o
cmVzcG9uc2UpLCBsb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKSk7CiB9CiAKQEAgLTcy
LDYgKzg2LDEyIEBAIHZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGkKICAg
ICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxlIHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwogICAg
IE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1
ZmZlcihzaGFyZWFibGVSZXNvdXJjZUhhbmRsZSwgYnVmZmVyKTsKICAgICBpZiAoIXNoYXJlYWJs
ZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKSB7CisgICAgICAgIGlmIChtX3Jlc3BvbnNlQ29hbGVz
Y2luZ1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jb2FsZXNjaW5n
UmVzcG9uc2UuaXNOdWxsKCkpOworICAgICAgICAgICAgQVNTRVJUKCFtX2NvYWxlc2NpbmdSZXNw
b25zZURhdGEpOworICAgICAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJj
ZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2Np
bmdSZXNwb25zZSwgQ2VydGlmaWNhdGVJbmZvKG1fY29hbGVzY2luZ1Jlc3BvbnNlKSwgZmFsc2Up
KTsKKyAgICAgICAgICAgIGNsZWFyQ29hbGVzY2VkUmVzcG9uc2UoKTsKKyAgICAgICAgfQogICAg
ICAgICAvLyBTaW5jZSB3ZSdyZSBkZWxpdmVyaW5nIHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVz
IGFsbCBhdCBvbmNlIGFuZCBkb24ndCBuZWVkIGFueW1vcmUgZGF0YSBvciBjYWxsYmFja3MgZnJv
bSB0aGUgbmV0d29yayBsYXllciwgYWJvcnQgdGhlIGxvYWRlci4KICAgICAgICAgbG9hZGVyLT5h
Ym9ydCgpOwogICAgICAgICBsb2FkZXItPnNlbmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVy
OjpEaWRSZWNlaXZlUmVzb3VyY2Uoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGN1cnJlbnRUaW1l
KCkpKTsKQEAgLTc5LDYgKzk5LDE3IEBAIHZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNs
aWVudDo6ZGkKICAgICB9CiAjZW5kaWYgLy8gX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDkwCiAKKyAgICBpZiAobV9yZXNwb25zZUNvYWxlc2NpbmdUaW1lci5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIEFTU0VSVChtX2NvYWxlc2luZ0xvYWRlciA9PSBsb2FkZXIpOworICAgICAg
ICBBU1NFUlQoIW1fY29hbGVzY2luZ1Jlc3BvbnNlLmlzTnVsbCgpKTsKKyAgICAgICAgaWYgKG1f
Y29hbGVzY2luZ1Jlc3BvbnNlRGF0YSkKKyAgICAgICAgICAgIG1fY29hbGVzY2luZ1Jlc3BvbnNl
RGF0YS0+YXBwZW5kKGJ1ZmZlcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29hbGVz
Y2luZ1Jlc3BvbnNlRGF0YSA9IGJ1ZmZlcjsKKyAgICAgICAgbV9jb2FsZXNjaW5nUmVzcG9uc2VF
bmNvZGVkRGF0YUxlbmd0aCArPSBlbmNvZGVkRGF0YUxlbmd0aDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKwogICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGJ1ZmZlci0+ZGF0YSgpKSwgYnVmZmVyLT5zaXplKCkpOwog
ICAgIGxvYWRlci0+c2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxv
YWRlcjo6RGlkUmVjZWl2ZURhdGEoZGF0YVJlZmVyZW5jZSwgZW5jb2RlZERhdGFMZW5ndGgpKTsK
IH0KQEAgLTkwLDE0ICsxMjEsNjQgQEAgdm9pZCBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xp
ZW50OjpkaQogCiB2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpZEZpbmlz
aExvYWRpbmcoTmV0d29ya1Jlc291cmNlTG9hZGVyKiBsb2FkZXIsIGRvdWJsZSBmaW5pc2hUaW1l
KQogeworICAgIGlmIChtX3Jlc3BvbnNlQ29hbGVzY2luZ1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2NvYWxlc2NpbmdSZXNwb25zZS5pc051bGwoKSk7CisgICAgICAgIGlm
ICghbV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhKSB7CisgICAgICAgICAgICBJUEM6OkRhdGFSZWZl
cmVuY2UgbnVsbERhdGE7CisgICAgICAgICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVDb21wbGV0ZVJlc3BvbnNl
KG1fY29hbGVzY2luZ1Jlc3BvbnNlLCBDZXJ0aWZpY2F0ZUluZm8obV9jb2FsZXNjaW5nUmVzcG9u
c2UpLCBudWxsRGF0YSwgbV9jb2FsZXNjaW5nUmVzcG9uc2VFbmNvZGVkRGF0YUxlbmd0aCwgZmlu
aXNoVGltZSkpOworCisgICAgICAgICAgICBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2Ug
ZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX2NvYWxlc2Np
bmdSZXNwb25zZURhdGEtPmRhdGEoKSksIG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YS0+c2l6ZSgp
KTsKKworICAgICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2Vi
UmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVDb21wbGV0ZVJlc3BvbnNlKG1fY29hbGVzY2luZ1Jl
c3BvbnNlLCBDZXJ0aWZpY2F0ZUluZm8obV9jb2FsZXNjaW5nUmVzcG9uc2UpLCBkYXRhUmVmZXJl
bmNlLCBtX2NvYWxlc2NpbmdSZXNwb25zZUVuY29kZWREYXRhTGVuZ3RoLCBmaW5pc2hUaW1lKSk7
CisgICAgICAgIGNsZWFyQ29hbGVzY2VkUmVzcG9uc2UoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKwogICAgIGxvYWRlci0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZEZp
bmlzaFJlc291cmNlTG9hZChmaW5pc2hUaW1lKSk7CiB9CiAKIHZvaWQgQXN5bmNocm9ub3VzTmV0
d29ya0xvYWRlckNsaWVudDo6ZGlkRmFpbChOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwg
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7CisgICAgaWYgKG1fcmVzcG9uc2VDb2FsZXNj
aW5nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgZGlzcGF0Y2hQYXJ0aWFsQ29hbGVzY2VkUmVz
cG9uc2UobG9hZGVyKTsKKwogICAgIGxvYWRlci0+c2VuZChNZXNzYWdlczo6V2ViUmVzb3VyY2VM
b2FkZXI6OkRpZEZhaWxSZXNvdXJjZUxvYWQoZXJyb3IpKTsKIH0KIAordm9pZCBBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25zZShO
ZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlcikKK3sKKyAgICBBU1NFUlQobV9jb2FsZXNpbmdM
b2FkZXIgPT0gbG9hZGVyKTsKKyAgICBBU1NFUlQoIW1fY29hbGVzY2luZ1Jlc3BvbnNlLmlzTnVs
bCgpKTsKKyAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8obV9jb2Fs
ZXNjaW5nUmVzcG9uc2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSksIGZh
bHNlKSk7CisKKyAgICBpZiAobV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhKSB7CisgICAgICAgIElQ
Qzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDhfdCo+KG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YS0+ZGF0YSgpKSwgbV9jb2FsZXNjaW5nUmVz
cG9uc2VEYXRhLT5zaXplKCkpOworICAgICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVy
ZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVu
Y2UsIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgpKTsKKyAgICB9CisKKyAg
ICBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzTmV0d29y
a0xvYWRlckNsaWVudDo6Y2xlYXJDb2FsZXNjZWRSZXNwb25zZSgpCit7CisgICAgbV9jb2FsZXNj
aW5nUmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CisgICAgbV9jb2FsZXNpbmdMb2FkZXIg
PSBudWxscHRyOworICAgIG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YSA9IG51bGxwdHI7CisgICAg
bV9jb2FsZXNjaW5nUmVzcG9uc2VFbmNvZGVkRGF0YUxlbmd0aCA9IDA7CisgICAgbV9yZXNwb25z
ZUNvYWxlc2NpbmdUaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudDo6cmVzcG9uc2VDb2FsZXNjaW5nVGltZXJGaXJlZCgpCit7CisgICAgQVNTRVJU
KG1fY29hbGVzaW5nTG9hZGVyKTsKKyAgICBkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25z
ZShtX2NvYWxlc2luZ0xvYWRlcik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQuaAkocmV2aXNpb24gMTY3Nzk3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJOZXR3b3JrTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJjb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKIApAQCAtNDcsNiArNDksMTYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2VuZERhdGEoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0d29ya1Jlc291cmNlTG9hZGVy
KiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBv
dmVycmlkZTsKKworICAgIHZvaWQgZGlzcGF0Y2hQYXJ0aWFsQ29hbGVzY2VkUmVzcG9uc2UoTmV0
d29ya1Jlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7
CisgICAgdm9pZCByZXNwb25zZUNvYWxlc2NpbmdUaW1lckZpcmVkKCk7CisKKyAgICBSdW5Mb29w
OjpUaW1lcjxBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50PiBtX3Jlc3BvbnNlQ29hbGVz
Y2luZ1RpbWVyOworICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbV9jb2FsZXNpbmdMb2FkZXI7
CisgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSBtX2NvYWxlc2NpbmdSZXNwb25zZTsKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBtX2NvYWxlc2NpbmdSZXNwb25zZURhdGE7
CisgICAgbG9uZyBsb25nIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGg7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxNjc3
OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUv
UmVzb3VyY2VIYW5kbGVDbGllbnQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlTG9hZGVy
T3B0aW9ucy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXF1ZXN0Lmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9TZXNzaW9u
SUQuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2luY2x1ZGUgPHd0Zi9SdW5Mb29w
Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29y
ay9XZWJSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDE2Nzc5NykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMCw2ICsxMzAsMjIgQEAgdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2
ZVJlc3BvbgogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OkNv
bnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlKCkpOwogfQogCit2b2lkIFdlYlJlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNw
b25zZSwgY29uc3QgQ2VydGlmaWNhdGVJbmZvJiBjZXJ0aWZpY2F0ZUluZm8sIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgZGF0YSwgaW50NjRfdCBlbmNvZGVkRGF0YUxlbmd0aCwgZG91YmxlIGZp
bmlzaFRpbWUpCit7CisgICAgTE9HKE5ldHdvcmssICIoV2ViUHJvY2VzcykgV2ViUmVzb3VyY2VM
b2FkZXI6OmRpZFJlY2VpdmVDb21wbGV0ZVJlc3BvbnNlIGZvciAnJXMnLiBTdGF0dXMgJWQuIiwg
bV9jb3JlTG9hZGVyLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZXNwb25zZS5odHRw
U3RhdHVzQ29kZSgpKTsKKworICAgIFJlZjxXZWJSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhp
cyk7CisKKyAgICBkaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKHJlc3BvbnNl
LCBjZXJ0aWZpY2F0ZUluZm8sIGZhbHNlKTsKKyAgICBpZiAoIW1fY29yZUxvYWRlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIGRpZFJlY2VpdmVE
YXRhKGRhdGEsIGVuY29kZWREYXRhTGVuZ3RoKTsKKyAgICBpZiAoIW1fY29yZUxvYWRlcikKKyAg
ICAgICAgcmV0dXJuOworICAgIGRpZEZpbmlzaFJlc291cmNlTG9hZChmaW5pc2hUaW1lKTsKK30K
Kwogdm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgSVBDOjpEYXRh
UmVmZXJlbmNlJiBkYXRhLCBpbnQ2NF90IGVuY29kZWREYXRhTGVuZ3RoKQogewogICAgIExPRyhO
ZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlRGF0YSBv
ZiBzaXplICVpIGZvciAnJXMnIiwgKGludClkYXRhLnNpemUoKSwgbV9jb3JlTG9hZGVyLT51cmwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5oCShyZXZpc2lvbiAxNjc3
OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
d2lsbFNlbmRSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOwogICAgIHZvaWQgZGlk
U2VuZERhdGEodWludDY0X3QgYnl0ZXNTZW50LCB1aW50NjRfdCB0b3RhbEJ5dGVzVG9CZVNlbnQp
OwogICAgIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZv
JiwgYm9vbCBuZWVkc0NvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlTWVzc2FnZSk7CisgICAgdm9p
ZCBkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25zZShjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3Bv
bnNlJiwgY29uc3QgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvJiwgY29uc3QgSVBDOjpEYXRhUmVm
ZXJlbmNlJiwgaW50NjRfdCBlbmNvZGVkRGF0YUxlbmd0aCwgZG91YmxlIGZpbmlzaFRpbWUpOwog
ICAgIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgSVBDOjpEYXRhUmVmZXJlbmNlJiwgaW50NjRf
dCBlbmNvZGVkRGF0YUxlbmd0aCk7CiAgICAgdm9pZCBkaWRGaW5pc2hSZXNvdXJjZUxvYWQoZG91
YmxlIGZpbmlzaFRpbWUpOwogICAgIHZvaWQgZGlkRmFpbFJlc291cmNlTG9hZChjb25zdCBXZWJD
b3JlOjpSZXNvdXJjZUVycm9yJik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05l
dHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmlu
CShyZXZpc2lvbiAxNjc3OTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsv
V2ViUmVzb3VyY2VMb2FkZXIubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDcgQEAgbWVzc2FnZXMgLT4gV2ViUmVzb3VyY2VMb2FkZXIgTGVnYWN5UmVjZQogICAgIFdpbGxT
ZW5kUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCwgV2ViQ29yZTo6UmVz
b3VyY2VSZXNwb25zZSByZWRpcmVjdFJlc3BvbnNlKQogICAgIERpZFNlbmREYXRhKHVpbnQ2NF90
IGJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc1RvQmVTZW50KQogICAgIERpZFJlY2VpdmVS
ZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8oV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNw
b25zZSwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbywgYm9vbCBuZWVk
c0NvbnRpbnVlRGlkUmVjZWl2ZVJlc3BvbnNlTWVzc2FnZSkKKyAgICBEaWRSZWNlaXZlQ29tcGxl
dGVSZXNwb25zZShXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlIHJlc3BvbnNlLCBXZWJDb3JlOjpD
ZXJ0aWZpY2F0ZUluZm8gY2VydGlmaWNhdGVJbmZvLCBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YSwg
aW50NjRfdCBlbmNvZGVkRGF0YUxlbmd0aCwgZG91YmxlIGZpbmlzaFRpbWUpCiAgICAgRGlkUmVj
ZWl2ZURhdGEoSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIGludDY0X3QgZW5jb2RlZERhdGFMZW5n
dGgpCiAgICAgRGlkRmluaXNoUmVzb3VyY2VMb2FkKGRvdWJsZSBmaW5pc2hUaW1lKQogICAgIERp
ZEZhaWxSZXNvdXJjZUxvYWQoV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBlcnJvcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230259</attachid>
            <date>2014-04-27 02:36:10 -0700</date>
            <delta_ts>2014-04-29 07:44:14 -0700</delta_ts>
            <desc>updated</desc>
            <filename>response-coalesce-5.patch</filename>
            <type>text/plain</type>
            <size>14014</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzg1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA0LTI3ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDb2FsZXNjZSByZXNwb25zZXMg
b24gbmV0d29yayBwcm9jZXNzIHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMjIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKIDIwMTQtMDQtMjcgIERhdmlkIEtp
bHplciAgPGRka2lsemVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsIG91dCBjaGFuZ2VzIG5v
dCBwYXJ0IG9mIHRoZSBwYXRjaCByZXZpZXdlZCBmb3IgQnVnIDEzMjA4OQpJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5leHAuaW4JKHJldmlzaW9uIDE2Nzc5NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsNiArMjMzLDcgQEAgX19aTjdXZWJDb3JlMTJT
aGFyZWRCdWZmZXIxMmNyZWF0ZUNGRGF0YQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXIxMmNy
ZWF0ZU5TRGF0YUV2CiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjI0Y3JlYXRlV2l0aENvbnRl
bnRzT2ZGaWxlRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXI2YXBw
ZW5kRVBLY2oKK19fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyNmFwcGVuZEVQUzBfCiBfX1pON1dl
YkNvcmUxMlNoYXJlZEJ1ZmZlckMxRVBLY2oKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyQzFF
UEtoagogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXJDMUV2CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNjc4NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzNCBAQAorMjAxNC0wNC0yNyAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQ29hbGVzY2UgcmVzcG9uc2VzIG9uIG5ldHdvcmsgcHJvY2VzcyBz
aWRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzIy
MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFRvIHJlZHVjZSBJUEMgd2Ugc2hvdWxkIGNvYWxlc2NlIHJlc3BvbnNlcyBpbiBuZXR3b3Jr
IHByb2Nlc3MgYW5kIHNlbmQgdGhlbSBvdmVyIHdpdGggc2luZ2xlIElQQyBjYWxsLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OkFzeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2Vi
S2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQnVmZmVyKToK
KyAgICAgICAgKFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlkRmlu
aXNoTG9hZGluZyk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJD
bGllbnQ6OmRpZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9h
ZGVyQ2xpZW50OjpkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25zZSk6CisgICAgICAgIChX
ZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmNsZWFyQ29hbGVzY2VkUmVz
cG9uc2UpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
OjpyZXNwb25zZUNvYWxlc2NlVGltZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAgICAgQ29h
bGVzY2UgdGhlIHJlc3BvbnNlLiBDb21wbGV0ZWQgcmVzcG9uc2UgaXMgc2VudCBvbiBkaWRGaW5p
c2hMb2FkaW5nLiBJZiB0aGUgY29hbGVzY2UgdGltZXIgZmlyZXMKKyAgICAgICAgICAgIGJlZm9y
ZSB0aGF0IHRoZSBkYXRhIGFjY3VtdWxhdGVkIHNvIGZhciBpcyBkaXNwYXRjaGVkLgorCisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOgor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25zZSk6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluOgorICAg
ICAgICAKKyAgICAgICAgICAgIEFkZCBhIG5ldyBtZXNzYWdlIHR5cGUgdGhhdCBjb3ZlcnMgZGlk
UmVjZWl2ZVJlc3BvbnNlLCBkaWRSZWNlaXZlQnVmZmVyIGFuZCBkaWRGaW5pc2hMb2FkaW5nIGlu
IGEgc2luZ2xlIG1lc3NhZ2UuCisKIDIwMTQtMDQtMjYgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE2Nzc3NSk6IFNhZmFyaSBj
cmFzaGVzIGluIFZpZXdTbmFwc2hvdFN0b3JlOjpwcnVuZVNuYXBzaG90cyBhZnRlciBsb2FkaW5n
IDIwIHBhZ2VzCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9Bc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9Bc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcAkocmV2aXNp
b24gMTY3Nzk3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3Vz
TmV0d29ya0xvYWRlckNsaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAg
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogQXN5bmNocm9u
b3VzTmV0d29ya0xvYWRlckNsaWVudDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudCgp
CisgICAgOiBtX3Jlc3BvbnNlQ29hbGVzY2luZ1RpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
JkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OnJlc3BvbnNlQ29hbGVzY2luZ1RpbWVy
RmlyZWQpCisgICAgLCBtX2NvYWxlc2NpbmdMb2FkZXIobnVsbHB0cikKKyAgICAsIG1fY29hbGVz
Y2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgoMCkKIHsKIH0KIApAQCAtNjMsNiArNjYsMTcg
QEAgdm9pZCBBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpjYQogCiB2b2lkIEFzeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShOZXR3b3JrUmVz
b3VyY2VMb2FkZXIqIGxvYWRlciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7
CisgICAgaWYgKCFsb2FkZXItPmlzTG9hZGluZ01haW5SZXNvdXJjZSgpKSB7CisgICAgICAgIEFT
U0VSVCghbV9jb2FsZXNjaW5nTG9hZGVyKTsKKyAgICAgICAgbV9jb2FsZXNjaW5nUmVzcG9uc2Ug
PSByZXNwb25zZTsKKyAgICAgICAgbV9jb2FsZXNjaW5nTG9hZGVyID0gbG9hZGVyOworCisgICAg
ICAgIC8vIEZJWE1FOiBTb21lIHJlc291cmNlcyBjYW4gb25seSBiZSB1c2VkIHdoZW4gY29tcGxl
dGVseSBsb2FkZWQuIFdlIHNob3VsZCBhbHdheXMgZGVsYXkgdGhvc2UgdW50aWwgY29tcGxldGlv
bi4KKyAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSByZXNwb25zZUNvYWxlc2NpbmdUaW1lID0g
MC41OworICAgICAgICBtX3Jlc3BvbnNlQ29hbGVzY2luZ1RpbWVyLnN0YXJ0T25lU2hvdChyZXNw
b25zZUNvYWxlc2NpbmdUaW1lKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGxvYWRl
ci0+c2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlk
UmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhyZXNwb25zZSwgQ2VydGlmaWNhdGVJ
bmZvKHJlc3BvbnNlKSwgbG9hZGVyLT5pc0xvYWRpbmdNYWluUmVzb3VyY2UoKSkpOwogfQogCkBA
IC03Miw2ICs4NiwxMiBAQCB2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRp
CiAgICAgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSBzaGFyZWFibGVSZXNvdXJjZUhhbmRsZTsK
ICAgICBOZXR3b3JrUmVzb3VyY2VMb2FkZXI6OnRyeUdldFNoYXJlYWJsZUhhbmRsZUZyb21TaGFy
ZWRCdWZmZXIoc2hhcmVhYmxlUmVzb3VyY2VIYW5kbGUsIGJ1ZmZlcik7CiAgICAgaWYgKCFzaGFy
ZWFibGVSZXNvdXJjZUhhbmRsZS5pc051bGwoKSkgeworICAgICAgICBpZiAobV9yZXNwb25zZUNv
YWxlc2NpbmdUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fY29hbGVz
Y2luZ1Jlc3BvbnNlLmlzTnVsbCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbV9jb2FsZXNjaW5n
UmVzcG9uc2VEYXRhKTsKKyAgICAgICAgICAgIGxvYWRlci0+c2VuZChNZXNzYWdlczo6V2ViUmVz
b3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8obV9jb2Fs
ZXNjaW5nUmVzcG9uc2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSksIGZh
bHNlKSk7CisgICAgICAgICAgICBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7CisgICAgICAgIH0K
ICAgICAgICAgLy8gU2luY2Ugd2UncmUgZGVsaXZlcmluZyB0aGlzIHJlc291cmNlIGJ5IG91cnNl
bHZlcyBhbGwgYXQgb25jZSBhbmQgZG9uJ3QgbmVlZCBhbnltb3JlIGRhdGEgb3IgY2FsbGJhY2tz
IGZyb20gdGhlIG5ldHdvcmsgbGF5ZXIsIGFib3J0IHRoZSBsb2FkZXIuCiAgICAgICAgIGxvYWRl
ci0+YWJvcnQoKTsKICAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxv
YWRlcjo6RGlkUmVjZWl2ZVJlc291cmNlKHNoYXJlYWJsZVJlc291cmNlSGFuZGxlLCBjdXJyZW50
VGltZSgpKSk7CkBAIC03OSw2ICs5OSwxNyBAQCB2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQ6OmRpCiAgICAgfQogI2VuZGlmIC8vIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVR
VUlSRUQgPj0gMTA5MAogCisgICAgaWYgKG1fcmVzcG9uc2VDb2FsZXNjaW5nVGltZXIuaXNBY3Rp
dmUoKSkgeworICAgICAgICBBU1NFUlQobV9jb2FsZXNjaW5nTG9hZGVyID09IGxvYWRlcik7Cisg
ICAgICAgIEFTU0VSVCghbV9jb2FsZXNjaW5nUmVzcG9uc2UuaXNOdWxsKCkpOworICAgICAgICBp
ZiAobV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhKQorICAgICAgICAgICAgbV9jb2FsZXNjaW5nUmVz
cG9uc2VEYXRhLT5hcHBlbmQoYnVmZmVyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9j
b2FsZXNjaW5nUmVzcG9uc2VEYXRhID0gYnVmZmVyOworICAgICAgICBtX2NvYWxlc2NpbmdSZXNw
b25zZUVuY29kZWREYXRhTGVuZ3RoICs9IGVuY29kZWREYXRhTGVuZ3RoOworICAgICAgICByZXR1
cm47CisgICAgfQorCiAgICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2UocmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNpemUo
KSk7CiAgICAgbG9hZGVyLT5zZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2FnZXM6OldlYlJlc291
cmNlTG9hZGVyOjpEaWRSZWNlaXZlRGF0YShkYXRhUmVmZXJlbmNlLCBlbmNvZGVkRGF0YUxlbmd0
aCkpOwogfQpAQCAtOTAsMTQgKzEyMSw1OCBAQCB2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQ6OmRpCiAKIHZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlk
RmluaXNoTG9hZGluZyhOZXR3b3JrUmVzb3VyY2VMb2FkZXIqIGxvYWRlciwgZG91YmxlIGZpbmlz
aFRpbWUpCiB7CisgICAgaWYgKG1fcmVzcG9uc2VDb2FsZXNjaW5nVGltZXIuaXNBY3RpdmUoKSkg
eworICAgICAgICBBU1NFUlQoIW1fY29hbGVzY2luZ1Jlc3BvbnNlLmlzTnVsbCgpKTsKKyAgICAg
ICAgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGFSZWZlcmVuY2U7CisgICAgICAgIGlmIChtX2NvYWxl
c2NpbmdSZXNwb25zZURhdGEpCisgICAgICAgICAgICBkYXRhUmVmZXJlbmNlID0gSVBDOjpEYXRh
UmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KG1fY29hbGVzY2luZ1Jl
c3BvbnNlRGF0YS0+ZGF0YSgpKSwgbV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhLT5zaXplKCkpOwor
CisgICAgICAgIGxvYWRlci0+c2VuZEFib3J0aW5nT25GYWlsdXJlKE1lc3NhZ2VzOjpXZWJSZXNv
dXJjZUxvYWRlcjo6RGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UobV9jb2FsZXNjaW5nUmVzcG9u
c2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSksIGRhdGFSZWZlcmVuY2Us
IG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgsIGZpbmlzaFRpbWUpKTsKKyAg
ICAgICAgY2xlYXJDb2FsZXNjZWRSZXNwb25zZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
CiAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkRmluaXNo
UmVzb3VyY2VMb2FkKGZpbmlzaFRpbWUpKTsKIH0KIAogdm9pZCBBc3luY2hyb25vdXNOZXR3b3Jr
TG9hZGVyQ2xpZW50OjpkaWRGYWlsKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyLCBjb25z
dCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBpZiAobV9yZXNwb25zZUNvYWxlc2NpbmdU
aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25z
ZShsb2FkZXIpOworCiAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRl
cjo6RGlkRmFpbFJlc291cmNlTG9hZChlcnJvcikpOwogfQogCit2b2lkIEFzeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQ6OmRpc3BhdGNoUGFydGlhbENvYWxlc2NlZFJlc3BvbnNlKE5ldHdv
cmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VSVChtX2NvYWxlc2NpbmdMb2Fk
ZXIgPT0gbG9hZGVyKTsKKyAgICBBU1NFUlQoIW1fY29hbGVzY2luZ1Jlc3BvbnNlLmlzTnVsbCgp
KTsKKyAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3Vy
Y2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8obV9jb2FsZXNj
aW5nUmVzcG9uc2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSksIGZhbHNl
KSk7CisKKyAgICBpZiAobV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhKSB7CisgICAgICAgIElQQzo6
RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhf
dCo+KG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YS0+ZGF0YSgpKSwgbV9jb2FsZXNjaW5nUmVzcG9u
c2VEYXRhLT5zaXplKCkpOworICAgICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShN
ZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFSZWZlcmVuY2Us
IG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgpKTsKKyAgICB9CisKKyAgICBj
bGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xv
YWRlckNsaWVudDo6Y2xlYXJDb2FsZXNjZWRSZXNwb25zZSgpCit7CisgICAgbV9jb2FsZXNjaW5n
UmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CisgICAgbV9jb2FsZXNjaW5nTG9hZGVyID0g
bnVsbHB0cjsKKyAgICBtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEgPSBudWxscHRyOworICAgIG1f
Y29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGggPSAwOworICAgIG1fcmVzcG9uc2VD
b2FsZXNjaW5nVGltZXIuc3RvcCgpOworfQorCit2b2lkIEFzeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQ6OnJlc3BvbnNlQ29hbGVzY2luZ1RpbWVyRmlyZWQoKQoreworICAgIEFTU0VSVCht
X2NvYWxlc2NpbmdMb2FkZXIpOworICAgIGRpc3BhdGNoUGFydGlhbENvYWxlc2NlZFJlc3BvbnNl
KG1fY29hbGVzY2luZ0xvYWRlcik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05ldHdvcmtMb2Fk
ZXJDbGllbnQuaAkocmV2aXNpb24gMTY3Nzk3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJOZXR3b3JrTG9hZGVyQ2xpZW50LmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVz
cG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiAjaWYgRU5BQkxFKE5FVFdPUktf
UFJPQ0VTUykKIApAQCAtNDcsNiArNDksMTYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQg
ZGlkU2VuZERhdGEoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9uZyBsb25nIGJ5
dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkgb3ZlcnJpZGU7
CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0d29ya1Jlc291cmNlTG9hZGVy
KiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGYWls
KE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNlRXJyb3ImKSBv
dmVycmlkZTsKKworICAgIHZvaWQgZGlzcGF0Y2hQYXJ0aWFsQ29hbGVzY2VkUmVzcG9uc2UoTmV0
d29ya1Jlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7
CisgICAgdm9pZCByZXNwb25zZUNvYWxlc2NpbmdUaW1lckZpcmVkKCk7CisKKyAgICBSdW5Mb29w
OjpUaW1lcjxBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50PiBtX3Jlc3BvbnNlQ29hbGVz
Y2luZ1RpbWVyOworICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbV9jb2FsZXNjaW5nTG9hZGVy
OworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9jb2FsZXNjaW5nUmVzcG9uc2U7Cisg
ICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRh
OworICAgIGxvbmcgbG9uZyBtX2NvYWxlc2NpbmdSZXNwb25zZUVuY29kZWREYXRhTGVuZ3RoOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTY3
Nzk3KQorKysgU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRl
ck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lv
bklELmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9v
cC5oPgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNl
TG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdv
cmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNjc3OTcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzAsNiArMTMwLDIyIEBAIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2Vp
dmVSZXNwb24KICAgICAgICAgc2VuZChNZXNzYWdlczo6TmV0d29ya1Jlc291cmNlTG9hZGVyOjpD
b250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpKTsKIH0KIAordm9pZCBXZWJSZXNvdXJjZUxvYWRl
cjo6ZGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVz
cG9uc2UsIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2VydGlmaWNhdGVJbmZvLCBjb25zdCBJUEM6
OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGludDY0X3QgZW5jb2RlZERhdGFMZW5ndGgsIGRvdWJsZSBm
aW5pc2hUaW1lKQoreworICAgIExPRyhOZXR3b3JrLCAiKFdlYlByb2Nlc3MpIFdlYlJlc291cmNl
TG9hZGVyOjpkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25zZSBmb3IgJyVzJy4gU3RhdHVzICVkLiIs
IG1fY29yZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVzcG9uc2UuaHR0
cFN0YXR1c0NvZGUoKSk7CisKKyAgICBSZWY8V2ViUmVzb3VyY2VMb2FkZXI+IHByb3RlY3QoKnRo
aXMpOworCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlV2l0aENlcnRpZmljYXRlSW5mbyhyZXNwb25z
ZSwgY2VydGlmaWNhdGVJbmZvLCBmYWxzZSk7CisgICAgaWYgKCFtX2NvcmVMb2FkZXIpCisgICAg
ICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEuaXNFbXB0eSgpKQorICAgICAgICBkaWRSZWNlaXZl
RGF0YShkYXRhLCBlbmNvZGVkRGF0YUxlbmd0aCk7CisgICAgaWYgKCFtX2NvcmVMb2FkZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBkaWRGaW5pc2hSZXNvdXJjZUxvYWQoZmluaXNoVGltZSk7Cit9
CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IElQQzo6RGF0
YVJlZmVyZW5jZSYgZGF0YSwgaW50NjRfdCBlbmNvZGVkRGF0YUxlbmd0aCkKIHsKICAgICBMT0co
TmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEg
b2Ygc2l6ZSAlaSBmb3IgJyVzJyIsIChpbnQpZGF0YS5zaXplKCksIG1fY29yZUxvYWRlci0+dXJs
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTY3
Nzk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9h
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHJpdmF0ZToKICAgICB2b2lk
IHdpbGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVjdFJlc3BvbnNlKTsKICAgICB2b2lkIGRp
ZFNlbmREYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCwgdWludDY0X3QgdG90YWxCeXRlc1RvQmVTZW50
KTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8oY29uc3Qg
V2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5m
byYsIGJvb2wgbmVlZHNDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpOworICAgIHZv
aWQgZGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGNvbnN0IElQQzo6RGF0YVJl
ZmVyZW5jZSYsIGludDY0X3QgZW5jb2RlZERhdGFMZW5ndGgsIGRvdWJsZSBmaW5pc2hUaW1lKTsK
ICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGludDY0
X3QgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgIHZvaWQgZGlkRmluaXNoUmVzb3VyY2VMb2FkKGRv
dWJsZSBmaW5pc2hUaW1lKTsKICAgICB2b2lkIGRpZEZhaWxSZXNvdXJjZUxvYWQoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9O
ZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5p
bgkocmV2aXNpb24gMTY3Nzk3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3Jr
L1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICsz
MCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlJlc291cmNlTG9hZGVyIExlZ2FjeVJlY2UKICAgICBXaWxs
U2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QsIFdlYkNvcmU6OlJl
c291cmNlUmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZSkKICAgICBEaWRTZW5kRGF0YSh1aW50NjRf
dCBieXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0ZXNUb0JlU2VudCkKICAgICBEaWRSZWNlaXZl
UmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVz
cG9uc2UsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBjZXJ0aWZpY2F0ZUluZm8sIGJvb2wgbmVl
ZHNDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3NhZ2UpCisgICAgRGlkUmVjZWl2ZUNvbXBs
ZXRlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSwgV2ViQ29yZTo6
Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbywgSVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEs
IGludDY0X3QgZW5jb2RlZERhdGFMZW5ndGgsIGRvdWJsZSBmaW5pc2hUaW1lKQogICAgIERpZFJl
Y2VpdmVEYXRhKElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhLCBpbnQ2NF90IGVuY29kZWREYXRhTGVu
Z3RoKQogICAgIERpZEZpbmlzaFJlc291cmNlTG9hZChkb3VibGUgZmluaXNoVGltZSkKICAgICBE
aWRGYWlsUmVzb3VyY2VMb2FkKFdlYkNvcmU6OlJlc291cmNlRXJyb3IgZXJyb3IpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>230377</attachid>
            <date>2014-04-29 07:44:14 -0700</date>
            <delta_ts>2014-07-13 07:28:09 -0700</delta_ts>
            <desc>disable coalescing for xhr and multipart responses</desc>
            <filename>response-coalesce-6.patch</filename>
            <type>text/plain</type>
            <size>18940</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NzkyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDE0LTA0LTI5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDb2FsZXNjZSByZXNwb25zZXMg
b24gbmV0d29yayBwcm9jZXNzIHNpZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEzMjIyOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisKIDIwMTQtMDQtMjkgIEFuZHJlaSBC
dWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAgICAgU3RvcmUgdGhlIGNvbnRhaW5pbmcg
cmVnaW9uIG1hcCBpbnNpZGUgdGhlIGZsb3cgdGhyZWFkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmV4cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5p
bgkocmV2aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdv
cmtpbmcgY29weSkKQEAgLTIzMyw2ICsyMzMsNyBAQCBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZl
cjEyY3JlYXRlQ0ZEYXRhCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjEyY3JlYXRlTlNEYXRh
RXYKIF9fWk43V2ViQ29yZTEyU2hhcmVkQnVmZmVyMjRjcmVhdGVXaXRoQ29udGVudHNPZkZpbGVF
UktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUxMlNoYXJlZEJ1ZmZlcjZhcHBlbmRFUEtjagor
X19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXI2YXBwZW5kRVBTMF8KIF9fWk43V2ViQ29yZTEyU2hh
cmVkQnVmZmVyQzFFUEtjagogX19aTjdXZWJDb3JlMTJTaGFyZWRCdWZmZXJDMUVQS2hqCiBfX1pO
N1dlYkNvcmUxMlNoYXJlZEJ1ZmZlckMxRXYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Nzky
OSkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDUzIEBACisyMDE0LTA0LTI5ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDb2FsZXNjZSByZXNwb25zZXMgb24gbmV0d29yayBwcm9jZXNzIHNpZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjIyOQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVG8gcmVk
dWNlIElQQyB3ZSBzaG91bGQgY29hbGVzY2UgcmVzcG9uc2VzIGluIG5ldHdvcmsgcHJvY2VzcyBh
bmQgc2VuZCB0aGVtIG92ZXIgd2l0aCBzaW5nbGUgSVBDIGNhbGwuCisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9Bc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6QXN5bmNocm9ub3VzTmV0
d29ya0xvYWRlckNsaWVudCk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtM
b2FkZXJDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIAorICAgICAgICAgICAg
RGlzYWJsZSBjb2FsZXNpbmcgZm9yIG11bHRpcGFydC94LXJlc3BvbnNlLW1peGVkIGFzIHRoZXkg
bWF5IGdlbmVyYXRlIG11bHRpcGxlIHJlc3BvbnNlcy4KKworICAgICAgICAoV2ViS2l0OjpBc3lu
Y2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlQnVmZmVyKToKKyAgICAgICAg
KFdlYktpdDo6QXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGlkRmluaXNoTG9hZGlu
Zyk6CisgICAgICAgIChXZWJLaXQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRp
ZEZhaWwpOgorICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaFBhcnRpYWxDb2FsZXNjZWRSZXNwb25zZSk6CisgICAgICAgIChXZWJLaXQ6OkFz
eW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmNsZWFyQ29hbGVzY2VkUmVzcG9uc2UpOgor
ICAgICAgICAoV2ViS2l0OjpBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpyZXNwb25z
ZUNvYWxlc2NlVGltZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAgICAgQ29hbGVzY2UgdGhl
IHJlc3BvbnNlLiBDb21wbGV0ZWQgcmVzcG9uc2UgaXMgc2VudCBvbiBkaWRGaW5pc2hMb2FkaW5n
LiBJZiB0aGUgY29hbGVzY2UgdGltZXIgZmlyZXMKKyAgICAgICAgICAgIGJlZm9yZSB0aGF0IHRo
ZSBkYXRhIGFjY3VtdWxhdGVkIHNvIGZhciBpcyBkaXNwYXRjaGVkLgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oOgorICAgICAgICAq
IE5ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgICogTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMb2FkZXIpOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUmVzb3VyY2VMb2FkZXI6OmFsbG93UmVzcG9uc2VDb2FsZXNjaW5nKToKKyAgICAgICAgKiBT
aGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHA6CisgICAgICAg
IChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzOjpOZXR3b3JrUmVzb3VyY2VM
b2FkUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtSZXNvdXJjZUxvYWRQYXJh
bWV0ZXJzOjplbmNvZGUpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUmVzb3VyY2VMb2FkUGFy
YW1ldGVyczo6ZGVjb2RlKToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgYWxsb3dSZXNwb25z
ZUNvYWxlc2NpbmcgZmxhZy4gTWFpbiByZXNvdXJjZSBhbmQgWEhSIGlzIG5vdCBhbGxvd2VkIHRv
IGNvYWxlc2NlIGFzIGl0IG1heSBhbHRlcgorICAgICAgICAgICAgb2JzZXJ2YWJsZSBzZW1hbnRp
Y3MuCisKKyAgICAgICAgKiBTaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1l
dGVycy5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hl
ZHVsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXI6OnNj
aGVkdWxlTG9hZCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9h
ZGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVD
b21wbGV0ZVJlc3BvbnNlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkZXIuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2Fk
ZXIubWVzc2FnZXMuaW46CisgICAgICAgIAorICAgICAgICAgICAgQWRkIGEgbmV3IG1lc3NhZ2Ug
dHlwZSB0aGF0IGNvdmVycyBkaWRSZWNlaXZlUmVzcG9uc2UsIGRpZFJlY2VpdmVCdWZmZXIgYW5k
IGRpZEZpbmlzaExvYWRpbmcgaW4gYSBzaW5nbGUgbWVzc2FnZS4KKwogMjAxNC0wNC0yOSAgWmFu
IERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV0syXSBB
dm9pZCBWZWN0b3IgY29waWVzIGluIFdlYlZpZXdCYXNlSW5wdXRNZXRob2RGaWx0ZXI6OnNldFBy
ZWVkaXQoKQpJbmRleDogU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3Vz
TmV0d29ya0xvYWRlckNsaWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5jcHAJKHJldmlzaW9u
IDE2NzkyMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIEFzeW5jaHJvbm91
c05ldHdvcmtMb2FkZXJDbGllbnQ6OkFzeW5jaHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQoKQor
ICAgIDogbV9yZXNwb25zZUNvYWxlc2NpbmdUaW1lcihSdW5Mb29wOjptYWluKCksIHRoaXMsICZB
c3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpyZXNwb25zZUNvYWxlc2NpbmdUaW1lckZp
cmVkKQorICAgICwgbV9jb2FsZXNjaW5nTG9hZGVyKG51bGxwdHIpCisgICAgLCBtX2NvYWxlc2Np
bmdSZXNwb25zZUVuY29kZWREYXRhTGVuZ3RoKDApCiB7CiB9CiAKQEAgLTU5LDYgKzYyLDE3IEBA
IHZvaWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6Y2EKIAogdm9pZCBBc3luY2hy
b25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRSZWNlaXZlUmVzcG9uc2UoTmV0d29ya1Jlc291
cmNlTG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewor
ICAgIGlmIChsb2FkZXItPmFsbG93UmVzcG9uc2VDb2FsZXNjaW5nKCkgJiYgIXJlc3BvbnNlLmlz
TXVsdGlwYXJ0KCkpIHsKKyAgICAgICAgQVNTRVJUKCFtX2NvYWxlc2NpbmdMb2FkZXIpOworICAg
ICAgICBtX2NvYWxlc2NpbmdSZXNwb25zZSA9IHJlc3BvbnNlOworICAgICAgICBtX2NvYWxlc2Np
bmdMb2FkZXIgPSBsb2FkZXI7CisKKyAgICAgICAgLy8gRklYTUU6IFNvbWUgcmVzb3VyY2VzIGNh
biBvbmx5IGJlIHVzZWQgd2hlbiBjb21wbGV0ZWx5IGxvYWRlZC4gV2Ugc2hvdWxkIGFsd2F5cyBk
ZWxheSB0aG9zZSB1bnRpbCBjb21wbGV0aW9uLgorICAgICAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHJlc3BvbnNlQ29hbGVzY2luZ1RpbWUgPSAwLjU7CisgICAgICAgIG1fcmVzcG9uc2VDb2FsZXNj
aW5nVGltZXIuc3RhcnRPbmVTaG90KHJlc3BvbnNlQ29hbGVzY2luZ1RpbWUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCiAgICAgbG9hZGVyLT5zZW5kQWJvcnRpbmdPbkZhaWx1cmUoTWVzc2Fn
ZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJ
bmZvKHJlc3BvbnNlLCBDZXJ0aWZpY2F0ZUluZm8ocmVzcG9uc2UpLCBsb2FkZXItPmlzTG9hZGlu
Z01haW5SZXNvdXJjZSgpKSk7CiB9CiAKQEAgLTY4LDYgKzgyLDEyIEBAIHZvaWQgQXN5bmNocm9u
b3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGkKICAgICBTaGFyZWFibGVSZXNvdXJjZTo6SGFuZGxl
IHNoYXJlYWJsZVJlc291cmNlSGFuZGxlOwogICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlcjo6dHJ5
R2V0U2hhcmVhYmxlSGFuZGxlRnJvbVNoYXJlZEJ1ZmZlcihzaGFyZWFibGVSZXNvdXJjZUhhbmRs
ZSwgYnVmZmVyKTsKICAgICBpZiAoIXNoYXJlYWJsZVJlc291cmNlSGFuZGxlLmlzTnVsbCgpKSB7
CisgICAgICAgIGlmIChtX3Jlc3BvbnNlQ29hbGVzY2luZ1RpbWVyLmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgICAgIEFTU0VSVCghbV9jb2FsZXNjaW5nUmVzcG9uc2UuaXNOdWxsKCkpOworICAgICAg
ICAgICAgQVNTRVJUKCFtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEpOworICAgICAgICAgICAgbG9h
ZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZVJlc3BvbnNl
V2l0aENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSwgQ2VydGlmaWNhdGVJbmZv
KG1fY29hbGVzY2luZ1Jlc3BvbnNlKSwgZmFsc2UpKTsKKyAgICAgICAgICAgIGNsZWFyQ29hbGVz
Y2VkUmVzcG9uc2UoKTsKKyAgICAgICAgfQogICAgICAgICAvLyBTaW5jZSB3ZSdyZSBkZWxpdmVy
aW5nIHRoaXMgcmVzb3VyY2UgYnkgb3Vyc2VsdmVzIGFsbCBhdCBvbmNlIGFuZCBkb24ndCBuZWVk
IGFueW1vcmUgZGF0YSBvciBjYWxsYmFja3MgZnJvbSB0aGUgbmV0d29yayBsYXllciwgYWJvcnQg
dGhlIGxvYWRlci4KICAgICAgICAgbG9hZGVyLT5hYm9ydCgpOwogICAgICAgICBsb2FkZXItPnNl
bmQoTWVzc2FnZXM6OldlYlJlc291cmNlTG9hZGVyOjpEaWRSZWNlaXZlUmVzb3VyY2Uoc2hhcmVh
YmxlUmVzb3VyY2VIYW5kbGUsIGN1cnJlbnRUaW1lKCkpKTsKQEAgLTc1LDYgKzk1LDE3IEBAIHZv
aWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGkKICAgICB9CiAjZW5kaWYgLy8g
X19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAKKyAgICBpZiAobV9yZXNw
b25zZUNvYWxlc2NpbmdUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVChtX2NvYWxl
c2NpbmdMb2FkZXIgPT0gbG9hZGVyKTsKKyAgICAgICAgQVNTRVJUKCFtX2NvYWxlc2NpbmdSZXNw
b25zZS5pc051bGwoKSk7CisgICAgICAgIGlmIChtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEpCisg
ICAgICAgICAgICBtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEtPmFwcGVuZChidWZmZXIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEgPSBidWZmZXI7
CisgICAgICAgIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGggKz0gZW5jb2Rl
ZERhdGFMZW5ndGg7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBJUEM6OkRhdGFSZWZl
cmVuY2UgZGF0YVJlZmVyZW5jZShyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihidWZm
ZXItPmRhdGEoKSksIGJ1ZmZlci0+c2l6ZSgpKTsKICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09u
RmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFS
ZWZlcmVuY2UsIGVuY29kZWREYXRhTGVuZ3RoKSk7CiB9CkBAIC04NiwxNCArMTE3LDU4IEBAIHZv
aWQgQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudDo6ZGkKIAogdm9pZCBBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRGaW5pc2hMb2FkaW5nKE5ldHdvcmtSZXNvdXJjZUxv
YWRlciogbG9hZGVyLCBkb3VibGUgZmluaXNoVGltZSkKIHsKKyAgICBpZiAobV9yZXNwb25zZUNv
YWxlc2NpbmdUaW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIEFTU0VSVCghbV9jb2FsZXNjaW5n
UmVzcG9uc2UuaXNOdWxsKCkpOworICAgICAgICBJUEM6OkRhdGFSZWZlcmVuY2UgZGF0YVJlZmVy
ZW5jZTsKKyAgICAgICAgaWYgKG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YSkKKyAgICAgICAgICAg
IGRhdGFSZWZlcmVuY2UgPSBJUEM6OkRhdGFSZWZlcmVuY2UocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4obV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhLT5kYXRhKCkpLCBtX2NvYWxlc2Np
bmdSZXNwb25zZURhdGEtPnNpemUoKSk7CisKKyAgICAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJSZXNvdXJjZUxvYWRlcjo6RGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UobV9jb2FsZXNj
aW5nUmVzcG9uc2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25zZSksIGRhdGFS
ZWZlcmVuY2UsIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgsIGZpbmlzaFRp
bWUpKTsKKyAgICAgICAgY2xlYXJDb2FsZXNjZWRSZXNwb25zZSgpOworICAgICAgICByZXR1cm47
CisgICAgfQorCiAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNvdXJjZUxvYWRlcjo6
RGlkRmluaXNoUmVzb3VyY2VMb2FkKGZpbmlzaFRpbWUpKTsKIH0KIAogdm9pZCBBc3luY2hyb25v
dXNOZXR3b3JrTG9hZGVyQ2xpZW50OjpkaWRGYWlsKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9h
ZGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKKyAgICBpZiAobV9yZXNwb25zZUNv
YWxlc2NpbmdUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBkaXNwYXRjaFBhcnRpYWxDb2FsZXNj
ZWRSZXNwb25zZShsb2FkZXIpOworCiAgICAgbG9hZGVyLT5zZW5kKE1lc3NhZ2VzOjpXZWJSZXNv
dXJjZUxvYWRlcjo6RGlkRmFpbFJlc291cmNlTG9hZChlcnJvcikpOwogfQogCit2b2lkIEFzeW5j
aHJvbm91c05ldHdvcmtMb2FkZXJDbGllbnQ6OmRpc3BhdGNoUGFydGlhbENvYWxlc2NlZFJlc3Bv
bnNlKE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbG9hZGVyKQoreworICAgIEFTU0VSVChtX2NvYWxl
c2NpbmdMb2FkZXIgPT0gbG9hZGVyKTsKKyAgICBBU1NFUlQoIW1fY29hbGVzY2luZ1Jlc3BvbnNl
LmlzTnVsbCgpKTsKKyAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09uRmFpbHVyZShNZXNzYWdlczo6
V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVSZXNwb25zZVdpdGhDZXJ0aWZpY2F0ZUluZm8o
bV9jb2FsZXNjaW5nUmVzcG9uc2UsIENlcnRpZmljYXRlSW5mbyhtX2NvYWxlc2NpbmdSZXNwb25z
ZSksIGZhbHNlKSk7CisKKyAgICBpZiAobV9jb2FsZXNjaW5nUmVzcG9uc2VEYXRhKSB7CisgICAg
ICAgIElQQzo6RGF0YVJlZmVyZW5jZSBkYXRhUmVmZXJlbmNlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KG1fY29hbGVzY2luZ1Jlc3BvbnNlRGF0YS0+ZGF0YSgpKSwgbV9jb2FsZXNj
aW5nUmVzcG9uc2VEYXRhLT5zaXplKCkpOworICAgICAgICBsb2FkZXItPnNlbmRBYm9ydGluZ09u
RmFpbHVyZShNZXNzYWdlczo6V2ViUmVzb3VyY2VMb2FkZXI6OkRpZFJlY2VpdmVEYXRhKGRhdGFS
ZWZlcmVuY2UsIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGgpKTsKKyAgICB9
CisKKyAgICBjbGVhckNvYWxlc2NlZFJlc3BvbnNlKCk7Cit9CisKK3ZvaWQgQXN5bmNocm9ub3Vz
TmV0d29ya0xvYWRlckNsaWVudDo6Y2xlYXJDb2FsZXNjZWRSZXNwb25zZSgpCit7CisgICAgbV9j
b2FsZXNjaW5nUmVzcG9uc2UgPSBSZXNvdXJjZVJlc3BvbnNlKCk7CisgICAgbV9jb2FsZXNjaW5n
TG9hZGVyID0gbnVsbHB0cjsKKyAgICBtX2NvYWxlc2NpbmdSZXNwb25zZURhdGEgPSBudWxscHRy
OworICAgIG1fY29hbGVzY2luZ1Jlc3BvbnNlRW5jb2RlZERhdGFMZW5ndGggPSAwOworICAgIG1f
cmVzcG9uc2VDb2FsZXNjaW5nVGltZXIuc3RvcCgpOworfQorCit2b2lkIEFzeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQ6OnJlc3BvbnNlQ29hbGVzY2luZ1RpbWVyRmlyZWQoKQoreworICAg
IEFTU0VSVChtX2NvYWxlc2NpbmdMb2FkZXIpOworICAgIGRpc3BhdGNoUGFydGlhbENvYWxlc2Nl
ZFJlc3BvbnNlKG1fY29hbGVzY2luZ0xvYWRlcik7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoTkVUV09SS19QUk9DRVNTKQpJbmRleDogU291cmNlL1dl
YktpdDIvTmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL0FzeW5jaHJvbm91c05l
dHdvcmtMb2FkZXJDbGllbnQuaAkocmV2aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvQXN5bmNocm9ub3VzTmV0d29ya0xvYWRlckNsaWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpbmNsdWRlICJOZXR3b3JrTG9hZGVyQ2xpZW50
LmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlUmVzb3VyY2UuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1Jl
c291cmNlUmVzcG9uc2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogCiAjaWYgRU5BQkxF
KE5FVFdPUktfUFJPQ0VTUykKIApAQCAtNDcsNiArNDksMTYgQEAgcHJpdmF0ZToKICAgICB2aXJ0
dWFsIHZvaWQgZGlkU2VuZERhdGEoTmV0d29ya1Jlc291cmNlTG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRvdGFsQnl0ZXNUb0JlU2VudCkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoTmV0d29ya1Jlc291
cmNlTG9hZGVyKiwgZG91YmxlIGZpbmlzaFRpbWUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGYWlsKE5ldHdvcmtSZXNvdXJjZUxvYWRlciosIGNvbnN0IFdlYkNvcmU6OlJlc291cmNl
RXJyb3ImKSBvdmVycmlkZTsKKworICAgIHZvaWQgZGlzcGF0Y2hQYXJ0aWFsQ29hbGVzY2VkUmVz
cG9uc2UoTmV0d29ya1Jlc291cmNlTG9hZGVyKik7CisgICAgdm9pZCBjbGVhckNvYWxlc2NlZFJl
c3BvbnNlKCk7CisgICAgdm9pZCByZXNwb25zZUNvYWxlc2NpbmdUaW1lckZpcmVkKCk7CisKKyAg
ICBSdW5Mb29wOjpUaW1lcjxBc3luY2hyb25vdXNOZXR3b3JrTG9hZGVyQ2xpZW50PiBtX3Jlc3Bv
bnNlQ29hbGVzY2luZ1RpbWVyOworICAgIE5ldHdvcmtSZXNvdXJjZUxvYWRlciogbV9jb2FsZXNj
aW5nTG9hZGVyOworICAgIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9jb2FsZXNjaW5nUmVz
cG9uc2U7CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9jb2FsZXNjaW5nUmVz
cG9uc2VEYXRhOworICAgIGxvbmcgbG9uZyBtX2NvYWxlc2NpbmdSZXNwb25zZUVuY29kZWREYXRh
TGVuZ3RoOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtSZXNvdXJjZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDE2NzkyMykKKysrIFNvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdv
cmtSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgTmV0
d29ya1Jlc291cmNlTG9hZGVyOjpOZXR3b3JrUmVzb3VyY2VMbwogICAgICwgbV9zaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0KHBhcmFtZXRlcnMuc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCkKICAgICAsIG1faXNMb2FkaW5nTWFpblJlc291cmNl
KHBhcmFtZXRlcnMuaXNNYWluUmVzb3VyY2UpCiAgICAgLCBtX2RlZmVyc0xvYWRpbmcocGFyYW1l
dGVycy5kZWZlcnNMb2FkaW5nKQorICAgICwgbV9hbGxvd1Jlc3BvbnNlQ29hbGVzY2luZyhwYXJh
bWV0ZXJzLmFsbG93UmVzcG9uc2VDb2FsZXNjaW5nKQogICAgICwgbV9zYW5kYm94RXh0ZW5zaW9u
c0FyZUNvbnN1bWVkKGZhbHNlKQogICAgICwgbV9jb25uZWN0aW9uKGNvbm5lY3Rpb24pCiB7Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVzb3VyY2VMb2FkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUmVz
b3VyY2VMb2FkZXIuaAkocmV2aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Jlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYg
KzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlSGFuZGxlQ2xpZW50Lmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZXNvdXJjZUxvYWRlck9wdGlvbnMuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Jlc291cmNlUmVxdWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5o
PgogI2luY2x1ZGUgPFdlYkNvcmUvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgpAQCAtMTI4LDYgKzEyOSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNTeW5jaHJvbm91cygpIGNvbnN0OwogICAgIGJvb2wgaXNMb2FkaW5n
TWFpblJlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9pc0xvYWRpbmdNYWluUmVzb3VyY2U7IH0K
KyAgICBib29sIGFsbG93UmVzcG9uc2VDb2FsZXNjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbGxv
d1Jlc3BvbnNlQ29hbGVzY2luZzsgfQogICAgIAogICAgIHZvaWQgc2V0SG9zdFJlY29yZChIb3N0
UmVjb3JkKiBob3N0UmVjb3JkKSB7IEFTU0VSVChSdW5Mb29wOjppc01haW4oKSk7IG1faG9zdFJl
Y29yZCA9IGhvc3RSZWNvcmQ7IH0KICAgICBIb3N0UmVjb3JkKiBob3N0UmVjb3JkKCkgY29uc3Qg
eyBBU1NFUlQoUnVuTG9vcDo6aXNNYWluKCkpOyByZXR1cm4gbV9ob3N0UmVjb3JkLmdldCgpOyB9
CkBAIC0xOTEsNiArMTkzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkQ2xlYXJSZWZl
cnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdDsKICAgICBib29sIG1faXNMb2FkaW5nTWFpblJlc291
cmNlOwogICAgIGJvb2wgbV9kZWZlcnNMb2FkaW5nOworICAgIGJvb2wgbV9hbGxvd1Jlc3BvbnNl
Q29hbGVzY2luZzsKIAogICAgIFZlY3RvcjxSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fcmVx
dWVzdEJvZHlTYW5kYm94RXh0ZW5zaW9uczsKICAgICBWZWN0b3I8UmVmUHRyPFNhbmRib3hFeHRl
bnNpb24+PiBtX3Jlc291cmNlU2FuZGJveEV4dGVuc2lvbnM7CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9h
ZFBhcmFtZXRlcnMuY3BwCShyZXZpc2lvbiAxNjc5MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvTmV0d29yay9OZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDcgQEAgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6Ok5ldHdv
cmtSZQogICAgICwgc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRUUFNUb0hUVFBSZWRpcmVjdCh0cnVl
KQogICAgICwgaXNNYWluUmVzb3VyY2UoZmFsc2UpCiAgICAgLCBkZWZlcnNMb2FkaW5nKGZhbHNl
KQorICAgICwgYWxsb3dSZXNwb25zZUNvYWxlc2NpbmcoZmFsc2UpCiB7CiB9CiAKQEAgLTk5LDYg
KzEwMCw3IEBAIHZvaWQgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmVuY28KICAgICBl
bmNvZGVyIDw8IHNob3VsZENsZWFyUmVmZXJyZXJPbkhUVFBTVG9IVFRQUmVkaXJlY3Q7CiAgICAg
ZW5jb2RlciA8PCBpc01haW5SZXNvdXJjZTsKICAgICBlbmNvZGVyIDw8IGRlZmVyc0xvYWRpbmc7
CisgICAgZW5jb2RlciA8PCBhbGxvd1Jlc3BvbnNlQ29hbGVzY2luZzsKIH0KIAogYm9vbCBOZXR3
b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVyczo6ZGVjb2RlKElQQzo6QXJndW1lbnREZWNvZGVyJiBk
ZWNvZGVyLCBOZXR3b3JrUmVzb3VyY2VMb2FkUGFyYW1ldGVycyYgcmVzdWx0KQpAQCAtMTUyLDYg
KzE1NCw4IEBAIGJvb2wgTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnM6OmRlY28KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmICghZGVjb2Rlci5kZWNvZGUocmVzdWx0LmRlZmVyc0xv
YWRpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShy
ZXN1bHQuYWxsb3dSZXNwb25zZUNvYWxlc2NpbmcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1NoYXJlZC9OZXR3b3Jr
L05ldHdvcmtSZXNvdXJjZUxvYWRQYXJhbWV0ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jlc291cmNlTG9hZFBhcmFtZXRlcnMuaAkocmV2
aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dlYktpdDIvU2hhcmVkL05ldHdvcmsvTmV0d29ya1Jl
c291cmNlTG9hZFBhcmFtZXRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBzaG91bGRDbGVhclJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0
OwogICAgIGJvb2wgaXNNYWluUmVzb3VyY2U7CiAgICAgYm9vbCBkZWZlcnNMb2FkaW5nOworICAg
IGJvb2wgYWxsb3dSZXNwb25zZUNvYWxlc2Npbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNvdXJjZUxv
YWRTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TmV0d29yay9XZWJSZXNvdXJjZUxvYWRTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxNjc5MjMpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkU2NoZWR1
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDYgKzEzNiw3IEBAIHZvaWQgV2ViUmVzb3Vy
Y2VMb2FkU2NoZWR1bGVyOjpzY2hlZHVsZUwKICAgICBsb2FkUGFyYW1ldGVycy5zaG91bGRDbGVh
clJlZmVycmVyT25IVFRQU1RvSFRUUFJlZGlyZWN0ID0gc2hvdWxkQ2xlYXJSZWZlcnJlck9uSFRU
UFNUb0hUVFBSZWRpcmVjdDsKICAgICBsb2FkUGFyYW1ldGVycy5pc01haW5SZXNvdXJjZSA9IHJl
c291cmNlICYmIHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6Ok1haW5SZXNvdXJj
ZTsKICAgICBsb2FkUGFyYW1ldGVycy5kZWZlcnNMb2FkaW5nID0gcmVzb3VyY2VMb2FkZXItPmRl
ZmVyc0xvYWRpbmcoKTsKKyAgICBsb2FkUGFyYW1ldGVycy5hbGxvd1Jlc3BvbnNlQ29hbGVzY2lu
ZyA9IHJlc291cmNlICYmICFyZXNvdXJjZS0+aXNNYWluT3JSYXdSZXNvdXJjZSgpOwogCiAgICAg
QVNTRVJUKChsb2FkUGFyYW1ldGVycy53ZWJQYWdlSUQgJiYgbG9hZFBhcmFtZXRlcnMud2ViRnJh
bWVJRCkgfHwgbG9hZFBhcmFtZXRlcnMuY2xpZW50Q3JlZGVudGlhbFBvbGljeSA9PSBEb05vdEFz
a0NsaWVudEZvckFueUNyZWRlbnRpYWxzKTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biAxNjc5MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsNiArMTMwLDIyIEBAIHZvaWQgV2Vi
UmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb24KICAgICAgICAgc2VuZChNZXNzYWdlczo6
TmV0d29ya1Jlc291cmNlTG9hZGVyOjpDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZSgpKTsKIH0K
IAordm9pZCBXZWJSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IENlcnRpZmljYXRlSW5mbyYgY2Vy
dGlmaWNhdGVJbmZvLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEsIGludDY0X3QgZW5j
b2RlZERhdGFMZW5ndGgsIGRvdWJsZSBmaW5pc2hUaW1lKQoreworICAgIExPRyhOZXR3b3JrLCAi
KFdlYlByb2Nlc3MpIFdlYlJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQ29tcGxldGVSZXNwb25z
ZSBmb3IgJyVzJy4gU3RhdHVzICVkLiIsIG1fY29yZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSk7CisKKyAgICBSZWY8V2ViUmVz
b3VyY2VMb2FkZXI+IHByb3RlY3QoKnRoaXMpOworCisgICAgZGlkUmVjZWl2ZVJlc3BvbnNlV2l0
aENlcnRpZmljYXRlSW5mbyhyZXNwb25zZSwgY2VydGlmaWNhdGVJbmZvLCBmYWxzZSk7CisgICAg
aWYgKCFtX2NvcmVMb2FkZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEuaXNFbXB0
eSgpKQorICAgICAgICBkaWRSZWNlaXZlRGF0YShkYXRhLCBlbmNvZGVkRGF0YUxlbmd0aCk7Cisg
ICAgaWYgKCFtX2NvcmVMb2FkZXIpCisgICAgICAgIHJldHVybjsKKyAgICBkaWRGaW5pc2hSZXNv
dXJjZUxvYWQoZmluaXNoVGltZSk7Cit9CisKIHZvaWQgV2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJl
Y2VpdmVEYXRhKGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYgZGF0YSwgaW50NjRfdCBlbmNvZGVk
RGF0YUxlbmd0aCkKIHsKICAgICBMT0coTmV0d29yaywgIihXZWJQcm9jZXNzKSBXZWJSZXNvdXJj
ZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEgb2Ygc2l6ZSAlaSBmb3IgJyVzJyIsIChpbnQpZGF0YS5z
aXplKCksIG1fY29yZUxvYWRlci0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3Vy
Y2VMb2FkZXIuaAkocmV2aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgx
LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHdpbGxTZW5kUmVxdWVzdChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlc3BvbnNlJiByZWRpcmVj
dFJlc3BvbnNlKTsKICAgICB2b2lkIGRpZFNlbmREYXRhKHVpbnQ2NF90IGJ5dGVzU2VudCwgdWlu
dDY0X3QgdG90YWxCeXRlc1RvQmVTZW50KTsKICAgICB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZVdp
dGhDZXJ0aWZpY2F0ZUluZm8oY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0
IFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyYsIGJvb2wgbmVlZHNDb250aW51ZURpZFJlY2VpdmVS
ZXNwb25zZU1lc3NhZ2UpOworICAgIHZvaWQgZGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UoY29u
c3QgV2ViQ29yZTo6UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFdlYkNvcmU6OkNlcnRpZmljYXRl
SW5mbyYsIGNvbnN0IElQQzo6RGF0YVJlZmVyZW5jZSYsIGludDY0X3QgZW5jb2RlZERhdGFMZW5n
dGgsIGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYsIGludDY0X3QgZW5jb2RlZERhdGFMZW5ndGgpOwogICAgIHZvaWQg
ZGlkRmluaXNoUmVzb3VyY2VMb2FkKGRvdWJsZSBmaW5pc2hUaW1lKTsKICAgICB2b2lkIGRpZEZh
aWxSZXNvdXJjZUxvYWQoY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VFcnJvciYpOwpJbmRleDogU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2Vz
LmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJS
ZXNvdXJjZUxvYWRlci5tZXNzYWdlcy5pbgkocmV2aXNpb24gMTY3OTIzKQorKysgU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLm1lc3NhZ2VzLmluCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBAIG1lc3NhZ2VzIC0+IFdlYlJlc291cmNlTG9h
ZGVyIExlZ2FjeVJlY2UKICAgICBXaWxsU2VuZFJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1
ZXN0IHJlcXVlc3QsIFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgcmVkaXJlY3RSZXNwb25zZSkK
ICAgICBEaWRTZW5kRGF0YSh1aW50NjRfdCBieXRlc1NlbnQsIHVpbnQ2NF90IHRvdGFsQnl0ZXNU
b0JlU2VudCkKICAgICBEaWRSZWNlaXZlUmVzcG9uc2VXaXRoQ2VydGlmaWNhdGVJbmZvKFdlYkNv
cmU6OlJlc291cmNlUmVzcG9uc2UgcmVzcG9uc2UsIFdlYkNvcmU6OkNlcnRpZmljYXRlSW5mbyBj
ZXJ0aWZpY2F0ZUluZm8sIGJvb2wgbmVlZHNDb250aW51ZURpZFJlY2VpdmVSZXNwb25zZU1lc3Nh
Z2UpCisgICAgRGlkUmVjZWl2ZUNvbXBsZXRlUmVzcG9uc2UoV2ViQ29yZTo6UmVzb3VyY2VSZXNw
b25zZSByZXNwb25zZSwgV2ViQ29yZTo6Q2VydGlmaWNhdGVJbmZvIGNlcnRpZmljYXRlSW5mbywg
SVBDOjpEYXRhUmVmZXJlbmNlIGRhdGEsIGludDY0X3QgZW5jb2RlZERhdGFMZW5ndGgsIGRvdWJs
ZSBmaW5pc2hUaW1lKQogICAgIERpZFJlY2VpdmVEYXRhKElQQzo6RGF0YVJlZmVyZW5jZSBkYXRh
LCBpbnQ2NF90IGVuY29kZWREYXRhTGVuZ3RoKQogICAgIERpZEZpbmlzaFJlc291cmNlTG9hZChk
b3VibGUgZmluaXNoVGltZSkKICAgICBEaWRGYWlsUmVzb3VyY2VMb2FkKFdlYkNvcmU6OlJlc291
cmNlRXJyb3IgZXJyb3IpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>