<?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>223549</bug_id>
          
          <creation_ts>2021-03-19 19:53:22 -0700</creation_ts>
          <short_desc>Reduce number of heap allocations on the audio thread in AudioSampleDataSource</short_desc>
          <delta_ts>2021-03-22 15:11:48 -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>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>223226</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1741985</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 19:53:22 -0700</bug_when>
    <thetext>Reduce number of heap allocation on the audio thread in AudioSampleDataSource:
1   0x135cac840 WTFCrash
2   0x1361ec5c0 JSC::IntlListFormat::initializeListFormat(JSC::JSGlobalObject*, JSC::JSValue, JSC::JSValue)
3   0x135cea27c WTF::fastMalloc(unsigned long)
4   0x115349f10 WebCore::CAAudioStreamDescription::operator new(unsigned long)
5   0x115349e8c std::__1::__unique_if&lt;WebCore::CAAudioStreamDescription&gt;::__unique_single std::__1::make_unique&lt;WebCore::CAAudioStreamDescription, WebCore::CAAudioStreamDescription const&amp;&gt;(WebCore::CAAudioStreamDescription const&amp;)
6   0x11533ace0 decltype(auto) WTF::makeUnique&lt;WebCore::CAAudioStreamDescription, WebCore::CAAudioStreamDescription const&amp;&gt;(WebCore::CAAudioStreamDescription const&amp;)
7   0x11533ac60 WebCore::AudioSampleDataSource::setInputFormat(WebCore::CAAudioStreamDescription const&amp;)
8   0x1180fb670 WebCore::RealtimeOutgoingAudioSourceCocoa::audioSamplesAvailable(WTF::MediaTime const&amp;, WebCore::PlatformAudioData const&amp;, WebCore::AudioStreamDescription const&amp;, unsigned long)
9   0x11806bad0 WebCore::RealtimeMediaSource::audioSamplesAvailable(WTF::MediaTime const&amp;, WebCore::PlatformAudioData const&amp;, WebCore::AudioStreamDescription const&amp;, unsigned long)
10  0x113fcbb24 WebCore::MediaStreamAudioSource::consumeAudio(WebCore::AudioBus&amp;, unsigned long)
11  0x115dd59a8 WebCore::MediaStreamAudioDestinationNode::process(unsigned long)
12  0x115d1017c WebCore::AudioNode::processIfNecessary(unsigned long)
13  0x115d75344 WebCore::BaseAudioContext::processAutomaticPullNodes(unsigned long)
14  0x115d0b2c8 WebCore::AudioDestinationNode::render(WebCore::AudioBus*, WebCore::AudioBus*, unsigned long, WebCore::AudioIOPosition const&amp;)
15  0x117ca79e4 WebCore::AudioDestination::callRenderCallback(WebCore::AudioBus*, WebCore::AudioBus*, unsigned long, WebCore::AudioIOPosition const&amp;)
16  0x117cabb2c WebCore::AudioDestinationCocoa::AudioDestinationCocoa(WebCore::AudioIOCallback&amp;, unsigned int, float, bool)::$_16::operator()(WebCore::AudioBus*, unsigned long) const
17  0x117caba30 WTF::Detail::CallableWrapper&lt;WebCore::AudioDestinationCocoa::AudioDestinationCocoa(WebCore::AudioIOCallback&amp;, unsigned int, float, bool)::$_16, void, WebCore::AudioBus*, unsigned long&gt;::call(WebCore::AudioBus*, unsigned long)
18  0x117c713b0 WTF::Function&lt;void (WebCore::AudioBus*, unsigned long)&gt;::operator()(WebCore::AudioBus*, unsigned long) const
19  0x117c70eb0 WebCore::MultiChannelResampler::provideInputForChannel(float*, unsigned long, unsigned int)
20  0x117c7a568 decltype(*(std::__1::forward&lt;WebCore::MultiChannelResampler*&amp;&gt;(fp0)).*fp(std::__1::forward&lt;float*&gt;(fp1), std::__1::forward&lt;unsigned long&gt;(fp1), std::__1::forward&lt;unsigned int&amp;&gt;(fp1))) std::__1::__invoke&lt;void (WebCore::MultiChannelResampler::*&amp;)(float*, unsigned long, unsigned int), WebCore::MultiChannelResampler*&amp;, float*, unsigned long, unsigned int&amp;, void&gt;(void (WebCore::MultiChannelResampler::*&amp;)(float*, unsigned long, unsigned int), WebCore::MultiChannelResampler*&amp;, float*&amp;&amp;, unsigned long&amp;&amp;, unsigned int&amp;)
21  0x117c7a460 std::__1::__bind_return&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt;, __is_valid_bind_return&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt; &gt;::value&gt;::type std::__1::__apply_functor&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;, 0ul, 1ul, 2ul, 3ul, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt; &gt;(void (WebCore::MultiChannelResampler::*&amp;)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;&amp;, std::__1::__tuple_indices&lt;0ul, 1ul, 2ul, 3ul&gt;, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt;&amp;&amp;)
22  0x117c7a3a4 std::__1::__bind_return&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt;, __is_valid_bind_return&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), std::__1::tuple&lt;WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt;, std::__1::placeholders::__ph&lt;2&gt;, unsigned int&gt;, std::__1::tuple&lt;float*&amp;&amp;, unsigned long&amp;&amp;&gt; &gt;::value&gt;::type std::__1::__bind&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt; const&amp;, std::__1::placeholders::__ph&lt;2&gt; const&amp;, unsigned int&amp;&gt;::operator()&lt;float*, unsigned long&gt;(float*&amp;&amp;, unsigned long&amp;&amp;)
23  0x117c7a270 WTF::Detail::CallableWrapper&lt;std::__1::__bind&lt;void (WebCore::MultiChannelResampler::*)(float*, unsigned long, unsigned int), WebCore::MultiChannelResampler*, std::__1::placeholders::__ph&lt;1&gt; const&amp;, std::__1::placeholders::__ph&lt;2&gt; const&amp;, unsigned int&amp;&gt;, void, float*, unsigned long&gt;::call(float*, unsigned long)
24  0x117c9d2dc WTF::Function&lt;void (float*, unsigned long)&gt;::operator()(float*, unsigned long) const
25  0x117c9d218 WebCore::SincResampler::process(float*, unsigned long)
26  0x117c7125c WebCore::MultiChannelResampler::process(WebCore::AudioBus*, unsigned long)
27  0x117ca784c WebCore::AudioDestinationCocoa::renderOnRenderingThead(unsigned long)
28  0x117ca763c WebCore::AudioDestinationCocoa::renderOnRenderingTheadIfPlaying(unsigned long)
29  0x117ca734c WebCore::AudioDestinationCocoa::render(double, unsigned long long, unsigned int, AudioBufferList*)
30  0x1049fc1f0 WebKit::RemoteAudioDestinationProxy::renderQuantum()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741986</commentid>
    <comment_count>1</comment_count>
      <attachid>423800</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 19:56:06 -0700</bug_when>
    <thetext>Created attachment 423800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1741987</commentid>
    <comment_count>2</comment_count>
      <attachid>423801</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-19 19:57:40 -0700</bug_when>
    <thetext>Created attachment 423801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742079</commentid>
    <comment_count>3</comment_count>
      <attachid>423801</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-03-21 10:34:38 -0700</bug_when>
    <thetext>Comment on attachment 423801
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Reduce number of heap allocations on the audio thread in AudioSampleDataSource
&gt; +        for performance reasons. I got rid of the heap allocations that I could easily
&gt; +        address. Some trickier ones remain.

Seems like it might be worth annotating the ones that remain and adding a comment indicating that no new heap allocations should be added due to the realtime-ness of things.

&gt; Source/WebCore/ChangeLog:23
&gt; +
&gt; +        * platform/audio/cocoa/AudioSampleDataSource.h:
&gt; +        (WebCore::AudioSampleDataSource::inputDescription const):
&gt; +        * platform/audio/cocoa/AudioSampleDataSource.mm:
&gt; +        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
&gt; +        (WebCore::AudioSampleDataSource::~AudioSampleDataSource):
&gt; +        (WebCore::AudioSampleDataSource::setInputFormat):
&gt; +        (WebCore::AudioSampleDataSource::setOutputFormat):
&gt; +        (WebCore::AudioSampleDataSource::pushSamplesInternal):
&gt; +        (WebCore::AudioSampleDataSource::pushSamples):
&gt; +        (WebCore::AudioSampleDataSource::pullSamplesInternal):
&gt; +        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
&gt; +        (WebCore::AudioSampleDataSource::pullSamples):

Since the changes aren&apos;t all super obvious, can you fill in some details here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742087</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-21 12:12:46 -0700</bug_when>
    <thetext>(In reply to Sam Weinig from comment #3)
&gt; Comment on attachment 423801 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=423801&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Reduce number of heap allocations on the audio thread in AudioSampleDataSource
&gt; &gt; +        for performance reasons. I got rid of the heap allocations that I could easily
&gt; &gt; +        address. Some trickier ones remain.
&gt; 
&gt; Seems like it might be worth annotating the ones that remain and adding a
&gt; comment indicating that no new heap allocations should be added due to the
&gt; realtime-ness of things.

Well yes, that’s what I am working on. I am fixing the easy ones now and adding exceptions for the remaining ones (see bug this one is marked as a dependency of).

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:23
&gt; &gt; +
&gt; &gt; +        * platform/audio/cocoa/AudioSampleDataSource.h:
&gt; &gt; +        (WebCore::AudioSampleDataSource::inputDescription const):
&gt; &gt; +        * platform/audio/cocoa/AudioSampleDataSource.mm:
&gt; &gt; +        (WebCore::AudioSampleDataSource::AudioSampleDataSource):
&gt; &gt; +        (WebCore::AudioSampleDataSource::~AudioSampleDataSource):
&gt; &gt; +        (WebCore::AudioSampleDataSource::setInputFormat):
&gt; &gt; +        (WebCore::AudioSampleDataSource::setOutputFormat):
&gt; &gt; +        (WebCore::AudioSampleDataSource::pushSamplesInternal):
&gt; &gt; +        (WebCore::AudioSampleDataSource::pushSamples):
&gt; &gt; +        (WebCore::AudioSampleDataSource::pullSamplesInternal):
&gt; &gt; +        (WebCore::AudioSampleDataSource::pullAvalaibleSamplesAsChunks):
&gt; &gt; +        (WebCore::AudioSampleDataSource::pullSamples):
&gt; 
&gt; Since the changes aren&apos;t all super obvious, can you fill in some details
&gt; here?

Ok, I will do that. I thought the changes were trivial here, I either started initializing things earlier on the main thread or I switch from uniqueptr to optional to avoid the heap allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742242</commentid>
    <comment_count>5</comment_count>
      <attachid>423889</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-22 08:40:44 -0700</bug_when>
    <thetext>Created attachment 423889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742505</commentid>
    <comment_count>6</comment_count>
      <attachid>423889</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-22 15:10:03 -0700</bug_when>
    <thetext>Comment on attachment 423889
Patch

Clearing flags on attachment: 423889

Committed r274808 (235608@main): &lt;https://commits.webkit.org/235608@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742506</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-22 15:10:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742507</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-22 15:11:13 -0700</bug_when>
    <thetext>&lt;rdar://problem/75710830&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1742508</commentid>
    <comment_count>9</comment_count>
      <attachid>423889</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-22 15:11:48 -0700</bug_when>
    <thetext>Comment on attachment 423889
Patch

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

&gt; Source/WebCore/platform/audio/cocoa/AudioSampleDataSource.h:72
&gt; +    const CAAudioStreamDescription* inputDescription() const { return m_inputDescription ? &amp;m_inputDescription.value() : nullptr; }

Seems like we could use a generic function that converts an Optional to a pointer or nullptr.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423800</attachid>
            <date>2021-03-19 19:56:06 -0700</date>
            <delta_ts>2021-03-19 19:57:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223549-20210319195605.patch</filename>
            <type>text/plain</type>
            <size>8858</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExMzFhZDQ1ZDU2MWM2
NTU4MzkzNzRkYzYxNzk0MzkzMjkyMDI2YS4uMzFkYWFmODg2MDY4NjJmMDJiNGIyNDZjMmJjNWQy
MGJmZTUwYjg2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTAzLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG51bWJlciBvZiBo
ZWFwIGFsbG9jYXRpb24gb24gdGhlIGF1ZGlvIHRocmVhZCBpbiBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzU0
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZHVj
ZSBudW1iZXIgb2YgaGVhcCBhbGxvY2F0aW9uIG9uIHRoZSBhdWRpbyB0aHJlYWQgaW4gQXVkaW9T
YW1wbGVEYXRhU291cmNlCisgICAgICAgIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBJIGdvdCBy
aWQgb2YgdGhlIGhlYXAgYWxsb2NhdGlvbnMgdGhhdCBJIGNvdWxkIGVhc2lseQorICAgICAgICBh
ZGRyZXNzLiBTb21lIHRyaWNraWVyIG9uZXMgcmVtYWluLgorCisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLmg6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OmlucHV0RGVzY3JpcHRpb24gY29uc3QpOgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbToKKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6fkF1ZGlvU2FtcGxlRGF0
YVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldElu
cHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0
T3V0cHV0Rm9ybWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
cHVzaFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFT
b3VyY2U6OnB1c2hTYW1wbGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNv
dXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBs
ZURhdGFTb3VyY2U6OnB1bGxBdmFsYWlibGVTYW1wbGVzQXNDaHVua3MpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlcyk6CisKIDIwMjEtMDMtMTkg
IENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgYXNzZXJ0aW9u
cyB0byBndWFyZCBhZ2FpbnN0IGhlYXAgYWxsb2NhdGlvbnMgb24gdGhlIGF1ZGlvIHRocmVhZApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1w
bGVEYXRhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRp
b1NhbXBsZURhdGFTb3VyY2UuaAppbmRleCA4MzZjMTRiZTY3YTU5ZWU1Yjk3MzIzNjVhODEzMWI4
MTU5YTk1MGU5Li4yMGI0Mzg1ZGM1YjViNjkxMTZlMzYwNTBjNmZmNDM4YjYyY2QxOGU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURh
dGFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRp
b1NhbXBsZURhdGFTb3VyY2UuaApAQCAtNjksNyArNjksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRNdXRlZChib29sIG11dGVkKSB7IG1fbXV0ZWQgPSBtdXRlZDsgfQogICAgIGJvb2wgbXV0ZWQo
KSBjb25zdCB7IHJldHVybiBtX211dGVkOyB9CiAKLSAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24qIGlucHV0RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2lucHV0RGVzY3Jp
cHRpb24uZ2V0KCk7IH0KKyAgICBjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24qIGlucHV0
RGVzY3JpcHRpb24oKSBjb25zdCB7IHJldHVybiBtX2lucHV0RGVzY3JpcHRpb24gPyAmbV9pbnB1
dERlc2NyaXB0aW9uLnZhbHVlKCkgOiBudWxscHRyOyB9CiAKICNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bG9nZ2VyOyB9CkBAIC04Nyw4ICs4Nyw4IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHB1c2hTYW1w
bGVzSW50ZXJuYWwoY29uc3QgQXVkaW9CdWZmZXJMaXN0JiwgY29uc3QgTWVkaWFUaW1lJiwgc2l6
ZV90IGZyYW1lQ291bnQpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbj4gbV9pbnB1dERlc2NyaXB0aW9uOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247CisgICAgT3B0aW9uYWw8Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX2lucHV0RGVzY3JpcHRpb247CisgICAgT3B0aW9uYWw8
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX291dHB1dERlc2NyaXB0aW9uOwogCiAgICAgTWVk
aWFUaW1lIGhvc3RUaW1lKCkgY29uc3Q7CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCBwcml2YXRlOgog
ICAgIEF1ZGlvQ29udmVydGVyUmVmIG1fY29udmVydGVyOwogICAgIFJlZlB0cjxBdWRpb1NhbXBs
ZUJ1ZmZlckxpc3Q+IG1fc2NyYXRjaEJ1ZmZlcjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxDQVJp
bmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKKyAgICBVbmlxdWVSZWY8Q0FSaW5nQnVmZmVyPiBtX3Jp
bmdCdWZmZXI7CiAgICAgc2l6ZV90IG1fbWF4aW11bVNhbXBsZUNvdW50IHsgMCB9OwogCiAgICAg
ZmxvYXQgbV92b2x1bWUgeyAxLjAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQppbmRleCA1NThj
MzgyYTJlODQ1YjFlMDhkMDFkMzNkYjdmMjhjN2ExZmVjZGNkLi4xY2JiNWZmMThmZDliNjhkOTY0
MWZkMjBmMDJhZjNiNGVkMTc4NzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCkBAIC01Miw2
ICs1Miw3IEBAIFJlZjxBdWRpb1NhbXBsZURhdGFTb3VyY2U+IEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTo6Y3JlYXRlKHNpemVfdCBtYXhpbXVtU2FtcGxlQ291CiAKIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhpbXVtU2FtcGxlQ291bnQsIExvZ2dl
ckhlbHBlciYgbG9nZ2VySGVscGVyKQogICAgIDogbV9pbnB1dFNhbXBsZU9mZnNldChNZWRpYVRp
bWU6OmludmFsaWRUaW1lKCkpCisgICAgLCBtX3JpbmdCdWZmZXIobWFrZVVuaXF1ZVJlZjxDQVJp
bmdCdWZmZXI+KCkpCiAgICAgLCBtX21heGltdW1TYW1wbGVDb3VudChtYXhpbXVtU2FtcGxlQ291
bnQpCiAjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECiAgICAgLCBtX2xvZ2dlcihsb2dnZXJIZWxw
ZXIubG9nZ2VyKCkpCkBAIC02NSwxMyArNjYsOCBAQCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OkF1
ZGlvU2FtcGxlRGF0YVNvdXJjZShzaXplX3QgbWF4aW11bVNhbXBsZUNvdW50LCBMb2dnZXJIZQog
CiBBdWRpb1NhbXBsZURhdGFTb3VyY2U6On5BdWRpb1NhbXBsZURhdGFTb3VyY2UoKQogewotICAg
IG1faW5wdXREZXNjcmlwdGlvbiA9IG51bGxwdHI7Ci0gICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9
IG51bGxwdHI7Ci0gICAgbV9yaW5nQnVmZmVyID0gbnVsbHB0cjsKLSAgICBpZiAobV9jb252ZXJ0
ZXIpIHsKKyAgICBpZiAobV9jb252ZXJ0ZXIpCiAgICAgICAgIEF1ZGlvQ29udmVydGVyRGlzcG9z
ZShtX2NvbnZlcnRlcik7Ci0gICAgICAgIG1fY29udmVydGVyID0gbnVsbHB0cjsKLSAgICB9CiB9
CiAKIE9TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0dXBDb252ZXJ0ZXIoKQpAQCAt
MTAxLDcgKzk3LDcgQEAgT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRJbnB1dEZv
cm1hdChjb25zdCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGYKIHsKICAgICBBU1NFUlQoZm9y
bWF0LnNhbXBsZVJhdGUoKSA+PSAwKTsKIAotICAgIG1faW5wdXREZXNjcmlwdGlvbiA9IG1ha2VV
bmlxdWU8Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihmb3JtYXQpOworICAgIG1faW5wdXREZXNj
cmlwdGlvbiA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7IGZvcm1hdCB9OwogICAgIGlmICht
X291dHB1dERlc2NyaXB0aW9uKQogICAgICAgICByZXR1cm4gc2V0dXBDb252ZXJ0ZXIoKTsKIApA
QCAtMTEzLDkgKzEwOSw3IEBAIE9TU3RhdHVzIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0T3V0
cHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYKICAgICBBU1NFUlQobV9p
bnB1dERlc2NyaXB0aW9uKTsKICAgICBBU1NFUlQoZm9ybWF0LnNhbXBsZVJhdGUoKSA+PSAwKTsK
IAotICAgIG1fb3V0cHV0RGVzY3JpcHRpb24gPSBtYWtlVW5pcXVlPENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbj4oZm9ybWF0KTsKLSAgICBpZiAoIW1fcmluZ0J1ZmZlcikKLSAgICAgICAgbV9yaW5n
QnVmZmVyID0gbWFrZVVuaXF1ZTxDQVJpbmdCdWZmZXI+KCk7CisgICAgbV9vdXRwdXREZXNjcmlw
dGlvbiA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7IGZvcm1hdCB9OwogCiAgICAgbV9yaW5n
QnVmZmVyLT5hbGxvY2F0ZShmb3JtYXQsIHN0YXRpY19jYXN0PHNpemVfdD4obV9tYXhpbXVtU2Ft
cGxlQ291bnQpKTsKICAgICBtX3NjcmF0Y2hCdWZmZXIgPSBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6
OmNyZWF0ZShtX291dHB1dERlc2NyaXB0aW9uLT5zdHJlYW1EZXNjcmlwdGlvbigpLCBtX21heGlt
dW1TYW1wbGVDb3VudCk7CkBAIC0xNjAsMTIgKzE1NCw4IEBAIHZvaWQgQXVkaW9TYW1wbGVEYXRh
U291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVy
TGlzCiAgICAgICAgIHNhbXBsZVRpbWUgPSBtX2V4cGVjdGVkTmV4dFB1c2hlZFNhbXBsZVRpbWU7
CiAgICAgbV9leHBlY3RlZE5leHRQdXNoZWRTYW1wbGVUaW1lID0gc2FtcGxlVGltZSArIE1lZGlh
VGltZShzYW1wbGVDb3VudCwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7CiAKLSAgICBpZiAobV9p
bnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpIHsKKyAgICBpZiAo
bV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCiAgICAgICAg
IG1faW5wdXRTYW1wbGVPZmZzZXQgPSBNZWRpYVRpbWUoMSAtIHNhbXBsZVRpbWUudGltZVZhbHVl
KCksIHNhbXBsZVRpbWUudGltZVNjYWxlKCkpOwotICAgICAgICBSdW5Mb29wOjptYWluKCkuZGlz
cGF0Y2goW2xvZ0lkZW50aWZpZXIgPSBMT0dJREVOVElGSUVSLCBpbnB1dFNhbXBsZU9mZnNldCA9
IG1faW5wdXRTYW1wbGVPZmZzZXQudGltZVZhbHVlKCksIG1heGltdW1TYW1wbGVDb3VudCA9IG1f
bWF4aW11bVNhbXBsZUNvdW50LCB0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZlB0cigqdGhp
cyldIHsKLSAgICAgICAgICAgIEFMV0FZU19MT0cobG9nSWRlbnRpZmllciwgImlucHV0IHNhbXBs
ZSBvZmZzZXQgaXMgIiwgaW5wdXRTYW1wbGVPZmZzZXQsICIsIG1heGltdW1TYW1wbGVDb3VudCBp
cyAiLCBtYXhpbXVtU2FtcGxlQ291bnQpOwotICAgICAgICB9KTsKLSAgICB9CiAgICAgc2FtcGxl
VGltZSArPSBtX2lucHV0U2FtcGxlT2Zmc2V0OwogCiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTgx
LDggKzE3MSw3IEBAIHZvaWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVy
bmFsKGNvbnN0IEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyTGlzCiB2b2lkIEF1ZGlvU2FtcGxlRGF0
YVNvdXJjZTo6cHVzaFNhbXBsZXMoY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBz
YW1wbGVEZXNjcmlwdGlvbiwgQ01TYW1wbGVCdWZmZXJSZWYgc2FtcGxlQnVmZmVyKQogewogICAg
IEFTU0VSVF9VTlVTRUQoc2FtcGxlRGVzY3JpcHRpb24sICptX2lucHV0RGVzY3JpcHRpb24gPT0g
c2FtcGxlRGVzY3JpcHRpb24pOwotICAgIEFTU0VSVChtX3JpbmdCdWZmZXIpOwotICAgIAorCiAg
ICAgV2ViQXVkaW9CdWZmZXJMaXN0IGxpc3QoKm1faW5wdXREZXNjcmlwdGlvbiwgc2FtcGxlQnVm
ZmVyKTsKICAgICBwdXNoU2FtcGxlc0ludGVybmFsKGxpc3QsIFBBTDo6dG9NZWRpYVRpbWUoUEFM
OjpDTVNhbXBsZUJ1ZmZlckdldFByZXNlbnRhdGlvblRpbWVTdGFtcChzYW1wbGVCdWZmZXIpKSwg
UEFMOjpDTVNhbXBsZUJ1ZmZlckdldE51bVNhbXBsZXMoc2FtcGxlQnVmZmVyKSk7CiB9CkBAIC0y
MTgsNyArMjA3LDcgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzSW50
ZXJuYWwoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgaWYgKCFtX3JpbmdCdWZmZXIgfHwgbV9tdXRlZCB8fCBtX2lucHV0
U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgIGlmIChtX211
dGVkIHx8IG1faW5wdXRTYW1wbGVPZmZzZXQgPT0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKSB7
CiAgICAgICAgIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdDo6emVyb0FCTChidWZmZXIsIGJ5dGVDb3Vu
dCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0yNzAsNyArMjU5LDcgQEAgYm9v
bCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZmZXJM
aXN0JiBidWZmZXIsIHNpemVfdAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBp
ZiAobV9zY3JhdGNoQnVmZmVyLT5jb3B5RnJvbSgqbV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVD
b3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkpKQorICAgIGlmIChtX3NjcmF0Y2hC
dWZmZXItPmNvcHlGcm9tKG1fcmluZ0J1ZmZlci5nZXQoKSwgc2FtcGxlQ291bnQsIHRpbWVTdGFt
cCwgQ0FSaW5nQnVmZmVyOjpDb3B5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbV9z
Y3JhdGNoQnVmZmVyLT5hcHBseUdhaW4obV92b2x1bWUpOwpAQCAtMjgzLDkgKzI3Miw2IEBAIGJv
b2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKEF1ZGlvQnVmZmVy
TGlzdCYgYnVmZmVyLCBzaXplX3QKIAogYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxB
dmFsYWlibGVTYW1wbGVzQXNDaHVua3MoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBz
YW1wbGVDb3VudFBlckNodW5rLCB1aW50NjRfdCB0aW1lU3RhbXAsIEZ1bmN0aW9uPHZvaWQoKT4m
JiBjb25zdW1lRmlsbGVkQnVmZmVyKQogewotICAgIGlmICghbV9yaW5nQnVmZmVyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KICAgICBBU1NFUlQoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1f
cmluZ0J1ZmZlci0+Y2hhbm5lbENvdW50KCkpOwogICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZl
cnMgIT0gbV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMzI0LDIyICszMTAsMTEgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxB
dmFsYWlibGVTYW1wbGVzQXNDaHVua3MoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIKIAogYm9vbCBB
dWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVy
LCBzaXplX3Qgc2FtcGxlQ291bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1l
LCBQdWxsTW9kZSBtb2RlKQogewotICAgIGlmICghbV9yaW5nQnVmZmVyKSB7Ci0gICAgICAgIHNp
emVfdCBieXRlQ291bnQgPSBzYW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVz
UGVyRnJhbWUoKTsKLSAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZl
ciwgYnl0ZUNvdW50KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIHJldHVy
biBwdWxsU2FtcGxlc0ludGVybmFsKGJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9z
dFRpbWUsIG1vZGUpOwogfQogCiBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBs
ZXMoQXVkaW9TYW1wbGVCdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWlu
dDY0X3QgdGltZVN0YW1wLCBkb3VibGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCiB7Ci0gICAg
aWYgKCFtX3JpbmdCdWZmZXIpIHsKLSAgICAgICAgYnVmZmVyLnplcm8oKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQogICAgIGlmICghcHVsbFNhbXBsZXNJbnRlcm5hbChidWZmZXIu
YnVmZmVyTGlzdCgpLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBob3N0VGltZSwgbW9kZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423801</attachid>
            <date>2021-03-19 19:57:40 -0700</date>
            <delta_ts>2021-03-22 08:40:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223549-20210319195739.patch</filename>
            <type>text/plain</type>
            <size>8860</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExMzFhZDQ1ZDU2MWM2
NTU4MzkzNzRkYzYxNzk0MzkzMjkyMDI2YS4uZmRkZTY5ZDRlNTQzYzM1NWNiNGUzNGUxYmQ5NGEy
NjExYzNmNDEzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDIxLTAzLTE5ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG51bWJlciBvZiBo
ZWFwIGFsbG9jYXRpb25zIG9uIHRoZSBhdWRpbyB0aHJlYWQgaW4gQXVkaW9TYW1wbGVEYXRhU291
cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM1
NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1
Y2UgbnVtYmVyIG9mIGhlYXAgYWxsb2NhdGlvbnMgb24gdGhlIGF1ZGlvIHRocmVhZCBpbiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UKKyAgICAgICAgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIEkgZ290
IHJpZCBvZiB0aGUgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IEkgY291bGQgZWFzaWx5CisgICAgICAg
IGFkZHJlc3MuIFNvbWUgdHJpY2tpZXIgb25lcyByZW1haW4uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aW5wdXREZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVE
YXRhU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0
SW5wdXRGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpz
ZXRPdXRwdXRGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNl
OjpwdXNoU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2FtcGxlRGF0
YVNvdXJjZTo6cHVzaFNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRh
U291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6cHVsbEF2YWxhaWJsZVNhbXBsZXNBc0NodW5rcyk6CisgICAgICAgIChX
ZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKToKKwogMjAyMS0wMy0x
OSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhc3NlcnRp
b25zIHRvIGd1YXJkIGFnYWluc3QgaGVhcCBhbGxvY2F0aW9ucyBvbiB0aGUgYXVkaW8gdGhyZWFk
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZURhdGFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCmluZGV4IDgzNmMxNGJlNjdhNTllZTViOTczMjM2NWE4MTMx
YjgxNTlhOTUwZTkuLjIwYjQzODVkYzViNWI2OTExNmUzNjA1MGM2ZmY0MzhiNjJjZDE4ZTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCkBAIC02OSw3ICs2OSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldE11dGVkKGJvb2wgbXV0ZWQpIHsgbV9tdXRlZCA9IG11dGVkOyB9CiAgICAgYm9vbCBtdXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KIAotICAgIGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiogaW5wdXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXREZXNj
cmlwdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiogaW5w
dXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXREZXNjcmlwdGlvbiA/ICZtX2lu
cHV0RGVzY3JpcHRpb24udmFsdWUoKSA6IG51bGxwdHI7IH0KIAogI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAogICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9sb2dnZXI7IH0KQEAgLTg3LDggKzg3LDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcHVzaFNh
bXBsZXNJbnRlcm5hbChjb25zdCBBdWRpb0J1ZmZlckxpc3QmLCBjb25zdCBNZWRpYVRpbWUmLCBz
aXplX3QgZnJhbWVDb3VudCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uPiBtX2lucHV0RGVzY3JpcHRpb247Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsKKyAgICBPcHRpb25hbDxD
QUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlvbjsKKyAgICBPcHRpb25h
bDxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3JpcHRpb247CiAKICAgICBN
ZWRpYVRpbWUgaG9zdFRpbWUoKSBjb25zdDsKIApAQCAtMTA2LDcgKzEwNiw3IEBAIHByaXZhdGU6
CiAgICAgQXVkaW9Db252ZXJ0ZXJSZWYgbV9jb252ZXJ0ZXI7CiAgICAgUmVmUHRyPEF1ZGlvU2Ft
cGxlQnVmZmVyTGlzdD4gbV9zY3JhdGNoQnVmZmVyOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPENB
UmluZ0J1ZmZlcj4gbV9yaW5nQnVmZmVyOworICAgIFVuaXF1ZVJlZjxDQVJpbmdCdWZmZXI+IG1f
cmluZ0J1ZmZlcjsKICAgICBzaXplX3QgbV9tYXhpbXVtU2FtcGxlQ291bnQgeyAwIH07CiAKICAg
ICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tCmluZGV4IDU1
OGMzODJhMmU4NDViMWUwOGQwMWQzM2RiN2YyOGM3YTFmZWNkY2QuLjFjYmI1ZmYxOGZkOWI2OGQ5
NjQxZmQyMGYwMmFmM2I0ZWQxNzg3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UubW0KQEAgLTUy
LDYgKzUyLDcgQEAgUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVkaW9TYW1wbGVEYXRhU291
cmNlOjpjcmVhdGUoc2l6ZV90IG1heGltdW1TYW1wbGVDb3UKIAogQXVkaW9TYW1wbGVEYXRhU291
cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90IG1heGltdW1TYW1wbGVDb3VudCwgTG9n
Z2VySGVscGVyJiBsb2dnZXJIZWxwZXIpCiAgICAgOiBtX2lucHV0U2FtcGxlT2Zmc2V0KE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fcmluZ0J1ZmZlcihtYWtlVW5pcXVlUmVmPENB
UmluZ0J1ZmZlcj4oKSkKICAgICAsIG1fbWF4aW11bVNhbXBsZUNvdW50KG1heGltdW1TYW1wbGVD
b3VudCkKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1fbG9nZ2VyKGxvZ2dlckhl
bHBlci5sb2dnZXIoKSkKQEAgLTY1LDEzICs2Niw4IEBAIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6
QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhpbXVtU2FtcGxlQ291bnQsIExvZ2dlckhl
CiAKIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6fkF1ZGlvU2FtcGxlRGF0YVNvdXJjZSgpCiB7Ci0g
ICAgbV9pbnB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBtX291dHB1dERlc2NyaXB0aW9u
ID0gbnVsbHB0cjsKLSAgICBtX3JpbmdCdWZmZXIgPSBudWxscHRyOwotICAgIGlmIChtX2NvbnZl
cnRlcikgeworICAgIGlmIChtX2NvbnZlcnRlcikKICAgICAgICAgQXVkaW9Db252ZXJ0ZXJEaXNw
b3NlKG1fY29udmVydGVyKTsKLSAgICAgICAgbV9jb252ZXJ0ZXIgPSBudWxscHRyOwotICAgIH0K
IH0KIAogT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXR1cENvbnZlcnRlcigpCkBA
IC0xMDEsNyArOTcsNyBAQCBPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnNldElucHV0
Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZgogewogICAgIEFTU0VSVChm
b3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOwogCi0gICAgbV9pbnB1dERlc2NyaXB0aW9uID0gbWFr
ZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7CisgICAgbV9pbnB1dERl
c2NyaXB0aW9uID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsgZm9ybWF0IH07CiAgICAgaWYg
KG1fb3V0cHV0RGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybiBzZXR1cENvbnZlcnRlcigpOwog
CkBAIC0xMTMsOSArMTA5LDcgQEAgT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXRP
dXRwdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uJgogICAgIEFTU0VSVCht
X2lucHV0RGVzY3JpcHRpb24pOwogICAgIEFTU0VSVChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDAp
OwogCi0gICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8Q0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uPihmb3JtYXQpOwotICAgIGlmICghbV9yaW5nQnVmZmVyKQotICAgICAgICBtX3Jp
bmdCdWZmZXIgPSBtYWtlVW5pcXVlPENBUmluZ0J1ZmZlcj4oKTsKKyAgICBtX291dHB1dERlc2Ny
aXB0aW9uID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsgZm9ybWF0IH07CiAKICAgICBtX3Jp
bmdCdWZmZXItPmFsbG9jYXRlKGZvcm1hdCwgc3RhdGljX2Nhc3Q8c2l6ZV90PihtX21heGltdW1T
YW1wbGVDb3VudCkpOwogICAgIG1fc2NyYXRjaEJ1ZmZlciA9IEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dDo6Y3JlYXRlKG1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2NyaXB0aW9uKCksIG1fbWF4
aW11bVNhbXBsZUNvdW50KTsKQEAgLTE2MCwxMiArMTU0LDggQEAgdm9pZCBBdWRpb1NhbXBsZURh
dGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50ZXJuYWwoY29uc3QgQXVkaW9CdWZmZXJMaXN0JiBidWZm
ZXJMaXMKICAgICAgICAgc2FtcGxlVGltZSA9IG1fZXhwZWN0ZWROZXh0UHVzaGVkU2FtcGxlVGlt
ZTsKICAgICBtX2V4cGVjdGVkTmV4dFB1c2hlZFNhbXBsZVRpbWUgPSBzYW1wbGVUaW1lICsgTWVk
aWFUaW1lKHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLnRpbWVTY2FsZSgpKTsKIAotICAgIGlmICht
X2lucHV0U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkgeworICAgIGlm
IChtX2lucHV0U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAg
ICAgbV9pbnB1dFNhbXBsZU9mZnNldCA9IE1lZGlhVGltZSgxIC0gc2FtcGxlVGltZS50aW1lVmFs
dWUoKSwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7Ci0gICAgICAgIFJ1bkxvb3A6Om1haW4oKS5k
aXNwYXRjaChbbG9nSWRlbnRpZmllciA9IExPR0lERU5USUZJRVIsIGlucHV0U2FtcGxlT2Zmc2V0
ID0gbV9pbnB1dFNhbXBsZU9mZnNldC50aW1lVmFsdWUoKSwgbWF4aW11bVNhbXBsZUNvdW50ID0g
bV9tYXhpbXVtU2FtcGxlQ291bnQsIHRoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmUHRyKCp0
aGlzKV0gewotICAgICAgICAgICAgQUxXQVlTX0xPRyhsb2dJZGVudGlmaWVyLCAiaW5wdXQgc2Ft
cGxlIG9mZnNldCBpcyAiLCBpbnB1dFNhbXBsZU9mZnNldCwgIiwgbWF4aW11bVNhbXBsZUNvdW50
IGlzICIsIG1heGltdW1TYW1wbGVDb3VudCk7Ci0gICAgICAgIH0pOwotICAgIH0KICAgICBzYW1w
bGVUaW1lICs9IG1faW5wdXRTYW1wbGVPZmZzZXQ7CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0x
ODEsOCArMTcxLDcgQEAgdm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50
ZXJuYWwoY29uc3QgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXMKIHZvaWQgQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24m
IHNhbXBsZURlc2NyaXB0aW9uLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1wbGVCdWZmZXIpCiB7CiAg
ICAgQVNTRVJUX1VOVVNFRChzYW1wbGVEZXNjcmlwdGlvbiwgKm1faW5wdXREZXNjcmlwdGlvbiA9
PSBzYW1wbGVEZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKG1fcmluZ0J1ZmZlcik7Ci0gICAgCisK
ICAgICBXZWJBdWRpb0J1ZmZlckxpc3QgbGlzdCgqbV9pbnB1dERlc2NyaXB0aW9uLCBzYW1wbGVC
dWZmZXIpOwogICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwobGlzdCwgUEFMOjp0b01lZGlhVGltZShQ
QUw6OkNNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1wKHNhbXBsZUJ1ZmZlcikp
LCBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcyhzYW1wbGVCdWZmZXIpKTsKIH0KQEAg
LTIxOCw3ICsyMDcsNyBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJ
bnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmluZ0J1ZmZlciB8fCBtX211dGVkIHx8IG1faW5w
dXRTYW1wbGVPZmZzZXQgPT0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKSB7CisgICAgaWYgKG1f
bXV0ZWQgfHwgbV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkp
IHsKICAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNv
dW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI3MCw3ICsyNTksNyBAQCBi
b29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZl
ckxpc3QmIGJ1ZmZlciwgc2l6ZV90CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAg
IGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdCdWZmZXIuZ2V0KCksIHNhbXBs
ZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSkpCisgICAgaWYgKG1fc2NyYXRj
aEJ1ZmZlci0+Y29weUZyb20obV9yaW5nQnVmZmVyLmdldCgpLCBzYW1wbGVDb3VudCwgdGltZVN0
YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBt
X3NjcmF0Y2hCdWZmZXItPmFwcGx5R2FpbihtX3ZvbHVtZSk7CkBAIC0yODMsOSArMjcyLDYgQEAg
Ym9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzSW50ZXJuYWwoQXVkaW9CdWZm
ZXJMaXN0JiBidWZmZXIsIHNpemVfdAogCiBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVs
bEF2YWxhaWJsZVNhbXBsZXNBc0NodW5rcyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90
IHNhbXBsZUNvdW50UGVyQ2h1bmssIHVpbnQ2NF90IHRpbWVTdGFtcCwgRnVuY3Rpb248dm9pZCgp
PiYmIGNvbnN1bWVGaWxsZWRCdWZmZXIpCiB7Ci0gICAgaWYgKCFtX3JpbmdCdWZmZXIpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIEFTU0VSVChidWZmZXIubU51bWJlckJ1ZmZlcnMgPT0g
bV9yaW5nQnVmZmVyLT5jaGFubmVsQ291bnQoKSk7CiAgICAgaWYgKGJ1ZmZlci5tTnVtYmVyQnVm
ZmVycyAhPSBtX3JpbmdCdWZmZXItPmNoYW5uZWxDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zMjQsMjIgKzMxMCwxMSBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVs
bEF2YWxhaWJsZVNhbXBsZXNBc0NodW5rcyhBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlcgogCiBib29s
IEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMoQXVkaW9CdWZmZXJMaXN0JiBidWZm
ZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBkb3VibGUgaG9zdFRp
bWUsIFB1bGxNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKCFtX3JpbmdCdWZmZXIpIHsKLSAgICAgICAg
c2l6ZV90IGJ5dGVDb3VudCA9IHNhbXBsZUNvdW50ICogbV9vdXRwdXREZXNjcmlwdGlvbi0+Ynl0
ZXNQZXJGcmFtZSgpOwotICAgICAgICBBdWRpb1NhbXBsZUJ1ZmZlckxpc3Q6Onplcm9BQkwoYnVm
ZmVyLCBieXRlQ291bnQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgcmV0
dXJuIHB1bGxTYW1wbGVzSW50ZXJuYWwoYnVmZmVyLCBzYW1wbGVDb3VudCwgdGltZVN0YW1wLCBo
b3N0VGltZSwgbW9kZSk7CiB9CiAKIGJvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2Ft
cGxlcyhBdWRpb1NhbXBsZUJ1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90IHNhbXBsZUNvdW50LCB1
aW50NjRfdCB0aW1lU3RhbXAsIGRvdWJsZSBob3N0VGltZSwgUHVsbE1vZGUgbW9kZSkKIHsKLSAg
ICBpZiAoIW1fcmluZ0J1ZmZlcikgewotICAgICAgICBidWZmZXIuemVybygpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCiAgICAgaWYgKCFwdWxsU2FtcGxlc0ludGVybmFsKGJ1ZmZl
ci5idWZmZXJMaXN0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIGhvc3RUaW1lLCBtb2RlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>423889</attachid>
            <date>2021-03-22 08:40:44 -0700</date>
            <delta_ts>2021-03-22 15:10:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223549-20210322084043.patch</filename>
            <type>text/plain</type>
            <size>11704</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0NzUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWQ5MjI2OTk4MWQ3OWQy
YjFmZjcwMjhmZGUyOGEwMGU3YzQ0MzdmMi4uMmE1OGVjM2U2ZWQ0NjM2MjE4YWUwNjE5ZjJlMWY1
ZjI2YmUzNTNhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDIxLTAzLTIyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUmVkdWNlIG51bWJlciBvZiBo
ZWFwIGFsbG9jYXRpb25zIG9uIHRoZSBhdWRpbyB0aHJlYWQgaW4gQXVkaW9TYW1wbGVEYXRhU291
cmNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjM1
NDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWR1
Y2UgbnVtYmVyIG9mIGhlYXAgYWxsb2NhdGlvbnMgb24gdGhlIGF1ZGlvIHRocmVhZCBpbiBBdWRp
b1NhbXBsZURhdGFTb3VyY2UKKyAgICAgICAgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuIEkgZ290
IHJpZCBvZiB0aGUgaGVhcCBhbGxvY2F0aW9ucyB0aGF0IEkgY291bGQgZWFzaWx5CisgICAgICAg
IGFkZHJlc3MuIFNvbWUgdHJpY2tpZXIgb25lcyByZW1haW4uCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFTb3VyY2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6aW5wdXREZXNjcmlwdGlvbiBjb25zdCk6CisgICAgICAg
IC0gVXNlIE9wdGlvbmFsPD4gdHlwZSBmb3IgbV9pbnB1dERlc2NyaXB0aW9uICYgbV9vdXRwdXRE
ZXNjcmlwdGlvbiBkYXRhIG1lbWJlcnMgaW5zdGVhZCBvZgorICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8PiBzbyB0aGF0IHdlIGNhbiBpbml0aWFsaXplIHRoZW0gd2l0aG91dCBoZWFwIGFsbG9jYXRp
b24uCisgICAgICAgIC0gVXNlIFVuaXF1ZVJlZjw+IGluc3RlYWQgb2Ygc3RkOjp1bmlxdWVfcHRy
PD4gZm9yIG1fcmluZ0J1ZmZlciBub3cgdGhhdCBpdCBnZXRzCisgICAgICAgICAgaW5pdGlhbGl6
ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIChvbiB0aGUgbWFpbiB0aHJlYWQpLgorCisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2UpOgor
ICAgICAgICBJbml0aWFsaXplIG1fcmluZ0J1ZmZlciBpbiB0aGUgY29uc3RydWN0b3Igd2hpY2gg
cnVucyBvbiB0aGUgbWFpbiB0aHJlYWQsIGluc3RlYWQgb2YKKyAgICAgICAgZG9pbmcgaXQgbGF6
aWx5IGxhdGVyIG9uLCBvbiB0aGUgYXVkaW8gcmVuZGVyaW5nIHRocmVhZC4KKworICAgICAgICAo
V2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlOjp+QXVkaW9TYW1wbGVEYXRhU291cmNlKToK
KyAgICAgICAgU3RvcCBudWxsaW5nIGRhdGEgbWVtYmVycyBvdXQgdW5uZWNlc3NhcmlseSBpbiB0
aGUgZGVzdHJ1Y3Rvci4KKworICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1wbGVEYXRhU291cmNl
OjpzZXRJbnB1dEZvcm1hdCk6CisgICAgICAgIEluaXRpYWxpemUgbV9pbnB1dERlc2NyaXB0aW9u
IHdpdGhvdXQgZG9pbmcgYSBoZWFwIGFsbG9jYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU2FtcGxlRGF0YVNvdXJjZTo6c2V0T3V0cHV0Rm9ybWF0KToKKyAgICAgICAgLSBJbml0aWFs
aXplIG1fb3V0cHV0RGVzY3JpcHRpb24gd2l0aG91dCBkb2luZyBhIGhlYXAgYWxsb2NhdGlvbi4K
KyAgICAgICAgLSBEcm9wIGluaXRpYWxpemF0aW9uIG9mIG1fcmluZ0J1ZmZlciBub3cgdGhhdCBp
dCBpcyBkb25lIGVhZ2VybHkgaW4gdGhlIGNvbnN0cnVjdG9yLgorICAgICAgICAtIERyb3AgUnVu
TG9vcDo6bWFpbigpLmRpc3BhdGNoKCkganVzdCB0byBkbyBsb2dnaW5nIHNpbmNlIHRoaXMgd2Fz
IGNhdXNpbmcgaGVhcCBhbGxvY2F0aW9ucy4KKworICAgICAgICAoV2ViQ29yZTo6QXVkaW9TYW1w
bGVEYXRhU291cmNlOjpwdXNoU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVzaFNhbXBsZXMpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0ludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbEF2YWxhaWJsZVNhbXBsZXNBc0NodW5rcyk6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxTYW1wbGVzKToK
KyAgICAgICAgRHJvcCBudWxsIGNoZWNrcyBmb3IgbV9yaW5nQnVmZmVyIG5vdyB0aGF0IGl0IGlz
IGluaXRpYWxpemVkIGVhZ2VybHkgaW4gdGhlIGNvbnN0cnVjdG9yCisgICAgICAgIGFuZCB0aHVz
IGNhbiBuZXZlciBiZSBudWxsLgorCiAyMDIxLTAzLTE5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KIAogICAgICAgICBMaW5rIGFnYWluc3QgdGhlIEFOR0xFIFNoYXJlZCBMaWJyYXJ5
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1Nh
bXBsZURhdGFTb3VyY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCmluZGV4IDgzNmMxNGJlNjdhNTllZTViOTczMjM2NWE4MTMx
YjgxNTlhOTUwZTkuLjUzNzZlOWJjNWUyZGNhYmVhMDYyYmZjMDBhM2RhY2U1OTViYmRjMjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxl
RGF0YVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1
ZGlvU2FtcGxlRGF0YVNvdXJjZS5oCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICBib29s
IHB1bGxTYW1wbGVzKEF1ZGlvU2FtcGxlQnVmZmVyTGlzdCYsIHNpemVfdCwgdWludDY0X3QsIGRv
dWJsZSwgUHVsbE1vZGUpOwogICAgIGJvb2wgcHVsbFNhbXBsZXMoQXVkaW9CdWZmZXJMaXN0Jiwg
c2l6ZV90LCB1aW50NjRfdCwgZG91YmxlLCBQdWxsTW9kZSk7CiAKLSAgICBib29sIHB1bGxBdmFs
YWlibGVTYW1wbGVzQXNDaHVua3MoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90IGZyYW1lQ291bnQs
IHVpbnQ2NF90IHRpbWVTdGFtcCwgRnVuY3Rpb248dm9pZCgpPiYmKTsKKyAgICBib29sIHB1bGxB
dmFpbGFibGVTYW1wbGVzQXNDaHVua3MoQXVkaW9CdWZmZXJMaXN0Jiwgc2l6ZV90IGZyYW1lQ291
bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgRnVuY3Rpb248dm9pZCgpPiYmKTsKIAogICAgIHZvaWQg
c2V0Vm9sdW1lKGZsb2F0IHZvbHVtZSkgeyBtX3ZvbHVtZSA9IHZvbHVtZTsgfQogICAgIGZsb2F0
IHZvbHVtZSgpIGNvbnN0IHsgcmV0dXJuIG1fdm9sdW1lOyB9CkBAIC02OSw3ICs2OSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE11dGVkKGJvb2wgbXV0ZWQpIHsgbV9tdXRlZCA9IG11dGVkOyB9
CiAgICAgYm9vbCBtdXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbXV0ZWQ7IH0KIAotICAgIGNvbnN0
IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiogaW5wdXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0
dXJuIG1faW5wdXREZXNjcmlwdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiogaW5wdXREZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXREZXNj
cmlwdGlvbiA/ICZtX2lucHV0RGVzY3JpcHRpb24udmFsdWUoKSA6IG51bGxwdHI7IH0KIAogI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAogICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9sb2dnZXI7IH0KQEAgLTg3LDggKzg3LDggQEAgcHJpdmF0ZToKIAog
ICAgIHZvaWQgcHVzaFNhbXBsZXNJbnRlcm5hbChjb25zdCBBdWRpb0J1ZmZlckxpc3QmLCBjb25z
dCBNZWRpYVRpbWUmLCBzaXplX3QgZnJhbWVDb3VudCk7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPiBtX2lucHV0RGVzY3JpcHRpb247Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbj4gbV9vdXRwdXREZXNjcmlwdGlvbjsK
KyAgICBPcHRpb25hbDxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1faW5wdXREZXNjcmlwdGlv
bjsKKyAgICBPcHRpb25hbDxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+IG1fb3V0cHV0RGVzY3Jp
cHRpb247CiAKICAgICBNZWRpYVRpbWUgaG9zdFRpbWUoKSBjb25zdDsKIApAQCAtMTA2LDcgKzEw
Niw3IEBAIHByaXZhdGU6CiAgICAgQXVkaW9Db252ZXJ0ZXJSZWYgbV9jb252ZXJ0ZXI7CiAgICAg
UmVmUHRyPEF1ZGlvU2FtcGxlQnVmZmVyTGlzdD4gbV9zY3JhdGNoQnVmZmVyOwogCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENBUmluZ0J1ZmZlcj4gbV9yaW5nQnVmZmVyOworICAgIFVuaXF1ZVJlZjxD
QVJpbmdCdWZmZXI+IG1fcmluZ0J1ZmZlcjsKICAgICBzaXplX3QgbV9tYXhpbXVtU2FtcGxlQ291
bnQgeyAwIH07CiAKICAgICBmbG9hdCBtX3ZvbHVtZSB7IDEuMCB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291cmNlLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY29jb2EvQXVkaW9TYW1wbGVEYXRhU291
cmNlLm1tCmluZGV4IDU1OGMzODJhMmU4NDViMWUwOGQwMWQzM2RiN2YyOGM3YTFmZWNkY2QuLjBi
NThiMmYxYWYxMjUzNThhZDY5NTI3NmQ5YmU5NTczZmY5MDk4NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2NvY29hL0F1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9jb2NvYS9BdWRpb1NhbXBsZURhdGFT
b3VyY2UubW0KQEAgLTUyLDYgKzUyLDcgQEAgUmVmPEF1ZGlvU2FtcGxlRGF0YVNvdXJjZT4gQXVk
aW9TYW1wbGVEYXRhU291cmNlOjpjcmVhdGUoc2l6ZV90IG1heGltdW1TYW1wbGVDb3UKIAogQXVk
aW9TYW1wbGVEYXRhU291cmNlOjpBdWRpb1NhbXBsZURhdGFTb3VyY2Uoc2l6ZV90IG1heGltdW1T
YW1wbGVDb3VudCwgTG9nZ2VySGVscGVyJiBsb2dnZXJIZWxwZXIpCiAgICAgOiBtX2lucHV0U2Ft
cGxlT2Zmc2V0KE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fcmluZ0J1ZmZlciht
YWtlVW5pcXVlUmVmPENBUmluZ0J1ZmZlcj4oKSkKICAgICAsIG1fbWF4aW11bVNhbXBsZUNvdW50
KG1heGltdW1TYW1wbGVDb3VudCkKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKICAgICAsIG1f
bG9nZ2VyKGxvZ2dlckhlbHBlci5sb2dnZXIoKSkKQEAgLTY1LDEzICs2Niw4IEBAIEF1ZGlvU2Ft
cGxlRGF0YVNvdXJjZTo6QXVkaW9TYW1wbGVEYXRhU291cmNlKHNpemVfdCBtYXhpbXVtU2FtcGxl
Q291bnQsIExvZ2dlckhlCiAKIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6fkF1ZGlvU2FtcGxlRGF0
YVNvdXJjZSgpCiB7Ci0gICAgbV9pbnB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBtX291
dHB1dERlc2NyaXB0aW9uID0gbnVsbHB0cjsKLSAgICBtX3JpbmdCdWZmZXIgPSBudWxscHRyOwot
ICAgIGlmIChtX2NvbnZlcnRlcikgeworICAgIGlmIChtX2NvbnZlcnRlcikKICAgICAgICAgQXVk
aW9Db252ZXJ0ZXJEaXNwb3NlKG1fY29udmVydGVyKTsKLSAgICAgICAgbV9jb252ZXJ0ZXIgPSBu
dWxscHRyOwotICAgIH0KIH0KIAogT1NTdGF0dXMgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpzZXR1
cENvbnZlcnRlcigpCkBAIC0xMDEsNyArOTcsNyBAQCBPU1N0YXR1cyBBdWRpb1NhbXBsZURhdGFT
b3VyY2U6OnNldElucHV0Rm9ybWF0KGNvbnN0IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZgog
ewogICAgIEFTU0VSVChmb3JtYXQuc2FtcGxlUmF0ZSgpID49IDApOwogCi0gICAgbV9pbnB1dERl
c2NyaXB0aW9uID0gbWFrZVVuaXF1ZTxDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24+KGZvcm1hdCk7
CisgICAgbV9pbnB1dERlc2NyaXB0aW9uID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsgZm9y
bWF0IH07CiAgICAgaWYgKG1fb3V0cHV0RGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybiBzZXR1
cENvbnZlcnRlcigpOwogCkBAIC0xMTMsOSArMTA5LDcgQEAgT1NTdGF0dXMgQXVkaW9TYW1wbGVE
YXRhU291cmNlOjpzZXRPdXRwdXRGb3JtYXQoY29uc3QgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
JgogICAgIEFTU0VSVChtX2lucHV0RGVzY3JpcHRpb24pOwogICAgIEFTU0VSVChmb3JtYXQuc2Ft
cGxlUmF0ZSgpID49IDApOwogCi0gICAgbV9vdXRwdXREZXNjcmlwdGlvbiA9IG1ha2VVbmlxdWU8
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uPihmb3JtYXQpOwotICAgIGlmICghbV9yaW5nQnVmZmVy
KQotICAgICAgICBtX3JpbmdCdWZmZXIgPSBtYWtlVW5pcXVlPENBUmluZ0J1ZmZlcj4oKTsKKyAg
ICBtX291dHB1dERlc2NyaXB0aW9uID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsgZm9ybWF0
IH07CiAKICAgICBtX3JpbmdCdWZmZXItPmFsbG9jYXRlKGZvcm1hdCwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihtX21heGltdW1TYW1wbGVDb3VudCkpOwogICAgIG1fc2NyYXRjaEJ1ZmZlciA9IEF1ZGlv
U2FtcGxlQnVmZmVyTGlzdDo6Y3JlYXRlKG1fb3V0cHV0RGVzY3JpcHRpb24tPnN0cmVhbURlc2Ny
aXB0aW9uKCksIG1fbWF4aW11bVNhbXBsZUNvdW50KTsKQEAgLTE2MCwxMiArMTU0LDggQEAgdm9p
ZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1c2hTYW1wbGVzSW50ZXJuYWwoY29uc3QgQXVkaW9C
dWZmZXJMaXN0JiBidWZmZXJMaXMKICAgICAgICAgc2FtcGxlVGltZSA9IG1fZXhwZWN0ZWROZXh0
UHVzaGVkU2FtcGxlVGltZTsKICAgICBtX2V4cGVjdGVkTmV4dFB1c2hlZFNhbXBsZVRpbWUgPSBz
YW1wbGVUaW1lICsgTWVkaWFUaW1lKHNhbXBsZUNvdW50LCBzYW1wbGVUaW1lLnRpbWVTY2FsZSgp
KTsKIAotICAgIGlmIChtX2lucHV0U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxpZFRp
bWUoKSkgeworICAgIGlmIChtX2lucHV0U2FtcGxlT2Zmc2V0ID09IE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKSkKICAgICAgICAgbV9pbnB1dFNhbXBsZU9mZnNldCA9IE1lZGlhVGltZSgxIC0gc2Ft
cGxlVGltZS50aW1lVmFsdWUoKSwgc2FtcGxlVGltZS50aW1lU2NhbGUoKSk7Ci0gICAgICAgIFJ1
bkxvb3A6Om1haW4oKS5kaXNwYXRjaChbbG9nSWRlbnRpZmllciA9IExPR0lERU5USUZJRVIsIGlu
cHV0U2FtcGxlT2Zmc2V0ID0gbV9pbnB1dFNhbXBsZU9mZnNldC50aW1lVmFsdWUoKSwgbWF4aW11
bVNhbXBsZUNvdW50ID0gbV9tYXhpbXVtU2FtcGxlQ291bnQsIHRoaXMsIHByb3RlY3RlZFRoaXMg
PSBtYWtlUmVmUHRyKCp0aGlzKV0gewotICAgICAgICAgICAgQUxXQVlTX0xPRyhsb2dJZGVudGlm
aWVyLCAiaW5wdXQgc2FtcGxlIG9mZnNldCBpcyAiLCBpbnB1dFNhbXBsZU9mZnNldCwgIiwgbWF4
aW11bVNhbXBsZUNvdW50IGlzICIsIG1heGltdW1TYW1wbGVDb3VudCk7Ci0gICAgICAgIH0pOwot
ICAgIH0KICAgICBzYW1wbGVUaW1lICs9IG1faW5wdXRTYW1wbGVPZmZzZXQ7CiAKICNpZiAhTE9H
X0RJU0FCTEVECkBAIC0xODEsOCArMTcxLDcgQEAgdm9pZCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6
OnB1c2hTYW1wbGVzSW50ZXJuYWwoY29uc3QgQXVkaW9CdWZmZXJMaXN0JiBidWZmZXJMaXMKIHZv
aWQgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdXNoU2FtcGxlcyhjb25zdCBBdWRpb1N0cmVhbUJh
c2ljRGVzY3JpcHRpb24mIHNhbXBsZURlc2NyaXB0aW9uLCBDTVNhbXBsZUJ1ZmZlclJlZiBzYW1w
bGVCdWZmZXIpCiB7CiAgICAgQVNTRVJUX1VOVVNFRChzYW1wbGVEZXNjcmlwdGlvbiwgKm1faW5w
dXREZXNjcmlwdGlvbiA9PSBzYW1wbGVEZXNjcmlwdGlvbik7Ci0gICAgQVNTRVJUKG1fcmluZ0J1
ZmZlcik7Ci0gICAgCisKICAgICBXZWJBdWRpb0J1ZmZlckxpc3QgbGlzdCgqbV9pbnB1dERlc2Ny
aXB0aW9uLCBzYW1wbGVCdWZmZXIpOwogICAgIHB1c2hTYW1wbGVzSW50ZXJuYWwobGlzdCwgUEFM
Ojp0b01lZGlhVGltZShQQUw6OkNNU2FtcGxlQnVmZmVyR2V0UHJlc2VudGF0aW9uVGltZVN0YW1w
KHNhbXBsZUJ1ZmZlcikpLCBQQUw6OkNNU2FtcGxlQnVmZmVyR2V0TnVtU2FtcGxlcyhzYW1wbGVC
dWZmZXIpKTsKIH0KQEAgLTIxOCw3ICsyMDcsNyBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJj
ZTo6cHVsbFNhbXBsZXNJbnRlcm5hbChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmluZ0J1ZmZlciB8fCBt
X211dGVkIHx8IG1faW5wdXRTYW1wbGVPZmZzZXQgPT0gTWVkaWFUaW1lOjppbnZhbGlkVGltZSgp
KSB7CisgICAgaWYgKG1fbXV0ZWQgfHwgbV9pbnB1dFNhbXBsZU9mZnNldCA9PSBNZWRpYVRpbWU6
OmludmFsaWRUaW1lKCkpIHsKICAgICAgICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJM
KGJ1ZmZlciwgYnl0ZUNvdW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTI3
MCw3ICsyNTksNyBAQCBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXNJbnRl
cm5hbChBdWRpb0J1ZmZlckxpc3QmIGJ1ZmZlciwgc2l6ZV90CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KIAotICAgIGlmIChtX3NjcmF0Y2hCdWZmZXItPmNvcHlGcm9tKCptX3JpbmdCdWZm
ZXIuZ2V0KCksIHNhbXBsZUNvdW50LCB0aW1lU3RhbXAsIENBUmluZ0J1ZmZlcjo6Q29weSkpCisg
ICAgaWYgKG1fc2NyYXRjaEJ1ZmZlci0+Y29weUZyb20obV9yaW5nQnVmZmVyLmdldCgpLCBzYW1w
bGVDb3VudCwgdGltZVN0YW1wLCBDQVJpbmdCdWZmZXI6OkNvcHkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBtX3NjcmF0Y2hCdWZmZXItPmFwcGx5R2FpbihtX3ZvbHVtZSk7CkBAIC0y
ODEsMTEgKzI3MCw4IEBAIGJvb2wgQXVkaW9TYW1wbGVEYXRhU291cmNlOjpwdWxsU2FtcGxlc0lu
dGVybmFsKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxBdmFsYWlibGVTYW1wbGVzQXND
aHVua3MoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudFBlckNodW5r
LCB1aW50NjRfdCB0aW1lU3RhbXAsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb25zdW1lRmlsbGVkQnVm
ZmVyKQorYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxBdmFpbGFibGVTYW1wbGVzQXND
aHVua3MoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudFBlckNodW5r
LCB1aW50NjRfdCB0aW1lU3RhbXAsIEZ1bmN0aW9uPHZvaWQoKT4mJiBjb25zdW1lRmlsbGVkQnVm
ZmVyKQogewotICAgIGlmICghbV9yaW5nQnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
ICAgICBBU1NFUlQoYnVmZmVyLm1OdW1iZXJCdWZmZXJzID09IG1fcmluZ0J1ZmZlci0+Y2hhbm5l
bENvdW50KCkpOwogICAgIGlmIChidWZmZXIubU51bWJlckJ1ZmZlcnMgIT0gbV9yaW5nQnVmZmVy
LT5jaGFubmVsQ291bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI0LDIyICszMTAs
MTEgQEAgYm9vbCBBdWRpb1NhbXBsZURhdGFTb3VyY2U6OnB1bGxBdmFsYWlibGVTYW1wbGVzQXND
aHVua3MoQXVkaW9CdWZmZXJMaXN0JiBidWZmZXIKIAogYm9vbCBBdWRpb1NhbXBsZURhdGFTb3Vy
Y2U6OnB1bGxTYW1wbGVzKEF1ZGlvQnVmZmVyTGlzdCYgYnVmZmVyLCBzaXplX3Qgc2FtcGxlQ291
bnQsIHVpbnQ2NF90IHRpbWVTdGFtcCwgZG91YmxlIGhvc3RUaW1lLCBQdWxsTW9kZSBtb2RlKQog
ewotICAgIGlmICghbV9yaW5nQnVmZmVyKSB7Ci0gICAgICAgIHNpemVfdCBieXRlQ291bnQgPSBz
YW1wbGVDb3VudCAqIG1fb3V0cHV0RGVzY3JpcHRpb24tPmJ5dGVzUGVyRnJhbWUoKTsKLSAgICAg
ICAgQXVkaW9TYW1wbGVCdWZmZXJMaXN0Ojp6ZXJvQUJMKGJ1ZmZlciwgYnl0ZUNvdW50KTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQogICAgIHJldHVybiBwdWxsU2FtcGxlc0ludGVy
bmFsKGJ1ZmZlciwgc2FtcGxlQ291bnQsIHRpbWVTdGFtcCwgaG9zdFRpbWUsIG1vZGUpOwogfQog
CiBib29sIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZTo6cHVsbFNhbXBsZXMoQXVkaW9TYW1wbGVCdWZm
ZXJMaXN0JiBidWZmZXIsIHNpemVfdCBzYW1wbGVDb3VudCwgdWludDY0X3QgdGltZVN0YW1wLCBk
b3VibGUgaG9zdFRpbWUsIFB1bGxNb2RlIG1vZGUpCiB7Ci0gICAgaWYgKCFtX3JpbmdCdWZmZXIp
IHsKLSAgICAgICAgYnVmZmVyLnplcm8oKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LQogICAgIGlmICghcHVsbFNhbXBsZXNJbnRlcm5hbChidWZmZXIuYnVmZmVyTGlzdCgpLCBzYW1w
bGVDb3VudCwgdGltZVN0YW1wLCBob3N0VGltZSwgbW9kZSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUNvY29hLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VDb2NvYS5j
cHAKaW5kZXggODc3ZWYyOGFlNTVlZTBmMzQ5OGVhM2ZhZGVhODk3ZmU1NDZmNGNlMC4uMzZiYTYy
OTA0ZWYxNjMyN2E2YmJlYzA3MjQ3ZDgzYTRmN2NmMzY4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUNvY29hLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMv
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlQ29jb2EuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAg
dm9pZCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VDb2NvYTo6cHVsbEF1ZGlvRGF0YSgpCiAg
ICAgaWYgKGlzU2lsZW5jZWQoKSAhPSAgbV9zYW1wbGVDb252ZXJ0ZXItPm11dGVkKCkpCiAgICAg
ICAgIG1fc2FtcGxlQ29udmVydGVyLT5zZXRNdXRlZChpc1NpbGVuY2VkKCkpOwogCi0gICAgbV9z
YW1wbGVDb252ZXJ0ZXItPnB1bGxBdmFsYWlibGVTYW1wbGVzQXNDaHVua3MoYnVmZmVyTGlzdCwg
Y2h1bmtTYW1wbGVDb3VudCwgbV9yZWFkQ291bnQsIFt0aGlzLCBjaHVua1NhbXBsZUNvdW50XSB7
CisgICAgbV9zYW1wbGVDb252ZXJ0ZXItPnB1bGxBdmFpbGFibGVTYW1wbGVzQXNDaHVua3MoYnVm
ZmVyTGlzdCwgY2h1bmtTYW1wbGVDb3VudCwgbV9yZWFkQ291bnQsIFt0aGlzLCBjaHVua1NhbXBs
ZUNvdW50XSB7CiAgICAgICAgIG1fcmVhZENvdW50ICs9IGNodW5rU2FtcGxlQ291bnQ7CiAgICAg
ICAgIHNlbmRBdWRpb0ZyYW1lcyhtX2F1ZGlvQnVmZmVyLmRhdGEoKSwgTGliV2ViUlRDQXVkaW9G
b3JtYXQ6OnNhbXBsZVNpemUsIG1fb3V0cHV0U3RyZWFtRGVzY3JpcHRpb24uc2FtcGxlUmF0ZSgp
LCBtX291dHB1dFN0cmVhbURlc2NyaXB0aW9uLm51bWJlck9mQ2hhbm5lbHMoKSwgY2h1bmtTYW1w
bGVDb3VudCk7CiAgICAgfSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>