<?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>225800</bug_id>
          
          <creation_ts>2021-05-13 23:12:48 -0700</creation_ts>
          <short_desc>[MSE] MediaSample that need to be removed with SourceBufferPrivate::evictCodedFrames() may not be removed.</short_desc>
          <delta_ts>2021-09-23 02:26: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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=226720</see_also>
          <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>230672</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Toshio Ogasawara">toshio.ogasawara</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jean-yves.avenard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>tomoki.imai</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>Yousuke.Kimoto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1760017</commentid>
    <comment_count>0</comment_count>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-13 23:12:48 -0700</bug_when>
    <thetext>Repeating appendBuffer and seek may result in a buffer full.
When buffer full occurs in appnedBuffer, MediaSample after the CurrnetTime + 30s needs to be removed by SourceBufferPrivate::evictCodedFrames(), but it may not be removed depending on the buffered status.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760023</commentid>
    <comment_count>1</comment_count>
      <attachid>428607</attachid>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-13 23:57:48 -0700</bug_when>
    <thetext>Created attachment 428607
patch

This patch removes MediaSample after CurrentTime + 30s that need to be removed with SourceBufferPrivate::evictCodedFrames().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1760892</commentid>
    <comment_count>2</comment_count>
      <attachid>428607</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-05-17 14:31:23 -0700</bug_when>
    <thetext>Comment on attachment 428607
patch

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

&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.cpp:703
&gt; -    while (rangeStart &gt; minimumRangeStart) {
&gt; +    while (rangeEnd &gt; minimumRangeStart) {

Comparing `rangeEnd` to `mininimumRangeStart` feels wrong here.  Perhaps we just need to restructure this code to correctly set `minimumRangeStart` to the beginning of the next buffered range, if that time is &gt; `minimumRangeStart`.  Then this while loop can look identical to the while loop above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761498</commentid>
    <comment_count>3</comment_count>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-19 02:05:21 -0700</bug_when>
    <thetext>&gt;Comparing `rangeEnd` to `mininimumRangeStart` feels wrong here. 

I think it is correct to compare with rangeEnd.

At the end of this while loop, there is a process to subtract thirtySeconds from rangeStart and rangeEnd.
If this process is repeated, rangeStart may become less than minimumRangeStart before rangeEnd.
If rangeStart is less than minimumRangeStart and rangeEnd is greater than minimumRangeStart, this while loop will not be processed.
Therefore, removable MediaSamples in the range from minimumRangeStart to rangeEnd are not removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1761499</commentid>
    <comment_count>4</comment_count>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-19 02:06:56 -0700</bug_when>
    <thetext>&gt;Then this while loop can look identical to the while loop above.

In the first while loop of evictCodedFrame, there is a process to add thirtySeconds to rangeStart and rangeEnd.
Even if this process is repeated, rangeStart will not be larger than maximumRangeEnd before rangeEnd.
Therefore, the removable MediaSamples in the range from rangeStart to maximumRangeEnd is removed.

I think it is correct to compare the end of the range(rangeEnd) when processing in descending order, and the start of the range(startRange) when processing in ascending order.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762302</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-20 23:13:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/78296352&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762310</commentid>
    <comment_count>6</comment_count>
      <attachid>428607</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-05-20 23:59:17 -0700</bug_when>
    <thetext>Comment on attachment 428607
patch

&gt; &gt;Comparing `rangeEnd` to `mininimumRangeStart` feels wrong here. 
&gt; 
&gt; I think it is correct to compare with rangeEnd.

No, it&apos;s definitely not. You can see why it&apos;s wrong here:

-            rangeEnd = buffered.start(endTimeRange);
+            if (endTimeRange == notFound)
+                rangeStart = buffered.end(startTimeRange);
+            else
+                rangeEnd = buffered.start(endTimeRange);

If that comparison was correct, this change would be unnecessary. This just adds a complicated calculation to an already overcomplicated while loop.

The correct fix would look more like this:

@@ -689,7 +689,7 @@ void SourceBufferPrivate::evictCodedFrames(uint64_t newDataSize, uint64_t pendin
         return;
     }
 
-    MediaTime minimumRangeStart = currentTime + thirtySeconds;
+    MediaTime minimumRangeStart = std::min(currentTime + thirtySeconds, buffered.end(currentTimeRange));
 
     rangeEnd = duration;
     if (!rangeEnd.isFinite()) {

This sets up minimumRangeStart correctly to be located at the end of the current range, or 30s after currentTime, whichever is lower.

@@ -701,16 +701,6 @@ void SourceBufferPrivate::evictCodedFrames(uint64_t newDataSize, uint64_t pendin
 
     rangeStart = rangeEnd - thirtySeconds;
     while (rangeStart &gt; minimumRangeStart) {
-        // Do not evict data from the time range that contains currentTime.
-        uint64_t startTimeRange = buffered.find(rangeStart);
-        if (currentTimeRange != notFound &amp;&amp; startTimeRange == currentTimeRange) {
-            uint64_t endTimeRange = buffered.find(rangeEnd);
-            if (currentTimeRange != notFound &amp;&amp; endTimeRange == currentTimeRange)
-                break;
-
-            rangeEnd = buffered.start(endTimeRange);
-        }
-

And now we don&apos;t need to do a complicated recalculation at every step through the loop. It just walks back in 30s increments until it reaches minimumRangeStart.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1762315</commentid>
    <comment_count>7</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-05-21 00:21:58 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #6)
&gt; -    MediaTime minimumRangeStart = currentTime + thirtySeconds;
&gt; +    MediaTime minimumRangeStart = std::min(currentTime + thirtySeconds,
&gt; buffered.end(currentTimeRange));

Whoops, this should be max, not min.

(In reply to Toshio Ogasawara from comment #4)
&gt; I think it is correct to compare the end of the range(rangeEnd) when
&gt; processing in descending order, and the start of the range(startRange) when
&gt; processing in ascending order.

I take back my earlier comment, you&apos;re right about this comparison, because rangeStart isn&apos;t actually used inside the loop without doing `max(minimumRangeStart, rangeStart)` first.

Still, the entire first section of the while() loop can be removed to solve this problem, rather than adding more calculations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763863</commentid>
    <comment_count>8</comment_count>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-26 02:43:05 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #7)
&gt; (In reply to Jer Noble from comment #6)
&gt; &gt; -    MediaTime minimumRangeStart = currentTime + thirtySeconds;
&gt; &gt; +    MediaTime minimumRangeStart = std::min(currentTime + thirtySeconds,
&gt; &gt; buffered.end(currentTimeRange));
&gt; 
&gt; Whoops, this should be max, not min.
&gt; 
&gt; (In reply to Toshio Ogasawara from comment #4)
&gt; &gt; I think it is correct to compare the end of the range(rangeEnd) when
&gt; &gt; processing in descending order, and the start of the range(startRange) when
&gt; &gt; processing in ascending order.
&gt; 
&gt; I take back my earlier comment, you&apos;re right about this comparison, because
&gt; rangeStart isn&apos;t actually used inside the loop without doing
&gt; `max(minimumRangeStart, rangeStart)` first.
&gt; 
&gt; Still, the entire first section of the while() loop can be removed to solve
&gt; this problem, rather than adding more calculations.

I was able to confirm with your fix that minimumRangeStart is set to be correctly placed at the end of the current range, or 30 seconds after the currentTime, whichever is higher.
Now we don&apos;t need to do complicated recalculation.
Thank you.


&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.cpp:703
&gt; -    while (rangeStart &gt; minimumRangeStart) {
&gt; +    while (rangeEnd &gt; minimumRangeStart) {
I will add this fix to take into account the following conditions.

When &quot;rangeStart &lt; minimumRangeStart, rangeEnd &gt; minimumRangeStart&quot;, remove between minimumRangeStart and rangeEnd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1763866</commentid>
    <comment_count>9</comment_count>
      <attachid>429743</attachid>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-26 02:48:44 -0700</bug_when>
    <thetext>Created attachment 429743
patch

Fixed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764133</commentid>
    <comment_count>10</comment_count>
      <attachid>429743</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2021-05-26 17:10:10 -0700</bug_when>
    <thetext>Comment on attachment 429743
patch

r=me. Thanks for continuing to work on this with me!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764141</commentid>
    <comment_count>11</comment_count>
    <who name="Toshio Ogasawara">toshio.ogasawara</who>
    <bug_when>2021-05-26 17:32:09 -0700</bug_when>
    <thetext>(In reply to Jer Noble from comment #10)
&gt; Comment on attachment 429743 [details]
&gt; patch
&gt; 
&gt; r=me. Thanks for continuing to work on this with me!

Thank you for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764203</commentid>
    <comment_count>12</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-26 21:35:25 -0700</bug_when>
    <thetext>Committed r278147 (238191@main): &lt;https://commits.webkit.org/238191@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 429743.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>428607</attachid>
            <date>2021-05-13 23:57:48 -0700</date>
            <delta_ts>2021-05-26 02:45:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>8793</size>
            <attacher name="Toshio Ogasawara">toshio.ogasawara</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZTJmYzFjYjc0NTMuLjNmMThlYmYxMjIzNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBA
CisyMDIxLTA1LTEzICBUb3NoaW8gT2dhc2F3YXJhICA8dG9zaGlvLm9nYXNhd2FyYUBhY2Nlc3Mt
Y29tcGFueS5jb20+CisKKyAgICAgICAgW01TRV0gTWVkaWFTYW1wbGUgdGhhdCBuZWVkIHRvIGJl
IHJlbW92ZWQgd2l0aCBTb3VyY2VCdWZmZXJQcml2YXRlOjpldmljdENvZGVkRnJhbWVzKCkgbWF5
IG5vdCBiZSByZW1vdmVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI1ODAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWV2aWN0LWNvZGVkZnJh
bWUtYWZ0ZXItc2Vlay1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtZXZpY3QtY29kZWRmcmFtZS1hZnRlci1zZWVrLmh0bWw6IEFk
ZGVkLgorCiAyMDIxLTA1LTEzICBMYXVybyBNb3VyYSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFtHVEtdIFNraXAgV2ViWFIgdGVzdHMgYWZ0ZXIgcjI3NzQ2OApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1ldmljdC1jb2RlZGZy
YW1lLWFmdGVyLXNlZWstZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhLXNvdXJjZS1ldmljdC1jb2RlZGZyYW1lLWFmdGVyLXNlZWstZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMjFmNzAxZDExMmE5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNv
dXJjZS1ldmljdC1jb2RlZGZyYW1lLWFmdGVyLXNlZWstZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTA3IEBACisKK0VWRU5UKHNvdXJjZW9wZW4pCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcg
UFRTPTAKK0VWRU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9MQorRVZFTlQodXBkYXRlZW5k
KQorQXBwZW5kaW5nIFBUUz0yCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTMKK0VW
RU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9NAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5k
aW5nIFBUUz01CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTYKK0VWRU5UKHVwZGF0
ZWVuZCkKK0FwcGVuZGluZyBQVFM9NworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz04
CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTkKK0VWRU5UKHVwZGF0ZWVuZCkKK0Fw
cGVuZGluZyBQVFM9MTAKK0VWRU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9MTEKK0VWRU5U
KHVwZGF0ZWVuZCkKK0VYUEVDVEVEIChleGNlcHRpb24gIT0gJ1F1b3RhRXhjZWVkZWRFcnJvcjog
VGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLicpIE9LCitidWZmZXJlZFJhbmdlcygpPVsgMC4u
LjEyIF0KK3ZpZGVvLmN1cnJlbnRUaW1lPTQ2CitBcHBlbmRpbmcgUFRTPTQ2CitFVkVOVCh1cGRh
dGVlbmQpCitBcHBlbmRpbmcgUFRTPTQ3CitFVkVOVCh1cGRhdGVlbmQpCitFWFBFQ1RFRCAoZXhj
ZXB0aW9uICE9ICdRdW90YUV4Y2VlZGVkRXJyb3I6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRl
ZC4nKSBPSworYnVmZmVyZWRSYW5nZXMoKT1bIDAuLi4xMiwgNDYuLi40OCBdCit2aWRlby5jdXJy
ZW50VGltZT0xMworQXBwZW5kaW5nIFBUUz0xMworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5n
IFBUUz0xNAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0xNQorRVZFTlQodXBkYXRl
ZW5kKQorQXBwZW5kaW5nIFBUUz0xNgorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0x
NworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0xOAorRVZFTlQodXBkYXRlZW5kKQor
QXBwZW5kaW5nIFBUUz0xOQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yMAorRVZF
TlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yMQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5k
aW5nIFBUUz0yMgorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yMworRVZFTlQodXBk
YXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yNAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBU
Uz0yNQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yNgorRVZFTlQodXBkYXRlZW5k
KQorQXBwZW5kaW5nIFBUUz0yNworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yOAor
RVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0yOQorRVZFTlQodXBkYXRlZW5kKQorQXBw
ZW5kaW5nIFBUUz0zMAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0zMQorRVZFTlQo
dXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0zMgorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5n
IFBUUz0zMworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0zNAorRVZFTlQodXBkYXRl
ZW5kKQorQXBwZW5kaW5nIFBUUz0zNQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0z
NgorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0zNworRVZFTlQodXBkYXRlZW5kKQor
QXBwZW5kaW5nIFBUUz0zOAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0zOQorRVZF
TlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz00MAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5k
aW5nIFBUUz00MQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz00MgorRVZFTlQodXBk
YXRlZW5kKQorQXBwZW5kaW5nIFBUUz00MworRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBU
Uz00NAorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz00NQorRVZFTlQodXBkYXRlZW5k
KQorRVhQRUNURUQgKGV4Y2VwdGlvbiAhPSAnUXVvdGFFeGNlZWRlZEVycm9yOiBUaGUgcXVvdGEg
aGFzIGJlZW4gZXhjZWVkZWQuJykgT0sKK2J1ZmZlcmVkUmFuZ2VzKCk9WyAwLi4uMTIsIDEzLi4u
NDYgXQorRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEt
c291cmNlL21lZGlhLXNvdXJjZS1ldmljdC1jb2RlZGZyYW1lLWFmdGVyLXNlZWsuaHRtbCBiL0xh
eW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZXZpY3QtY29kZWRmcmFt
ZS1hZnRlci1zZWVrLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
Li4zOTVkMjIzYzY4MjEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLWV2aWN0LWNvZGVkZnJhbWUtYWZ0ZXItc2Vlay5odG1sCkBA
IC0wLDAgKzEsODYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0
bGU+bW9jay1tZWRpYS1zb3VyY2U8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSJtb2NrLW1lZGlh
LXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL3ZpZGVvLXRlc3QuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgdmFyIHNvdXJjZTsKKyAgICB2YXIgc291cmNl
QnVmZmVyOworICAgIHZhciBpbml0U2VnbWVudDsKKyAgICB2YXIgZXhjZXB0aW9uOworCisgICAg
YXN5bmMgZnVuY3Rpb24gYXBwZW5kUHRzUmFuZ2UoZmlyc3RQdHMsIGxhc3RQdHMpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdEV4Y2VwdGlvbiA9IG51bGw7CisgICAgICAgIGZvciAodmFyIHB0cyA9IGZp
cnN0UHRzOyBwdHMgPD0gbGFzdFB0czsgcHRzKyspIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgICAgY29uc29sZVdyaXRlKCdBcHBlbmRpbmcgUFRTPScrcHRzKTsKKyAgICAgICAg
ICAgICAgICBzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKG1ha2VBU2FtcGxlKHB0cywgcHRzLCAx
LCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAxKSk7CisgICAgICAgICAgICAgICAgYXdhaXQgd2Fp
dEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgICAgICByZXN1bHRFeGNlcHRpb24gPSBlOworICAgICAgICAgICAgICAg
IHNvdXJjZUJ1ZmZlci5hYm9ydCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHRFeGNlcHRpb247CisgICAgfQor
CisgICAgZnVuY3Rpb24gYnVmZmVyZWRSYW5nZXMoKSB7CisgICAgICAgIHZhciBidWZmZXJlZFJh
bmdlcyA9ICdbICc7CisgICAgICAgIHZhciB0aW1lUmFuZ2VzID0gc291cmNlQnVmZmVyLmJ1ZmZl
cmVkOworICAgICAgICBmb3IgKHZhciBpID0gMCA7IGkgPCB0aW1lUmFuZ2VzLmxlbmd0aCA7IGkr
KykgeworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgYnVmZmVyZWRSYW5nZXMg
Kz0gJywgJzsKKyAgICAgICAgICAgIGJ1ZmZlcmVkUmFuZ2VzICs9IHRpbWVSYW5nZXMuc3RhcnQo
aSkgKyAnLi4uJyArIHRpbWVSYW5nZXMuZW5kKGkpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZl
cmVkUmFuZ2VzICs9ICcgXSc7CisgICAgICAgIHJldHVybiBidWZmZXJlZFJhbmdlczsKKyAgICB9
CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgaW50ZXJuYWxzLmluaXRpYWxp
emVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2Fk
JywgYXN5bmMoKSA9PiB7CisgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgc291
cmNlID0gbmV3IE1lZGlhU291cmNlKCk7CisKKyAgICAgICAgY29uc3QgdmlkZW9Tb3VyY2UgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdzb3VyY2UnKTsKKyAgICAgICAgdmlkZW9Tb3VyY2UudHlw
ZSA9ICd2aWRlby9tb2NrOyBjb2RlY3M9bW9jayc7CisgICAgICAgIHZpZGVvU291cmNlLnNyYyA9
IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKTsKKyAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQo
dmlkZW9Tb3VyY2UpOworCisgICAgICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlLCAnc291cmNlb3Bl
bicpOworICAgICAgICBzb3VyY2UuZHVyYXRpb24gPSA3MjsKKyAgICAgICAgc291cmNlQnVmZmVy
ID0gc291cmNlLmFkZFNvdXJjZUJ1ZmZlcigidmlkZW8vbW9jazsgY29kZWNzPW1vY2siKTsKKyAg
ICAgICAgaW5pdFNlZ21lbnQgPSBtYWtlQUluaXQoMzUwLCBbbWFrZUFUcmFjaygxLCAnbW9jaycs
IFRSQUNLX0tJTkQuVklERU8pXSk7CisgICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIo
aW5pdFNlZ21lbnQpOworICAgICAgICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0
ZWVuZCcpOworICAgICAgICB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwgJ2Vycm9yJyk7CisKKyAgICAg
ICAgaW50ZXJuYWxzLnNldHRpbmdzLnNldE1heGltdW1Tb3VyY2VCdWZmZXJTaXplKDMyMDApOwor
CisgICAgICAgIGV4Y2VwdGlvbiA9IGF3YWl0IGFwcGVuZFB0c1JhbmdlKDAsIDExKTsKKyAgICAg
ICAgdGVzdEV4cGVjdGVkKCdleGNlcHRpb24nLCAnUXVvdGFFeGNlZWRlZEVycm9yOiBUaGUgcXVv
dGEgaGFzIGJlZW4gZXhjZWVkZWQuJywgJyE9Jyk7CisgICAgICAgIGNvbnNvbGVXcml0ZSgnYnVm
ZmVyZWRSYW5nZXMoKT0nK2J1ZmZlcmVkUmFuZ2VzKCkpOworCisgICAgICAgIHZpZGVvLmN1cnJl
bnRUaW1lID0gNDY7CisgICAgICAgIGNvbnNvbGVXcml0ZSgndmlkZW8uY3VycmVudFRpbWU9Jyt2
aWRlby5jdXJyZW50VGltZSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IGF3YWl0IGFwcGVuZFB0c1Jh
bmdlKDQ2LCA0Nyk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnZXhjZXB0aW9uJywgJ1F1b3RhRXhj
ZWVkZWRFcnJvcjogVGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLicsICchPScpOworICAgICAg
ICBjb25zb2xlV3JpdGUoJ2J1ZmZlcmVkUmFuZ2VzKCk9JytidWZmZXJlZFJhbmdlcygpKTsKKwor
ICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDEzOworICAgICAgICBjb25zb2xlV3JpdGUoJ3Zp
ZGVvLmN1cnJlbnRUaW1lPScrdmlkZW8uY3VycmVudFRpbWUpOworICAgICAgICBleGNlcHRpb24g
PSBhd2FpdCBhcHBlbmRQdHNSYW5nZSgxMywgNDUpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2V4
Y2VwdGlvbicsICdRdW90YUV4Y2VlZGVkRXJyb3I6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRl
ZC4nLCAnIT0nKTsKKyAgICAgICAgY29uc29sZVdyaXRlKCdidWZmZXJlZFJhbmdlcygpPScrYnVm
ZmVyZWRSYW5nZXMoKSk7CisKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0pOworICAgIDwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+CisgICAgPHZpZGVvPjwvdmlkZW8+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKaW5kZXggOTlkMTRmNDMwMmU4Li41Yjc2Y2JmOGY5MTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAyMS0wNS0xMyAgVG9zaGlvIE9nYXNhd2FyYSAgPHRvc2hpby5v
Z2FzYXdhcmFAYWNjZXNzLWNvbXBhbnkuY29tPgorCisgICAgICAgIFtNU0VdIE1lZGlhU2FtcGxl
IHRoYXQgbmVlZCB0byBiZSByZW1vdmVkIHdpdGggU291cmNlQnVmZmVyUHJpdmF0ZTo6ZXZpY3RD
b2RlZEZyYW1lcygpIG1heSBub3QgYmUgcmVtb3ZlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNTgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVkIGV2aWN0Q29kZWRGcmFtZXMgdG8gcmVtb3Zl
IE1lZGlhU2FtcGxlIHRoYXQgY2FuIGJlIHJlbW92ZWQgYWZ0ZXIgdGhlIEN1cnJlbnRUaW1lICsg
MzBzLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtZXZp
Y3QtY29kZWRmcmFtZS1hZnRlci1zZWVrLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyUHJpdmF0ZTo6ZXZpY3RDb2RlZEZyYW1lcyk6CisKIDIwMjEtMDUtMTMgIE1pY2hhZWwgQ2F0
YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CiAKICAgICAgICAgTWlzYyBHQ0Mgd2Fybmlu
ZyBjbGVhbnVwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
b3VyY2VCdWZmZXJQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NvdXJjZUJ1ZmZlclByaXZhdGUuY3BwCmluZGV4IDIxMmQyMTBhNjdmZC4uZGU5MTI3OTI4OTRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZm
ZXJQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3Vy
Y2VCdWZmZXJQcml2YXRlLmNwcApAQCAtNzAwLDE1ICs3MDAsMTggQEAgdm9pZCBTb3VyY2VCdWZm
ZXJQcml2YXRlOjpldmljdENvZGVkRnJhbWVzKHVpbnQ2NF90IG5ld0RhdGFTaXplLCB1aW50NjRf
dCBwZW5kaW4KICAgICB9CiAKICAgICByYW5nZVN0YXJ0ID0gcmFuZ2VFbmQgLSB0aGlydHlTZWNv
bmRzOwotICAgIHdoaWxlIChyYW5nZVN0YXJ0ID4gbWluaW11bVJhbmdlU3RhcnQpIHsKKyAgICB3
aGlsZSAocmFuZ2VFbmQgPiBtaW5pbXVtUmFuZ2VTdGFydCkgewogICAgICAgICAvLyBEbyBub3Qg
ZXZpY3QgZGF0YSBmcm9tIHRoZSB0aW1lIHJhbmdlIHRoYXQgY29udGFpbnMgY3VycmVudFRpbWUu
Ci0gICAgICAgIHVpbnQ2NF90IHN0YXJ0VGltZVJhbmdlID0gYnVmZmVyZWQuZmluZChyYW5nZVN0
YXJ0KTsKKyAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKHN0
ZDo6bWF4KG1pbmltdW1SYW5nZVN0YXJ0LCByYW5nZVN0YXJ0KSk7CiAgICAgICAgIGlmIChjdXJy
ZW50VGltZVJhbmdlICE9IG5vdEZvdW5kICYmIHN0YXJ0VGltZVJhbmdlID09IGN1cnJlbnRUaW1l
UmFuZ2UpIHsKICAgICAgICAgICAgIHVpbnQ2NF90IGVuZFRpbWVSYW5nZSA9IGJ1ZmZlcmVkLmZp
bmQocmFuZ2VFbmQpOwogICAgICAgICAgICAgaWYgKGN1cnJlbnRUaW1lUmFuZ2UgIT0gbm90Rm91
bmQgJiYgZW5kVGltZVJhbmdlID09IGN1cnJlbnRUaW1lUmFuZ2UpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKLSAgICAgICAgICAgIHJhbmdlRW5kID0gYnVmZmVyZWQuc3RhcnQoZW5kVGltZVJh
bmdlKTsKKyAgICAgICAgICAgIGlmIChlbmRUaW1lUmFuZ2UgPT0gbm90Rm91bmQpCisgICAgICAg
ICAgICAgICAgcmFuZ2VTdGFydCA9IGJ1ZmZlcmVkLmVuZChzdGFydFRpbWVSYW5nZSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFuZ2VFbmQgPSBidWZmZXJlZC5zdGFydChl
bmRUaW1lUmFuZ2UpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gNC4gRm9yIGVhY2ggcmFuZ2Ug
aW4gcmVtb3ZhbCByYW5nZXMsIHJ1biB0aGUgY29kZWQgZnJhbWUgcmVtb3ZhbCBhbGdvcml0aG0g
d2l0aCBzdGFydCBhbmQK
</data>
<flag name="review"
          id="449566"
          type_id="1"
          status="-"
          setter="jer.noble"
    />
    <flag name="commit-queue"
          id="449567"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429743</attachid>
            <date>2021-05-26 02:48:44 -0700</date>
            <delta_ts>2021-05-26 21:35:26 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>9213</size>
            <attacher name="Toshio Ogasawara">toshio.ogasawara</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzM2E4OTkyMTgzNTEuLjE5YjgzZGZkMGY3YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDIxLTA1LTI2ICBUb3NoaW8gT2dhc2F3YXJhICA8dG9zaGlvLm9nYXNhd2FyYUBhY2Nlc3Mt
Y29tcGFueS5jb20+CisKKyAgICAgICAgW01TRV0gTWVkaWFTYW1wbGUgdGhhdCBuZWVkIHRvIGJl
IHJlbW92ZWQgd2l0aCBTb3VyY2VCdWZmZXJQcml2YXRlOjpldmljdENvZGVkRnJhbWVzKCkgbWF5
IG5vdCBiZSByZW1vdmVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjI1ODAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83ODI5NjM1Mj4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtZXZpY3QtY29kZWRmcmFtZS1hZnRlci1zZWVrLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1l
dmljdC1jb2RlZGZyYW1lLWFmdGVyLXNlZWsuaHRtbDogQWRkZWQuCisKIDIwMjEtMDUtMjYgIENh
bWVyb24gTWNDb3JtYWNrICA8aGV5Y2FtQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2xsb3d1cCB0
ZXN0IGV4cGVjdGF0aW9uIHVwZGF0ZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWV2aWN0LWNvZGVkZnJhbWUtYWZ0ZXItc2Vlay1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWV2
aWN0LWNvZGVkZnJhbWUtYWZ0ZXItc2Vlay1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4yMWY3MDFkMTEyYTkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWV2aWN0LWNvZGVkZnJh
bWUtYWZ0ZXItc2Vlay1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMDcgQEAKKworRVZFTlQoc291
cmNlb3BlbikKK0VWRU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9MAorRVZFTlQodXBkYXRl
ZW5kKQorQXBwZW5kaW5nIFBUUz0xCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTIK
K0VWRU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9MworRVZFTlQodXBkYXRlZW5kKQorQXBw
ZW5kaW5nIFBUUz00CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTUKK0VWRU5UKHVw
ZGF0ZWVuZCkKK0FwcGVuZGluZyBQVFM9NgorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBU
Uz03CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTgKK0VWRU5UKHVwZGF0ZWVuZCkK
K0FwcGVuZGluZyBQVFM9OQorRVZFTlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0xMAorRVZF
TlQodXBkYXRlZW5kKQorQXBwZW5kaW5nIFBUUz0xMQorRVZFTlQodXBkYXRlZW5kKQorRVhQRUNU
RUQgKGV4Y2VwdGlvbiAhPSAnUXVvdGFFeGNlZWRlZEVycm9yOiBUaGUgcXVvdGEgaGFzIGJlZW4g
ZXhjZWVkZWQuJykgT0sKK2J1ZmZlcmVkUmFuZ2VzKCk9WyAwLi4uMTIgXQordmlkZW8uY3VycmVu
dFRpbWU9NDYKK0FwcGVuZGluZyBQVFM9NDYKK0VWRU5UKHVwZGF0ZWVuZCkKK0FwcGVuZGluZyBQ
VFM9NDcKK0VWRU5UKHVwZGF0ZWVuZCkKK0VYUEVDVEVEIChleGNlcHRpb24gIT0gJ1F1b3RhRXhj
ZWVkZWRFcnJvcjogVGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLicpIE9LCitidWZmZXJlZFJh
bmdlcygpPVsgMC4uLjEyLCA0Ni4uLjQ4IF0KK3ZpZGVvLmN1cnJlbnRUaW1lPTEzCitBcHBlbmRp
bmcgUFRTPTEzCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTE0CitFVkVOVCh1cGRh
dGVlbmQpCitBcHBlbmRpbmcgUFRTPTE1CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRT
PTE2CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTE3CitFVkVOVCh1cGRhdGVlbmQp
CitBcHBlbmRpbmcgUFRTPTE4CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTE5CitF
VkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTIwCitFVkVOVCh1cGRhdGVlbmQpCitBcHBl
bmRpbmcgUFRTPTIxCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTIyCitFVkVOVCh1
cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTIzCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcg
UFRTPTI0CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTI1CitFVkVOVCh1cGRhdGVl
bmQpCitBcHBlbmRpbmcgUFRTPTI2CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTI3
CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTI4CitFVkVOVCh1cGRhdGVlbmQpCitB
cHBlbmRpbmcgUFRTPTI5CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTMwCitFVkVO
VCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTMxCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRp
bmcgUFRTPTMyCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTMzCitFVkVOVCh1cGRh
dGVlbmQpCitBcHBlbmRpbmcgUFRTPTM0CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRT
PTM1CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTM2CitFVkVOVCh1cGRhdGVlbmQp
CitBcHBlbmRpbmcgUFRTPTM3CitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTM4CitF
VkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTM5CitFVkVOVCh1cGRhdGVlbmQpCitBcHBl
bmRpbmcgUFRTPTQwCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTQxCitFVkVOVCh1
cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTQyCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcg
UFRTPTQzCitFVkVOVCh1cGRhdGVlbmQpCitBcHBlbmRpbmcgUFRTPTQ0CitFVkVOVCh1cGRhdGVl
bmQpCitBcHBlbmRpbmcgUFRTPTQ1CitFVkVOVCh1cGRhdGVlbmQpCitFWFBFQ1RFRCAoZXhjZXB0
aW9uICE9ICdRdW90YUV4Y2VlZGVkRXJyb3I6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRlZC4n
KSBPSworYnVmZmVyZWRSYW5nZXMoKT1bIDAuLi4xMiwgMTMuLi40NiBdCitFTkQgT0YgVEVTVAor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNl
LWV2aWN0LWNvZGVkZnJhbWUtYWZ0ZXItc2Vlay5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhLXNvdXJjZS1ldmljdC1jb2RlZGZyYW1lLWFmdGVyLXNlZWsuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjM5NWQyMjNjNjgyMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtZXZpY3QtY29kZWRmcmFtZS1hZnRlci1zZWVrLmh0bWwKQEAgLTAsMCArMSw4NiBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5tb2NrLW1lZGlhLXNvdXJj
ZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3VyY2VCdWZmZXI7CisgICAgdmFyIGlu
aXRTZWdtZW50OworICAgIHZhciBleGNlcHRpb247CisKKyAgICBhc3luYyBmdW5jdGlvbiBhcHBl
bmRQdHNSYW5nZShmaXJzdFB0cywgbGFzdFB0cykgeworICAgICAgICB2YXIgcmVzdWx0RXhjZXB0
aW9uID0gbnVsbDsKKyAgICAgICAgZm9yICh2YXIgcHRzID0gZmlyc3RQdHM7IHB0cyA8PSBsYXN0
UHRzOyBwdHMrKykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBjb25zb2xl
V3JpdGUoJ0FwcGVuZGluZyBQVFM9JytwdHMpOworICAgICAgICAgICAgICAgIHNvdXJjZUJ1ZmZl
ci5hcHBlbmRCdWZmZXIobWFrZUFTYW1wbGUocHRzLCBwdHMsIDEsIDEsIDEsIFNBTVBMRV9GTEFH
LlNZTkMsIDEpKTsKKyAgICAgICAgICAgICAgICBhd2FpdCB3YWl0Rm9yKHNvdXJjZUJ1ZmZlciwg
J3VwZGF0ZWVuZCcpOworICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAg
IHJlc3VsdEV4Y2VwdGlvbiA9IGU7CisgICAgICAgICAgICAgICAgc291cmNlQnVmZmVyLmFib3J0
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdEV4Y2VwdGlvbjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBidWZm
ZXJlZFJhbmdlcygpIHsKKyAgICAgICAgdmFyIGJ1ZmZlcmVkUmFuZ2VzID0gJ1sgJzsKKyAgICAg
ICAgdmFyIHRpbWVSYW5nZXMgPSBzb3VyY2VCdWZmZXIuYnVmZmVyZWQ7CisgICAgICAgIGZvciAo
dmFyIGkgPSAwIDsgaSA8IHRpbWVSYW5nZXMubGVuZ3RoIDsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAoaSkKKyAgICAgICAgICAgICAgICBidWZmZXJlZFJhbmdlcyArPSAnLCAnOworICAgICAgICAg
ICAgYnVmZmVyZWRSYW5nZXMgKz0gdGltZVJhbmdlcy5zdGFydChpKSArICcuLi4nICsgdGltZVJh
bmdlcy5lbmQoaSk7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyZWRSYW5nZXMgKz0gJyBdJzsK
KyAgICAgICAgcmV0dXJuIGJ1ZmZlcmVkUmFuZ2VzOworICAgIH0KKworICAgIGlmICh3aW5kb3cu
aW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tNZWRpYVNvdXJjZSgp
OworCisgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBhc3luYygpID0+IHsKKyAg
ICAgICAgZmluZE1lZGlhRWxlbWVudCgpOworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3Vy
Y2UoKTsKKworICAgICAgICBjb25zdCB2aWRlb1NvdXJjZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3NvdXJjZScpOworICAgICAgICB2aWRlb1NvdXJjZS50eXBlID0gJ3ZpZGVvL21vY2s7IGNv
ZGVjcz1tb2NrJzsKKyAgICAgICAgdmlkZW9Tb3VyY2Uuc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVS
TChzb3VyY2UpOworICAgICAgICB2aWRlby5hcHBlbmRDaGlsZCh2aWRlb1NvdXJjZSk7CisKKyAg
ICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2UsICdzb3VyY2VvcGVuJyk7CisgICAgICAgIHNvdXJj
ZS5kdXJhdGlvbiA9IDcyOworICAgICAgICBzb3VyY2VCdWZmZXIgPSBzb3VyY2UuYWRkU291cmNl
QnVmZmVyKCJ2aWRlby9tb2NrOyBjb2RlY3M9bW9jayIpOworICAgICAgICBpbml0U2VnbWVudCA9
IG1ha2VBSW5pdCgzNTAsIFttYWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURFTyld
KTsKKyAgICAgICAgc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0U2VnbWVudCk7CisgICAg
ICAgIGF3YWl0IHdhaXRGb3Ioc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJyk7CisgICAgICAgIHdh
aXRGb3Ioc291cmNlQnVmZmVyLCAnZXJyb3InKTsKKworICAgICAgICBpbnRlcm5hbHMuc2V0dGlu
Z3Muc2V0TWF4aW11bVNvdXJjZUJ1ZmZlclNpemUoMzIwMCk7CisKKyAgICAgICAgZXhjZXB0aW9u
ID0gYXdhaXQgYXBwZW5kUHRzUmFuZ2UoMCwgMTEpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ2V4
Y2VwdGlvbicsICdRdW90YUV4Y2VlZGVkRXJyb3I6IFRoZSBxdW90YSBoYXMgYmVlbiBleGNlZWRl
ZC4nLCAnIT0nKTsKKyAgICAgICAgY29uc29sZVdyaXRlKCdidWZmZXJlZFJhbmdlcygpPScrYnVm
ZmVyZWRSYW5nZXMoKSk7CisKKyAgICAgICAgdmlkZW8uY3VycmVudFRpbWUgPSA0NjsKKyAgICAg
ICAgY29uc29sZVdyaXRlKCd2aWRlby5jdXJyZW50VGltZT0nK3ZpZGVvLmN1cnJlbnRUaW1lKTsK
KyAgICAgICAgZXhjZXB0aW9uID0gYXdhaXQgYXBwZW5kUHRzUmFuZ2UoNDYsIDQ3KTsKKyAgICAg
ICAgdGVzdEV4cGVjdGVkKCdleGNlcHRpb24nLCAnUXVvdGFFeGNlZWRlZEVycm9yOiBUaGUgcXVv
dGEgaGFzIGJlZW4gZXhjZWVkZWQuJywgJyE9Jyk7CisgICAgICAgIGNvbnNvbGVXcml0ZSgnYnVm
ZmVyZWRSYW5nZXMoKT0nK2J1ZmZlcmVkUmFuZ2VzKCkpOworCisgICAgICAgIHZpZGVvLmN1cnJl
bnRUaW1lID0gMTM7CisgICAgICAgIGNvbnNvbGVXcml0ZSgndmlkZW8uY3VycmVudFRpbWU9Jyt2
aWRlby5jdXJyZW50VGltZSk7CisgICAgICAgIGV4Y2VwdGlvbiA9IGF3YWl0IGFwcGVuZFB0c1Jh
bmdlKDEzLCA0NSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnZXhjZXB0aW9uJywgJ1F1b3RhRXhj
ZWVkZWRFcnJvcjogVGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLicsICchPScpOworICAgICAg
ICBjb25zb2xlV3JpdGUoJ2J1ZmZlcmVkUmFuZ2VzKCk9JytidWZmZXJlZFJhbmdlcygpKTsKKwor
ICAgICAgICBlbmRUZXN0KCk7CisgICAgfSk7CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKyAgICA8dmlkZW8+PC92aWRlbz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBh
NTExMjgxM2JmYWEuLmEyOGM3MjZkNTVmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisy
MDIxLTA1LTI2ICBUb3NoaW8gT2dhc2F3YXJhICA8dG9zaGlvLm9nYXNhd2FyYUBhY2Nlc3MtY29t
cGFueS5jb20+CisKKyAgICAgICAgW01TRV0gTWVkaWFTYW1wbGUgdGhhdCBuZWVkIHRvIGJlIHJl
bW92ZWQgd2l0aCBTb3VyY2VCdWZmZXJQcml2YXRlOjpldmljdENvZGVkRnJhbWVzKCkgbWF5IG5v
dCBiZSByZW1vdmVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjI1ODAwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS83ODI5NjM1Mj4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlZCBldmljdENvZGVk
RnJhbWVzIHRvIHJlbW92ZSBNZWRpYVNhbXBsZSB0aGF0IGNhbiBiZSByZW1vdmVkIGFmdGVyIHRo
ZSBtaW5pbXVtUmFuZ2VTdGFydC4KKworICAgICAgICBUZXN0OiBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLWV2aWN0LWNvZGVkZnJhbWUtYWZ0ZXItc2Vlay5odG1sCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGU6OmV2aWN0Q29kZWRGcmFtZXMpOgorCiAyMDIxLTA1
LTI1ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAg
IFJlbmFtZSBJbWFnZUJ1ZmZlcjo6dHJhbnNmb3JtQ29sb3JTcGFjZSB0byB0cmFuc2Zvcm1Ub0Nv
bG9yU3BhY2UsIGFuZCBpdCBzaG91bGQgdGFrZSBhIHNpbmdsZSBhcmd1bWVudApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRl
LmNwcAppbmRleCAyMTJkMjEwYTY3ZmQuLjUyNjBjNGJmNDM0OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5jcHAK
QEAgLTY4OSw3ICs2ODksNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGU6OmV2aWN0Q29kZWRG
cmFtZXModWludDY0X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90IHBlbmRpbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgTWVkaWFUaW1lIG1pbmltdW1SYW5nZVN0YXJ0ID0gY3VycmVudFRp
bWUgKyB0aGlydHlTZWNvbmRzOworICAgIE1lZGlhVGltZSBtaW5pbXVtUmFuZ2VTdGFydCA9IHN0
ZDo6bWF4KGN1cnJlbnRUaW1lICsgdGhpcnR5U2Vjb25kcywgYnVmZmVyZWQuZW5kKGN1cnJlbnRU
aW1lUmFuZ2UpKTsKIAogICAgIHJhbmdlRW5kID0gZHVyYXRpb247CiAgICAgaWYgKCFyYW5nZUVu
ZC5pc0Zpbml0ZSgpKSB7CkBAIC03MDAsMTcgKzcwMCw3IEBAIHZvaWQgU291cmNlQnVmZmVyUHJp
dmF0ZTo6ZXZpY3RDb2RlZEZyYW1lcyh1aW50NjRfdCBuZXdEYXRhU2l6ZSwgdWludDY0X3QgcGVu
ZGluCiAgICAgfQogCiAgICAgcmFuZ2VTdGFydCA9IHJhbmdlRW5kIC0gdGhpcnR5U2Vjb25kczsK
LSAgICB3aGlsZSAocmFuZ2VTdGFydCA+IG1pbmltdW1SYW5nZVN0YXJ0KSB7Ci0gICAgICAgIC8v
IERvIG5vdCBldmljdCBkYXRhIGZyb20gdGhlIHRpbWUgcmFuZ2UgdGhhdCBjb250YWlucyBjdXJy
ZW50VGltZS4KLSAgICAgICAgdWludDY0X3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5k
KHJhbmdlU3RhcnQpOwotICAgICAgICBpZiAoY3VycmVudFRpbWVSYW5nZSAhPSBub3RGb3VuZCAm
JiBzdGFydFRpbWVSYW5nZSA9PSBjdXJyZW50VGltZVJhbmdlKSB7Ci0gICAgICAgICAgICB1aW50
NjRfdCBlbmRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKHJhbmdlRW5kKTsKLSAgICAgICAgICAg
IGlmIChjdXJyZW50VGltZVJhbmdlICE9IG5vdEZvdW5kICYmIGVuZFRpbWVSYW5nZSA9PSBjdXJy
ZW50VGltZVJhbmdlKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICByYW5n
ZUVuZCA9IGJ1ZmZlcmVkLnN0YXJ0KGVuZFRpbWVSYW5nZSk7Ci0gICAgICAgIH0KLQorICAgIHdo
aWxlIChyYW5nZUVuZCA+IG1pbmltdW1SYW5nZVN0YXJ0KSB7CiAgICAgICAgIC8vIDQuIEZvciBl
YWNoIHJhbmdlIGluIHJlbW92YWwgcmFuZ2VzLCBydW4gdGhlIGNvZGVkIGZyYW1lIHJlbW92YWwg
YWxnb3JpdGhtIHdpdGggc3RhcnQgYW5kCiAgICAgICAgIC8vIGVuZCBlcXVhbCB0byB0aGUgcmVt
b3ZhbCByYW5nZSBzdGFydCBhbmQgZW5kIHRpbWVzdGFtcCByZXNwZWN0aXZlbHkuCiAgICAgICAg
IHJlbW92ZUNvZGVkRnJhbWVzKHN0ZDo6bWF4KG1pbmltdW1SYW5nZVN0YXJ0LCByYW5nZVN0YXJ0
KSwgcmFuZ2VFbmQsIGN1cnJlbnRUaW1lLCBpc0VuZGVkKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>