<?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>139813</bug_id>
          
          <creation_ts>2014-12-19 01:59:41 -0800</creation_ts>
          <short_desc>[MSE] Implement per TrackBuffer buffered.</short_desc>
          <delta_ts>2015-01-19 10:35:13 -0800</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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140484</dependson>
    
    <dependson>140622</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Bartlomiej Gajda">b.gajda</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>calvaris</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>joepeck</cc>
    
    <cc>ltilve</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1057021</commentid>
    <comment_count>0</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-19 01:59:41 -0800</bug_when>
    <thetext>Section 3.1 of MSE spec, regarding buffered() clearly indicates that it should be per trackBuffer, not per SourceBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057022</commentid>
    <comment_count>1</comment_count>
      <attachid>243548</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-19 02:04:04 -0800</bug_when>
    <thetext>Created attachment 243548
patch_wip_per_trackbuffer_v1

In this version I added only per trackBuffer TimeRanges, and implemented algorithm from &quot;3.1 buffered, get&quot; as caching mechanism.

This however is not sufficient, for part ragarding &quot;ended&quot; state.

There are 2 options I think:

- keep caching, reverse order of operations from algorithm (so : get intersection, get highest time from trackBuffers, append till end if neccessary), but this is almost as much work as not caching at all

- drop the caching and just use this algorithm every time

I&apos;m not yet convinced which approach is better - feel free to comment, I will think over weekend and upload better version next week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057023</commentid>
    <comment_count>2</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2014-12-19 02:07:26 -0800</bug_when>
    <thetext>In the &quot;reversed order&quot; of course the first point (get intersection) would be cached value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058722</commentid>
    <comment_count>3</comment_count>
      <attachid>243548</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-01-05 10:04:27 -0800</bug_when>
    <thetext>Comment on attachment 243548
patch_wip_per_trackbuffer_v1

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

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:195
&gt; +        auto&amp; ranges = trackBuffer.m_buffered-&gt;ranges();
&gt; +        unsigned length = ranges.length();
&gt; +        if (length)
&gt; +            highestEndTime = std::max(highestEndTime, ranges.end(length - 1));
&gt; +    }

PlatformTimeRanges has a maximumBufferedTime() which would work well here.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:213
&gt; +        if (ended &amp;&amp; trackRanges.length())
&gt; +            trackRanges.add(trackRanges.start(trackRanges.length() - 1), highestEndTime);

Again, maximumBufferedTime() could be used here.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1553
&gt; +    cacheBuffered();

recalculateBuffered()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060164</commentid>
    <comment_count>4</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-01-09 10:05:37 -0800</bug_when>
    <thetext>&gt; PlatformTimeRanges has a maximumBufferedTime() which would work well here.
&gt; Again, maximumBufferedTime() could be used here.

will fix next week.

&gt; recalculateBuffered()?

Good name, but ultimately I think I will drop caching.

I thought it&apos;s safe to cache intersection, and at the moment of calling buffered() just : if (ended) cachedBuffered.add(cachedBuffered.end, highestEndTime), but this does not work for:

1st trackBuffer buffered: (0,2) (7,10)
2nd trackBuffer buffered: (4-6)

&quot;Correct&quot; answer from spec would be (7-10) as both trackBuffers would be extended to 10th second by point 4.2 of buffered.

My approach would have cached buffered intersection = (0,0), so it would add (0-10).

So the alternative would be to remember &quot;did MediaSource ended state changed&quot;, and then do recalculate buffered but that&apos;s duplicating code and I don&apos;t see any improvment by that appraoch..

I think I will just call this algorithm directly each time, but that will be done next week, along with more layoutTest for &apos;ended&apos; scenarios.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061153</commentid>
    <comment_count>5</comment_count>
      <attachid>244596</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-01-14 05:02:44 -0800</bug_when>
    <thetext>Created attachment 244596
add per trackBuffer buffered + layoutTests

So I&apos;ve returned to my original concept with caching because all the hasCurrentTime()/hasFutureTime() already makes copies of buffered, I didn&apos;t want to put even more overhead for each of those calls.

As for handling readyState change, I just added recalculateBuffered() there, so there are 3 points of recaching now: adding samples, removing samples, changing ready state.

I have added tests for simple 2 tracks appends, and for MediaSource.readyState changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061183</commentid>
    <comment_count>6</comment_count>
      <attachid>244596</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-01-14 08:35:16 -0800</bug_when>
    <thetext>Comment on attachment 244596
add per trackBuffer buffered + layoutTests

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

This is great. What I&apos;d like to see added, but maybe in another patch, is caching of buffered ranges at the MediaSource level. Right now, an expensive merge step happens every time someone requests buffered().

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:821
&gt; +    recalculateBuffered();

The way we do this in other places, like HTMLMediaElement, is that instead of recalculating the cached value immediately when its invalidated, we mark it as dirty and only recalculate the value when asked.  This would mean replacing all your instances of &quot;recalculateBuffered()&quot; to something like &quot;invalidateBuffered()&quot;, and call &quot;recalculateBuffered()&quot; from within &quot;buffered()&quot; if the value is invalidated.

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:1615
&gt; +    recalculateBuffered();

This is probably more often than necessary. You could call this (or invalidate buffered) from sourceBufferPrivateAppendComplete().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061220</commentid>
    <comment_count>7</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-01-14 10:41:55 -0800</bug_when>
    <thetext>&gt; This is great. What I&apos;d like to see added, but maybe in another patch, is
&gt; caching of buffered ranges at the MediaSource level. Right now, an expensive
&gt; merge step happens every time someone requests buffered().

I will add caching for MediaSource after this, shouldn&apos;t be too hard, but don&apos;t want mix stuff too much. (would need to also handle activeSourceBuffers there)
 
&gt; &gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:821
&gt; &gt; +    recalculateBuffered();
&gt; 
&gt; The way we do this in other places, like HTMLMediaElement, is that instead
&gt; of recalculating the cached value immediately when its invalidated, we mark
&gt; it as dirty and only recalculate the value when asked.  This would mean
&gt; replacing all your instances of &quot;recalculateBuffered()&quot; to something like
&gt; &quot;invalidateBuffered()&quot;, and call &quot;recalculateBuffered()&quot; from within
&gt; &quot;buffered()&quot; if the value is invalidated.

Done.
 
&gt; This is probably more often than necessary. You could call this (or
&gt; invalidate buffered) from sourceBufferPrivateAppendComplete().

Didn&apos;t thought about that, You&apos;re right, it would be way better. Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061231</commentid>
    <comment_count>8</comment_count>
      <attachid>244617</attachid>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-01-14 10:55:02 -0800</bug_when>
    <thetext>Created attachment 244617
add per trackBuffer buffered + layoutTests v2

Changed code according to comments.

Switched buffered (and new flag for dirtiness as well) to mutable, as it&apos;s easier then removing const from 5 functions.

Since I switched to lazy evaluation and there were few places where &apos;SourceBuffer.m_buffered&apos; was used directly, had to change them as well, to guarantee proper sync with data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061262</commentid>
    <comment_count>9</comment_count>
      <attachid>244617</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-01-14 11:54:03 -0800</bug_when>
    <thetext>Comment on attachment 244617
add per trackBuffer buffered + layoutTests v2

The only nit I have is that &apos;m_shouldRecalculateBuffered = true&apos; could be replaced by &apos;m_buffered = nullptr&apos;, but it&apos;s not a blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061275</commentid>
    <comment_count>10</comment_count>
      <attachid>244617</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 12:36:25 -0800</bug_when>
    <thetext>Comment on attachment 244617
add per trackBuffer buffered + layoutTests v2

Clearing flags on attachment: 244617

Committed r178438: &lt;http://trac.webkit.org/changeset/178438&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061276</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 12:36:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061394</commentid>
    <comment_count>12</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-01-14 16:26:30 -0800</bug_when>
    <thetext>It looks like this change consistently causes a LayoutTest failure on the bots:
https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20WK1%20%28Tests%29/builds/1530

    http/tests/media/media-source/mediasource-remove.html

Should we skip the test? Roll out the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061421</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 17:11:48 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 140484</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061542</commentid>
    <comment_count>14</comment_count>
    <who name="Bartlomiej Gajda">b.gajda</who>
    <bug_when>2015-01-15 06:59:36 -0800</bug_when>
    <thetext>Failing test in this : https://build.webkit.org/results/Apple%20Yosemite%20Debug%20WK1%20%28Tests%29/r178455%20%281534%29/http/tests/media/media-source/mediasource-remove-actual.txt
consist of 2 parts : mismatch of buffered, and DOMException.

Since I don&apos;t have any Mac around, I analyzed that file used to append: LayoutTests/http/tests/media/media-source/mp4/test.mp4

This file consists of 2 tracks:
track 1: audio, 260 samples * 1024 duration / 44100 timescale = 6,037s
track 2: video, 182 samples * 83 duration / 2500 timescale = 6.0424s

and there is initial duration from (moov.mvex.mehd duration 3622) / (moov.mvhd timescale 600) = 6,03666.


* Mismatch buffered() part

It&apos;s the exact expected behavior after this patch, to use common intersection of ranges, which is 6.037, not 6.0424, so I believe that either this patch should should change `mediasource-util.js` &quot;duration: 6.0424&quot; to &quot;duration: 6.037&quot;, or skip test and someone with Mac access would fix testcase later?
I don&apos;t know how other tests will behave, my own mp4 parser doesn&apos;t handle trackId&apos;s yet.

* Dom exception part

I&apos;m not sure yet, but I suspect that this is because track2 extended duration to 6.042, and because of current &quot;// FIXME: Re-number or update this section once&quot; in streamEndedWithError() which reorders readystate change, setDurationInternal() uses buffered which was *not* extended to &apos;highest end time&apos; (so 6.037, not 6.042) =&gt; calls setDurationinternal() with different old and new durations =&gt; sets updating to true =&gt; &quot;sourceBuffer.remove(1, 2);&quot; has InvalidStateError, as it should wait for &apos;updateend&apos;.

This can be fixed by doing patch for that FIXME I mentioned (since that bug in spec already got resolved), but there could be perhaps check for is it safe to call remove?

--

Summing up, I&apos;m not sure what should I do with this patch next. As for Jer Noble comment about nullifying buffered, instead of using additional flag - I&apos;d like to change this in next patch with caching buffered for MediaSource. 

As I said I don&apos;t have Mac to properly change all those constants in test (like 1.029, 3.187, etc.) which probably will be off after this patch (so only changing segment duration to shorter version won&apos;t be enough).


As a side note: I wonder shouldn&apos;t this be cleared in standard, because at the moment, when removal occurs, &apos;sourceended&apos; being posted before &apos;updateend&apos; seems wrong . I&apos;d expect at &apos;sourceended&apos; that if there was any removal it is done already, and updating is false, otherwise every user would have to add additional check before taking any action, for &apos;updating&apos; which might or might not occur. I will probably ask this on W3 bugzila.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061548</commentid>
    <comment_count>15</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2015-01-15 08:11:11 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Failing test in this :
&gt; https://build.webkit.org/results/
&gt; Apple%20Yosemite%20Debug%20WK1%20%28Tests%29/r178455%20%281534%29/http/tests/
&gt; media/media-source/mediasource-remove-actual.txt
&gt; consist of 2 parts : mismatch of buffered, and DOMException.
&gt; 
&gt; Since I don&apos;t have any Mac around, I analyzed that file used to append:
&gt; LayoutTests/http/tests/media/media-source/mp4/test.mp4
&gt; 
&gt; This file consists of 2 tracks:
&gt; track 1: audio, 260 samples * 1024 duration / 44100 timescale = 6,037s
&gt; track 2: video, 182 samples * 83 duration / 2500 timescale = 6.0424s
&gt; 
&gt; and there is initial duration from (moov.mvex.mehd duration 3622) /
&gt; (moov.mvhd timescale 600) = 6,03666.
&gt; 
&gt; 
&gt; * Mismatch buffered() part
&gt; 
&gt; It&apos;s the exact expected behavior after this patch, to use common
&gt; intersection of ranges, which is 6.037, not 6.0424, so I believe that either
&gt; this patch should should change `mediasource-util.js` &quot;duration: 6.0424&quot; to
&gt; &quot;duration: 6.037&quot;, or skip test and someone with Mac access would fix
&gt; testcase later?
&gt; I don&apos;t know how other tests will behave, my own mp4 parser doesn&apos;t handle
&gt; trackId&apos;s yet.

I&apos;ve had to modify those values (in mediasource-util.js) in the past, and it certainly seems reasonable to do so in this case.  Once you get another patch up, I can apply it and run them manually, and post the results.

&gt; * Dom exception part
&gt; 
&gt; I&apos;m not sure yet, but I suspect that this is because track2 extended
&gt; duration to 6.042, and because of current &quot;// FIXME: Re-number or update
&gt; this section once&quot; in streamEndedWithError() which reorders readystate
&gt; change, setDurationInternal() uses buffered which was *not* extended to
&gt; &apos;highest end time&apos; (so 6.037, not 6.042) =&gt; calls setDurationinternal() with
&gt; different old and new durations =&gt; sets updating to true =&gt;
&gt; &quot;sourceBuffer.remove(1, 2);&quot; has InvalidStateError, as it should wait for
&gt; &apos;updateend&apos;.

This is my understanding as well.

&gt; This can be fixed by doing patch for that FIXME I mentioned (since that bug
&gt; in spec already got resolved), but there could be perhaps check for is it
&gt; safe to call remove?

I would opt for fixing the FIXME, rather than modifying the test in this case.

&gt; Summing up, I&apos;m not sure what should I do with this patch next. As for Jer
&gt; Noble comment about nullifying buffered, instead of using additional flag -
&gt; I&apos;d like to change this in next patch with caching buffered for MediaSource. 
&gt; 
&gt; As I said I don&apos;t have Mac to properly change all those constants in test
&gt; (like 1.029, 3.187, etc.) which probably will be off after this patch (so
&gt; only changing segment duration to shorter version won&apos;t be enough).
&gt; 
&gt; 
&gt; As a side note: I wonder shouldn&apos;t this be cleared in standard, because at
&gt; the moment, when removal occurs, &apos;sourceended&apos; being posted before
&gt; &apos;updateend&apos; seems wrong . I&apos;d expect at &apos;sourceended&apos; that if there was any
&gt; removal it is done already, and updating is false, otherwise every user
&gt; would have to add additional check before taking any action, for &apos;updating&apos;
&gt; which might or might not occur. I will probably ask this on W3 bugzila.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243548</attachid>
            <date>2014-12-19 02:04:04 -0800</date>
            <delta_ts>2015-01-14 05:02:44 -0800</delta_ts>
            <desc>patch_wip_per_trackbuffer_v1</desc>
            <filename>patch_wip_bufferedper_trackbuffer.txt</filename>
            <type>text/plain</type>
            <size>10724</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
bXVsdGlwbGUtdHJhY2tzLWluLXNpbmdsZS1zb3VyY2UtYnVmZmVyLmh0bWwgYi9MYXlvdXRUZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrcy1pbi1zaW5n
bGUtc291cmNlLWJ1ZmZlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjNiMjVjYjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrcy1pbi1zaW5nbGUtc291cmNlLWJ1ZmZlci5o
dG1sCkBAIC0wLDAgKzEsOTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8dGl0bGU+bW9jay1tZWRpYS1zb3VyY2U8L3RpdGxlPgorICAgIDxzY3JpcHQgc3JjPSJtb2Nr
LW1lZGlhLXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uL3ZpZGVvLXRl
c3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgdmFyIHNvdXJjZTsKKyAgICB2YXIg
c291cmNlQnVmZmVyOworICAgIHZhciBpbml0OworICAgIHZhciBzYW1wbGVzOworCisgICAgaWYg
KHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXplTW9ja01lZGlh
U291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBmaW5kTWVkaWFF
bGVtZW50KCk7CisgICAgICAgIHNvdXJjZSA9IG5ldyBNZWRpYVNvdXJjZSgpOworICAgICAgICBz
b3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignc291cmNlb3BlbicsIHN0YXJ0TG9hZCk7CisgICAgICAg
IHJ1bigndmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gc3RhcnRMb2FkKCkgeworICAgICAgICBzb3VyY2VCdWZmZXIgPSBzb3Vy
Y2UuYWRkU291cmNlQnVmZmVyKCd2aWRlby9tb2NrOyBjb2RlY3M9Im1vY2siJyk7CisgICAgICAg
IHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMSwg
ZmFsc2UsIHRydWUpOworCisgICAgICAgIC8vIE1ha2UgYW4gaW5pdCBzZWdtZW50IHdpdGggMSB2
aWRlbyB0cmFjayBhbmQgMSBhdWRpbyB0cmFjaworICAgICAgICBpbml0ID0gbWFrZUFJbml0KDAs
IFsKKyAgICAgICAgICAgIG1ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFDS19LSU5ELlZJREVPKSwK
KyAgICAgICAgICAgIG1ha2VBVHJhY2soMiwgJ21vY2snLCBUUkFDS19LSU5ELkFVRElPKSwKKyAg
ICAgICAgICAgIF0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5p
dCk7Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMxKCkgeworICAgICAgICBz
YW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDAs
IDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMSwg
MSwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgyLCAy
LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDMsIDMs
IDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoNCwgNCwg
MSwgMSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1LCA1LCAx
LCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVu
dE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwgZmFsc2UsIHRydWUp
OworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczIoKSB7CisgICAgICAgIHRlc3RFeHBlY3Rl
ZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDApOworCisgICAgICAgIHNhbXBsZXMg
PSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwg
MiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAy
LCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDIsIDIsIDEsIDIs
IFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24o
c291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMzLCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVzMygpIHsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdz
b3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgn
c291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKS50b0ZpeGVkKDMpJywgMyk7CisKKyAgICAgICAg
c2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgz
LCAzLCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDQs
IDQsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoNSwg
NSwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg2LCA2
LCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDcsIDcs
IDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoOCwgOCwg
MSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JF
dmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGRvRW5kLCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGRvRW5kKCkgeworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1
ZmZlci5idWZmZXJlZC5sZW5ndGgnLCAxKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VC
dWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMyknLCA2KTsKKyAgICAgICAgd2FpdEZvckV2
ZW50T24oc291cmNlLCAnc291cmNlZW5kZWQnLCBmaW5pc2hUZXN0LCBmYWxzZSwgdHJ1ZSk7Cisg
ICAgICAgIHJ1bignc291cmNlLmVuZE9mU3RyZWFtKCknKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmaW5pc2hUZXN0KCkgeworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZm
ZXJlZC5sZW5ndGgnLCAxKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVm
ZmVyZWQuZW5kKDApLnRvRml4ZWQoMyknLCA5KTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0K
KworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAg
IDx2aWRlbz48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IGJhYzM1YjguLmU5
YzdjOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKQEAgLTg5LDYgKzg5LDcgQEAgc3RydWN0IFNvdXJjZUJ1ZmZlcjo6VHJh
Y2tCdWZmZXIgewogICAgIE1lZGlhVGltZSBoaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wOwog
ICAgIE1lZGlhVGltZSBsYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lOwogICAgIE1lZGlhVGlt
ZSBsYXN0RW5xdWV1ZWREZWNvZGVFbmRUaW1lOworICAgIFJlZlB0cjxUaW1lUmFuZ2VzPiBtX2J1
ZmZlcmVkOwogICAgIGJvb2wgbmVlZFJhbmRvbUFjY2Vzc0ZsYWc7CiAgICAgYm9vbCBlbmFibGVk
OwogICAgIGJvb2wgbmVlZHNSZWVucXVldWVpbmc7CkBAIC0xMDIsNiArMTAzLDcgQEAgc3RydWN0
IFNvdXJjZUJ1ZmZlcjo6VHJhY2tCdWZmZXIgewogICAgICAgICAsIGhpZ2hlc3RQcmVzZW50YXRp
b25UaW1lc3RhbXAoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICAgICAsIGxhc3RFbnF1
ZXVlZFByZXNlbnRhdGlvblRpbWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICAgICAs
IGxhc3RFbnF1ZXVlZERlY29kZUVuZFRpbWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQorICAg
ICAgICAsIG1fYnVmZmVyZWQoVGltZVJhbmdlczo6Y3JlYXRlKCkpCiAgICAgICAgICwgbmVlZFJh
bmRvbUFjY2Vzc0ZsYWcodHJ1ZSkKICAgICAgICAgLCBlbmFibGVkKGZhbHNlKQogICAgICAgICAs
IG5lZWRzUmVlbnF1ZXVlaW5nKGZhbHNlKQpAQCAtMTYyLDggKzE2NCwxNSBAQCBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWQoRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogICAgIH0KKyAgICAKKyNpZiAwCisgICAgLy8gTm90ZTogd2UgcmV2ZXJzZWQgdGhlIG9y
ZGVyIG9mIG9wZXJhdGlvbnMsIHNvIHdlIGNhbiB1c2UgY2FjaGVkIHZlcnNpb24gb2YgYnVmZmVy
ZWQuIFRoaXMgaXMgYmVjYXVzZSBvbmx5IGF0IHRoZSBtb21lbnQKKyAgICAvLyBvZiBjYWxsaW5n
IHRoaXMgZnVuY3Rpb24gImVuZGVkIiBzdGF0ZSBtYXR0ZXJzLgorCisjZW5kaWYKIAotICAgIC8v
IDIuIFJldHVybiBhIG5ldyBzdGF0aWMgbm9ybWFsaXplZCBUaW1lUmFuZ2VzIG9iamVjdCBmb3Ig
dGhlIG1lZGlhIHNlZ21lbnRzIGJ1ZmZlcmVkLgorICAgIC8vIE5vdGU6IFN0ZXBzIDItNCBhcmUg
aGFuZGxlZCBieSBjYWNoZUJ1ZmZlcmVkCisgICAgLy8gNS4gUmV0dXJuIHRoZSBpbnRlcnNlY3Rp
b24gcmFuZ2VzLgogICAgIHJldHVybiBtX2J1ZmZlcmVkLT5jb3B5KCk7CiB9CiAKQEAgLTE3Miw2
ICsxODEsNDUgQEAgY29uc3QgUmVmUHRyPFRpbWVSYW5nZXM+JiBTb3VyY2VCdWZmZXI6OmJ1ZmZl
cmVkKCkgY29uc3QKICAgICByZXR1cm4gbV9idWZmZXJlZDsKIH0KIAordm9pZCBTb3VyY2VCdWZm
ZXI6OmNhY2hlQnVmZmVyZWQoKQoreworICAgIC8vIFNlY3Rpb24gMy4xIGJ1ZmZlcmVkIGF0dHJp
YnV0ZSBzdGVwcy4KKworICAgIC8vIDIuIExldCBoaWdoZXN0IGVuZCB0aW1lIGJlIHRoZSBsYXJn
ZXN0IHRyYWNrIGJ1ZmZlciByYW5nZXMgZW5kIHRpbWUgYWNyb3NzIGFsbCB0aGUgdHJhY2sgYnVm
ZmVycyBtYW5hZ2VkIGJ5IHRoaXMgU291cmNlQnVmZmVyIG9iamVjdC4KKyAgICBNZWRpYVRpbWUg
aGlnaGVzdEVuZFRpbWUgPSBNZWRpYVRpbWU6Onplcm9UaW1lKCk7CisgICAgZm9yIChhdXRvJiB0
cmFja0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJNYXAudmFsdWVzKCkpIHsKKyAgICAgICAgYXV0byYg
cmFuZ2VzID0gdHJhY2tCdWZmZXIubV9idWZmZXJlZC0+cmFuZ2VzKCk7CisgICAgICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHJhbmdlcy5sZW5ndGgoKTsKKyAgICAgICAgaWYgKGxlbmd0aCkKKyAgICAg
ICAgICAgIGhpZ2hlc3RFbmRUaW1lID0gc3RkOjptYXgoaGlnaGVzdEVuZFRpbWUsIHJhbmdlcy5l
bmQobGVuZ3RoIC0gMSkpOworICAgIH0KKworICAgIC8vIFJldHVybiBhbiBlbXB0eSByYW5nZSBp
ZiBhbGwgcmFuZ2VzIGFyZSBlbXB0eS4KKyAgICBpZiAoIWhpZ2hlc3RFbmRUaW1lKSB7CisgICAg
ICAgIG1fYnVmZmVyZWQgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIC8vIDMuIExldCBpbnRlcnNlY3Rpb24gcmFuZ2VzIGVxdWFsIGEgVGltZVJh
bmdlIG9iamVjdCBjb250YWluaW5nIGEgc2luZ2xlIHJhbmdlIGZyb20gMCB0byBoaWdoZXN0IGVu
ZCB0aW1lLgorICAgIFBsYXRmb3JtVGltZVJhbmdlcyBpbnRlcnNlY3Rpb25SYW5nZXMoTWVkaWFU
aW1lOjp6ZXJvVGltZSgpLCBoaWdoZXN0RW5kVGltZSk7CisKKyAgICAvLyA0LiBGb3IgZWFjaCB0
cmFjayBidWZmZXIgbWFuYWdlZCBieSB0aGlzIFNvdXJjZUJ1ZmZlciwgcnVuIHRoZSBmb2xsb3dp
bmcgc3RlcHM6CisgICAgYm9vbCBlbmRlZCA9IG1fc291cmNlLT5yZWFkeVN0YXRlKCkgPT0gTWVk
aWFTb3VyY2U6OmVuZGVkS2V5d29yZCgpOworICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXIgOiBt
X3RyYWNrQnVmZmVyTWFwLnZhbHVlcygpKSB7CisgICAgICAgIC8vIDQuMSBMZXQgdHJhY2sgcmFu
Z2VzIGVxdWFsIHRoZSB0cmFjayBidWZmZXIgcmFuZ2VzIGZvciB0aGUgY3VycmVudCB0cmFjayBi
dWZmZXIuCisgICAgICAgIFBsYXRmb3JtVGltZVJhbmdlcyB0cmFja1JhbmdlcyA9IHRyYWNrQnVm
ZmVyLm1fYnVmZmVyZWQtPnJhbmdlcygpOworICAgICAgICAvLyA0LjIgSWYgcmVhZHlTdGF0ZSBp
cyAiZW5kZWQiLCB0aGVuIHNldCB0aGUgZW5kIHRpbWUgb24gdGhlIGxhc3QgcmFuZ2UgaW4gdHJh
Y2sgcmFuZ2VzIHRvIGhpZ2hlc3QgZW5kIHRpbWUuCisgICAgICAgIGlmIChlbmRlZCAmJiB0cmFj
a1Jhbmdlcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIHRyYWNrUmFuZ2VzLmFkZCh0cmFja1Jhbmdl
cy5zdGFydCh0cmFja1Jhbmdlcy5sZW5ndGgoKSAtIDEpLCBoaWdoZXN0RW5kVGltZSk7CisKKyAg
ICAgICAgLy8gNC4zIExldCBuZXcgaW50ZXJzZWN0aW9uIHJhbmdlcyBlcXVhbCB0aGUgaW50ZXJz
ZWN0aW9uIGJldHdlZW4gdGhlIGludGVyc2VjdGlvbiByYW5nZXMgYW5kIHRoZSB0cmFjayByYW5n
ZXMuCisgICAgICAgIC8vIDQuNCBSZXBsYWNlIHRoZSByYW5nZXMgaW4gaW50ZXJzZWN0aW9uIHJh
bmdlcyB3aXRoIHRoZSBuZXcgaW50ZXJzZWN0aW9uIHJhbmdlcy4KKyAgICAgICAgaW50ZXJzZWN0
aW9uUmFuZ2VzLmludGVyc2VjdFdpdGgodHJhY2tSYW5nZXMpOworICAgIH0KKworICAgIG1fYnVm
ZmVyZWQgPSBUaW1lUmFuZ2VzOjpjcmVhdGUoaW50ZXJzZWN0aW9uUmFuZ2VzKTsKK30KKwogZG91
YmxlIFNvdXJjZUJ1ZmZlcjo6dGltZXN0YW1wT2Zmc2V0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV90aW1lc3RhbXBPZmZzZXQudG9Eb3VibGUoKTsKQEAgLTcwNCw3ICs3NTIsNyBAQCB2b2lkIFNv
dXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29u
c3QgTWVkaWFUaW1lJiBlbgogICAgICAgICB9CiAKICAgICAgICAgZXJhc2VkUmFuZ2VzLT5pbnZl
cnQoKTsKLSAgICAgICAgbV9idWZmZXJlZC0+aW50ZXJzZWN0V2l0aCgqZXJhc2VkUmFuZ2VzKTsK
KyAgICAgICAgdHJhY2tCdWZmZXIubV9idWZmZXJlZC0+aW50ZXJzZWN0V2l0aCgqZXJhc2VkUmFu
Z2VzKTsKIAogICAgICAgICAvLyAzLjQgSWYgdGhpcyBvYmplY3QgaXMgaW4gYWN0aXZlU291cmNl
QnVmZmVycywgdGhlIGN1cnJlbnQgcGxheWJhY2sgcG9zaXRpb24gaXMgZ3JlYXRlciB0aGFuIG9y
IGVxdWFsIHRvIHN0YXJ0CiAgICAgICAgIC8vIGFuZCBsZXNzIHRoYW4gdGhlIHJlbW92ZSBlbmQg
dGltZXN0YW1wLCBhbmQgSFRNTE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGlzIGdyZWF0ZXIgdGhh
biBIQVZFX01FVEFEQVRBLCB0aGVuIHNldApAQCAtNzEzLDYgKzc2MSw3IEBAIHZvaWQgU291cmNl
QnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyhjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBN
ZWRpYVRpbWUmIGVuCiAgICAgICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OkhhdmVNZXRhZGF0YSk7CiAgICAgfQogCisgICAgY2FjaGVCdWZmZXJlZCgpOwogICAg
IC8vIDQuIElmIGJ1ZmZlciBmdWxsIGZsYWcgZXF1YWxzIHRydWUgYW5kIHRoaXMgb2JqZWN0IGlz
IHJlYWR5IHRvIGFjY2VwdCBtb3JlIGJ5dGVzLCB0aGVuIHNldCB0aGUgYnVmZmVyIGZ1bGwgZmxh
ZyB0byBmYWxzZS4KICAgICAvLyBOby1vcAogCkBAIC0xNDExLDE0ICsxNDYwLDE0IEBAIHZvaWQg
U291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3VyY2VC
dWZmZXJQcml2YXRlKiwgUGFzCiAgICAgICAgICAgICAgICAgLy8gTk9URTogU2VhcmNoaW5nIGZy
b20gdGhlIGVuZCBvZiB0aGUgdHJhY2tCdWZmZXIgd2lsbCBiZSB2YXN0bHkgbW9yZSBlZmZpY2ll
bnQgaWYgdGhlIHNlYXJjaCByYW5nZSBpcwogICAgICAgICAgICAgICAgIC8vIG5lYXIgdGhlIGVu
ZCBvZiB0aGUgYnVmZmVyZWQgcmFuZ2UuIFVzZSBhIGxpbmVhci1iYWNrd2FyZHMgc2VhcmNoIGlm
IHRoZSBzZWFyY2ggcmFuZ2UgaXMgd2l0aGluIG9uZQogICAgICAgICAgICAgICAgIC8vIGZyYW1l
IGR1cmF0aW9uIG9mIHRoZSBlbmQ6Ci0gICAgICAgICAgICAgICAgaWYgKCFtX2J1ZmZlcmVkKQor
ICAgICAgICAgICAgICAgIGlmICghdHJhY2tCdWZmZXIubV9idWZmZXJlZCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBidWZmZXJlZExlbmd0
aCA9IG1fYnVmZmVyZWQtPnJhbmdlcygpLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJ1ZmZlcmVkTGVuZ3RoID0gdHJhY2tCdWZmZXIubV9idWZmZXJlZC0+cmFuZ2VzKCkubGVu
Z3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXJlZExlbmd0aCkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBNZWRpYVRpbWUgaGlnaGVzdEJ1ZmZl
cmVkVGltZSA9IG1fYnVmZmVyZWQtPnJhbmdlcygpLm1heGltdW1CdWZmZXJlZFRpbWUoKTsKKyAg
ICAgICAgICAgICAgICBNZWRpYVRpbWUgaGlnaGVzdEJ1ZmZlcmVkVGltZSA9IHRyYWNrQnVmZmVy
Lm1fYnVmZmVyZWQtPnJhbmdlcygpLm1heGltdW1CdWZmZXJlZFRpbWUoKTsKIAogICAgICAgICAg
ICAgICAgIFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjppdGVyYXRvcl9yYW5nZSByYW5nZTsK
ICAgICAgICAgICAgICAgICBpZiAoaGlnaGVzdEJ1ZmZlcmVkVGltZSAtIHRyYWNrQnVmZmVyLmhp
Z2hlc3RQcmVzZW50YXRpb25UaW1lc3RhbXAgPCB0cmFja0J1ZmZlci5sYXN0RnJhbWVEdXJhdGlv
bikKQEAgLTE0NTcsNyArMTUwNiw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgUGFzCiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGVyYXNlZFJhbmdlcy0+aW52ZXJ0KCk7Ci0gICAgICAgICAg
ICBtX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMpOworICAgICAgICAgICAg
dHJhY2tCdWZmZXIubV9idWZmZXJlZC0+aW50ZXJzZWN0V2l0aCgqZXJhc2VkUmFuZ2VzKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIDEuMTcgSWYgc3BsaWNlZCBhdWRpbyBmcmFtZSBpcyBzZXQ6
CkBAIC0xNDk2LDExICsxNTQ1LDEyIEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQ
cml2YXRlRGlkUmVjZWl2ZVNhbXBsZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgUGFzCiAgICAgICAg
IGlmIChtX3Nob3VsZEdlbmVyYXRlVGltZXN0YW1wcykKICAgICAgICAgICAgIG1fdGltZXN0YW1w
T2Zmc2V0ID0gZnJhbWVFbmRUaW1lc3RhbXA7CiAKLSAgICAgICAgbV9idWZmZXJlZC0+YWRkKHBy
ZXNlbnRhdGlvblRpbWVzdGFtcC50b0RvdWJsZSgpLCAocHJlc2VudGF0aW9uVGltZXN0YW1wICsg
ZnJhbWVEdXJhdGlvbiArIG1pY3Jvc2Vjb25kKS50b0RvdWJsZSgpKTsKKyAgICAgICAgdHJhY2tC
dWZmZXIubV9idWZmZXJlZC0+YWRkKHByZXNlbnRhdGlvblRpbWVzdGFtcC50b0RvdWJsZSgpLCAo
cHJlc2VudGF0aW9uVGltZXN0YW1wICsgZnJhbWVEdXJhdGlvbiArIG1pY3Jvc2Vjb25kKS50b0Rv
dWJsZSgpKTsKICAgICAgICAgbV9idWZmZXJlZFNpbmNlTGFzdE1vbml0b3IgKz0gZnJhbWVEdXJh
dGlvbi50b0RvdWJsZSgpOwogCiAgICAgICAgIGJyZWFrOwogICAgIH0gd2hpbGUgKDEpOworICAg
IGNhY2hlQnVmZmVyZWQoKTsKIAogICAgIC8vIFN0ZXBzIDItNCB3aWxsIGJlIGhhbmRsZWQgYnkg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKaW5kZXggOGM2ZjNmZS4uMWU3
ODllNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCkBAIC0xNjMsNiArMTYzLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGFwcGVuZEJ1
ZmZlclRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHJlc2V0UGFyc2VyU3RhdGUoKTsKIAorICAgIHZv
aWQgY2FjaGVCdWZmZXJlZCgpOworCiAgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CiAKICAgICBi
b29sIHZhbGlkYXRlSW5pdGlhbGl6YXRpb25TZWdtZW50KGNvbnN0IEluaXRpYWxpemF0aW9uU2Vn
bWVudCYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244596</attachid>
            <date>2015-01-14 05:02:44 -0800</date>
            <delta_ts>2015-01-14 10:55:02 -0800</delta_ts>
            <desc>add per trackBuffer buffered + layoutTests</desc>
            <filename>patch_multi_trackBuffer_buffered.txt</filename>
            <type>text/plain</type>
            <size>20013</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxOWE5N2FjLi40MjNmMTRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDEt
MTQgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIEltcGxlbWVudCBwZXIgVHJhY2tCdWZmZXIgYnVmZmVyZWQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk4MTMuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgd2hpY2ggY2hlY2tz
IGhvdyBidWZmZXJlZCBiZWhhdmVzIGZvciB0d28gdHJhY2tCdWZmZXJzIGluIHNpbmdsZSBTb3Vy
Y2VCdWZmZXIKKyAgICAgICAgYWZ0ZXIgYXBwZW5kcywgYW5kIHdpdGggTWVkaWFTb3VyY2UgcmVh
ZHlTdGF0ZSBzd2l0Y2hpbmcgdG8gZW5kZWQgYW5kIGJhY2sgdG8gb3Blbi4KKworICAgICAgICAq
IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1
ZmZlcmVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQtaW4tZW5kZWQtc3Rh
dGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC1pbi1lbmRlZC1zdGF0ZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11
bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC5odG1sOiBBZGRlZC4KKwogMjAxNS0wMS0xMyAg
QW5kcnplaiBCYWRvd3NraSAgPGEuYmFkb3dza2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgQVg6
IFtBVEtdIE1hcmsgYWNjZXNzaWJpbGl0eS90YWJsZS13aXRoLWZvb3Rlci1zZWN0aW9uLWFib3Zl
LWJvZHkuaHRtbCBhcyBhIHN1aXRhYmxlIHRlc3QgZm9yIEVGTCBhbmQgR1RLCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRy
YWNrQnVmZmVycy1idWZmZXJlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UyYmM3ZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDIxIEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSkpCitS
VU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0KTspCitFVkVOVCh1cGRhdGVlbmQpCitS
VU4oc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkK
K0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09ICcwJykgT0sKK1JVTihz
b3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQorRVhQ
RUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzEnKSBPSworRVhQRUNURUQg
KHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkudG9GaXhlZCgzKSA9PSAnMycpIE9LCitSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK0VY
UEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVE
IChzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMykgPT0gJzYnKSBPSworUlVO
KHNvdXJjZUJ1ZmZlci5yZW1vdmUoMCwgMi41KSkKK0VWRU5UKHVwZGF0ZWVuZCkKK0VYUEVDVEVE
IChzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09ICcxJykgT0sKK0VYUEVDVEVEIChzb3Vy
Y2VCdWZmZXIuYnVmZmVyZWQuc3RhcnQoMCkudG9GaXhlZCgzKSA9PSAnMycpIE9LCitFTkQgT0Yg
VEVTVAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEt
c291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC1pbi1lbmRlZC1zdGF0ZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11
bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC1pbi1lbmRlZC1zdGF0ZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhlYmEyYgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlw
bGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVkLXN0YXRlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDI4IEBACisKK1JVTih2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJj
ZSkpCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLnVwZGF0aW5nID09ICdmYWxzZScpIE9LCitSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihpbml0KTspCitFVkVOVCh1cGRhdGVlbmQpCitSVU4o
c291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKSkKK0VWRU5UKHVwZGF0ZWVuZCkKK0VY
UEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoID09ICcwJykgT0sKK1JVTihzb3Vy
Y2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRlZW5kKQorRVhQRUNU
RUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzEnKSBPSworRVhQRUNURUQgKHNv
dXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKS50b0ZpeGVkKDMpID09ICczJykgT0sKK0VYUEVD
VEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMykgPT0gJzQnKSBPSwor
UlVOKHNvdXJjZS5lbmRPZlN0cmVhbSgpKQorRVZFTlQoc291cmNlZW5kZWQpCitFWFBFQ1RFRCAo
c291cmNlLnJlYWR5U3RhdGUgPT0gJ2VuZGVkJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIu
YnVmZmVyZWQubGVuZ3RoID09ICcyJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVy
ZWQuc3RhcnQoMSkudG9GaXhlZCgzKSA9PSAnNycpIE9LCitFWFBFQ1RFRCAoc291cmNlQnVmZmVy
LmJ1ZmZlcmVkLmVuZCgxKS50b0ZpeGVkKDMpID09ICcxMCcpIE9LCitFVkVOVCh1cGRhdGVlbmQp
CitFWFBFQ1RFRCAoc291cmNlLnJlYWR5U3RhdGUgPT0gJ2VuZGVkJykgT0sKK1JVTihzb3VyY2VC
dWZmZXIudGltZXN0YW1wT2Zmc2V0ID0gMDspCitFWFBFQ1RFRCAoc291cmNlLnJlYWR5U3RhdGUg
PT0gJ29wZW4nKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0g
JzEnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKS50b0ZpeGVk
KDMpID09ICczJykgT0sKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApLnRv
Rml4ZWQoMykgPT0gJzQnKSBPSworRU5EIE9GIFRFU1QKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMt
YnVmZmVyZWQtaW4tZW5kZWQtc3RhdGUuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVk
LXN0YXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0MzRkMAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVkLXN0YXRlLmh0bWwK
QEAgLTAsMCArMSw5NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDx0
aXRsZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVk
aWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIgc291cmNlOworICAgIHZhciBzb3Vy
Y2VCdWZmZXI7CisgICAgdmFyIGluaXQ7CisgICAgdmFyIHNhbXBsZXM7CisKKyAgICBpZiAod2lu
ZG93LmludGVybmFscykKKyAgICAgICAgaW50ZXJuYWxzLmluaXRpYWxpemVNb2NrTWVkaWFTb3Vy
Y2UoKTsKKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgICAgIGZpbmRNZWRpYUVsZW1l
bnQoKTsKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291cmNlKCk7CisgICAgICAgIHNvdXJj
ZS5hZGRFdmVudExpc3RlbmVyKCdzb3VyY2VvcGVuJywgc3RhcnRMb2FkKTsKKyAgICAgICAgcnVu
KCd2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNvdXJjZSknKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBzdGFydExvYWQoKSB7CisgICAgICAgIHNvdXJjZUJ1ZmZlciA9IHNvdXJjZS5h
ZGRTb3VyY2VCdWZmZXIoJ3ZpZGVvL21vY2s7IGNvZGVjcz0ibW9jayInKTsKKyAgICAgICAgd2Fp
dEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMxLCBmYWxz
ZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gTWFrZSBhbiBpbml0IHNlZ21lbnQgd2l0aCAxIHZpZGVv
IHRyYWNrIGFuZCAxIGF1ZGlvIHRyYWNrCisgICAgICAgIGluaXQgPSBtYWtlQUluaXQoMCwgWwor
ICAgICAgICAgICAgbWFrZUFUcmFjaygxLCAnbW9jaycsIFRSQUNLX0tJTkQuVklERU8pLAorICAg
ICAgICAgICAgbWFrZUFUcmFjaygyLCAnbW9jaycsIFRSQUNLX0tJTkQuQVVESU8pLAorICAgICAg
ICAgICAgXSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLnVwZGF0aW5nJywg
ZmFsc2UpOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoaW5pdCk7Jyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMxKCkgeworICAgICAgICBzYW1wbGVz
ID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDMsIDMsIDEs
IDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoNCwgNCwgMSwg
MSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg1LCA1LCAxLCAx
LCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9u
KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwgZmFsc2UsIHRydWUpOwor
ICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczIoKSB7CisgICAgICAgIHRlc3RFeHBlY3RlZCgn
c291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDApOworCisgICAgICAgIHNhbXBsZXMgPSBj
b25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwgMiwg
U0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAyLCBT
QU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDIsIDIsIDEsIDIsIFNB
TVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMywgMywgMSwgMiwgU0FN
UExFX0ZMQUcuU1lOQyksCisKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDcsIDcsIDEsIDIsIFNB
TVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoOCwgOCwgMSwgMiwgU0FN
UExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg5LCA5LCAxLCAyLCBTQU1Q
TEVfRkxBRy5TWU5DKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJj
ZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMywgZmFsc2UsIHRydWUpOworICAgICAg
ICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcyknKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBsb2FkU2FtcGxlczMoKSB7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNl
QnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDEpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJj
ZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKS50b0ZpeGVkKDMpJywgMyk7CisgICAgICAgIHRlc3RF
eHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKS50b0ZpeGVkKDMpJywgNCk7CisK
KyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlLCAnc291cmNlZW5kZWQnLCBlbmRlZCwgZmFs
c2UsIHRydWUpOworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVl
bmQnLCBmaW5pc2hUZXN0LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlLmVuZE9m
U3RyZWFtKCknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBlbmRlZCgpIHsKKyAgICAgICAgdGVz
dEV4cGVjdGVkKCdzb3VyY2UucmVhZHlTdGF0ZScsICJlbmRlZCIpOworICAgICAgICB0ZXN0RXhw
ZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGgnLCAyKTsKKyAgICAgICAgdGVzdEV4
cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQuc3RhcnQoMSkudG9GaXhlZCgzKScsIDcpOwor
ICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMSkudG9GaXhl
ZCgzKScsIDEwKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAg
ICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZS5yZWFkeVN0YXRlJywgImVuZGVkIik7CisgICAgICAgIHJ1
bignc291cmNlQnVmZmVyLnRpbWVzdGFtcE9mZnNldCA9IDA7Jyk7IC8vIHRoaXMgb3BlbnMgTWVk
aWFTb3VyY2UKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2UucmVhZHlTdGF0ZScsICJvcGVu
Iik7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcs
IDEpOworICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgw
KS50b0ZpeGVkKDMpJywgMyk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1
ZmZlcmVkLmVuZCgwKS50b0ZpeGVkKDMpJywgNCk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9
CisKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAg
ICA8dmlkZW8+PC92aWRlbz4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJz
LWJ1ZmZlcmVkLmh0bWwgYi9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjkyODViNTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1i
dWZmZXJlZC5odG1sCkBAIC0wLDAgKzEsOTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8dGl0bGU+bW9jay1tZWRpYS1zb3VyY2U8L3RpdGxlPgorICAgIDxzY3JpcHQg
c3JjPSJtb2NrLW1lZGlhLXNvdXJjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4u
L3ZpZGVvLXRlc3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgdmFyIHNvdXJjZTsK
KyAgICB2YXIgc291cmNlQnVmZmVyOworICAgIHZhciBpbml0OworICAgIHZhciBzYW1wbGVzOwor
CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpCisgICAgICAgIGludGVybmFscy5pbml0aWFsaXpl
TW9ja01lZGlhU291cmNlKCk7CisKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkgeworICAgICAgICBm
aW5kTWVkaWFFbGVtZW50KCk7CisgICAgICAgIHNvdXJjZSA9IG5ldyBNZWRpYVNvdXJjZSgpOwor
ICAgICAgICBzb3VyY2UuYWRkRXZlbnRMaXN0ZW5lcignc291cmNlb3BlbicsIHN0YXJ0TG9hZCk7
CisgICAgICAgIHJ1bigndmlkZW8uc3JjID0gVVJMLmNyZWF0ZU9iamVjdFVSTChzb3VyY2UpJyk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gc3RhcnRMb2FkKCkgeworICAgICAgICBzb3VyY2VCdWZm
ZXIgPSBzb3VyY2UuYWRkU291cmNlQnVmZmVyKCd2aWRlby9tb2NrOyBjb2RlY3M9Im1vY2siJyk7
CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRT
YW1wbGVzMSwgZmFsc2UsIHRydWUpOworCisgICAgICAgIC8vIE1ha2UgYW4gaW5pdCBzZWdtZW50
IHdpdGggMSB2aWRlbyB0cmFjayBhbmQgMSBhdWRpbyB0cmFjaworICAgICAgICBpbml0ID0gbWFr
ZUFJbml0KDAsIFsKKyAgICAgICAgICAgIG1ha2VBVHJhY2soMSwgJ21vY2snLCBUUkFDS19LSU5E
LlZJREVPKSwKKyAgICAgICAgICAgIG1ha2VBVHJhY2soMiwgJ21vY2snLCBUUkFDS19LSU5ELkFV
RElPKSwKKyAgICAgICAgICAgIF0pOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRC
dWZmZXIoaW5pdCk7Jyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMxKCkgewor
ICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAgICAgIG1ha2VB
U2FtcGxlKDAsIDAsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFT
YW1wbGUoMSwgMSwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgICAgICBtYWtlQVNh
bXBsZSgyLCAyLCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgICAgIG1ha2VBU2Ft
cGxlKDMsIDMsIDEsIDEsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1w
bGUoNCwgNCwgMSwgMSwgU0FNUExFX0ZMQUcuTk9ORSksCisgICAgICAgICAgICBtYWtlQVNhbXBs
ZSg1LCA1LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgXSk7CisgICAgICAgIHdh
aXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIGxvYWRTYW1wbGVzMiwgZmFs
c2UsIHRydWUpOworICAgICAgICBydW4oJ3NvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxl
cyknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczIoKSB7CisgICAgICAgIHRl
c3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDApOworCisgICAgICAg
IHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUo
MCwgMCwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgx
LCAxLCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDIs
IDIsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZv
ckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMzLCBmYWxzZSwg
dHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVzMygpIHsKKyAgICAgICAgdGVzdEV4
cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMSk7CisgICAgICAgIHRlc3RF
eHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKS50b0ZpeGVkKDMpJywgMyk7CisK
KyAgICAgICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtl
QVNhbXBsZSgzLCAzLCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VB
U2FtcGxlKDQsIDQsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFT
YW1wbGUoNSwgNSwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNh
bXBsZSg2LCA2LCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2Ft
cGxlKDcsIDcsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1w
bGUoOCwgOCwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisKKyAgICAgICAgXSk7CisgICAgICAg
IHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsIHJlbW92ZVNhbXBsZXMx
LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihz
YW1wbGVzKScpOworICAgIH0KKworCisgICAgZnVuY3Rpb24gcmVtb3ZlU2FtcGxlczEoKSB7Cisg
ICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDEpOwor
ICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkudG9GaXhl
ZCgzKScsIDYpOworCisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0
ZWVuZCcsIGRvRW5kLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLnJl
bW92ZSgwLCAyLjUpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZG9FbmQoKSB7CisgICAgICAg
IHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDEpOworICAgICAg
ICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKS50b0ZpeGVkKDMp
JywgMyk7CisgICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICA8L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgICA8dmlkZW8+PC92aWRlbz4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Y2MxNGJjLi5iN2YyZDk1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTUtMDEtMTQgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNh
bXN1bmcuY29tPgorCisgICAgICAgIFtNU0VdIEltcGxlbWVudCBwZXIgVHJhY2tCdWZmZXIgYnVm
ZmVyZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk4MTMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgaW1wbGVtZW50YXRpb24gb2YgU291cmNlQnVmZmVyIGJ1ZmZlcmVkIGFsZ29yaXRobSBh
cyBwZXIgc3BlY2lmaWNhdGlvbiwKKyAgICAgICAgYW5kIGNhY2hpbmcgbWVjaGFuaXNtIGNhbGxl
ZCB3aGVuIHNhbXBsZXMgYXJlIGFkZGVkLCByZW1vdmVkLCBvciBNZWRpYVNvdXJjZQorICAgICAg
ICByZWFkeVN0YXRlIGlzIGNoYW5nZWQuCisKKyAgICAgICAgVGVzdHM6IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVk
LXN0YXRlLmh0bWwKKyAgICAgICAgICAgICAgIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3Vy
Y2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLmh0bWwKKworICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2U6OnNldFJlYWR5U3RhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6VHJhY2tCdWZm
ZXI6OlRyYWNrQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YnVmZmVy
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZWNhbGN1bGF0ZUJ1ZmZlcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVj
ZWl2ZVNhbXBsZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIu
aDoKKwogMjAxNS0wMS0xMyAgU2hpdmFrdW1hciBKTSAgPHNoaXZhLmptQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIEZpeCBEZWJ1ZyBCdWlsZCBFcnJvciBpbiBXZWJjb3JlIG1vZHVsZS4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKaW5k
ZXggY2ZiYjExMS4uMjgxOGI1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTQwNSw2ICs0MDUsOSBAQCB2b2lkIE1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUpCiAgICAgbV9y
ZWFkeVN0YXRlID0gc3RhdGU7CiAKICAgICBvblJlYWR5U3RhdGVDaGFuZ2Uob2xkU3RhdGUsIHN0
YXRlKTsKKworICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDogKm1fc291cmNlQnVmZmVycykK
KyAgICAgICAgc291cmNlQnVmZmVyLT5yZWNhbGN1bGF0ZUJ1ZmZlcmVkKCk7CiB9CiAKIHN0YXRp
YyBib29sIFNvdXJjZUJ1ZmZlcklzVXBkYXRpbmcoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4mIHNvdXJj
ZUJ1ZmZlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcAppbmRleCA4NjFjZDI0Li44ZDEyZGY4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC04OSw2ICs4
OSw3IEBAIHN0cnVjdCBTb3VyY2VCdWZmZXI6OlRyYWNrQnVmZmVyIHsKICAgICBNZWRpYVRpbWUg
aGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVk
UHJlc2VudGF0aW9uVGltZTsKICAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkRGVjb2RlRW5kVGlt
ZTsKKyAgICBSZWZQdHI8VGltZVJhbmdlcz4gbV9idWZmZXJlZDsKICAgICBib29sIG5lZWRSYW5k
b21BY2Nlc3NGbGFnOwogICAgIGJvb2wgZW5hYmxlZDsKICAgICBib29sIG5lZWRzUmVlbnF1ZXVl
aW5nOwpAQCAtMTAyLDYgKzEwMyw3IEBAIHN0cnVjdCBTb3VyY2VCdWZmZXI6OlRyYWNrQnVmZmVy
IHsKICAgICAgICAgLCBoaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkKICAgICAgICAgLCBsYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKE1lZGlh
VGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAgICAgLCBsYXN0RW5xdWV1ZWREZWNvZGVFbmRUaW1l
KE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAgICAgLCBtX2J1ZmZlcmVkKFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpKQogICAgICAgICAsIG5lZWRSYW5kb21BY2Nlc3NGbGFnKHRydWUpCiAgICAg
ICAgICwgZW5hYmxlZChmYWxzZSkKICAgICAgICAgLCBuZWVkc1JlZW5xdWV1ZWluZyhmYWxzZSkK
QEAgLTE2NSw3ICsxNjcsOCBAQCBQYXNzUmVmUHRyPFRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6
YnVmZmVyZWQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIH0KIAotICAgIC8vIDIuIFJldHVybiBhIG5ldyBzdGF0aWMgbm9ybWFsaXplZCBUaW1l
UmFuZ2VzIG9iamVjdCBmb3IgdGhlIG1lZGlhIHNlZ21lbnRzIGJ1ZmZlcmVkLgorICAgIC8vIE5v
dGU6IFN0ZXBzIDItNCBhcmUgaGFuZGxlZCBieSByZWNhbGN1bGF0ZUJ1ZmZlcmVkCisgICAgLy8g
NS4gUmV0dXJuIHRoZSBpbnRlcnNlY3Rpb24gcmFuZ2VzLgogICAgIHJldHVybiBtX2J1ZmZlcmVk
LT5jb3B5KCk7CiB9CiAKQEAgLTE3NCw2ICsxNzcsNDQgQEAgY29uc3QgUmVmUHRyPFRpbWVSYW5n
ZXM+JiBTb3VyY2VCdWZmZXI6OmJ1ZmZlcmVkKCkgY29uc3QKICAgICByZXR1cm4gbV9idWZmZXJl
ZDsKIH0KIAordm9pZCBTb3VyY2VCdWZmZXI6OnJlY2FsY3VsYXRlQnVmZmVyZWQoKQoreworICAg
IC8vIFNlY3Rpb24gMy4xIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBzdGVwcy4KKworICAgIC8vIDIuIExl
dCBoaWdoZXN0IGVuZCB0aW1lIGJlIHRoZSBsYXJnZXN0IHRyYWNrIGJ1ZmZlciByYW5nZXMgZW5k
IHRpbWUgYWNyb3NzIGFsbCB0aGUgdHJhY2sgYnVmZmVycyBtYW5hZ2VkIGJ5IHRoaXMgU291cmNl
QnVmZmVyIG9iamVjdC4KKyAgICBNZWRpYVRpbWUgaGlnaGVzdEVuZFRpbWUgPSBNZWRpYVRpbWU6
Onplcm9UaW1lKCk7CisgICAgZm9yIChhdXRvJiB0cmFja0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJN
YXAudmFsdWVzKCkpIHsKKyAgICAgICAgUGxhdGZvcm1UaW1lUmFuZ2VzJiB0cmFja1JhbmdlcyA9
IHRyYWNrQnVmZmVyLm1fYnVmZmVyZWQtPnJhbmdlcygpOworCisgICAgICAgIGlmICh0cmFja1Jh
bmdlcy5sZW5ndGgoKSkKKyAgICAgICAgICAgIGhpZ2hlc3RFbmRUaW1lID0gc3RkOjptYXgoaGln
aGVzdEVuZFRpbWUsIHRyYWNrUmFuZ2VzLm1heGltdW1CdWZmZXJlZFRpbWUoKSk7CisgICAgfQor
CisgICAgLy8gUmV0dXJuIGFuIGVtcHR5IHJhbmdlIGlmIGFsbCByYW5nZXMgYXJlIGVtcHR5Lgor
ICAgIGlmICghaGlnaGVzdEVuZFRpbWUpIHsKKyAgICAgICAgbV9idWZmZXJlZCA9IFRpbWVSYW5n
ZXM6OmNyZWF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gMy4gTGV0IGlu
dGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgYSBUaW1lUmFuZ2Ugb2JqZWN0IGNvbnRhaW5pbmcgYSBz
aW5nbGUgcmFuZ2UgZnJvbSAwIHRvIGhpZ2hlc3QgZW5kIHRpbWUuCisgICAgUGxhdGZvcm1UaW1l
UmFuZ2VzIGludGVyc2VjdGlvblJhbmdlcyhNZWRpYVRpbWU6Onplcm9UaW1lKCksIGhpZ2hlc3RF
bmRUaW1lKTsKKworICAgIC8vIDQuIEZvciBlYWNoIHRyYWNrIGJ1ZmZlciBtYW5hZ2VkIGJ5IHRo
aXMgU291cmNlQnVmZmVyLCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczoKKyAgICBib29sIGVuZGVk
ID0gbV9zb3VyY2UtPnJlYWR5U3RhdGUoKSA9PSBNZWRpYVNvdXJjZTo6ZW5kZWRLZXl3b3JkKCk7
CisgICAgZm9yIChhdXRvJiB0cmFja0J1ZmZlciA6IG1fdHJhY2tCdWZmZXJNYXAudmFsdWVzKCkp
IHsKKyAgICAgICAgLy8gNC4xIExldCB0cmFjayByYW5nZXMgZXF1YWwgdGhlIHRyYWNrIGJ1ZmZl
ciByYW5nZXMgZm9yIHRoZSBjdXJyZW50IHRyYWNrIGJ1ZmZlci4KKyAgICAgICAgUGxhdGZvcm1U
aW1lUmFuZ2VzIHRyYWNrUmFuZ2VzID0gdHJhY2tCdWZmZXIubV9idWZmZXJlZC0+cmFuZ2VzKCk7
CisgICAgICAgIC8vIDQuMiBJZiByZWFkeVN0YXRlIGlzICJlbmRlZCIsIHRoZW4gc2V0IHRoZSBl
bmQgdGltZSBvbiB0aGUgbGFzdCByYW5nZSBpbiB0cmFjayByYW5nZXMgdG8gaGlnaGVzdCBlbmQg
dGltZS4KKyAgICAgICAgaWYgKGVuZGVkKQorICAgICAgICAgICAgdHJhY2tSYW5nZXMuYWRkKHRy
YWNrUmFuZ2VzLm1heGltdW1CdWZmZXJlZFRpbWUoKSwgaGlnaGVzdEVuZFRpbWUpOworICAgICAg
ICAvLyA0LjMgTGV0IG5ldyBpbnRlcnNlY3Rpb24gcmFuZ2VzIGVxdWFsIHRoZSBpbnRlcnNlY3Rp
b24gYmV0d2VlbiB0aGUgaW50ZXJzZWN0aW9uIHJhbmdlcyBhbmQgdGhlIHRyYWNrIHJhbmdlcy4K
KyAgICAgICAgLy8gNC40IFJlcGxhY2UgdGhlIHJhbmdlcyBpbiBpbnRlcnNlY3Rpb24gcmFuZ2Vz
IHdpdGggdGhlIG5ldyBpbnRlcnNlY3Rpb24gcmFuZ2VzLgorICAgICAgICBpbnRlcnNlY3Rpb25S
YW5nZXMuaW50ZXJzZWN0V2l0aCh0cmFja1Jhbmdlcyk7CisgICAgfQorCisgICAgbV9idWZmZXJl
ZCA9IFRpbWVSYW5nZXM6OmNyZWF0ZShpbnRlcnNlY3Rpb25SYW5nZXMpOworfQorCiBkb3VibGUg
U291cmNlQnVmZmVyOjp0aW1lc3RhbXBPZmZzZXQoKSBjb25zdAogewogICAgIHJldHVybiBtX3Rp
bWVzdGFtcE9mZnNldC50b0RvdWJsZSgpOwpAQCAtNzY4LDcgKzgwOSw3IEBAIHZvaWQgU291cmNl
QnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyhjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBN
ZWRpYVRpbWUmIGVuCiAgICAgICAgIH0KIAogICAgICAgICBlcmFzZWRSYW5nZXMtPmludmVydCgp
OwotICAgICAgICBtX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMpOworICAg
ICAgICB0cmFja0J1ZmZlci5tX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMp
OwogCiAgICAgICAgIC8vIDMuNCBJZiB0aGlzIG9iamVjdCBpcyBpbiBhY3RpdmVTb3VyY2VCdWZm
ZXJzLCB0aGUgY3VycmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gc3RhcnQKICAgICAgICAgLy8gYW5kIGxlc3MgdGhhbiB0aGUgcmVtb3ZlIGVuZCB0aW1l
c3RhbXAsIGFuZCBIVE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUgaXMgZ3JlYXRlciB0aGFuIEhB
VkVfTUVUQURBVEEsIHRoZW4gc2V0CkBAIC03NzcsNiArODE4LDcgQEAgdm9pZCBTb3VyY2VCdWZm
ZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlh
VGltZSYgZW4KICAgICAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6SGF2ZU1ldGFkYXRhKTsKICAgICB9CiAKKyAgICByZWNhbGN1bGF0ZUJ1ZmZlcmVkKCk7CiAg
ICAgLy8gNC4gSWYgYnVmZmVyIGZ1bGwgZmxhZyBlcXVhbHMgdHJ1ZSBhbmQgdGhpcyBvYmplY3Qg
aXMgcmVhZHkgdG8gYWNjZXB0IG1vcmUgYnl0ZXMsIHRoZW4gc2V0IHRoZSBidWZmZXIgZnVsbCBm
bGFnIHRvIGZhbHNlLgogICAgIC8vIE5vLW9wCiAKQEAgLTE0ODAsMTQgKzE1MjIsMTQgQEAgdm9p
ZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBQYXMKICAgICAgICAgICAgICAgICAvLyBOT1RFOiBTZWFyY2hpbmcg
ZnJvbSB0aGUgZW5kIG9mIHRoZSB0cmFja0J1ZmZlciB3aWxsIGJlIHZhc3RseSBtb3JlIGVmZmlj
aWVudCBpZiB0aGUgc2VhcmNoIHJhbmdlIGlzCiAgICAgICAgICAgICAgICAgLy8gbmVhciB0aGUg
ZW5kIG9mIHRoZSBidWZmZXJlZCByYW5nZS4gVXNlIGEgbGluZWFyLWJhY2t3YXJkcyBzZWFyY2gg
aWYgdGhlIHNlYXJjaCByYW5nZSBpcyB3aXRoaW4gb25lCiAgICAgICAgICAgICAgICAgLy8gZnJh
bWUgZHVyYXRpb24gb2YgdGhlIGVuZDoKLSAgICAgICAgICAgICAgICBpZiAoIW1fYnVmZmVyZWQp
CisgICAgICAgICAgICAgICAgaWYgKCF0cmFja0J1ZmZlci5tX2J1ZmZlcmVkKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJ1ZmZlcmVkTGVu
Z3RoID0gbV9idWZmZXJlZC0+cmFuZ2VzKCkubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgdW5z
aWduZWQgYnVmZmVyZWRMZW5ndGggPSB0cmFja0J1ZmZlci5tX2J1ZmZlcmVkLT5yYW5nZXMoKS5s
ZW5ndGgoKTsKICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlcmVkTGVuZ3RoKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIE1lZGlhVGltZSBoaWdoZXN0QnVm
ZmVyZWRUaW1lID0gbV9idWZmZXJlZC0+cmFuZ2VzKCkubWF4aW11bUJ1ZmZlcmVkVGltZSgpOwor
ICAgICAgICAgICAgICAgIE1lZGlhVGltZSBoaWdoZXN0QnVmZmVyZWRUaW1lID0gdHJhY2tCdWZm
ZXIubV9idWZmZXJlZC0+cmFuZ2VzKCkubWF4aW11bUJ1ZmZlcmVkVGltZSgpOwogCiAgICAgICAg
ICAgICAgICAgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Oml0ZXJhdG9yX3JhbmdlIHJhbmdl
OwogICAgICAgICAgICAgICAgIGlmIChoaWdoZXN0QnVmZmVyZWRUaW1lIC0gdHJhY2tCdWZmZXIu
aGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcCA8IHRyYWNrQnVmZmVyLmxhc3RGcmFtZUR1cmF0
aW9uKQpAQCAtMTUyNiw3ICsxNTY4LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXMKICAgICAg
ICAgICAgIH0KIAogICAgICAgICAgICAgZXJhc2VkUmFuZ2VzLT5pbnZlcnQoKTsKLSAgICAgICAg
ICAgIG1fYnVmZmVyZWQtPmludGVyc2VjdFdpdGgoKmVyYXNlZFJhbmdlcyk7CisgICAgICAgICAg
ICB0cmFja0J1ZmZlci5tX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMpOwog
ICAgICAgICB9CiAKICAgICAgICAgLy8gMS4xNyBJZiBzcGxpY2VkIGF1ZGlvIGZyYW1lIGlzIHNl
dDoKQEAgLTE1NjUsMTEgKzE2MDcsMTIgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXMKICAgICAg
ICAgaWYgKG1fc2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKQogICAgICAgICAgICAgbV90aW1lc3Rh
bXBPZmZzZXQgPSBmcmFtZUVuZFRpbWVzdGFtcDsKIAotICAgICAgICBtX2J1ZmZlcmVkLT5hZGQo
cHJlc2VudGF0aW9uVGltZXN0YW1wLnRvRG91YmxlKCksIChwcmVzZW50YXRpb25UaW1lc3RhbXAg
KyBmcmFtZUR1cmF0aW9uICsgbWljcm9zZWNvbmQpLnRvRG91YmxlKCkpOworICAgICAgICB0cmFj
a0J1ZmZlci5tX2J1ZmZlcmVkLT5hZGQocHJlc2VudGF0aW9uVGltZXN0YW1wLnRvRG91YmxlKCks
IChwcmVzZW50YXRpb25UaW1lc3RhbXAgKyBmcmFtZUR1cmF0aW9uICsgbWljcm9zZWNvbmQpLnRv
RG91YmxlKCkpOwogICAgICAgICBtX2J1ZmZlcmVkU2luY2VMYXN0TW9uaXRvciArPSBmcmFtZUR1
cmF0aW9uLnRvRG91YmxlKCk7CiAKICAgICAgICAgYnJlYWs7CiAgICAgfSB3aGlsZSAoMSk7Cisg
ICAgcmVjYWxjdWxhdGVCdWZmZXJlZCgpOwogCiAgICAgLy8gU3RlcHMgMi00IHdpbGwgYmUgaGFu
ZGxlZCBieSBNZWRpYVNvdXJjZTo6bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaAppbmRleCA0ZDMz
NWRjLi5jZDNhMmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmgKQEAgLTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBz
aG91bGRHZW5lcmF0ZVRpbWVzdGFtcHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEdlbmVyYXRl
VGltZXN0YW1wczsgfQogICAgIHZvaWQgc2V0U2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKGJvb2wg
ZmxhZykgeyBtX3Nob3VsZEdlbmVyYXRlVGltZXN0YW1wcyA9IGZsYWc7IH0KIAorICAgIHZvaWQg
cmVjYWxjdWxhdGVCdWZmZXJlZCgpOwogcHJvdGVjdGVkOgogICAgIC8vIEV2ZW50VGFyZ2V0IGlu
dGVyZmFjZQogICAgIHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgcmVm
KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244617</attachid>
            <date>2015-01-14 10:55:02 -0800</date>
            <delta_ts>2015-01-14 12:36:25 -0800</delta_ts>
            <desc>add per trackBuffer buffered + layoutTests v2</desc>
            <filename>patch_multi_buff_v2.txt</filename>
            <type>text/plain</type>
            <size>25606</size>
            <attacher name="Bartlomiej Gajda">b.gajda</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMzg4YmJiLi4zYjVmZGMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTUtMDEt
MTQgIEJhcnRsb21pZWogR2FqZGEgIDxiLmdhamRhQHNhbXN1bmcuY29tPgorCisgICAgICAgIFtN
U0VdIEltcGxlbWVudCBwZXIgVHJhY2tCdWZmZXIgYnVmZmVyZWQuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzk4MTMuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGVzdHMgd2hpY2ggY2hlY2tz
IGhvdyBidWZmZXJlZCBiZWhhdmVzIGZvciB0d28gdHJhY2tCdWZmZXJzIGluIHNpbmdsZSBTb3Vy
Y2VCdWZmZXIKKyAgICAgICAgYWZ0ZXIgYXBwZW5kcywgYW5kIHdpdGggTWVkaWFTb3VyY2UgcmVh
ZHlTdGF0ZSBzd2l0Y2hpbmcgdG8gZW5kZWQgYW5kIGJhY2sgdG8gb3Blbi4KKworICAgICAgICAq
IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1
ZmZlcmVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQtaW4tZW5kZWQtc3Rh
dGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC1pbi1lbmRlZC1zdGF0ZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11
bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC5odG1sOiBBZGRlZC4KKwogMjAxNS0wMS0xMyAg
Q29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgcm9sbGluZyBvdXQgcjE3ODM5MCwgcjE3ODM5MiwgcjE3ODM5OCwgcjE3ODQwMCwKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVs
dGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZl
cmVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTJi
YzdlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMjEgQEAKKworUlVOKHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291
cmNlKSkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXQpOykKK0VWRU5UKHVwZGF0
ZWVuZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBk
YXRlZW5kKQorRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzAnKSBP
SworUlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVl
bmQpCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCA9PSAnMScpIE9LCitF
WFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgwKS50b0ZpeGVkKDMpID09ICczJykg
T0sKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRl
ZW5kKQorRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzEnKSBPSwor
RVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkudG9GaXhlZCgzKSA9PSAnNicp
IE9LCitSVU4oc291cmNlQnVmZmVyLnJlbW92ZSgwLCAyLjUpKQorRVZFTlQodXBkYXRlZW5kKQor
RVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzEnKSBPSworRVhQRUNU
RUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgwKS50b0ZpeGVkKDMpID09ICczJykgT0sK
K0VORCBPRiBURVNUCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVkLXN0
YXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1z
b3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLWluLWVuZGVkLXN0YXRlLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGViYTJiCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQtaW4tZW5kZWQtc3RhdGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjggQEAKKworUlVOKHZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RV
Ukwoc291cmNlKSkKK0VYUEVDVEVEIChzb3VyY2VCdWZmZXIudXBkYXRpbmcgPT0gJ2ZhbHNlJykg
T0sKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKGluaXQpOykKK0VWRU5UKHVwZGF0ZWVu
ZCkKK1JVTihzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNhbXBsZXMpKQorRVZFTlQodXBkYXRl
ZW5kKQorRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzAnKSBPSwor
UlVOKHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIoc2FtcGxlcykpCitFVkVOVCh1cGRhdGVlbmQp
CitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCA9PSAnMScpIE9LCitFWFBF
Q1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDApLnRvRml4ZWQoMykgPT0gJzMnKSBP
SworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5lbmQoMCkudG9GaXhlZCgzKSA9PSAn
NCcpIE9LCitSVU4oc291cmNlLmVuZE9mU3RyZWFtKCkpCitFVkVOVChzb3VyY2VlbmRlZCkKK0VY
UEVDVEVEIChzb3VyY2UucmVhZHlTdGF0ZSA9PSAnZW5kZWQnKSBPSworRVhQRUNURUQgKHNvdXJj
ZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGggPT0gJzInKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZl
ci5idWZmZXJlZC5zdGFydCgxKS50b0ZpeGVkKDMpID09ICc3JykgT0sKK0VYUEVDVEVEIChzb3Vy
Y2VCdWZmZXIuYnVmZmVyZWQuZW5kKDEpLnRvRml4ZWQoMykgPT0gJzEwJykgT0sKK0VWRU5UKHVw
ZGF0ZWVuZCkKK0VYUEVDVEVEIChzb3VyY2UucmVhZHlTdGF0ZSA9PSAnZW5kZWQnKSBPSworUlVO
KHNvdXJjZUJ1ZmZlci50aW1lc3RhbXBPZmZzZXQgPSAwOykKK0VYUEVDVEVEIChzb3VyY2UucmVh
ZHlTdGF0ZSA9PSAnb3BlbicpIE9LCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxl
bmd0aCA9PSAnMScpIE9LCitFWFBFQ1RFRCAoc291cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDAp
LnRvRml4ZWQoMykgPT0gJzMnKSBPSworRVhQRUNURUQgKHNvdXJjZUJ1ZmZlci5idWZmZXJlZC5l
bmQoMCkudG9GaXhlZCgzKSA9PSAnNCcpIE9LCitFTkQgT0YgVEVTVAorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNr
QnVmZmVycy1idWZmZXJlZC1pbi1lbmRlZC1zdGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQt
aW4tZW5kZWQtc3RhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
NTQzNGQwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNl
L21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFja0J1ZmZlcnMtYnVmZmVyZWQtaW4tZW5kZWQtc3Rh
dGUuaHRtbApAQCAtMCwwICsxLDk1IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+
CisgICAgPHRpdGxlPm1vY2stbWVkaWEtc291cmNlPC90aXRsZT4KKyAgICA8c2NyaXB0IHNyYz0i
bW9jay1tZWRpYS1zb3VyY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi92aWRl
by10ZXN0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAgIHZhciBzb3VyY2U7CisgICAg
dmFyIHNvdXJjZUJ1ZmZlcjsKKyAgICB2YXIgaW5pdDsKKyAgICB2YXIgc2FtcGxlczsKKworICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICBpbnRlcm5hbHMuaW5pdGlhbGl6ZU1vY2tN
ZWRpYVNvdXJjZSgpOworCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICAgICAgZmluZE1l
ZGlhRWxlbWVudCgpOworICAgICAgICBzb3VyY2UgPSBuZXcgTWVkaWFTb3VyY2UoKTsKKyAgICAg
ICAgc291cmNlLmFkZEV2ZW50TGlzdGVuZXIoJ3NvdXJjZW9wZW4nLCBzdGFydExvYWQpOworICAg
ICAgICBydW4oJ3ZpZGVvLnNyYyA9IFVSTC5jcmVhdGVPYmplY3RVUkwoc291cmNlKScpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHN0YXJ0TG9hZCgpIHsKKyAgICAgICAgc291cmNlQnVmZmVyID0g
c291cmNlLmFkZFNvdXJjZUJ1ZmZlcigndmlkZW8vbW9jazsgY29kZWNzPSJtb2NrIicpOworICAg
ICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCBsb2FkU2FtcGxl
czEsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICAvLyBNYWtlIGFuIGluaXQgc2VnbWVudCB3aXRo
IDEgdmlkZW8gdHJhY2sgYW5kIDEgYXVkaW8gdHJhY2sKKyAgICAgICAgaW5pdCA9IG1ha2VBSW5p
dCgwLCBbCisgICAgICAgICAgICBtYWtlQVRyYWNrKDEsICdtb2NrJywgVFJBQ0tfS0lORC5WSURF
TyksCisgICAgICAgICAgICBtYWtlQVRyYWNrKDIsICdtb2NrJywgVFJBQ0tfS0lORC5BVURJTyks
CisgICAgICAgICAgICBdKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIudXBk
YXRpbmcnLCBmYWxzZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihp
bml0KTsnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxlczEoKSB7CisgICAgICAg
IHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAgICAgbWFrZUFTYW1wbGUo
MywgMywgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg0
LCA0LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDUs
IDUsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZv
ckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMyLCBmYWxzZSwg
dHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScp
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVzMigpIHsKKyAgICAgICAgdGVzdEV4
cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMCk7CisKKyAgICAgICAgc2Ft
cGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgwLCAw
LCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDEsIDEs
IDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFTYW1wbGUoMiwgMiwg
MSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSgzLCAzLCAx
LCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKworICAgICAgICAgICAgbWFrZUFTYW1wbGUoNywgNywg
MSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBtYWtlQVNhbXBsZSg4LCA4LCAx
LCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VBU2FtcGxlKDksIDksIDEs
IDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICBdKTsKKyAgICAgICAgd2FpdEZvckV2ZW50
T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBsZXMzLCBmYWxzZSwgdHJ1ZSk7
CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihzYW1wbGVzKScpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVzMygpIHsKKyAgICAgICAgdGVzdEV4cGVjdGVk
KCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMSk7CisgICAgICAgIHRlc3RFeHBlY3Rl
ZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDApLnRvRml4ZWQoMyknLCAzKTsKKyAgICAg
ICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMykn
LCA0KTsKKworICAgICAgICB3YWl0Rm9yRXZlbnRPbihzb3VyY2UsICdzb3VyY2VlbmRlZCcsIGVu
ZGVkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHdhaXRGb3JFdmVudE9uKHNvdXJjZUJ1ZmZlciwg
J3VwZGF0ZWVuZCcsIGZpbmlzaFRlc3QsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3Vy
Y2UuZW5kT2ZTdHJlYW0oKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGVuZGVkKCkgeworICAg
ICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZS5yZWFkeVN0YXRlJywgImVuZGVkIik7CisgICAgICAg
IHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmxlbmd0aCcsIDIpOworICAgICAg
ICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5zdGFydCgxKS50b0ZpeGVkKDMp
JywgNyk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgx
KS50b0ZpeGVkKDMpJywgMTApOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7
CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlLnJlYWR5U3RhdGUnLCAiZW5kZWQiKTsKKyAg
ICAgICAgcnVuKCdzb3VyY2VCdWZmZXIudGltZXN0YW1wT2Zmc2V0ID0gMDsnKTsgLy8gdGhpcyBv
cGVucyBNZWRpYVNvdXJjZQorICAgICAgICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZS5yZWFkeVN0YXRl
JywgIm9wZW4iKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQu
bGVuZ3RoJywgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVk
LnN0YXJ0KDApLnRvRml4ZWQoMyknLCAzKTsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VC
dWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMyknLCA0KTsKKyAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KKworICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
KCkiPgorICAgIDx2aWRlbz48L3ZpZGVvPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1tdWx0aXBsZS10cmFj
a0J1ZmZlcnMtYnVmZmVyZWQuaHRtbCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tCdWZmZXJzLWJ1ZmZlcmVkLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI4NWI1MwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtbXVsdGlwbGUtdHJhY2tC
dWZmZXJzLWJ1ZmZlcmVkLmh0bWwKQEAgLTAsMCArMSw5NyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5tb2NrLW1lZGlhLXNvdXJjZTwvdGl0bGU+CisgICAg
PHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdD4KKyAgICB2YXIg
c291cmNlOworICAgIHZhciBzb3VyY2VCdWZmZXI7CisgICAgdmFyIGluaXQ7CisgICAgdmFyIHNh
bXBsZXM7CisKKyAgICBpZiAod2luZG93LmludGVybmFscykKKyAgICAgICAgaW50ZXJuYWxzLmlu
aXRpYWxpemVNb2NrTWVkaWFTb3VyY2UoKTsKKworICAgIGZ1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAgICAgICAgc291cmNlID0gbmV3IE1lZGlhU291
cmNlKCk7CisgICAgICAgIHNvdXJjZS5hZGRFdmVudExpc3RlbmVyKCdzb3VyY2VvcGVuJywgc3Rh
cnRMb2FkKTsKKyAgICAgICAgcnVuKCd2aWRlby5zcmMgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKHNv
dXJjZSknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdGFydExvYWQoKSB7CisgICAgICAgIHNv
dXJjZUJ1ZmZlciA9IHNvdXJjZS5hZGRTb3VyY2VCdWZmZXIoJ3ZpZGVvL21vY2s7IGNvZGVjcz0i
bW9jayInKTsKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5k
JywgbG9hZFNhbXBsZXMxLCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgLy8gTWFrZSBhbiBpbml0
IHNlZ21lbnQgd2l0aCAxIHZpZGVvIHRyYWNrIGFuZCAxIGF1ZGlvIHRyYWNrCisgICAgICAgIGlu
aXQgPSBtYWtlQUluaXQoMCwgWworICAgICAgICAgICAgbWFrZUFUcmFjaygxLCAnbW9jaycsIFRS
QUNLX0tJTkQuVklERU8pLAorICAgICAgICAgICAgbWFrZUFUcmFjaygyLCAnbW9jaycsIFRSQUNL
X0tJTkQuQVVESU8pLAorICAgICAgICAgICAgXSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVy
LmFwcGVuZEJ1ZmZlcihpbml0KTsnKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBsb2FkU2FtcGxl
czEoKSB7CisgICAgICAgIHNhbXBsZXMgPSBjb25jYXRlbmF0ZVNhbXBsZXMoWworICAgICAgICAg
ICAgbWFrZUFTYW1wbGUoMCwgMCwgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAg
ICBtYWtlQVNhbXBsZSgxLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgICAg
IG1ha2VBU2FtcGxlKDIsIDIsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUpLAorICAgICAgICAgICAg
bWFrZUFTYW1wbGUoMywgMywgMSwgMSwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBt
YWtlQVNhbXBsZSg0LCA0LCAxLCAxLCBTQU1QTEVfRkxBRy5OT05FKSwKKyAgICAgICAgICAgIG1h
a2VBU2FtcGxlKDUsIDUsIDEsIDEsIFNBTVBMRV9GTEFHLk5PTkUpLAorICAgICAgICBdKTsKKyAg
ICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgbG9hZFNhbXBs
ZXMyLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHJ1bignc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZl
cihzYW1wbGVzKScpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGxvYWRTYW1wbGVzMigpIHsKKyAg
ICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMCk7CisK
KyAgICAgICAgc2FtcGxlcyA9IGNvbmNhdGVuYXRlU2FtcGxlcyhbCisgICAgICAgICAgICBtYWtl
QVNhbXBsZSgwLCAwLCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAgIG1ha2VB
U2FtcGxlKDEsIDEsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAgbWFrZUFT
YW1wbGUoMiwgMiwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgIF0pOworICAgICAg
ICB3YWl0Rm9yRXZlbnRPbihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCBsb2FkU2FtcGxlczMs
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVyKHNh
bXBsZXMpJyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gbG9hZFNhbXBsZXMzKCkgeworICAgICAg
ICB0ZXN0RXhwZWN0ZWQoJ3NvdXJjZUJ1ZmZlci5idWZmZXJlZC5sZW5ndGgnLCAxKTsKKyAgICAg
ICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQuZW5kKDApLnRvRml4ZWQoMykn
LCAzKTsKKworICAgICAgICBzYW1wbGVzID0gY29uY2F0ZW5hdGVTYW1wbGVzKFsKKyAgICAgICAg
ICAgIG1ha2VBU2FtcGxlKDMsIDMsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAg
ICAgbWFrZUFTYW1wbGUoNCwgNCwgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAg
ICBtYWtlQVNhbXBsZSg1LCA1LCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKyAgICAgICAgICAg
IG1ha2VBU2FtcGxlKDYsIDYsIDEsIDIsIFNBTVBMRV9GTEFHLlNZTkMpLAorICAgICAgICAgICAg
bWFrZUFTYW1wbGUoNywgNywgMSwgMiwgU0FNUExFX0ZMQUcuU1lOQyksCisgICAgICAgICAgICBt
YWtlQVNhbXBsZSg4LCA4LCAxLCAyLCBTQU1QTEVfRkxBRy5TWU5DKSwKKworICAgICAgICBdKTsK
KyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVyLCAndXBkYXRlZW5kJywgcmVtb3Zl
U2FtcGxlczEsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VCdWZmZXIuYXBwZW5k
QnVmZmVyKHNhbXBsZXMpJyk7CisgICAgfQorCisKKyAgICBmdW5jdGlvbiByZW1vdmVTYW1wbGVz
MSgpIHsKKyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3Ro
JywgMSk7CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLmVuZCgw
KS50b0ZpeGVkKDMpJywgNik7CisKKyAgICAgICAgd2FpdEZvckV2ZW50T24oc291cmNlQnVmZmVy
LCAndXBkYXRlZW5kJywgZG9FbmQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcnVuKCdzb3VyY2VC
dWZmZXIucmVtb3ZlKDAsIDIuNSknKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkb0VuZCgpIHsK
KyAgICAgICAgdGVzdEV4cGVjdGVkKCdzb3VyY2VCdWZmZXIuYnVmZmVyZWQubGVuZ3RoJywgMSk7
CisgICAgICAgIHRlc3RFeHBlY3RlZCgnc291cmNlQnVmZmVyLmJ1ZmZlcmVkLnN0YXJ0KDApLnRv
Rml4ZWQoMyknLCAzKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAgIH0KKworICAgIDwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICAgIDx2aWRlbz48L3ZpZGVv
PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE0Mjg3ZGYuLmUzNmMxMzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxNS0wMS0xNCAgQmFydGxvbWllaiBHYWpkYSAgPGIu
Z2FqZGFAc2Ftc3VuZy5jb20+CisKKyAgICAgICAgW01TRV0gSW1wbGVtZW50IHBlciBUcmFja0J1
ZmZlciBidWZmZXJlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzOTgxMy4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiBTb3VyY2VCdWZmZXIgYnVmZmVyZWQoKSBh
bGdvcml0aG0gYXMgcGVyIHNwZWNpZmljYXRpb24sCisgICAgICAgIGFuZCBjYWNoaW5nIG1lY2hh
bmlzbSBjYWxsZWQgd2hlbiBzYW1wbGVzIGFyZSBhZGRlZCwgcmVtb3ZlZCwgb3IgTWVkaWFTb3Vy
Y2UKKyAgICAgICAgcmVhZHlTdGF0ZSBpcyBjaGFuZ2VkLgorCisgICAgICAgIFRlc3RzOiBtZWRp
YS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJl
ZC1pbi1lbmRlZC1zdGF0ZS5odG1sCisgICAgICAgICAgICAgICBtZWRpYS9tZWRpYS1zb3VyY2Uv
bWVkaWEtc291cmNlLW11bHRpcGxlLXRyYWNrQnVmZmVycy1idWZmZXJlZC5odG1sCisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhU291cmNlOjpzZXRSZWFkeVN0YXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6
OlRyYWNrQnVmZmVyOjpUcmFja0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZm
ZXI6OlNvdXJjZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OmJ1ZmZl
cmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6aW52YWxpZGF0ZUJ1ZmZlcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6cmVjYWxjdWxhdGVCdWZmZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBl
bmRDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVk
RnJhbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6ZXZpY3RDb2RlZEZyYW1l
cyk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlU2FtcGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6YnVmZmVy
ZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVm
ZmVyOjpoYXNDdXJyZW50VGltZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuaDoKKwogMjAxNS0wMS0xNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTc4MzY3KTogW0dTdHJlYW1lcl0g
U2V2ZXJhbCBtZWRpYSB0ZXN0cyB0aW1lIG91dCBhZnRlciByMTc4MzY3CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCmluZGV4IGNmYmIx
MTEuLmY0Y2JmNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvTWVkaWFTb3VyY2UuY3BwCkBAIC00MDUsNiArNDA1LDkgQEAgdm9pZCBNZWRpYVNvdXJjZTo6
c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRlKQogICAgIG1fcmVhZHlTdGF0
ZSA9IHN0YXRlOwogCiAgICAgb25SZWFkeVN0YXRlQ2hhbmdlKG9sZFN0YXRlLCBzdGF0ZSk7CisK
KyAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAg
IHNvdXJjZUJ1ZmZlci0+aW52YWxpZGF0ZUJ1ZmZlcmVkKCk7CiB9CiAKIHN0YXRpYyBib29sIFNv
dXJjZUJ1ZmZlcklzVXBkYXRpbmcoUmVmUHRyPFNvdXJjZUJ1ZmZlcj4mIHNvdXJjZUJ1ZmZlcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVm
ZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVy
LmNwcAppbmRleCA4NjFjZDI0Li4wM2U1NGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCkBAIC04OSw2ICs4OSw3IEBAIHN0
cnVjdCBTb3VyY2VCdWZmZXI6OlRyYWNrQnVmZmVyIHsKICAgICBNZWRpYVRpbWUgaGlnaGVzdFBy
ZXNlbnRhdGlvblRpbWVzdGFtcDsKICAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkUHJlc2VudGF0
aW9uVGltZTsKICAgICBNZWRpYVRpbWUgbGFzdEVucXVldWVkRGVjb2RlRW5kVGltZTsKKyAgICBS
ZWZQdHI8VGltZVJhbmdlcz4gbV9idWZmZXJlZDsKICAgICBib29sIG5lZWRSYW5kb21BY2Nlc3NG
bGFnOwogICAgIGJvb2wgZW5hYmxlZDsKICAgICBib29sIG5lZWRzUmVlbnF1ZXVlaW5nOwpAQCAt
MTAyLDYgKzEwMyw3IEBAIHN0cnVjdCBTb3VyY2VCdWZmZXI6OlRyYWNrQnVmZmVyIHsKICAgICAg
ICAgLCBoaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wKE1lZGlhVGltZTo6aW52YWxpZFRpbWUo
KSkKICAgICAgICAgLCBsYXN0RW5xdWV1ZWRQcmVzZW50YXRpb25UaW1lKE1lZGlhVGltZTo6aW52
YWxpZFRpbWUoKSkKICAgICAgICAgLCBsYXN0RW5xdWV1ZWREZWNvZGVFbmRUaW1lKE1lZGlhVGlt
ZTo6aW52YWxpZFRpbWUoKSkKKyAgICAgICAgLCBtX2J1ZmZlcmVkKFRpbWVSYW5nZXM6OmNyZWF0
ZSgpKQogICAgICAgICAsIG5lZWRSYW5kb21BY2Nlc3NGbGFnKHRydWUpCiAgICAgICAgICwgZW5h
YmxlZChmYWxzZSkKICAgICAgICAgLCBuZWVkc1JlZW5xdWV1ZWluZyhmYWxzZSkKQEAgLTE0MSw2
ICsxNDMsNyBAQCBTb3VyY2VCdWZmZXI6OlNvdXJjZUJ1ZmZlcihSZWY8U291cmNlQnVmZmVyUHJp
dmF0ZT4mJiBzb3VyY2VCdWZmZXJQcml2YXRlLCBNZWRpYQogICAgICwgbV9hY3RpdmUoZmFsc2Up
CiAgICAgLCBtX2J1ZmZlckZ1bGwoZmFsc2UpCiAgICAgLCBtX3Nob3VsZEdlbmVyYXRlVGltZXN0
YW1wcyhmYWxzZSkKKyAgICAsIG1fc2hvdWxkUmVjYWxjdWxhdGVCdWZmZXJlZChmYWxzZSkKIHsK
ICAgICBBU1NFUlQobV9zb3VyY2UpOwogCkBAIC0xNjUsMTUgKzE2OCw2OCBAQCBQYXNzUmVmUHRy
PFRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6YnVmZmVyZWQoRXhjZXB0aW9uQ29kZSYgZWMpIGNv
bnN0CiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIC8vIDIuIFJldHVybiBh
IG5ldyBzdGF0aWMgbm9ybWFsaXplZCBUaW1lUmFuZ2VzIG9iamVjdCBmb3IgdGhlIG1lZGlhIHNl
Z21lbnRzIGJ1ZmZlcmVkLgorICAgIC8vIE5vdGU6IFN0ZXBzIDItNCBhcmUgaGFuZGxlZCBieSBy
ZWNhbGN1bGF0ZUJ1ZmZlcmVkCisgICAgaWYgKG1fc2hvdWxkUmVjYWxjdWxhdGVCdWZmZXJlZCkK
KyAgICAgICAgcmVjYWxjdWxhdGVCdWZmZXJlZCgpOworCisgICAgLy8gNS4gUmV0dXJuIHRoZSBp
bnRlcnNlY3Rpb24gcmFuZ2VzLgogICAgIHJldHVybiBtX2J1ZmZlcmVkLT5jb3B5KCk7CiB9CiAK
IGNvbnN0IFJlZlB0cjxUaW1lUmFuZ2VzPiYgU291cmNlQnVmZmVyOjpidWZmZXJlZCgpIGNvbnN0
CiB7CisgICAgaWYgKG1fc2hvdWxkUmVjYWxjdWxhdGVCdWZmZXJlZCkKKyAgICAgICAgcmVjYWxj
dWxhdGVCdWZmZXJlZCgpOworCiAgICAgcmV0dXJuIG1fYnVmZmVyZWQ7CiB9CiAKK3ZvaWQgU291
cmNlQnVmZmVyOjppbnZhbGlkYXRlQnVmZmVyZWQoKQoreworICAgIG1fc2hvdWxkUmVjYWxjdWxh
dGVCdWZmZXJlZCA9IHRydWU7CisgICAgLy8gRklYTUU6IGZvciBjYWNoaW5nIGJ1ZmZlcmVkIGlu
IE1lZGlhU291cmNlIHNob3VsZCBhZGQgaGVyZSA6CisgICAgLy8gbV9zb3VyY2UtPmludmFsaWRh
dGVCdWZmZXJlZCgpOworfQorCit2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVjYWxjdWxhdGVCdWZmZXJl
ZCgpIGNvbnN0Cit7CisgICAgLy8gU2VjdGlvbiAzLjEgYnVmZmVyZWQgYXR0cmlidXRlIHN0ZXBz
LgorICAgIG1fc2hvdWxkUmVjYWxjdWxhdGVCdWZmZXJlZCA9IGZhbHNlOworCisgICAgLy8gMi4g
TGV0IGhpZ2hlc3QgZW5kIHRpbWUgYmUgdGhlIGxhcmdlc3QgdHJhY2sgYnVmZmVyIHJhbmdlcyBl
bmQgdGltZSBhY3Jvc3MgYWxsIHRoZSB0cmFjayBidWZmZXJzIG1hbmFnZWQgYnkgdGhpcyBTb3Vy
Y2VCdWZmZXIgb2JqZWN0LgorICAgIE1lZGlhVGltZSBoaWdoZXN0RW5kVGltZSA9IE1lZGlhVGlt
ZTo6emVyb1RpbWUoKTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrQnVmZmVyIDogbV90cmFja0J1ZmZl
ck1hcC52YWx1ZXMoKSkgeworICAgICAgICBQbGF0Zm9ybVRpbWVSYW5nZXMmIHRyYWNrUmFuZ2Vz
ID0gdHJhY2tCdWZmZXIubV9idWZmZXJlZC0+cmFuZ2VzKCk7CisKKyAgICAgICAgaWYgKHRyYWNr
UmFuZ2VzLmxlbmd0aCgpKQorICAgICAgICAgICAgaGlnaGVzdEVuZFRpbWUgPSBzdGQ6Om1heCho
aWdoZXN0RW5kVGltZSwgdHJhY2tSYW5nZXMubWF4aW11bUJ1ZmZlcmVkVGltZSgpKTsKKyAgICB9
CisKKyAgICAvLyBSZXR1cm4gYW4gZW1wdHkgcmFuZ2UgaWYgYWxsIHJhbmdlcyBhcmUgZW1wdHku
CisgICAgaWYgKCFoaWdoZXN0RW5kVGltZSkgeworICAgICAgICBtX2J1ZmZlcmVkID0gVGltZVJh
bmdlczo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyAzLiBMZXQg
aW50ZXJzZWN0aW9uIHJhbmdlcyBlcXVhbCBhIFRpbWVSYW5nZSBvYmplY3QgY29udGFpbmluZyBh
IHNpbmdsZSByYW5nZSBmcm9tIDAgdG8gaGlnaGVzdCBlbmQgdGltZS4KKyAgICBQbGF0Zm9ybVRp
bWVSYW5nZXMgaW50ZXJzZWN0aW9uUmFuZ2VzKE1lZGlhVGltZTo6emVyb1RpbWUoKSwgaGlnaGVz
dEVuZFRpbWUpOworCisgICAgLy8gNC4gRm9yIGVhY2ggdHJhY2sgYnVmZmVyIG1hbmFnZWQgYnkg
dGhpcyBTb3VyY2VCdWZmZXIsIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIGJvb2wgZW5k
ZWQgPSBtX3NvdXJjZS0+cmVhZHlTdGF0ZSgpID09IE1lZGlhU291cmNlOjplbmRlZEtleXdvcmQo
KTsKKyAgICBmb3IgKGF1dG8mIHRyYWNrQnVmZmVyIDogbV90cmFja0J1ZmZlck1hcC52YWx1ZXMo
KSkgeworICAgICAgICAvLyA0LjEgTGV0IHRyYWNrIHJhbmdlcyBlcXVhbCB0aGUgdHJhY2sgYnVm
ZmVyIHJhbmdlcyBmb3IgdGhlIGN1cnJlbnQgdHJhY2sgYnVmZmVyLgorICAgICAgICBQbGF0Zm9y
bVRpbWVSYW5nZXMgdHJhY2tSYW5nZXMgPSB0cmFja0J1ZmZlci5tX2J1ZmZlcmVkLT5yYW5nZXMo
KTsKKyAgICAgICAgLy8gNC4yIElmIHJlYWR5U3RhdGUgaXMgImVuZGVkIiwgdGhlbiBzZXQgdGhl
IGVuZCB0aW1lIG9uIHRoZSBsYXN0IHJhbmdlIGluIHRyYWNrIHJhbmdlcyB0byBoaWdoZXN0IGVu
ZCB0aW1lLgorICAgICAgICBpZiAoZW5kZWQpCisgICAgICAgICAgICB0cmFja1Jhbmdlcy5hZGQo
dHJhY2tSYW5nZXMubWF4aW11bUJ1ZmZlcmVkVGltZSgpLCBoaWdoZXN0RW5kVGltZSk7CisgICAg
ICAgIC8vIDQuMyBMZXQgbmV3IGludGVyc2VjdGlvbiByYW5nZXMgZXF1YWwgdGhlIGludGVyc2Vj
dGlvbiBiZXR3ZWVuIHRoZSBpbnRlcnNlY3Rpb24gcmFuZ2VzIGFuZCB0aGUgdHJhY2sgcmFuZ2Vz
LgorICAgICAgICAvLyA0LjQgUmVwbGFjZSB0aGUgcmFuZ2VzIGluIGludGVyc2VjdGlvbiByYW5n
ZXMgd2l0aCB0aGUgbmV3IGludGVyc2VjdGlvbiByYW5nZXMuCisgICAgICAgIGludGVyc2VjdGlv
blJhbmdlcy5pbnRlcnNlY3RXaXRoKHRyYWNrUmFuZ2VzKTsKKyAgICB9CisKKyAgICBtX2J1ZmZl
cmVkID0gVGltZVJhbmdlczo6Y3JlYXRlKGludGVyc2VjdGlvblJhbmdlcyk7Cit9CisKIGRvdWJs
ZSBTb3VyY2VCdWZmZXI6OnRpbWVzdGFtcE9mZnNldCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
dGltZXN0YW1wT2Zmc2V0LnRvRG91YmxlKCk7CkBAIC02MTIsNiArNjY4LDggQEAgdm9pZCBTb3Vy
Y2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZShTb3VyY2VCdWZmZXJQ
cml2YXRlKiwgQXBwZW4KIAogICAgIC8vIDcuIE5lZWQgbW9yZSBkYXRhOiBSZXR1cm4gY29udHJv
bCB0byB0aGUgY2FsbGluZyBhbGdvcml0aG0uCiAKKyAgICBpbnZhbGlkYXRlQnVmZmVyZWQoKTsK
KwogICAgIC8vIE5PVEU6IHJldHVybiB0byBTZWN0aW9uIDMuNS41CiAgICAgLy8gMi5JZiB0aGUg
c2VnbWVudCBwYXJzZXIgbG9vcCBhbGdvcml0aG0gaW4gdGhlIHByZXZpb3VzIHN0ZXAgd2FzIGFi
b3J0ZWQsIHRoZW4gYWJvcnQgdGhpcyBhbGdvcml0aG0uCiAgICAgaWYgKHJlc3VsdCAhPSBBcHBl
bmRTdWNjZWVkZWQpCkBAIC02NDUsNyArNzAzLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJj
ZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgQXBwZW4K
ICAgICBpZiAoZXh0cmFNZW1vcnlDb3N0KCkgPiB0aGlzLT5tYXhpbXVtQnVmZmVyU2l6ZSgpKQog
ICAgICAgICBtX2J1ZmZlckZ1bGwgPSB0cnVlOwogCi0gICAgTE9HKE1lZGlhLCAiU291cmNlQnVm
ZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoJXApIC0gYnVmZmVyZWQgPSAl
cyIsIHRoaXMsIHRvU3RyaW5nKG1fYnVmZmVyZWQtPnJhbmdlcygpKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBMT0coTWVkaWEsICJTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRD
b21wbGV0ZSglcCkgLSBidWZmZXJlZCA9ICVzIiwgdGhpcywgdG9TdHJpbmcoYnVmZmVyZWQoKS0+
cmFuZ2VzKCkpLnV0ZjgoKS5kYXRhKCkpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNl
QnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVSZW5kZXJpbmdFcnJvcihTb3VyY2VCdWZmZXJQcml2YXRl
KiwgaW50IGVycm9yKQpAQCAtNzY4LDcgKzgyNiw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1v
dmVDb2RlZEZyYW1lcyhjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVu
CiAgICAgICAgIH0KIAogICAgICAgICBlcmFzZWRSYW5nZXMtPmludmVydCgpOwotICAgICAgICBt
X2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMpOworICAgICAgICB0cmFja0J1
ZmZlci5tX2J1ZmZlcmVkLT5pbnRlcnNlY3RXaXRoKCplcmFzZWRSYW5nZXMpOwogCiAgICAgICAg
IC8vIDMuNCBJZiB0aGlzIG9iamVjdCBpcyBpbiBhY3RpdmVTb3VyY2VCdWZmZXJzLCB0aGUgY3Vy
cmVudCBwbGF5YmFjayBwb3NpdGlvbiBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gc3RhcnQK
ICAgICAgICAgLy8gYW5kIGxlc3MgdGhhbiB0aGUgcmVtb3ZlIGVuZCB0aW1lc3RhbXAsIGFuZCBI
VE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUgaXMgZ3JlYXRlciB0aGFuIEhBVkVfTUVUQURBVEEs
IHRoZW4gc2V0CkBAIC03NzcsMTAgKzgzNSwxMSBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3Zl
Q29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbgog
ICAgICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0
YWRhdGEpOwogICAgIH0KIAorICAgIGludmFsaWRhdGVCdWZmZXJlZCgpOwogICAgIC8vIDQuIElm
IGJ1ZmZlciBmdWxsIGZsYWcgZXF1YWxzIHRydWUgYW5kIHRoaXMgb2JqZWN0IGlzIHJlYWR5IHRv
IGFjY2VwdCBtb3JlIGJ5dGVzLCB0aGVuIHNldCB0aGUgYnVmZmVyIGZ1bGwgZmxhZyB0byBmYWxz
ZS4KICAgICAvLyBOby1vcAogCi0gICAgTE9HKE1lZGlhLCAiU291cmNlQnVmZmVyOjpyZW1vdmVD
b2RlZEZyYW1lcyglcCkgLSBidWZmZXJlZCA9ICVzIiwgdGhpcywgdG9TdHJpbmcobV9idWZmZXJl
ZC0+cmFuZ2VzKCkpLnV0ZjgoKS5kYXRhKCkpOworICAgIExPRyhNZWRpYSwgIlNvdXJjZUJ1ZmZl
cjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gYnVmZmVyZWQgPSAlcyIsIHRoaXMsIHRvU3RyaW5n
KGJ1ZmZlcmVkKCktPnJhbmdlcygpKS51dGY4KCkuZGF0YSgpKTsKIH0KIAogdm9pZCBTb3VyY2VC
dWZmZXI6OnJlbW92ZVRpbWVyRmlyZWQoKQpAQCAtODYwLDkgKzkxOSw5IEBAIHZvaWQgU291cmNl
QnVmZmVyOjpldmljdENvZGVkRnJhbWVzKHNpemVfdCBuZXdEYXRhU2l6ZSkKICAgICAvLyBJZiB0
aGVyZSBzdGlsbCBpc24ndCBlbm91Z2ggZnJlZSBzcGFjZSBhbmQgdGhlcmUgYnVmZmVycyBpbiB0
aW1lIHJhbmdlcyBhZnRlciB0aGUgY3VycmVudCByYW5nZSAoaWUuIHRoZXJlIGlzIGEgZ2FwIGFm
dGVyCiAgICAgLy8gdGhlIGN1cnJlbnQgYnVmZmVyZWQgcmFuZ2UpLCBkZWxldGUgMzAgc2Vjb25k
cyBhdCBhIHRpbWUgZnJvbSBkdXJhdGlvbiBiYWNrIHRvIHRoZSBjdXJyZW50IHRpbWUgcmFuZ2Ug
b3IgMzAgc2Vjb25kcyBhZnRlcgogICAgIC8vIGN1cnJlblRpbWUgd2hpY2hldmVyIHdlIGhpdCBm
aXJzdC4KLSAgICBhdXRvIGJ1ZmZlcmVkID0gbV9idWZmZXJlZC0+cmFuZ2VzKCk7Ci0gICAgc2l6
ZV90IGN1cnJlbnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKGN1cnJlbnRUaW1lKTsKLSAgICBp
ZiAoY3VycmVudFRpbWVSYW5nZSA9PSBub3RGb3VuZCB8fCBjdXJyZW50VGltZVJhbmdlID09IGJ1
ZmZlcmVkLmxlbmd0aCgpIC0gMSkgeworICAgIGF1dG8gYnVmZmVyZWRSZWdpb24gPSBidWZmZXJl
ZCgpLT5yYW5nZXMoKTsKKyAgICBzaXplX3QgY3VycmVudFRpbWVSYW5nZSA9IGJ1ZmZlcmVkUmVn
aW9uLmZpbmQoY3VycmVudFRpbWUpOworICAgIGlmIChjdXJyZW50VGltZVJhbmdlID09IG5vdEZv
dW5kIHx8IGN1cnJlbnRUaW1lUmFuZ2UgPT0gYnVmZmVyZWRSZWdpb24ubGVuZ3RoKCkgLSAxKSB7
CiAgICAgICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6ZXZpY3RDb2RlZEZyYW1l
cyglcCkgLSBldmljdGVkICV6dSBieXRlcyBidXQgRkFJTEVEIHRvIGZyZWUgZW5vdWdoIiwgdGhp
cywgaW5pdGlhbEJ1ZmZlcmVkU2l6ZSAtIGV4dHJhTWVtb3J5Q29zdCgpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTg3NCwxMyArOTMzLDEzIEBAIHZvaWQgU291cmNlQnVmZmVyOjpldmlj
dENvZGVkRnJhbWVzKHNpemVfdCBuZXdEYXRhU2l6ZSkKICAgICB3aGlsZSAocmFuZ2VTdGFydCA+
IG1pbmltdW1SYW5nZVN0YXJ0KSB7CiAKICAgICAgICAgLy8gRG8gbm90IGV2aWN0IGRhdGEgZnJv
bSB0aGUgdGltZSByYW5nZSB0aGF0IGNvbnRhaW5zIGN1cnJlbnRUaW1lLgotICAgICAgICBzaXpl
X3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJlZC5maW5kKHJhbmdlU3RhcnQpOworICAgICAgICBz
aXplX3Qgc3RhcnRUaW1lUmFuZ2UgPSBidWZmZXJlZFJlZ2lvbi5maW5kKHJhbmdlU3RhcnQpOwog
ICAgICAgICBpZiAoc3RhcnRUaW1lUmFuZ2UgPT0gY3VycmVudFRpbWVSYW5nZSkgewotICAgICAg
ICAgICAgc2l6ZV90IGVuZFRpbWVSYW5nZSA9IGJ1ZmZlcmVkLmZpbmQocmFuZ2VFbmQpOworICAg
ICAgICAgICAgc2l6ZV90IGVuZFRpbWVSYW5nZSA9IGJ1ZmZlcmVkUmVnaW9uLmZpbmQocmFuZ2VF
bmQpOwogICAgICAgICAgICAgaWYgKGVuZFRpbWVSYW5nZSA9PSBjdXJyZW50VGltZVJhbmdlKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICByYW5nZUVuZCA9IGJ1ZmZlcmVk
LnN0YXJ0KGVuZFRpbWVSYW5nZSk7CisgICAgICAgICAgICByYW5nZUVuZCA9IGJ1ZmZlcmVkUmVn
aW9uLnN0YXJ0KGVuZFRpbWVSYW5nZSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyA0LiBGb3Ig
ZWFjaCByYW5nZSBpbiByZW1vdmFsIHJhbmdlcywgcnVuIHRoZSBjb2RlZCBmcmFtZSByZW1vdmFs
IGFsZ29yaXRobSB3aXRoIHN0YXJ0IGFuZApAQCAtMTQ4MCwxNCArMTUzOSwxNCBAQCB2b2lkIFNv
dXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZURpZFJlY2VpdmVTYW1wbGUoU291cmNlQnVm
ZmVyUHJpdmF0ZSosIFBhcwogICAgICAgICAgICAgICAgIC8vIE5PVEU6IFNlYXJjaGluZyBmcm9t
IHRoZSBlbmQgb2YgdGhlIHRyYWNrQnVmZmVyIHdpbGwgYmUgdmFzdGx5IG1vcmUgZWZmaWNpZW50
IGlmIHRoZSBzZWFyY2ggcmFuZ2UgaXMKICAgICAgICAgICAgICAgICAvLyBuZWFyIHRoZSBlbmQg
b2YgdGhlIGJ1ZmZlcmVkIHJhbmdlLiBVc2UgYSBsaW5lYXItYmFja3dhcmRzIHNlYXJjaCBpZiB0
aGUgc2VhcmNoIHJhbmdlIGlzIHdpdGhpbiBvbmUKICAgICAgICAgICAgICAgICAvLyBmcmFtZSBk
dXJhdGlvbiBvZiB0aGUgZW5kOgotICAgICAgICAgICAgICAgIGlmICghbV9idWZmZXJlZCkKKyAg
ICAgICAgICAgICAgICBpZiAoIXRyYWNrQnVmZmVyLm1fYnVmZmVyZWQpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYnVmZmVyZWRMZW5ndGgg
PSBtX2J1ZmZlcmVkLT5yYW5nZXMoKS5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBidWZmZXJlZExlbmd0aCA9IHRyYWNrQnVmZmVyLm1fYnVmZmVyZWQtPnJhbmdlcygpLmxlbmd0
aCgpOwogICAgICAgICAgICAgICAgIGlmICghYnVmZmVyZWRMZW5ndGgpCiAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgTWVkaWFUaW1lIGhpZ2hlc3RCdWZmZXJl
ZFRpbWUgPSBtX2J1ZmZlcmVkLT5yYW5nZXMoKS5tYXhpbXVtQnVmZmVyZWRUaW1lKCk7CisgICAg
ICAgICAgICAgICAgTWVkaWFUaW1lIGhpZ2hlc3RCdWZmZXJlZFRpbWUgPSB0cmFja0J1ZmZlci5t
X2J1ZmZlcmVkLT5yYW5nZXMoKS5tYXhpbXVtQnVmZmVyZWRUaW1lKCk7CiAKICAgICAgICAgICAg
ICAgICBQcmVzZW50YXRpb25PcmRlclNhbXBsZU1hcDo6aXRlcmF0b3JfcmFuZ2UgcmFuZ2U7CiAg
ICAgICAgICAgICAgICAgaWYgKGhpZ2hlc3RCdWZmZXJlZFRpbWUgLSB0cmFja0J1ZmZlci5oaWdo
ZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wIDwgdHJhY2tCdWZmZXIubGFzdEZyYW1lRHVyYXRpb24p
CkBAIC0xNTI2LDcgKzE1ODUsNyBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJp
dmF0ZURpZFJlY2VpdmVTYW1wbGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIFBhcwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBlcmFzZWRSYW5nZXMtPmludmVydCgpOwotICAgICAgICAgICAg
bV9idWZmZXJlZC0+aW50ZXJzZWN0V2l0aCgqZXJhc2VkUmFuZ2VzKTsKKyAgICAgICAgICAgIHRy
YWNrQnVmZmVyLm1fYnVmZmVyZWQtPmludGVyc2VjdFdpdGgoKmVyYXNlZFJhbmdlcyk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyAxLjE3IElmIHNwbGljZWQgYXVkaW8gZnJhbWUgaXMgc2V0OgpA
QCAtMTU2NSw3ICsxNjI0LDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZh
dGVEaWRSZWNlaXZlU2FtcGxlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBQYXMKICAgICAgICAgaWYg
KG1fc2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKQogICAgICAgICAgICAgbV90aW1lc3RhbXBPZmZz
ZXQgPSBmcmFtZUVuZFRpbWVzdGFtcDsKIAotICAgICAgICBtX2J1ZmZlcmVkLT5hZGQocHJlc2Vu
dGF0aW9uVGltZXN0YW1wLnRvRG91YmxlKCksIChwcmVzZW50YXRpb25UaW1lc3RhbXAgKyBmcmFt
ZUR1cmF0aW9uICsgbWljcm9zZWNvbmQpLnRvRG91YmxlKCkpOworICAgICAgICB0cmFja0J1ZmZl
ci5tX2J1ZmZlcmVkLT5hZGQocHJlc2VudGF0aW9uVGltZXN0YW1wLnRvRG91YmxlKCksIChwcmVz
ZW50YXRpb25UaW1lc3RhbXAgKyBmcmFtZUR1cmF0aW9uICsgbWljcm9zZWNvbmQpLnRvRG91Ymxl
KCkpOwogICAgICAgICBtX2J1ZmZlcmVkU2luY2VMYXN0TW9uaXRvciArPSBmcmFtZUR1cmF0aW9u
LnRvRG91YmxlKCk7CiAKICAgICAgICAgYnJlYWs7CkBAIC0xODI2LDcgKzE4ODUsNyBAQCB2b2lk
IFNvdXJjZUJ1ZmZlcjo6bW9uaXRvckJ1ZmZlcmluZ1JhdGUoKQogc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtVGltZVJhbmdlcz4gU291cmNlQnVmZmVyOjpidWZmZXJlZEFjY291bnRpbmdGb3JFbmRP
ZlN0cmVhbSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFJldmlzaXQgdGhpcyBtZXRob2Qgb25j
ZSB0aGUgc3BlYyBidWcgPGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5j
Z2k/aWQ9MjY0MzY+IGlzIHJlc29sdmVkLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRp
bWVSYW5nZXM+IHZpcnR1YWxSYW5nZXMgPSBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZShtX2J1
ZmZlcmVkLT5yYW5nZXMoKSk7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdl
cz4gdmlydHVhbFJhbmdlcyA9IFBsYXRmb3JtVGltZVJhbmdlczo6Y3JlYXRlKGJ1ZmZlcmVkKCkt
PnJhbmdlcygpKTsKICAgICBpZiAobV9zb3VyY2UtPmlzRW5kZWQoKSkgewogICAgICAgICBNZWRp
YVRpbWUgc3RhcnQgPSB2aXJ0dWFsUmFuZ2VzLT5tYXhpbXVtQnVmZmVyZWRUaW1lKCk7CiAgICAg
ICAgIE1lZGlhVGltZSBlbmQgPSBtX3NvdXJjZS0+ZHVyYXRpb24oKTsKQEAgLTE4MzgsNyArMTg5
Nyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IFNvdXJjZUJ1ZmZlcjo6
YnVmZmVyZWRBY2NvdW50aW5nRm9yRW5kT2ZTdHJlCiAKIGJvb2wgU291cmNlQnVmZmVyOjpoYXND
dXJyZW50VGltZSgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzUmVtb3ZlZCgpIHx8ICFtX2J1ZmZlcmVk
LT5sZW5ndGgoKSkKKyAgICBpZiAoaXNSZW1vdmVkKCkgfHwgIWJ1ZmZlcmVkKCktPmxlbmd0aCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBNZWRpYVRpbWUgY3VycmVudFRpbWUgPSBt
X3NvdXJjZS0+Y3VycmVudFRpbWUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCmluZGV4IDRkMzM1ZGMuLjRmZGE3ODM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKQEAg
LTEyNiw2ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRHZW5lcmF0ZVRpbWVzdGFt
cHMoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZEdlbmVyYXRlVGltZXN0YW1wczsgfQogICAgIHZv
aWQgc2V0U2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzKGJvb2wgZmxhZykgeyBtX3Nob3VsZEdlbmVy
YXRlVGltZXN0YW1wcyA9IGZsYWc7IH0KIAorICAgIHZvaWQgaW52YWxpZGF0ZUJ1ZmZlcmVkKCk7
CiBwcm90ZWN0ZWQ6CiAgICAgLy8gRXZlbnRUYXJnZXQgaW50ZXJmYWNlCiAgICAgdmlydHVhbCB2
b2lkIHJlZkV2ZW50VGFyZ2V0KCkgb3ZlcnJpZGUgeyByZWYoKTsgfQpAQCAtMTg1LDYgKzE4Niw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlbW92ZVRpbWVyRmlyZWQoKTsKICAgICB2b2lkIHJl
bW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYg
ZW5kKTsKKyAgICB2b2lkIHJlY2FsY3VsYXRlQnVmZmVyZWQoKSBjb25zdDsKIAogICAgIHNpemVf
dCBleHRyYU1lbW9yeUNvc3QoKSBjb25zdDsKICAgICB2b2lkIHJlcG9ydEV4dHJhTWVtb3J5Q29z
dCgpOwpAQCAtMjE5LDcgKzIyMSw3IEBAIHByaXZhdGU6CiAgICAgTWVkaWFUaW1lIG1fZ3JvdXBF
bmRUaW1lc3RhbXA7CiAKICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgVHJhY2tCdWZmZXI+IG1f
dHJhY2tCdWZmZXJNYXA7Ci0gICAgUmVmUHRyPFRpbWVSYW5nZXM+IG1fYnVmZmVyZWQ7CisgICAg
bXV0YWJsZSBSZWZQdHI8VGltZVJhbmdlcz4gbV9idWZmZXJlZDsKIAogICAgIGVudW0gQXBwZW5k
U3RhdGVUeXBlIHsgV2FpdGluZ0ZvclNlZ21lbnQsIFBhcnNpbmdJbml0U2VnbWVudCwgUGFyc2lu
Z01lZGlhU2VnbWVudCB9OwogICAgIEFwcGVuZFN0YXRlVHlwZSBtX2FwcGVuZFN0YXRlOwpAQCAt
MjM5LDYgKzI0MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2FjdGl2ZTsKICAgICBib29sIG1f
YnVmZmVyRnVsbDsKICAgICBib29sIG1fc2hvdWxkR2VuZXJhdGVUaW1lc3RhbXBzOworICAgIG11
dGFibGUgYm9vbCBtX3Nob3VsZFJlY2FsY3VsYXRlQnVmZmVyZWQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>