<?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>194747</bug_id>
          
          <creation_ts>2019-02-16 09:06:35 -0800</creation_ts>
          <short_desc>[MSE] SourceBuffer sample time increment vs. last frame duration check is broken</short_desc>
          <delta_ts>2019-04-02 10:45:53 -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>Safari Technology Preview</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>All</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>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>up</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>lietz</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1507018</commentid>
    <comment_count>0</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-16 09:06:35 -0800</bug_when>
    <thetext>Technical Severity 

This issue is breaking MSE playback for totally MSE compliant streams, 
in our case fMP4/H.264/AAC, but not limited to this container or codecs. 
Effects are playback not starting at all or significantly delayed and  
massive amount of frame/sample drop mid stream forced by a 
wrong a MSE compliance check.  

Business Severity 

If the issue will make it into Safari 12.2, 
MSE playback will be broken in Safari for our cdn,  
business leading customers of ours and 
other MSE applications and users. 
We would like to offer assistance and developer time 
to prevent this. 

Code Location and Context 

Location of the issue is SourceBuffer::sourceBufferPrivateDidReceiveSample 
in WebCore/Modules/mediasource/SourceBuffer.cpp, 
in the second part of this conditional statement related to trackBuffer.greatestDecodeDuration. 
The problem is how trackBuffer.greatestDecodeDuration is set/calculated. 
It is mainly a logical issue. Please find more in the details section. 

// 1.6 ↳ If last decode timestamp for track buffer is set and decode timestamp is less than last
// decode timestamp:
// OR
// ↳ If last decode timestamp for track buffer is set and the difference between decode timestamp and
// last decode timestamp is greater than 2 times last frame duration:
if (trackBuffer.lastDecodeTimestamp.isValid() &amp;&amp; (decodeTimestamp &lt; trackBuffer.lastDecodeTimestamp
   || (trackBuffer.greatestDecodeDuration.isValid() &amp;&amp; abs(decodeTimestamp - trackBuffer.lastDecodeTimestamp) &gt; (trackBuffer.greatestDecodeDuration * 2)))) 

Bug history 

We have first discovered the issue in Safari Technology preview 75. 
We have been able to verify that it exists already in STP 72, 
and that it did NOT exist in STP 61. Further it does not exist in 
the current Safari 12.1 release. 

Checking out WebKit itself we have been able to recreate the issue 
in WebKit nightly 2019 Feb. 14th. 

We have checked in between [MEDIA] commits and found this one: 
https://trac.webkit.org/changeset/236314/webkit/

According to the description the trackBuffer.greatestDecodeDuration check 
has been hidden behind a smaller bug related to the assignment. 
By fixing this the major issue with trackBuffer.greatestDecodeDuration 
became active. 

Details 

Here is how we understand the timestamp increment vs last frame duration check 
in the MSE spec and how it is done in the current implementation. 

Example frame/sample sequence that should not fail (but currently does): 

Frame A) dts:0, duration 10 
Frame B) dts:10, duration 90 
Frame C) dts:100, duration 10 
Timestamp increase and previous frame duration are perfectly aligned. 

Example frame/sample sequence that should fail: 

Frame A) dts:0, duration 10 
Frame B) dts:10, duration 10 
Frame C) dts:100, duration 10 
Discontinuity due to mismatch from B to C. 

What should be compared is (C.dts - B.dts) vs. B.duration .

Current impl. is comparing (C.dts - B.dts) vs. (B.dts - A.dts) . 
(involving a maximum value storage but that does not matter here) 

Instead of comparing current timestamp increment vs. last frame duration 
it&apos;s comparing current timestamp increment vs. previous timestamp increment, 
which makes a huge difference, because the target here is not to check 
how constant the frame rate is, but to detect discontinuities. 
Not sure about other containers, but in fMP4 the timestamp and duration 
of a frame are stored separately and explicitely. 

Implications seem to be even stranger for audio in fMP4, 
where one sample can hold multiple audio frames. 
In this case the current check will apply constraints to 
how many audio frames one sample contains and how it 
compares to the number of audio frames in the previous sample, 
which is obviously not what this check should be about. 

Proposal for a &apos;simple&apos; fix 

Logically the solution would be to compare against trackBuffer.lastFrameDuration 
if valid instead of trackBuffer.greatestDecodeDuration. 

Technically both approaches could be combined to keep changes at a minimum, 
but no sample should be rejected if trackBuffer.lastFrameDuration is not valid. 
It must be ensured that, if valid, trackBuffer.lastFrameDuration holds the duration 
of the last frame/sample, not of any previous ones. 

Thanks in advance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507116</commentid>
    <comment_count>1</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-17 12:05:27 -0800</bug_when>
    <thetext>@up, are you describing “decode time stamp” with “dts” or “display time stamp”? Also, decode duration or display duration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507119</commentid>
    <comment_count>2</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-17 12:10:28 -0800</bug_when>
    <thetext>Also, we have a pretty capable “mock” MSE implementation for running layout tests that isn’t dependent on any particular demuxer/decoder. I wonder if we could translate your examples into a LayoutTest and verify that it is indeed failing the way you describe. 

FWIW, for audio samples, we have a way of “splitting” a large sample group into smaller ones for the purposes of overlap avoidance. So the “large sample” issue should be less of a problem in practice. 

FWIW #2, other container formats (most notably Matroshka) are much less rigorous than ISO BMFF when it comes to timing info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507122</commentid>
    <comment_count>3</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-17 12:12:12 -0800</bug_when>
    <thetext>@up, do you have a public ally available trstcase that demonstrates the issue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507125</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-02-17 12:12:47 -0800</bug_when>
    <thetext>&lt;rdar://problem/48148469&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507241</commentid>
    <comment_count>5</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-18 03:40:57 -0800</bug_when>
    <thetext>@jer Thank you for the fast response. I was referring to decode time and decode duration, as this is what is checked in this case. dts vs. pts does not really matter, or is a more special question, because for video without frame reordering, e.g. H.264 Baseline Profile, dts and pts are the same, even if there is a constant offset sometimes, and will break just as described. 

Sorry, I&apos;m not familiar (yet) with the tests in WebKit. I have seen the mock source, but not 100% sure how it works. Can somebody assist to model the first frame sequence I have described in a mock source test? 

Regarding a test case, I will try to provide one, but as I said the issue can be understood logically and that&apos;s what I tried to explain in the report. 
I suggest to focus on creating the mock test first. 

Regarding the split up of large audio sample groups, what are the limits that will cause the split up? Problem is that especially in low latency live streaming use cases, the fMP4 fragments are kept pretty small, might be even video frame length. 

Really appreciating your help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507437</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-18 14:27:36 -0800</bug_when>
    <thetext>(In reply to up from comment #5)
&gt; @jer Thank you for the fast response. I was referring to decode time and
&gt; decode duration, as this is what is checked in this case. dts vs. pts does
&gt; not really matter, or is a more special question, because for video without
&gt; frame reordering, e.g. H.264 Baseline Profile, dts and pts are the same,
&gt; even if there is a constant offset sometimes, and will break just as
&gt; described. 
&gt; 
&gt; Sorry, I&apos;m not familiar (yet) with the tests in WebKit. I have seen the mock
&gt; source, but not 100% sure how it works. Can somebody assist to model the
&gt; first frame sequence I have described in a mock source test? 

Sure, here&apos;s a representative sort of test case for this kind of test:

https://trac.webkit.org/browser/webkit/trunk/LayoutTests/media/media-source/media-source-dropped-iframe.html

Which has the expected results of:

https://trac.webkit.org/browser/webkit/trunk/LayoutTests/media/media-source/media-source-dropped-iframe-expected.txt

You can see the interface to &quot;makeAInitSegment()&quot; and &quot;makeASample()&quot; here:

https://trac.webkit.org/browser/webkit/trunk/LayoutTests/media/media-source/mock-media-source.js

From your initial example, you would need something like:

	var samples = concatenateSamples(
		makeASample(0, 0, 10, 100, 1, SAMPLE_FLAG.SYNC, 1),
		makeASample(10, 10, 90, 100, 1, SAMPLE_FLAG.SYNC, 1),
		makeASample(100, 100, 10, 100, 1, SAMPLE_FLAG.SYNC, 1),
	);

..for a sample sequence of DTS,Duration [{0,10}, {10, 90}, {100, 10}], all with a timebase of 100 where each sample was an I-frame.

&gt; Regarding a test case, I will try to provide one, but as I said the issue
&gt; can be understood logically and that&apos;s what I tried to explain in the
&gt; report. 
&gt; I suggest to focus on creating the mock test first. 
&gt; 
&gt; Regarding the split up of large audio sample groups, what are the limits
&gt; that will cause the split up? Problem is that especially in low latency live
&gt; streaming use cases, the fMP4 fragments are kept pretty small, might be even
&gt; video frame length. 

I believe in theory that on platforms using CoreMedia (i.e., macOS and iOS), a composite audio sample can be divided up to the sample rate.  So a composite sample with a DTS,Duration of {0,44100} and a timescale of 44100 (which is also the audio track&apos;s sample rate) could be cleanly divided into two samples of {0, 12345} and {12345, 31755}. (Note that this will probably never line up perfectly with the timescale of a video track, whose own timebases tend to be not be based on the audio track&apos;s sample rate.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507715</commentid>
    <comment_count>7</comment_count>
      <attachid>362395</attachid>
    <who name="">up</who>
    <bug_when>2019-02-19 10:55:42 -0800</bug_when>
    <thetext>Created attachment 362395
Test case file for the reported issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507717</commentid>
    <comment_count>8</comment_count>
      <attachid>362396</attachid>
    <who name="">up</who>
    <bug_when>2019-02-19 10:56:20 -0800</bug_when>
    <thetext>Created attachment 362396
Expected output file for the reported issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507720</commentid>
    <comment_count>9</comment_count>
      <attachid>362398</attachid>
    <who name="">up</who>
    <bug_when>2019-02-19 10:58:29 -0800</bug_when>
    <thetext>Created attachment 362398
Correct test case file for the reported issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507726</commentid>
    <comment_count>10</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-19 11:08:05 -0800</bug_when>
    <thetext>@jer I have created a simple test case and expected output file. 
The expectation is that none of the added samples gets dropped. 
The case will fail with current webkit version due to the describe issue. 
Sample 3 and all following samples will get dropped until the next sync sample, which might take multiple seconds and might repeat for the next group of pictures/samples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1507911</commentid>
    <comment_count>11</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-19 16:30:43 -0800</bug_when>
    <thetext>@jer What&apos;s the best way to proceed? I can propose a patch that will maintain the current logic as far as possible while fixing the issue.?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1508065</commentid>
    <comment_count>12</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-20 07:08:55 -0800</bug_when>
    <thetext>(In reply to up from comment #11)
&gt; @jer What&apos;s the best way to proceed? I can propose a patch that will
&gt; maintain the current logic as far as possible while fixing the issue.?

@up, sure, that&apos;d be fine! When you propose a patch, the EWS (early warning system) bots will build the patch and run all the existing tests, including all the MSE ones to ensure that there are no regressions to previous fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509173</commentid>
    <comment_count>13</comment_count>
      <attachid>362766</attachid>
    <who name="">up</who>
    <bug_when>2019-02-22 14:29:09 -0800</bug_when>
    <thetext>Created attachment 362766
Patch Rev1

@jer I have added a patch. Code only, so without test case files and change log yet. I will add more comments on the idea of the patch. Is this ok for now, or should I submit the complete patch already before review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509175</commentid>
    <comment_count>14</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-22 14:37:10 -0800</bug_when>
    <thetext>(In reply to up from comment #13)
&gt; Created attachment 362766 [details]
&gt; Patch Rev1
&gt; 
&gt; @jer I have added a patch. Code only, so without test case files and change
&gt; log yet. I will add more comments on the idea of the patch. Is this ok for
&gt; now, or should I submit the complete patch already before review?

@up I think what you&apos;ve done so far is fine. You can signal that your patch is ready for review by setting the &quot;r?&quot; flag on the attachment, but attaching &quot;work in progress&quot; patches like yours is perfectly acceptable. Next step is to force the EWS bots to try to apply, build, and test your patch. The EWS bots will automatically do so for any &quot;r?&quot; patch, but for &quot;work in progress&quot; patches, you have to do that manually by clicking the &quot;Submit for EWS analysis&quot; button next to the attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509225</commentid>
    <comment_count>15</comment_count>
      <attachid>362781</attachid>
    <who name="">up</who>
    <bug_when>2019-02-22 16:20:22 -0800</bug_when>
    <thetext>Created attachment 362781
Patch Rev2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509653</commentid>
    <comment_count>16</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-25 09:45:13 -0800</bug_when>
    <thetext>@jer Patch Rev2 has passed the EWS. Intentions:  

- Keeping changes local, compact and clear 
- Avoiding to modify the state of the SourceBuffer object 
- Not mixing time differences and durations in greatestDecodeDuration in general
- Avoiding to make the final conditional statement more complex and nested 
- Respecting the current greatestDecodeDuration approach and complementing it only as far as required 
- Fixing the issue while not breaking out-of-order appends</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509668</commentid>
    <comment_count>17</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-25 10:20:48 -0800</bug_when>
    <thetext>This looks like a good approach. For Rev 3, please add the tests you attached to this bug in LayoutTests/media/media-source, and generate a ChangeLog using &apos;prepare-ChangeLog -b 194747&apos;, and I&apos;ll review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1509675</commentid>
    <comment_count>18</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-25 10:30:09 -0800</bug_when>
    <thetext>@jer Thanks, I will do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510145</commentid>
    <comment_count>19</comment_count>
      <attachid>363004</attachid>
    <who name="">up</who>
    <bug_when>2019-02-26 12:40:51 -0800</bug_when>
    <thetext>Created attachment 363004
Patch Rev3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510177</commentid>
    <comment_count>20</comment_count>
      <attachid>363004</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-02-26 13:39:34 -0800</bug_when>
    <thetext>Comment on attachment 363004
Patch Rev3

r=me. If you&apos;d like me (or any other WebKit contributor) to land it on your behalf, please set the &apos;cq&apos; flag to &apos;cq?&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510423</commentid>
    <comment_count>21</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-27 05:41:17 -0800</bug_when>
    <thetext>@jer Thank you! Patch Rev3 passed the EWS. I have set the commit-queue flag for it to ?.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510455</commentid>
    <comment_count>22</comment_count>
      <attachid>363004</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-27 09:31:51 -0800</bug_when>
    <thetext>Comment on attachment 363004
Patch Rev3

Clearing flags on attachment: 363004

Committed r242129: &lt;https://trac.webkit.org/changeset/242129&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510456</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-02-27 09:31:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1510465</commentid>
    <comment_count>24</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2019-02-27 09:45:51 -0800</bug_when>
    <thetext>(In reply to up from comment #21)
&gt; @jer Thank you! Patch Rev3 passed the EWS. I have set the commit-queue flag
&gt; for it to ?.

@up thanks for finding, reporting and fixing this!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1511096</commentid>
    <comment_count>25</comment_count>
    <who name="">up</who>
    <bug_when>2019-02-28 13:24:41 -0800</bug_when>
    <thetext>Thank you all, and especially @jer for the support and guidance!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513456</commentid>
    <comment_count>26</comment_count>
    <who name="">up</who>
    <bug_when>2019-03-07 01:41:45 -0800</bug_when>
    <thetext>@jer Hi, just checked the recent STP 77 branch. As it seems to be branched a bit back in time this patch is not included. Is there something else required from our side, except patience, to hopefully find it in the next STP(s) and  the next Safari OSX release based on recent STPs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1513483</commentid>
    <comment_count>27</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2019-03-07 05:30:45 -0800</bug_when>
    <thetext>@up, this change will automatically get picked up in the next STP, so there patience is all that’s required. It will also get picked up in a future Safari release, and I will ping this thread once that release is available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523294</commentid>
    <comment_count>28</comment_count>
    <who name="">up</who>
    <bug_when>2019-04-02 06:24:23 -0700</bug_when>
    <thetext>@jer Seems like the issue has been released in Safari 12.1 without this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523348</commentid>
    <comment_count>29</comment_count>
    <who name="Oliver Lietz">lietz</who>
    <bug_when>2019-04-02 10:45:53 -0700</bug_when>
    <thetext>Hello everybody,

we are excited to learn how the patch we proposed might land in the Safari releases. 
We noticed that Safari 12.1 still has the bug we worked on. 
This has a severe impact on our live streaming business applications. 
Is there a way to find out the ETA for getting this into production?
It would be great to hear back about this.
Please pm or mail me.

Thank you!

Oliver Lietz
Founder/CEO nanocosmos</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>362395</attachid>
            <date>2019-02-19 10:55:42 -0800</date>
            <delta_ts>2019-02-22 14:29:09 -0800</delta_ts>
            <desc>Test case file for the reported issue</desc>
            <filename>media-source-append-variable-frame-lengths-with-matching-durations-expected.txt</filename>
            <type>text/html</type>
            <size>733</size>
            <attacher>up</attacher>
            
              <data encoding="base64">VGhpcyB0ZXN0cyB0aGF0IHZhcmlhYmxlIGZyYW1lIGxlbmd0aHMgd2l0aCBtYXRjaGluZyBmcmFt
ZSBkdXJhdGlvbnMgd2lsbCBub3QgYmUgZHJvcHBlZC4KClJVTih2aWRlby5zcmMgPSBVUkwuY3Jl
YXRlT2JqZWN0VVJMKHNvdXJjZSkpCkVWRU5UKHNvdXJjZW9wZW4pClJVTihzb3VyY2VCdWZmZXIg
PSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpKQpSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkpCkVWRU5UKHVwZGF0ZWVuZCkK
UlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCkVWRU5UKHVwZGF0ZWVuZCkK
RVhQRUNURUQgKGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzMnKSBPSwp7UFRTKHswLzEwMDAg
PSAwLjAwMDAwMH0pLCBEVFMoezAvMTAwMCA9IDAuMDAwMDAwfSksIGR1cmF0aW9uKHsxMC8xMDAw
ID0gMC4wMTAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9CntQVFMoezEwLzEwMDAgPSAw
LjAxMDAwMH0pLCBEVFMoezEwLzEwMDAgPSAwLjAxMDAwMH0pLCBkdXJhdGlvbih7MzAvMTAwMCA9
IDAuMDMwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQp7UFRTKHs0MC8xMDAwID0gMC4w
NDAwMDB9KSwgRFRTKHs0MC8xMDAwID0gMC4wNDAwMDB9KSwgZHVyYXRpb24oezEwLzEwMDAgPSAw
LjAxMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigwKX0KRU5EIE9GIFRFU1QKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>362396</attachid>
            <date>2019-02-19 10:56:20 -0800</date>
            <delta_ts>2019-02-19 10:56:20 -0800</delta_ts>
            <desc>Expected output file for the reported issue</desc>
            <filename>media-source-append-variable-frame-lengths-with-matching-durations-expected.txt</filename>
            <type>text/plain</type>
            <size>733</size>
            <attacher>up</attacher>
            
              <data encoding="base64">VGhpcyB0ZXN0cyB0aGF0IHZhcmlhYmxlIGZyYW1lIGxlbmd0aHMgd2l0aCBtYXRjaGluZyBmcmFt
ZSBkdXJhdGlvbnMgd2lsbCBub3QgYmUgZHJvcHBlZC4KClJVTih2aWRlby5zcmMgPSBVUkwuY3Jl
YXRlT2JqZWN0VVJMKHNvdXJjZSkpCkVWRU5UKHNvdXJjZW9wZW4pClJVTihzb3VyY2VCdWZmZXIg
PSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpKQpSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCkpCkVWRU5UKHVwZGF0ZWVuZCkK
UlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCkVWRU5UKHVwZGF0ZWVuZCkK
RVhQRUNURUQgKGJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGggPT0gJzMnKSBPSwp7UFRTKHswLzEwMDAg
PSAwLjAwMDAwMH0pLCBEVFMoezAvMTAwMCA9IDAuMDAwMDAwfSksIGR1cmF0aW9uKHsxMC8xMDAw
ID0gMC4wMTAwMDB9KSwgZmxhZ3MoMSksIGdlbmVyYXRpb24oMCl9CntQVFMoezEwLzEwMDAgPSAw
LjAxMDAwMH0pLCBEVFMoezEwLzEwMDAgPSAwLjAxMDAwMH0pLCBkdXJhdGlvbih7MzAvMTAwMCA9
IDAuMDMwMDAwfSksIGZsYWdzKDApLCBnZW5lcmF0aW9uKDApfQp7UFRTKHs0MC8xMDAwID0gMC4w
NDAwMDB9KSwgRFRTKHs0MC8xMDAwID0gMC4wNDAwMDB9KSwgZHVyYXRpb24oezEwLzEwMDAgPSAw
LjAxMDAwMH0pLCBmbGFncygwKSwgZ2VuZXJhdGlvbigwKX0KRU5EIE9GIFRFU1QKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>362398</attachid>
            <date>2019-02-19 10:58:29 -0800</date>
            <delta_ts>2019-02-19 10:58:29 -0800</delta_ts>
            <desc>Correct test case file for the reported issue</desc>
            <filename>media-source-append-variable-frame-lengths-with-matching-durations.html</filename>
            <type>text/html</type>
            <size>1627</size>
            <attacher>up</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sPgo8aGVhZD4KICAgIDx0aXRsZT5tZWRpYS1zb3VyY2UtYXBw
ZW5kLXZhcmlhYmxlLWZyYW1lLWxlbmd0aHMtd2l0aC1tYXRjaGluZy1kdXJhdGlvbnM8L3RpdGxl
PgogICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KICAgIDxz
Y3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICB2
YXIgc291cmNlOwogICAgdmFyIHNvdXJjZUJ1ZmZlcjsKICAgIHZhciBpbml0U2VnbWVudDsKCiAg
ICBpZiAod2luZG93LmludGVybmFscykKICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tN
ZWRpYVNvdXJjZSgpOwoKICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMg
ZXZlbnQgPT4gewoKICAgICAgICBmaW5kTWVkaWFFbGVtZW50KCk7CgogICAgICAgIHNvdXJjZSA9
IG5ldyBNZWRpYVNvdXJjZSgpOwogICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9i
amVjdFVSTChzb3VyY2UpJyk7CiAgICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2UsICdzb3VyY2Vv
cGVuJyk7CgogICAgICAgIHJ1bignc291cmNlQnVmZmVyID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZl
cigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKScpOwogICAgICAgIGluaXRTZWdtZW50ID0gbWFr
ZUFJbml0KDgsIFttYWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURFTyldKTsKICAg
ICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdFNlZ21lbnQpJyk7CgogICAg
ICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsK
ICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMTAsIDEwMDAsIDEsIFNBTVBMRV9GTEFHLlNZ
TkMsIDApLAogICAgICAgICAgICBtYWtlQVNhbXBsZSgxMCwgMTAsIDMwLCAxMDAwLCAxLCBTQU1Q
TEVfRkxBRy5OT05FLCAwKSwKICAgICAgICAgICAgbWFrZUFTYW1wbGUoNDAsIDQwLCAxMCwgMTAw
MCwgMSwgU0FNUExFX0ZMQUcuTk9ORSwgMCkKICAgICAgICAgICAgXSk7CiAgICAgICAgCiAgICAg
ICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpJyk7CiAgICAgICAgYXdh
aXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKTsKCiAgICAgICAgYnVmZmVyZWRT
YW1wbGVzID0gaW50ZXJuYWxzLmJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSUQoc291cmNlQnVmZmVy
LCAxKTsKICAgICAgICB0ZXN0RXhwZWN0ZWQoImJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGgiLCAzKTsK
ICAgICAgICBidWZmZXJlZFNhbXBsZXMuZm9yRWFjaChjb25zb2xlV3JpdGUpOwogICAgICAgIGVu
ZFRlc3QoKTsKCiAgICB9LCB7b25jZTogdHJ1ZX0pOwogICAgPC9zY3JpcHQ+CjwvaGVhZD4KPGJv
ZHk+CiAgICA8ZGl2PlRoaXMgdGVzdHMgdGhhdCB2YXJpYWJsZSBmcmFtZSBsZW5ndGhzIHdpdGgg
bWF0Y2hpbmcgZnJhbWUgZHVyYXRpb25zIHdpbGwgbm90IGJlIGRyb3BwZWQuPC9kaXY+CiAgICA8
dmlkZW8+PC92aWRlbz4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362766</attachid>
            <date>2019-02-22 14:29:09 -0800</date>
            <delta_ts>2019-02-22 16:20:22 -0800</delta_ts>
            <desc>Patch Rev1</desc>
            <filename>source-buffer-cpp.diff</filename>
            <type>text/plain</type>
            <size>1293</size>
            <attacher>up</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5jcHAgICAgKHJldmlzaW9uIDI0MTk0NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCAgICAod29ya2luZyBjb3B5KQpAQCAtMTU0
Nyw4ICsxNTQ3LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGkK
Ly8gT1IKLy8g4oazIElmIGxhc3QgZGVjb2RlIHRpbWVzdGFtcCBmb3IgdHJhY2sgYnVmZmVyIGlz
IHNldCBhbmQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBkZWNvZGUgdGltZXN0YW1wIGFuZAovLyBs
YXN0IGRlY29kZSB0aW1lc3RhbXAgaXMgZ3JlYXRlciB0aGFuIDIgdGltZXMgbGFzdCBmcmFtZSBk
dXJhdGlvbjoKKyAgICAgICAgTWVkaWFUaW1lIGRlY29kZUR1cmF0aW9uVG9DaGVjayA9IHRyYWNr
QnVmZmVyLmdyZWF0ZXN0RGVjb2RlRHVyYXRpb247CisKKyAgICAgICAgaWYgKGRlY29kZUR1cmF0
aW9uVG9DaGVjay5pc1ZhbGlkKCkgJiYgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24uaXNW
YWxpZCgpCisgICAgICAgICAgICAmJiAodHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24gPiBk
ZWNvZGVEdXJhdGlvblRvQ2hlY2spKQorICAgICAgICAgICAgZGVjb2RlRHVyYXRpb25Ub0NoZWNr
ID0gdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb247CisKaWYgKHRyYWNrQnVmZmVyLmxhc3RE
ZWNvZGVUaW1lc3RhbXAuaXNWYWxpZCgpICYmIChkZWNvZGVUaW1lc3RhbXAgPCB0cmFja0J1ZmZl
ci5sYXN0RGVjb2RlVGltZXN0YW1wCi0gICAgICAgICAgICB8fCAodHJhY2tCdWZmZXIuZ3JlYXRl
c3REZWNvZGVEdXJhdGlvbi5pc1ZhbGlkKCkgJiYgYWJzKGRlY29kZVRpbWVzdGFtcCAtIHRyYWNr
QnVmZmVyLmxhc3REZWNvZGVUaW1lc3RhbXApID4gKHRyYWNrQnVmZmVyLmdyZWF0ZXN0RGVjb2Rl
RHVyYXRpb24gKiAyKSkpKSB7CisgICAgICAgICAgICB8fCAoZGVjb2RlRHVyYXRpb25Ub0NoZWNr
LmlzVmFsaWQoKSAmJiBhYnMoZGVjb2RlVGltZXN0YW1wIC0gdHJhY2tCdWZmZXIubGFzdERlY29k
ZVRpbWVzdGFtcCkgPiAoZGVjb2RlRHVyYXRpb25Ub0NoZWNrICogMikpKSkgewoKLy8gMS42LjE6
CmlmIChtX21vZGUgPT0gQXBwZW5kTW9kZTo6U2VnbWVudHMpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>362781</attachid>
            <date>2019-02-22 16:20:22 -0800</date>
            <delta_ts>2019-02-22 16:20:22 -0800</delta_ts>
            <desc>Patch Rev2</desc>
            <filename>source-buffer-cpp-rev2.patch</filename>
            <type>text/plain</type>
            <size>1390</size>
            <attacher>up</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5jcHAgICAgKHJldmlzaW9uIDI0MTk0NykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCAgICAod29ya2luZyBjb3B5KQpAQCAtMTU0
Nyw4ICsxNTQ3LDE0IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlk
UmVjZWl2ZVNhbXBsZShNZWRpYVNhbXBsZSYgc2FtcGxlKQogICAgICAgICAvLyBPUgogICAgICAg
ICAvLyDihrMgSWYgbGFzdCBkZWNvZGUgdGltZXN0YW1wIGZvciB0cmFjayBidWZmZXIgaXMgc2V0
IGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlY29kZSB0aW1lc3RhbXAgYW5kCiAgICAgICAg
IC8vIGxhc3QgZGVjb2RlIHRpbWVzdGFtcCBpcyBncmVhdGVyIHRoYW4gMiB0aW1lcyBsYXN0IGZy
YW1lIGR1cmF0aW9uOgorICAgICAgICBNZWRpYVRpbWUgZGVjb2RlRHVyYXRpb25Ub0NoZWNrID0g
dHJhY2tCdWZmZXIuZ3JlYXRlc3REZWNvZGVEdXJhdGlvbjsKKworICAgICAgICBpZiAoZGVjb2Rl
RHVyYXRpb25Ub0NoZWNrLmlzVmFsaWQoKSAmJiB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlv
bi5pc1ZhbGlkKCkKKyAgICAgICAgICAgICYmICh0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlv
biA+IGRlY29kZUR1cmF0aW9uVG9DaGVjaykpCisgICAgICAgICAgICBkZWNvZGVEdXJhdGlvblRv
Q2hlY2sgPSB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbjsKKwogICAgICAgICBpZiAodHJh
Y2tCdWZmZXIubGFzdERlY29kZVRpbWVzdGFtcC5pc1ZhbGlkKCkgJiYgKGRlY29kZVRpbWVzdGFt
cCA8IHRyYWNrQnVmZmVyLmxhc3REZWNvZGVUaW1lc3RhbXAKLSAgICAgICAgICAgIHx8ICh0cmFj
a0J1ZmZlci5ncmVhdGVzdERlY29kZUR1cmF0aW9uLmlzVmFsaWQoKSAmJiBhYnMoZGVjb2RlVGlt
ZXN0YW1wIC0gdHJhY2tCdWZmZXIubGFzdERlY29kZVRpbWVzdGFtcCkgPiAodHJhY2tCdWZmZXIu
Z3JlYXRlc3REZWNvZGVEdXJhdGlvbiAqIDIpKSkpIHsKKyAgICAgICAgICAgIHx8IChkZWNvZGVE
dXJhdGlvblRvQ2hlY2suaXNWYWxpZCgpICYmIGFicyhkZWNvZGVUaW1lc3RhbXAgLSB0cmFja0J1
ZmZlci5sYXN0RGVjb2RlVGltZXN0YW1wKSA+IChkZWNvZGVEdXJhdGlvblRvQ2hlY2sgKiAyKSkp
KSB7CgogICAgICAgICAgICAgLy8gMS42LjE6CiAgICAgICAgICAgICBpZiAobV9tb2RlID09IEFw
cGVuZE1vZGU6OlNlZ21lbnRzKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>363004</attachid>
            <date>2019-02-26 12:40:51 -0800</date>
            <delta_ts>2019-02-27 09:31:51 -0800</delta_ts>
            <desc>Patch Rev3</desc>
            <filename>patch-194747-3.patch</filename>
            <type>text/plain</type>
            <size>6429</size>
            <attacher>up</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0MjA5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE5LTAyLTI2ICBVbHJpY2gg
UGZsdWVnZXIgIDx1cEBuYW5vY29zbW9zLmRlPgorCisgICAgICAgIFtNU0VdIFNvdXJjZUJ1ZmZl
ciBzYW1wbGUgdGltZSBpbmNyZW1lbnQgdnMuIGxhc3QgZnJhbWUgZHVyYXRpb24gY2hlY2sgaXMg
YnJva2VuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTQ3NDcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQ4MTQ4NDY5PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZlbnQgdW5pbnRlbmRlZCBmcmFt
ZSBkcm9wcyBieSBpbmNsdWRpbmcgbGFzdCBmcmFtZSBkdXJhdGlvbiBpbiBkaXNjb250aW51aXR5
IGNoZWNrLiAKKworICAgICAgICBUZXN0OiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LWFwcGVuZC12YXJpYWJsZS1mcmFtZS1sZW5ndGhzLXdpdGgtbWF0Y2hpbmctZHVyYXRpb25zLmh0
bWwKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2Vp
dmVTYW1wbGUpOgorCiAyMDE5LTAyLTI2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQxOTcwLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmNwcAkocmV2aXNpb24gMjQyMDk1KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQ3LDggKzE1NDcs
MTQgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaQogICAgICAgICAv
LyBPUgogICAgICAgICAvLyDihrMgSWYgbGFzdCBkZWNvZGUgdGltZXN0YW1wIGZvciB0cmFjayBi
dWZmZXIgaXMgc2V0IGFuZCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGRlY29kZSB0aW1lc3RhbXAg
YW5kCiAgICAgICAgIC8vIGxhc3QgZGVjb2RlIHRpbWVzdGFtcCBpcyBncmVhdGVyIHRoYW4gMiB0
aW1lcyBsYXN0IGZyYW1lIGR1cmF0aW9uOgorICAgICAgICBNZWRpYVRpbWUgZGVjb2RlRHVyYXRp
b25Ub0NoZWNrID0gdHJhY2tCdWZmZXIuZ3JlYXRlc3REZWNvZGVEdXJhdGlvbjsKKworICAgICAg
ICBpZiAoZGVjb2RlRHVyYXRpb25Ub0NoZWNrLmlzVmFsaWQoKSAmJiB0cmFja0J1ZmZlci5sYXN0
RnJhbWVEdXJhdGlvbi5pc1ZhbGlkKCkKKyAgICAgICAgICAgICYmICh0cmFja0J1ZmZlci5sYXN0
RnJhbWVEdXJhdGlvbiA+IGRlY29kZUR1cmF0aW9uVG9DaGVjaykpCisgICAgICAgICAgICBkZWNv
ZGVEdXJhdGlvblRvQ2hlY2sgPSB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlvbjsKKwogICAg
ICAgICBpZiAodHJhY2tCdWZmZXIubGFzdERlY29kZVRpbWVzdGFtcC5pc1ZhbGlkKCkgJiYgKGRl
Y29kZVRpbWVzdGFtcCA8IHRyYWNrQnVmZmVyLmxhc3REZWNvZGVUaW1lc3RhbXAKLSAgICAgICAg
ICAgIHx8ICh0cmFja0J1ZmZlci5ncmVhdGVzdERlY29kZUR1cmF0aW9uLmlzVmFsaWQoKSAmJiBh
YnMoZGVjb2RlVGltZXN0YW1wIC0gdHJhY2tCdWZmZXIubGFzdERlY29kZVRpbWVzdGFtcCkgPiAo
dHJhY2tCdWZmZXIuZ3JlYXRlc3REZWNvZGVEdXJhdGlvbiAqIDIpKSkpIHsKKyAgICAgICAgICAg
IHx8IChkZWNvZGVEdXJhdGlvblRvQ2hlY2suaXNWYWxpZCgpICYmIGFicyhkZWNvZGVUaW1lc3Rh
bXAgLSB0cmFja0J1ZmZlci5sYXN0RGVjb2RlVGltZXN0YW1wKSA+IChkZWNvZGVEdXJhdGlvblRv
Q2hlY2sgKiAyKSkpKSB7CiAKICAgICAgICAgICAgIC8vIDEuNi4xOgogICAgICAgICAgICAgaWYg
KG1fbW9kZSA9PSBBcHBlbmRNb2RlOjpTZWdtZW50cykgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQy
MDk1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTktMDItMjYgIFVscmljaCBQZmx1ZWdlciAgPHVwQG5hbm9jb3Ntb3MuZGU+CisK
KyAgICAgICAgW01TRV0gU291cmNlQnVmZmVyIHNhbXBsZSB0aW1lIGluY3JlbWVudCB2cy4gbGFz
dCBmcmFtZSBkdXJhdGlvbiBjaGVjayBpcyBicm9rZW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NDc0NworICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NDgxNDg0Njk+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC12YXJpYWJsZS1mcmFt
ZS1sZW5ndGhzLXdpdGgtbWF0Y2hpbmctZHVyYXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtdmFyaWFibGUt
ZnJhbWUtbGVuZ3Rocy13aXRoLW1hdGNoaW5nLWR1cmF0aW9ucy5odG1sOiBBZGRlZC4KKwogMjAx
OS0wMi0yNiAgVGFrYXNoaSBLb21vcmkgIDxUYWthc2hpLktvbW9yaUBzb255LmNvbT4KIAogICAg
ICAgICBbQ3VybF0gTG9hZCBIVFRQIGJvZHkgb2YgNDAxIHJlc3BvbnNlIHdoZW4gQXV0aGVudGlj
YXRpb25DaGFuZ2UgaXMgY2FuY2VsbGVkLgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtdmFyaWFibGUtZnJhbWUtbGVuZ3Rocy13aXRoLW1h
dGNoaW5nLWR1cmF0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
bWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtdmFyaWFibGUtZnJhbWUtbGVu
Z3Rocy13aXRoLW1hdGNoaW5nLWR1cmF0aW9ucy1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtdmFy
aWFibGUtZnJhbWUtbGVuZ3Rocy13aXRoLW1hdGNoaW5nLWR1cmF0aW9ucy1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBAQAorVGhpcyB0ZXN0cyB0aGF0IHZhcmlhYmxl
IGZyYW1lIGxlbmd0aHMgd2l0aCBtYXRjaGluZyBmcmFtZSBkdXJhdGlvbnMgd2lsbCBub3QgYmUg
ZHJvcHBlZC4KKworUlVOKHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKSkK
K0VWRU5UKHNvdXJjZW9wZW4pCitSVU4oc291cmNlQnVmZmVyID0gc291cmNlLmFkZFNvdXJjZUJ1
ZmZlcigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKSkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5k
QnVmZmVyKGluaXRTZWdtZW50KSkKK0VWRU5UKHVwZGF0ZWVuZCkKK1JVTihzb3VyY2VCdWZmZXIu
YXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQorRVhQRUNURUQgKGJ1ZmZl
cmVkU2FtcGxlcy5sZW5ndGggPT0gJzMnKSBPSwore1BUUyh7MC8xMDAwID0gMC4wMDAwMDB9KSwg
RFRTKHswLzEwMDAgPSAwLjAwMDAwMH0pLCBkdXJhdGlvbih7MTAvMTAwMCA9IDAuMDEwMDAwfSks
IGZsYWdzKDEpLCBnZW5lcmF0aW9uKDApfQore1BUUyh7MTAvMTAwMCA9IDAuMDEwMDAwfSksIERU
Uyh7MTAvMTAwMCA9IDAuMDEwMDAwfSksIGR1cmF0aW9uKHszMC8xMDAwID0gMC4wMzAwMDB9KSwg
ZmxhZ3MoMCksIGdlbmVyYXRpb24oMCl9Cit7UFRTKHs0MC8xMDAwID0gMC4wNDAwMDB9KSwgRFRT
KHs0MC8xMDAwID0gMC4wNDAwMDB9KSwgZHVyYXRpb24oezEwLzEwMDAgPSAwLjAxMDAwMH0pLCBm
bGFncygwKSwgZ2VuZXJhdGlvbigwKX0KK0VORCBPRiBURVNUCisKSW5kZXg6IExheW91dFRlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLXZhcmlhYmxlLWZyYW1lLWxl
bmd0aHMtd2l0aC1tYXRjaGluZy1kdXJhdGlvbnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC12YXJpYWJsZS1mcmFt
ZS1sZW5ndGhzLXdpdGgtbWF0Y2hpbmctZHVyYXRpb25zLmh0bWwJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtdmFyaWFi
bGUtZnJhbWUtbGVuZ3Rocy13aXRoLW1hdGNoaW5nLWR1cmF0aW9ucy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8dGl0bGU+bWVkaWEtc291cmNlLWFwcGVuZC12YXJpYWJsZS1mcmFtZS1sZW5ndGhzLXdpdGgt
bWF0Y2hpbmctZHVyYXRpb25zPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0ibW9jay1tZWRpYS1z
b3VyY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRlby10ZXN0LmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAgdmFyIHNvdXJjZUJ1
ZmZlcjsKKyAgICB2YXIgaW5pdFNlZ21lbnQ7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykK
KyAgICAgICAgaW50ZXJuYWxzLmluaXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgZXZlbnQgPT4geworCisgICAgICAg
IGZpbmRNZWRpYUVsZW1lbnQoKTsKKworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2Uo
KTsKKyAgICAgICAgcnVuKCd2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkn
KTsKKyAgICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2UsICdzb3VyY2VvcGVuJyk7CisKKyAgICAg
ICAgcnVuKCdzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCJ2aWRlby9tb2Nr
OyBjb2RlY3M9bW9jayIpJyk7CisgICAgICAgIGluaXRTZWdtZW50ID0gbWFrZUFJbml0KDgsIFtt
YWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURFTyldKTsKKyAgICAgICAgcnVuKCdz
b3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXRTZWdtZW50KScpOworCisgICAgICAgIGF3YWl0
IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAg
ICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMTAsIDEwMDAsIDEsIFNBTVBMRV9GTEFHLlNZTkMsIDAp
LAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMTAsIDEwLCAzMCwgMTAwMCwgMSwgU0FNUExFX0ZM
QUcuTk9ORSwgMCksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg0MCwgNDAsIDEwLCAxMDAwLCAx
LCBTQU1QTEVfRkxBRy5OT05FLCAwKQorICAgICAgICAgICAgXSk7CisgICAgICAgIAorICAgICAg
ICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICAgICAgYXdh
aXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKTsKKworICAgICAgICBidWZmZXJl
ZFNhbXBsZXMgPSBpbnRlcm5hbHMuYnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJRChzb3VyY2VCdWZm
ZXIsIDEpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoImJ1ZmZlcmVkU2FtcGxlcy5sZW5ndGgiLCAz
KTsKKyAgICAgICAgYnVmZmVyZWRTYW1wbGVzLmZvckVhY2goY29uc29sZVdyaXRlKTsKKyAgICAg
ICAgZW5kVGVzdCgpOworCisgICAgfSwge29uY2U6IHRydWV9KTsKKyAgICA8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorICAgIDxkaXY+VGhpcyB0ZXN0cyB0aGF0IHZhcmlhYmxlIGZyYW1lIGxl
bmd0aHMgd2l0aCBtYXRjaGluZyBmcmFtZSBkdXJhdGlvbnMgd2lsbCBub3QgYmUgZHJvcHBlZC48
L2Rpdj4KKyAgICA8dmlkZW8+PC92aWRlbz4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>