<?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>135082</bug_id>
          
          <creation_ts>2014-07-18 20:40:04 -0700</creation_ts>
          <short_desc>[iOS][WK2] Improve event throttling for Scroll Events</short_desc>
          <delta_ts>2014-07-21 21:08:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1023428</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-18 20:40:04 -0700</bug_when>
    <thetext>[iOS][WK2] Improve event throttling for Scroll Events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023429</commentid>
    <comment_count>1</comment_count>
      <attachid>235166</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-18 21:41:49 -0700</bug_when>
    <thetext>Created attachment 235166
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023434</commentid>
    <comment_count>2</comment_count>
      <attachid>235168</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-18 21:58:42 -0700</bug_when>
    <thetext>Created attachment 235168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023439</commentid>
    <comment_count>3</comment_count>
      <attachid>235168</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-07-18 22:39:42 -0700</bug_when>
    <thetext>Comment on attachment 235168
Patch

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

&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:372
&gt; +        if (WebPage *webPage = WebProcess::shared().webPage(pageID)) {

I don&apos;t think it safe to call WebProcess::shared().webPage() from a background queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023447</commentid>
    <comment_count>4</comment_count>
      <attachid>235168</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-19 02:08:57 -0700</bug_when>
    <thetext>Comment on attachment 235168
Patch

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

&gt;&gt; Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:372
&gt;&gt; +        if (WebPage *webPage = WebProcess::shared().webPage(pageID)) {
&gt; 
&gt; I don&apos;t think it safe to call WebProcess::shared().webPage() from a background queue.

Yeah, that&apos;s really dumb. That code should be in the dispatch_async(). I used the PageID specifically to avoid races and then I create one 3 lines bellow...

I&apos;ll move it in the right place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023805</commentid>
    <comment_count>5</comment_count>
      <attachid>235168</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-21 16:54:08 -0700</bug_when>
    <thetext>Comment on attachment 235168
Patch

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

&gt; Source/WebCore/page/ChromeClient.h:239
&gt; +    virtual double eventThrottlingDelay() { return 0; };

Should this use std::chrono something?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2881
&gt; +        m_estimatedMainThreadLatency = m_estimatedMainThreadLatency * 0.80 + elapsed * 0.20;

I&apos;m not sure the &quot;main thread&quot; here is interesting.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:4472
&gt; +    m_estimatedMainThreadLatency = 1 / 60.;

60.0?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:514
&gt; +    double eventThrottlingDelay() const;

std::chrono would tell me what the units are.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.h:754
&gt; +    void updateVisibleContentRects(const VisibleContentRectUpdateInfo&amp;, double);

Please give the double a name.

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1680
&gt; +    if (m_isInStableState || m_estimatedMainThreadLatency &lt;= 1. / 60)

Why not 1/60.0 like you used before?

&gt; Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm:1683
&gt; +    return std::min&lt;double&gt;(m_estimatedMainThreadLatency * 2, 1);

Explain the * 2 in a comment. What units are we in here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023875</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-21 20:58:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 235168 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235168&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/page/ChromeClient.h:239
&gt; &gt; +    virtual double eventThrottlingDelay() { return 0; };
&gt; 
&gt; Should this use std::chrono something?

That is wasting performance and accuracy...but whatever, I&apos;ll do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023876</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-21 21:00:33 -0700</bug_when>
    <thetext>Committed r171336: &lt;http://trac.webkit.org/changeset/171336&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023878</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-21 21:03:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 235168 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235168&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/ChromeClient.h:239
&gt; &gt; &gt; +    virtual double eventThrottlingDelay() { return 0; };
&gt; &gt; 
&gt; &gt; Should this use std::chrono something?
&gt; 
&gt; That is wasting performance and accuracy...but whatever, I&apos;ll do it.

Isn&apos;t it just syntactic sugar?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023879</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-21 21:05:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #6)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (From update of attachment 235168 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=235168&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/page/ChromeClient.h:239
&gt; &gt; &gt; &gt; +    virtual double eventThrottlingDelay() { return 0; };
&gt; &gt; &gt; 
&gt; &gt; &gt; Should this use std::chrono something?
&gt; &gt; 
&gt; &gt; That is wasting performance and accuracy...but whatever, I&apos;ll do it.
&gt; 
&gt; Isn&apos;t it just syntactic sugar?

Nope, chrono is long integers. By picking milliseconds you lose the sub-milliseconds accuracy (like the 0.6 in 16.6ms per frame). It is also a lot more work to use long type on ARMv7 while the double were just going through VFP.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023880</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-07-21 21:06:37 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Nope, chrono is long integers. By picking milliseconds you lose the sub-milliseconds accuracy (like the 0.6 in 16.6ms per frame). It is also a lot more work to use long type on ARMv7 while the double were just going through VFP.

That sucks. Feel free to go back to doubles, but name the functions (or add comments) saying what the units are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1023881</commentid>
    <comment_count>11</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-07-21 21:08:20 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Nope, chrono is long integers. By picking milliseconds you lose the sub-milliseconds accuracy (like the 0.6 in 16.6ms per frame). It is also a lot more work to use long type on ARMv7 while the double were just going through VFP.
&gt; 
&gt; That sucks. Feel free to go back to doubles, but name the functions (or add comments) saying what the units are.

As far as I can remember, we have always used double for seconds (take Timer.h for example).

I don&apos;t think it is worth changing everything back. We don&apos;t need much perf or accuracy here.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235166</attachid>
            <date>2014-07-18 21:41:49 -0700</date>
            <delta_ts>2014-07-18 21:58:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135082-20140718214100.patch</filename>
            <type>text/plain</type>
            <size>23460</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM2NzU5NTBiYmQxYjdk
Y2YzMGQ2YjBhMTdlNzBiZGVlZWQ1OTVhYy4uOGU3NjBiMmIyZDYwNDM0MmM2ZTYxMGRmYzNmOWQx
MTllNzRjMWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA3LTE4ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdW1dLMl0g
SW1wcm92ZSBldmVudCB0aHJvdHRsaW5nIGZvciBTY3JvbGwgRXZlbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwODIKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE3NDQ1MjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzLiBUaGUgZmly
c3QgcGFydCBpbiB0aGUgV2ViS2l0IGxheWVyCisgICAgICAgIHRyYWNrIGFuIGFwcHJveGltYXRl
IG1lYXN1cmVtZW50IG9mIHRoZSBtYWluIHRocmVhZCByZXNwb25zaXZlbmVzcy4KKyAgICAgICAg
VGhlIHNlY29uZCBwYXJ0IGluIFdlYkNvcmUgdXNlIHRoYXQgaW5mb3JtYXRpb24gdG8gYXZvaWQg
c2VuZGluZyBldmVudHMKKyAgICAgICAgaWYgYSBwYWdlIGlzIHVucmVzcG9uc2l2ZS4KKworICAg
ICAgICBJbiBXZWJDb3JlLCB0aGlzIHBhdGNoIG9ubHkgY29uc2lkZXIgc2Nyb2xsIGV2ZW50cyBz
byBmYXIuIEhvcGVmdWxseSB0aGUgY29uY2VwdAorICAgICAgICBzaG91bGQgYmUgZWFzeSB0byBn
ZW5lcmFsaXplLgorCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAq
IHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIENocm9tZSBjbGllbnQgcHJvdmlkZXMgdXMg
d2l0aCBvbmUgaW5mb3JtYXRpb246IGhvdyBsb25nIGFuIGluY29taW5nIGV2ZW50IHNob3VsZCBi
ZSBkZWxheWVkLgorICAgICAgICBFdmVyeSBwb3J0IGlzIGZyZWUgdG8gaW1wbGVtZW50IHdoYXRl
dmVyIGxvZ2ljIGlzIHN1aXRhYmxlIGZvciB0aGVtLgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpGcmFtZVZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmRlbGF5ZWRTY3JvbGxFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpzZW5kU2Nyb2xsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAg
ICAgIFNjcm9sbCBldmVudHMgZG8gbm90IGhhdmUgYW55IGFzc29jaWF0ZWQgaW5mb3JtYXRpb24g
c28gdGhleSBjYW4gYmUgY29hbGVzY2VkIGJ5IGp1c3Qgc2tpcHBpbmcKKyAgICAgICAgYWxsIGlu
cHV0IGhhcGVubmluZyBkdXJpbmcgdGhlIHRocm90dGxpbmcgZGVsYXkuCisKKyAgICAgICAgVGhl
IGltcGxlbWVudGF0aW9uIGlzIGRvbmUgYnkgdXNpbmcgYSB0aW1lciB0byBkZWxheSB0aGUgZXZl
bnRzLgorCiAyMDE0LTA3LTE3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBhcmUgbWlzcGxhY2VkIHdoZW4gYSBXSzEgdmll
dyBoYXMgY29udGVudEluc2V0cyBzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyZGRjMTVmYTQzMGI5OGNkM2Fi
YmMyMGZmNzVkZjEyMzRkYmMzN2ZhLi5iYzEwYWJhMDYzYjNkZmE0NjU5NmMxNzdiOGFhNmY2YTll
MmJkNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTQtMDctMTggIEJlbmphbWlu
IFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU11bV0syXSBJbXBy
b3ZlIGV2ZW50IHRocm90dGxpbmcgZm9yIFNjcm9sbCBFdmVudHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA4MgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTc0NDUyNjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW4gdGhlIFdlYktpdCBsYXllciwgd2Ugd2FudCBhIG1lYXN1cmUgdGhhdCBpcyBy
ZXByZXNlbnRhdGl2ZSBvZiB0aGUgcmVzcG9uc2l2ZW5lc3MuCisKKyAgICAgICAgSW4gdGhpcyBw
YXRjaCwgSSB1c2UgdGhlIHRvdGFsIGRlbGF5IGJldHdlZW4gYSBWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGUgYmVpbmcgZGlzcGF0Y2hlZAorICAgICAgICBieSB0aGUgVUlQcm9jZXNzLCBhbmQgdGhl
IHRpbWUgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgZmx1c2hlcyB0aGUgbGF5ZXIgdHJlZS4K
KworICAgICAgICBUaGUgdmFsdWUgdXNlZCBmb3IgZXZlbnRUaHJvdHRsaW5nRGVsYXkoKSBpcyBj
b21wdXRlZCBieSBhdmVyYWdpbmcgdGhlIG5ldyB2YWx1ZSB3aXRoCisgICAgICAgIHRoZSBvbGQg
dmFsdWVzIHdpdGggYSA4MC8yMCBzcGxpdCwgZmF2b3JpbmcgdGhlIG9sZCBkYXRhLiBGYXZvcmlu
ZyBoaXN0b3JpY2FsIGRhdGEKKyAgICAgICAgb3ZlciB0aGUgbGFzdCB0aW1pbmcgYXZvaWQgZXhj
ZXNzaXZlbHkgdGhyb3R0bGluZyBmb3IgYSBzaW5nbGUgc2xvdyBmcmFtZS4KKworICAgICAgICBU
aGUgY29tcHV0YXRpb24gb2YgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSBjYW4gYmUgaW1w
cm92ZWQgaW4gdGhlIGZ1dHVyZSwgdGhpcyBpcworICAgICAgICBhIGZpcnN0IGN1dCBrZWVwaW5n
IHRoaW5ncyBzaW1wbGUuCisKKyAgICAgICAgV2l0aCBtX2VzdGltYXRlZE1haW5UaHJlYWRMYXRl
bmN5IGluIG91ciBoYW5kcywgd2UgY2FuIGNvbXB1dGUgb3VyIGV2ZW50VGhyb3R0bGluZ0RlbGF5
KCkuCisgICAgICAgIElmIG1fZXN0aW1hdGVkTWFpblRocmVhZExhdGVuY3kgaXMgc21hbGxlciB0
aGFuIGEgc2luZ2xlIGZyYW1lIHRpbWVzcGFuLCB3ZSBoYXZlIGEgZmFzdCBwYWdlCisgICAgICAg
IGFuZCBub3RoaW5nIGlzIHRocm90dGxlZC4KKworICAgICAgICBJZiBpcyBpdCBtb3JlIHRoYW4g
YSBmcmFtZSwgd2UgdGhyb3R0bGUgc3VjaCB0aGF0IHdlIGNhbiBhdCBsZWFzdCByZW5kZXIgdHdv
IGZyYW1lcworICAgICAgICBwZXIgZXZlbnQgZGlzcGF0Y2ggYmFzZWQgb24gdGhlIGhpc3Rvcmlj
YWwgZGF0YS4KKworICAgICAgICBUaGUgZXhhY3QgdmFsdWVzIHdpbGwgbmVlZCBzb21lIHR3ZWFr
aW5nLCBidXQgdGhpcyBzZXQgZW5zdXJlcyB3ZWxsIHdyaXR0ZW4gcGFnZXMgZ2V0CisgICAgICAg
IDYwIGV2ZW50cyBwZXIgc2Vjb25kcywgd2hpbGUgc2xvdyBwYWdlcyBkbyBub3Qgd2FzdGUgdG9v
IG11Y2ggdGltZSBvbiBldmVudHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpldmVudFRocm90dGxpbmdEZWxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0
ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkRmx1c2hM
YXllclRyZWVBdFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6ZXZlbnRUaHJvdHRsaW5nRGVsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpOgorCiAyMDE0LTA3LTE3ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW1dLMl0g
Rml4IHRoZSB1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzIHN5bmNocm9uaXphdGlvbiBmb3IgbG9h
ZCBhZnRlciByMTcxMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBlMjljZjdm
YjQ1YmZkYmQwN2FjMTExOTlmZjhkYWRhMzZiMzc1ZWQzLi42ZDVkZjUzNTAyM2QxOGZmNWEyMDYw
MTI3MjM3NWU2MTYzMDFkZGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTI2
NSw2ICsyNjUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2ViQXBwT3JpZW50YXRp
b25zVXBkYXRlZCgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlj
a2VyKGJvb2wgaGFzVmlkZW8pID0gMDsKKworICAgIHZpcnR1YWwgZG91YmxlIGV2ZW50VGhyb3R0
bGluZ0RlbGF5KCkgeyByZXR1cm4gMDsgfTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9SSUVOVEFU
SU9OX0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCAyOTQ4NTdkNjYyZTUz
MzEwMjM3OWJhZGJkYWYyYzJiN2YzMTVhYzJhLi44NzQ3YjQ1OWNmMTkxMjQwMGQzN2FkYmFlOWI0
ZGE4YTg2OWY0ZTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0xNzAsNiArMTcw
LDcgQEAgRnJhbWVWaWV3OjpGcmFtZVZpZXcoRnJhbWUmIGZyYW1lKQogICAgICwgbV93YXNTY3Jv
bGxlZEJ5VXNlcihmYWxzZSkKICAgICAsIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGwoZmFsc2UpCiAg
ICAgLCBtX3NhZmVUb1Byb3BhZ2F0ZVNjcm9sbFRvUGFyZW50KHRydWUpCisgICAgLCBtX2RlbGF5
ZWRTY3JvbGxFdmVudFRpbWVyKHRoaXMsICZGcmFtZVZpZXc6OmRlbGF5ZWRTY3JvbGxFdmVudFRp
bWVyRmlyZWQpCiAgICAgLCBtX2lzVHJhY2tpbmdSZXBhaW50cyhmYWxzZSkKICAgICAsIG1fc2hv
dWxkVXBkYXRlV2hpbGVPZmZzY3JlZW4odHJ1ZSkKICAgICAsIG1fZXhwb3NlZFJlY3QoRmxvYXRS
ZWN0OjppbmZpbml0ZVJlY3QoKSkKQEAgLTI1NSw2ICsyNTYsNyBAQCB2b2lkIEZyYW1lVmlldzo6
cmVzZXQoKQogICAgIG1fZmlyc3RMYXlvdXRDYWxsYmFja1BlbmRpbmcgPSBmYWxzZTsKICAgICBt
X3dhc1Njcm9sbGVkQnlVc2VyID0gZmFsc2U7CiAgICAgbV9zYWZlVG9Qcm9wYWdhdGVTY3JvbGxU
b1BhcmVudCA9IHRydWU7CisgICAgbV9kZWxheWVkU2Nyb2xsRXZlbnRUaW1lci5zdG9wKCk7CiAg
ICAgbV9sYXN0Vmlld3BvcnRTaXplID0gSW50U2l6ZSgpOwogICAgIG1fbGFzdFpvb21GYWN0b3Ig
PSAxLjBmOwogICAgIG1faXNUcmFja2luZ1JlcGFpbnRzID0gZmFsc2U7CkBAIC0xNzAzLDYgKzE3
MDUsMTEgQEAgSW50UG9pbnQgRnJhbWVWaWV3OjptYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25z
dAogICAgIHJldHVybiBtYXhpbXVtT2Zmc2V0OwogfQogCit2b2lkIEZyYW1lVmlldzo6ZGVsYXll
ZFNjcm9sbEV2ZW50VGltZXJGaXJlZChUaW1lcjxGcmFtZVZpZXc+JikKK3sKKyAgICBzZW5kU2Ny
b2xsRXZlbnQoKTsKK30KKwogYm9vbCBGcmFtZVZpZXc6OmZpeGVkRWxlbWVudHNMYXlvdXRSZWxh
dGl2ZVRvRnJhbWUoKSBjb25zdAogewogICAgIHJldHVybiBmcmFtZSgpLnNldHRpbmdzKCkuZml4
ZWRFbGVtZW50c0xheW91dFJlbGF0aXZlVG9GcmFtZSgpOwpAQCAtMjAzOSw5ICsyMDQ2LDE0IEBA
IHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWRWaWFQbGF0Zm9ybVdpZGdldChj
b25zdCBJbnRQb2ludCYgb2xkUG9zaXRpCiAKIHZvaWQgRnJhbWVWaWV3OjpzY3JvbGxQb3NpdGlv
bkNoYW5nZWQoY29uc3QgSW50UG9pbnQmIG9sZFBvc2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3
UG9zaXRpb24pCiB7Ci0gICAgZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zZW5kU2Nyb2xsRXZlbnQo
KTsKLSAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1vdXNlTW92ZUV2ZW50
U29vbigpOwotICAgIAorICAgIGRvdWJsZSB0aHJvdHRsaW5nRGVsYXkgPSBmcmFtZSgpLnBhZ2Uo
KS0+Y2hyb21lKCkuY2xpZW50KCkuZXZlbnRUaHJvdHRsaW5nRGVsYXkoKTsKKworICAgIGlmICgh
dGhyb3R0bGluZ0RlbGF5KSB7CisgICAgICAgIG1fZGVsYXllZFNjcm9sbEV2ZW50VGltZXIuc3Rv
cCgpOworICAgICAgICBzZW5kU2Nyb2xsRXZlbnQoKTsKKyAgICB9IGVsc2UgaWYgKCFtX2RlbGF5
ZWRTY3JvbGxFdmVudFRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fZGVsYXllZFNjcm9sbEV2
ZW50VGltZXIuc3RhcnRPbmVTaG90KHRocm90dGxpbmdEZWxheSk7CisKICAgICBpZiAoRG9jdW1l
bnQqIGRvY3VtZW50ID0gZnJhbWUoKS5kb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudC0+c2Vu
ZFdpbGxSZXZlYWxFZGdlRXZlbnRzSWZOZWVkZWQob2xkUG9zaXRpb24sIG5ld1Bvc2l0aW9uLCB2
aXNpYmxlQ29udGVudFJlY3QoKSwgY29udGVudHNTaXplKCkpOwogCkBAIC00MTMyLDYgKzQxNDQs
MTIgQEAgdm9pZCBGcmFtZVZpZXc6OnNjcm9sbGFibGVBcmVhU2V0Q2hhbmdlZCgpCiAgICAgfQog
fQogCit2b2lkIEZyYW1lVmlldzo6c2VuZFNjcm9sbEV2ZW50KCkKK3sKKyAgICBmcmFtZSgpLmV2
ZW50SGFuZGxlcigpLnNlbmRTY3JvbGxFdmVudCgpOworICAgIGZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuZGlzcGF0Y2hGYWtlTW91c2VNb3ZlRXZlbnRTb29uKCk7Cit9CisKIHZvaWQgRnJhbWVWaWV3
OjpyZW1vdmVDaGlsZChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBpZiAod2lkZ2V0LT5pc0ZyYW1l
VmlldygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKaW5kZXggMDBhZjBkN2IyOGQ1YmQxNWJmMjZm
NTg5MGE1MWM3MTI2M2NlNmZkNC4uNmNmNWViN2IzNTA5MmE3MTZlMDI5NTY1ZjJkOTU1MGVjNzA4
MWM1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCkBAIC0yNDEsNiArMjQxLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc1J1YmJlckJhbmRJblByb2dyZXNzKCkgY29uc3Qgb3ZlcnJp
ZGU7CiAgICAgdmlydHVhbCBJbnRQb2ludCBtaW5pbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBv
dmVycmlkZTsKICAgICB2aXJ0dWFsIEludFBvaW50IG1heGltdW1TY3JvbGxQb3NpdGlvbigpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVsYXllZFNjcm9sbEV2ZW50VGltZXJGaXJlZChUaW1l
cjxGcmFtZVZpZXc+Jik7CiAKICAgICAvLyBUaGlzIGlzIGRpZmZlcmVudCB0aGFuIHZpc2libGVD
b250ZW50UmVjdCgpIGluIHRoYXQgaXQgaWdub3JlcyBuZWdhdGl2ZSAob3Igb3Zlcmx5IHBvc2l0
aXZlKQogICAgIC8vIG9mZnNldHMgZnJvbSBydWJiZXItYmFuZGluZywgYW5kIGl0IHRha2VzIHpv
b21pbmcgaW50byBhY2NvdW50LiAKQEAgLTU5Nyw2ICs1OTgsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2Nyb2xsVG9BbmNob3IoKTsKICAgICB2b2lkIHNjcm9sbFBvc2l0aW9uQ2hhbmdlZChjb25z
dCBJbnRQb2ludCYgb2xkUG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBuZXdQb3NpdGlvbik7CiAg
ICAgdm9pZCBzY3JvbGxhYmxlQXJlYVNldENoYW5nZWQoKTsKKyAgICB2b2lkIHNlbmRTY3JvbGxF
dmVudCgpOwogCiAgICAgYm9vbCBoYXNDdXN0b21TY3JvbGxiYXJzKCkgY29uc3Q7CiAKQEAgLTY2
Niw2ICs2NjgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV93YXNTY3JvbGxlZEJ5VXNlcjsKICAg
ICBib29sIG1faW5Qcm9ncmFtbWF0aWNTY3JvbGw7CiAgICAgYm9vbCBtX3NhZmVUb1Byb3BhZ2F0
ZVNjcm9sbFRvUGFyZW50OworICAgIFRpbWVyPEZyYW1lVmlldz4gbV9kZWxheWVkU2Nyb2xsRXZl
bnRUaW1lcjsKIAogICAgIGRvdWJsZSBtX2xhc3RQYWludFRpbWU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVu
dC5oCmluZGV4IDBlMTRmZTEwYWI0YjE2M2UxYWMwZTFjMzQ3ZDMxYzY3MzFjMDhlY2IuLjk0OWUy
ZmUzNzE1NzllNGJhZjM2YzFiZGUzNTkzNDRhZDVjNDBkMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
aApAQCAtMTgxLDYgKzE4MSw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgd2ViQXBw
T3JpZW50YXRpb25zVXBkYXRlZCgpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzaG93UGxh
eWJhY2tUYXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbykgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFs
IGRvdWJsZSBldmVudFRocm90dGxpbmdEZWxheSgpIG92ZXJyaWRlOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoT1JJRU5UQVRJT05fRVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1tIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9T
Lm1tCmluZGV4IGY1YmI0MDdjNGRkZmRhNzBhZjhiMTI2YWI4Y2Y5NWJiZDkxYjNlMTAuLmE5OWZj
OGI5YTNhOTZkMTYwNjVlNTVjNDI5MmQ1MjA5MWEzZjZmZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJD
aHJvbWVDbGllbnRJT1MubW0KQEAgLTEzNSw2ICsxMzUsMTEgQEAgdm9pZCBXZWJDaHJvbWVDbGll
bnQ6OnNob3dQbGF5YmFja1RhcmdldFBpY2tlcihib29sIGhhc1ZpZGVvKQogICAgIG1fcGFnZS0+
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTaG93UGxheWJhY2tUYXJnZXRQaWNrZXIoaGFz
VmlkZW8sIG1fcGFnZS0+cmVjdEZvckVsZW1lbnRBdEludGVyYWN0aW9uTG9jYXRpb24oKSkpOwog
fQogCitkb3VibGUgV2ViQ2hyb21lQ2xpZW50OjpldmVudFRocm90dGxpbmdEZWxheSgpCit7Cisg
ICAgcmV0dXJuIG1fcGFnZS0+ZXZlbnRUaHJvdHRsaW5nRGVsYXkoKTsKK30KKwogaW50IFdlYkNo
cm9tZUNsaWVudDo6ZGV2aWNlT3JpZW50YXRpb24oKSBjb25zdAogewogICAgIHJldHVybiBtX3Bh
Z2UtPmRldmljZU9yaWVudGF0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcAppbmRleCBiYjVmZDk2
OWQxMTY4NzMyZTRhY2ZjZTU2ZGNjZjg4NGUxYzc0MzhjLi4xZDViZTA0MDcwZWNhMmU4N2FlYjJi
OGVkNjE2OTc5ODBiOTMyZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAKQEAgLTYxLDcgKzYxLDEx
IEBAIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0ZSh1
aW50NjRfdCBwYWdlSUQsIGNvbnN0IFZpc2liCiAgICAgewogICAgICAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgdXBkYXRlTGlzdFdhc0VtcHR5ID0gbV9s
YXRlc3RVcGRhdGUuaXNFbXB0eSgpOwotICAgICAgICBtX2xhdGVzdFVwZGF0ZS5zZXQocGFnZUlE
LCB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvKTsKKyAgICAgICAgYXV0byBpdGVyYXRvciA9
IG1fbGF0ZXN0VXBkYXRlLmZpbmQocGFnZUlEKTsKKyAgICAgICAgaWYgKGl0ZXJhdG9yID09IG1f
bGF0ZXN0VXBkYXRlLmVuZCgpKQorICAgICAgICAgICAgbV9sYXRlc3RVcGRhdGUuc2V0PFVwZGF0
ZURhdGE+KHBhZ2VJRCwgeyB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLCB2aXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVJbmZvLnRpbWVzdGFtcCgpIH0pOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpdGVyYXRvci0+dmFsdWUudmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbyA9IHZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUluZm87CiAgICAgfQogICAgIGlmICh1cGRhdGVMaXN0V2FzRW1w
dHkpCiAgICAgICAgIFJ1bkxvb3A6Om1haW4oKS5kaXNwYXRjaChiaW5kKCZWaWV3VXBkYXRlRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUsIHRoaXMpKTsKQEAgLTY5
LDcgKzczLDcgQEAgdm9pZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6dmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgVmlzaWIKIAogdm9pZCBWaWV3VXBkYXRlRGlz
cGF0Y2hlcjo6ZGlzcGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoKQogewotICAgIEhhc2hN
YXA8dWludDY0X3QsIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8+IGxvY2FsQ29weTsKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiBsb2NhbENvcHk7CiAgICAgewogICAgICAg
ICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fZGF0YU11dGV4KTsKICAgICAgICAgbG9jYWxDb3B5
LnN3YXAobV9sYXRlc3RVcGRhdGUpOwpAQCAtNzcsNyArODEsNyBAQCB2b2lkIFZpZXdVcGRhdGVE
aXNwYXRjaGVyOjpkaXNwYXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSgpCiAKICAgICBmb3Ig
KGF1dG8mIHNsb3QgOiBsb2NhbENvcHkpIHsKICAgICAgICAgaWYgKFdlYlBhZ2UqIHdlYlBhZ2Ug
PSBXZWJQcm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHNsb3Qua2V5KSkKLSAgICAgICAgICAgIHdl
YlBhZ2UtPnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMoc2xvdC52YWx1ZSk7CisgICAgICAgICAg
ICB3ZWJQYWdlLT51cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKHNsb3QudmFsdWUudmlzaWJsZUNv
bnRlbnRSZWN0VXBkYXRlSW5mbywgc2xvdC52YWx1ZS5vbGRlc3RUaW1lc3RhbXApOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdV
cGRhdGVEaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmll
d1VwZGF0ZURpc3BhdGNoZXIuaAppbmRleCBlMmYzYzZhMWNlMGNjYjQ1MDk3OWIzNmVhZGNmNzFm
NDdlODVhY2VlLi5iNTM4YmJiNGY1YmYxMTVmMTNjZjI3NmE5MjU4NjY2ZDMyYzU5MmRiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0ZURpc3Bh
dGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld1VwZGF0
ZURpc3BhdGNoZXIuaApAQCAtNTEsOSArNTEsMTQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGlz
cGF0Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoKTsKIAorICAgIHN0cnVjdCBVcGRhdGVEYXRh
IHsKKyAgICAgICAgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbyB2aXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVJbmZvOworICAgICAgICBkb3VibGUgb2xkZXN0VGltZXN0YW1wOworICAgIH07CisK
ICAgICBSZWZQdHI8V29ya1F1ZXVlPiBtX3F1ZXVlOwogICAgIFNwaW5Mb2NrIG1fZGF0YU11dGV4
OwotICAgIEhhc2hNYXA8dWludDY0X3QsIFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8+IG1f
bGF0ZXN0VXBkYXRlOworICAgIEhhc2hNYXA8dWludDY0X3QsIFVwZGF0ZURhdGE+IG1fbGF0ZXN0
VXBkYXRlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggYWYwZTZhZDM5NzZlNTRlOTdlZjI3
MGY4M2IyNTMxNDkyZDUzNmJmYi4uMDNkYjZmMjhjYjI4ZmVjMmNiMWM0NDA5ODliOTU0NWVkMDA2
NGVmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cApAQCAtMzA0LDYgKzMwNCw5IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBj
b25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgICwgbV91c2Vy
SXNJbnRlcmFjdGluZyhmYWxzZSkKICAgICAsIG1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb24o
ZmFsc2UpCiAgICAgLCBtX3VzZVRlc3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb24oZmFsc2UpCisg
ICAgLCBtX2lzSW5TdGFibGVTdGF0ZSh0cnVlKQorICAgICwgbV9vbGRlc3ROb25TdGFibGVVcGRh
dGVWaXNpYmxlQ29udGVudFJlY3RzVGltZXN0YW1wKDApCisgICAgLCBtX2VzdGltYXRlZE1haW5U
aHJlYWRMYXRlbmN5KDApCiAgICAgLCBtX3NjcmVlblNpemUocGFyYW1ldGVycy5zY3JlZW5TaXpl
KQogICAgICwgbV9hdmFpbGFibGVTY3JlZW5TaXplKHBhcmFtZXRlcnMuYXZhaWxhYmxlU2NyZWVu
U2l6ZSkKICAgICAsIG1fZGV2aWNlT3JpZW50YXRpb24oMCkKQEAgLTI4NjcsNiArMjg3MCwyMCBA
QCB2b2lkIFdlYlBhZ2U6OndpbGxDb21taXRMYXllclRyZWUoUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb24mIGxheWVyVHJhbnNhY3Rpb24pCiAgICAgbGF5ZXJUcmFuc2FjdGlvbi5zZXRBbGxvd3NV
c2VyU2NhbGluZyhhbGxvd3NVc2VyU2NhbGluZygpKTsKICNlbmRpZgogfQorCit2b2lkIFdlYlBh
Z2U6OmRpZEZsdXNoTGF5ZXJUcmVlQXRUaW1lKGRvdWJsZSB0aW1lc3RhbXApCit7CisjaWYgUExB
VEZPUk0oSU9TKQorICAgIGlmIChtX29sZGVzdE5vblN0YWJsZVVwZGF0ZVZpc2libGVDb250ZW50
UmVjdHNUaW1lc3RhbXApIHsKKyAgICAgICAgZG91YmxlIGVsYXBzZWQgPSB0aW1lc3RhbXAgLSBt
X29sZGVzdE5vblN0YWJsZVVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNUaW1lc3RhbXA7CisgICAg
ICAgIG1fb2xkZXN0Tm9uU3RhYmxlVXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0c1RpbWVzdGFtcCA9
IDA7CisKKyAgICAgICAgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSA9IG1fZXN0aW1hdGVk
TWFpblRocmVhZExhdGVuY3kgKiAwLjgwICsgZWxhcHNlZCAqIDAuMjA7CisgICAgfQorI2Vsc2UK
KyAgICBVTlVTRURfUEFSQU0odGltZXN0YW1wKTsKKyNlbmRpZgorfQogI2VuZGlmCiAKICAgICAK
QEAgLTQ0NTIsNiArNDQ2OSw3IEBAIHZvaWQgV2ViUGFnZTo6ZGlkQ29tbWl0TG9hZChXZWJGcmFt
ZSogZnJhbWUpCiAgICAgbV9zY2FsZVdhc1NldEJ5VUlQcm9jZXNzID0gZmFsc2U7CiAgICAgbV9m
aXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRlckRpZENvbW1pdExvYWQgPSB0b1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhKCptX2RyYXdpbmdBcmVhKS5uZXh0VHJhbnNhY3Rpb25JRCgpOwog
ICAgIG1fdXNlckhhc0NoYW5nZWRQYWdlU2NhbGVGYWN0b3IgPSBmYWxzZTsKKyAgICBtX2VzdGlt
YXRlZE1haW5UaHJlYWRMYXRlbmN5ID0gMSAvIDYwLjsKIAogICAgIFdlYlByb2Nlc3M6OnNoYXJl
ZCgpLmV2ZW50RGlzcGF0Y2hlcigpLmNsZWFyUXVldWVkVG91Y2hFdmVudHNGb3JQYWdlKCp0aGlz
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
NDM2ZWNiMDlmYjc1OTQwYmMyOGUwN2NkYmI2MzI0N2I4ZTVjNGU4NC4uYjcwZmI1Y2Y4NjdmZWFl
YmYyYmQyZDA1ZmY3MDNmYjNmODBlN2YxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0yMjMsNiArMjIzLDcgQEAgcHVibGljOgogCiAjaWYgUExB
VEZPUk0oQ09DT0EpCiAgICAgdm9pZCB3aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uJik7CisgICAgdm9pZCBkaWRGbHVzaExheWVyVHJlZUF0VGltZShkb3VibGUp
OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtNTA5LDYgKzUxMCw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGRpc3BhdGNoQXN5bmNocm9ub3VzVG91Y2hFdmVudHMoY29uc3QgVmVj
dG9yPFdlYlRvdWNoRXZlbnQsIDE+JiBxdWV1ZSk7CiAgICAgdm9pZCBjb250ZW50U2l6ZUNhdGVn
b3J5RGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgZXhlY3V0ZUVkaXRDb21tYW5k
V2l0aENhbGxiYWNrKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworCisgICAg
ZG91YmxlIGV2ZW50VGhyb3R0bGluZ0RlbGF5KCkgY29uc3Q7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICB2b2lkIHNob3dJbnNwZWN0b3JIaWdobGlnaHQoY29uc3QgV2ViQ29yZTo6SGlnaGxp
Z2h0Jik7CiAgICAgdm9pZCBoaWRlSW5zcGVjdG9ySGlnaGxpZ2h0KCk7CkBAIC03NDgsNyArNzUx
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RGV2aWNlT3JpZW50YXRpb24oaW50MzJfdCk7CiAg
ICAgdm9pZCBkeW5hbWljVmlld3BvcnRTaXplVXBkYXRlKGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6
ZSYgbWluaW11bUxheW91dFNpemUsIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbWluaW11bUxh
eW91dFNpemVGb3JNaW5pbWFsVUksIGNvbnN0IFdlYkNvcmU6OkZsb2F0U2l6ZSYgbWF4aW11bVVu
b2JzY3VyZWRTaXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmIHRhcmdldEV4cG9zZWRDb250
ZW50UmVjdCwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJnZXRVbm9ic2N1cmVkUmVjdCwg
Y29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJnZXRVbm9ic2N1cmVkUmVjdEluU2Nyb2xsVmll
d0Nvb3JkaW5hdGVzLCBkb3VibGUgc2NhbGUsIGludDMyX3QgZGV2aWNlT3JpZW50YXRpb24pOwog
ICAgIHZvaWQgc3luY2hyb25pemVEeW5hbWljVmlld3BvcnRVcGRhdGUoZG91YmxlJiBuZXdUYXJn
ZXRTY2FsZSwgV2ViQ29yZTo6RmxvYXRQb2ludCYgbmV3U2Nyb2xsUG9zaXRpb24sIHVpbnQ2NF90
JiBuZXh0VmFsaWRMYXllclRyZWVUcmFuc2FjdGlvbklEKTsKLSAgICB2b2lkIHVwZGF0ZVZpc2li
bGVDb250ZW50UmVjdHMoY29uc3QgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbyYpOworICAg
IHZvaWQgdXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhjb25zdCBWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGVJbmZvJiwgZG91YmxlKTsKICAgICBib29sIHNjYWxlV2FzU2V0QnlVSVByb2Nlc3MoKSBj
b25zdCB7IHJldHVybiBtX3NjYWxlV2FzU2V0QnlVSVByb2Nlc3M7IH0KICAgICB2b2lkIHdpbGxT
dGFydFVzZXJUcmlnZ2VyZWRab29taW5nKCk7CiAgICAgdm9pZCBhcHBsaWNhdGlvbldpbGxSZXNp
Z25BY3RpdmUoKTsKQEAgLTEyMzMsNiArMTIzNiw5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Vz
ZXJJc0ludGVyYWN0aW5nOwogICAgIGJvb2wgbV9oYXNQZW5kaW5nQmx1ck5vdGlmaWNhdGlvbjsK
ICAgICBib29sIG1fdXNlVGVzdGluZ1ZpZXdwb3J0Q29uZmlndXJhdGlvbjsKKyAgICBib29sIG1f
aXNJblN0YWJsZVN0YXRlOworICAgIGRvdWJsZSBtX29sZGVzdE5vblN0YWJsZVVwZGF0ZVZpc2li
bGVDb250ZW50UmVjdHNUaW1lc3RhbXA7CisgICAgZG91YmxlIG1fZXN0aW1hdGVkTWFpblRocmVh
ZExhdGVuY3k7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1fc2NyZWVuU2l6ZTsKICAgICBXZWJD
b3JlOjpGbG9hdFNpemUgbV9hdmFpbGFibGVTY3JlZW5TaXplOwogICAgIFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4gbV9jdXJyZW50QmxvY2tTZWxlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggYWQ3MjUwODQ4YWZh
MmMzMjRiNmUwZDk0N2NiYjNlYmUwMzg3NTg3MS4uMTYyYjNkOTlhZTAxNmM2NWU4YjI5YzBjZmZj
ZjUzODEzYjE5NzcyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMTY3NSw2ICsxNjc1LDE0IEBAIHZvaWQgV2ViUGFn
ZTo6ZXhlY3V0ZUVkaXRDb21tYW5kV2l0aENhbGxiYWNrKGNvbnN0IFN0cmluZyYgY29tbWFuZE5h
bWUsIHVpbnQ2NF90CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJh
Y2soY2FsbGJhY2tJRCkpOwogfQogCitkb3VibGUgV2ViUGFnZTo6ZXZlbnRUaHJvdHRsaW5nRGVs
YXkoKSBjb25zdAoreworICAgIGlmIChtX2lzSW5TdGFibGVTdGF0ZSB8fCBtX2VzdGltYXRlZE1h
aW5UaHJlYWRMYXRlbmN5IDw9IDEuIC8gNjApCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIHN0ZDo6bWluPGRvdWJsZT4obV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSAqIDIsIDEp
OworfQorCiB2b2lkIFdlYlBhZ2U6OnN5bmNBcHBseUF1dG9jb3JyZWN0aW9uKGNvbnN0IFN0cmlu
ZyYgY29ycmVjdGlvbiwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFRleHQsIGJvb2wmIGNvcnJlY3Rp
b25BcHBsaWVkKQogewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7CkBAIC0yNDM3LDE4ICsyNDQ1
LDE5IEBAIHN0YXRpYyBpbmxpbmUgRmxvYXRSZWN0IGFkanVzdEV4cG9zZWRSZWN0Rm9yQm91bmRl
ZFNjYWxlKGNvbnN0IEZsb2F0UmVjdCYgZXhwb3NlCiAgICAgcmV0dXJuIGFkanVzdEV4cG9zZWRS
ZWN0Rm9yTmV3U2NhbGUoZXhwb3NlZFJlY3QsIGV4cG9zZWRSZWN0U2NhbGUsIG5ld1NjYWxlKTsK
IH0KIAotdm9pZCBXZWJQYWdlOjp1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKGNvbnN0IFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUluZm8mIHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8pCit2
b2lkIFdlYlBhZ2U6OnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMoY29uc3QgVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlSW5mbyYgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbywgZG91YmxlIG9s
ZGVzdFRpbWVzdGFtcCkKIHsKICAgICAvLyBTa2lwIGFueSBWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGUgdGhhdCBoYXZlIGJlZW4gcXVldWVkIGJlZm9yZSBEaWRDb21taXRMb2FkIHN1cHByZXNzZXMg
dGhlIHVwZGF0ZXMgaW4gdGhlIFVJUHJvY2Vzcy4KICAgICBpZiAodmlzaWJsZUNvbnRlbnRSZWN0
VXBkYXRlSW5mby5sYXN0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIDwgbV9maXJzdExheWVyVHJl
ZVRyYW5zYWN0aW9uSURBZnRlckRpZENvbW1pdExvYWQpCiAgICAgICAgIHJldHVybjsKIAogICAg
IG1faGFzUmVjZWl2ZWRWaXNpYmxlQ29udGVudFJlY3RzQWZ0ZXJEaWRDb21taXRMb2FkID0gdHJ1
ZTsKKyAgICBtX2lzSW5TdGFibGVTdGF0ZSA9IHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8u
aW5TdGFibGVTdGF0ZSgpOwogCiAgICAgZG91YmxlIHNjYWxlTm9pc2VUaHJlc2hvbGQgPSAwLjAw
NTsKICAgICBkb3VibGUgZmlsdGVyZWRTY2FsZSA9IHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUlu
Zm8uc2NhbGUoKTsKICAgICBkb3VibGUgY3VycmVudFNjYWxlID0gbV9wYWdlLT5wYWdlU2NhbGVG
YWN0b3IoKTsKLSAgICBpZiAoIXZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaW5TdGFibGVT
dGF0ZSgpICYmIGZhYnMoZmlsdGVyZWRTY2FsZSAtIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkp
IDwgc2NhbGVOb2lzZVRocmVzaG9sZCkgeworICAgIGlmICghbV9pc0luU3RhYmxlU3RhdGUgJiYg
ZmFicyhmaWx0ZXJlZFNjYWxlIC0gbV9wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKSkgPCBzY2FsZU5v
aXNlVGhyZXNob2xkKSB7CiAgICAgICAgIC8vIFRpbnkgY2hhbmdlcyBvZiBzY2FsZSBkdXJpbmcg
aW50ZXJhY3RpdmUgem9vbSBjYXVzZSBjb250ZW50IHRvIGp1bXAgYnkgb25lIHBpeGVsLCBjcmVh
dGluZwogICAgICAgICAvLyB2aXN1YWwgbm9pc2UuIFdlIGZpbHRlciB0aG9zZSB1c2VsZXNzIHVw
ZGF0ZXMuCiAgICAgICAgIGZpbHRlcmVkU2NhbGUgPSBjdXJyZW50U2NhbGU7CkBAIC0yNDU3LDI3
ICsyNDY2LDMxIEBAIHZvaWQgV2ViUGFnZTo6dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhjb25z
dCBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvJiB2aXNpCiAgICAgZG91YmxlIGJvdW5kZWRT
Y2FsZSA9IHN0ZDo6bWluKG1fdmlld3BvcnRDb25maWd1cmF0aW9uLm1heGltdW1TY2FsZSgpLCBz
dGQ6Om1heChtX3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5taW5pbXVtU2NhbGUoKSwgZmlsdGVyZWRT
Y2FsZSkpOwogCiAgICAgLy8gU2tpcCBwcm9ncmVzc2l2ZWx5IHJlZHJhd2luZyB0aWxlcyBpZiBw
aW5jaC16b29taW5nIHdoaWxlIHRoZSBzeXN0ZW0gaXMgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgot
ICAgIGlmIChib3VuZGVkU2NhbGUgIT0gY3VycmVudFNjYWxlICYmICF2aXNpYmxlQ29udGVudFJl
Y3RVcGRhdGVJbmZvLmluU3RhYmxlU3RhdGUoKSAmJiBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5p
c1VuZGVyTWVtb3J5UHJlc3N1cmUoKSkKKyAgICBpZiAoYm91bmRlZFNjYWxlICE9IGN1cnJlbnRT
Y2FsZSAmJiAhbV9pc0luU3RhYmxlU3RhdGUgJiYgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaXNV
bmRlck1lbW9yeVByZXNzdXJlKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChtX2lzSW5T
dGFibGVTdGF0ZSkKKyAgICAgICAgbV9oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IgPSB0cnVlOwor
ICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fb2xkZXN0Tm9uU3RhYmxlVXBkYXRlVmlzaWJsZUNv
bnRlbnRSZWN0c1RpbWVzdGFtcCkKKyAgICAgICAgICAgIG1fb2xkZXN0Tm9uU3RhYmxlVXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0c1RpbWVzdGFtcCA9IG9sZGVzdFRpbWVzdGFtcDsKKyAgICB9CisK
ICAgICBGbG9hdFJlY3QgZXhwb3NlZFJlY3QgPSB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZv
LmV4cG9zZWRSZWN0KCk7CiAgICAgRmxvYXRSZWN0IGFkanVzdGVkRXhwb3NlZFJlY3QgPSBhZGp1
c3RFeHBvc2VkUmVjdEZvckJvdW5kZWRTY2FsZShleHBvc2VkUmVjdCwgdmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlSW5mby5zY2FsZSgpLCBib3VuZGVkU2NhbGUpOwogICAgIG1fZHJhd2luZ0FyZWEt
PnNldEV4cG9zZWRDb250ZW50UmVjdChhZGp1c3RlZEV4cG9zZWRSZWN0KTsKIAogICAgIEludFBv
aW50IHNjcm9sbFBvc2l0aW9uID0gcm91bmRlZEludFBvaW50KHZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZUluZm8udW5vYnNjdXJlZFJlY3QoKS5sb2NhdGlvbigpKTsKIAotICAgIGlmICghbV9oYXNT
dGFibGVQYWdlU2NhbGVGYWN0b3IgJiYgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5pblN0
YWJsZVN0YXRlKCkpCi0gICAgICAgIG1faGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yID0gdHJ1ZTsK
LQogICAgIGZsb2F0IGZsb2F0Qm91bmRlZFNjYWxlID0gYm91bmRlZFNjYWxlOwogICAgIGJvb2wg
aGFzU2V0UGFnZVNjYWxlID0gZmFsc2U7CiAgICAgaWYgKGZsb2F0Qm91bmRlZFNjYWxlICE9IGN1
cnJlbnRTY2FsZSkgewogICAgICAgICBtX3NjYWxlV2FzU2V0QnlVSVByb2Nlc3MgPSB0cnVlOwot
ICAgICAgICBtX2hhc1N0YWJsZVBhZ2VTY2FsZUZhY3RvciA9IHZpc2libGVDb250ZW50UmVjdFVw
ZGF0ZUluZm8uaW5TdGFibGVTdGF0ZSgpOworICAgICAgICBtX2hhc1N0YWJsZVBhZ2VTY2FsZUZh
Y3RvciA9IG1faXNJblN0YWJsZVN0YXRlOwogCiAgICAgICAgIG1fZHluYW1pY1NpemVVcGRhdGVI
aXN0b3J5LmNsZWFyKCk7CiAKLSAgICAgICAgbV9wYWdlLT5zZXRQYWdlU2NhbGVGYWN0b3IoZmxv
YXRCb3VuZGVkU2NhbGUsIHNjcm9sbFBvc2l0aW9uLCB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJ
bmZvLmluU3RhYmxlU3RhdGUoKSk7CisgICAgICAgIG1fcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9y
KGZsb2F0Qm91bmRlZFNjYWxlLCBzY3JvbGxQb3NpdGlvbiwgbV9pc0luU3RhYmxlU3RhdGUpOwog
ICAgICAgICBoYXNTZXRQYWdlU2NhbGUgPSB0cnVlOwogCiAgICAgICAgIGlmIChMYXllclRyZWVI
b3N0KiBsYXllclRyZWVIb3N0ID0gbV9kcmF3aW5nQXJlYS0+bGF5ZXJUcmVlSG9zdCgpKQpAQCAt
MjQ4NSw3ICsyNDk4LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVWaXNpYmxlQ29udGVudFJlY3Rz
KGNvbnN0IFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8mIHZpc2kKICAgICAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpQYWdlU2NhbGVGYWN0b3JEaWRDaGFuZ2UoZmxvYXRCb3Vu
ZGVkU2NhbGUpKTsKICAgICB9CiAKLSAgICBpZiAoIWhhc1NldFBhZ2VTY2FsZSAmJiB2aXNpYmxl
Q29udGVudFJlY3RVcGRhdGVJbmZvLmluU3RhYmxlU3RhdGUoKSkgeworICAgIGlmICghaGFzU2V0
UGFnZVNjYWxlICYmIG1faXNJblN0YWJsZVN0YXRlKSB7CiAgICAgICAgIG1fcGFnZS0+c2V0UGFn
ZVNjYWxlRmFjdG9yKGZsb2F0Qm91bmRlZFNjYWxlLCBzY3JvbGxQb3NpdGlvbiwgdHJ1ZSk7CiAg
ICAgICAgIGhhc1NldFBhZ2VTY2FsZSA9IHRydWU7CiAgICAgfQpAQCAtMjUwMyw3ICsyNTE2LDcg
QEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKGNvbnN0IFZpc2libGVD
b250ZW50UmVjdFVwZGF0ZUluZm8mIHZpc2kKIAogICAgIGZyYW1lVmlldy5zZXRTY3JvbGxWZWxv
Y2l0eShob3Jpem9udGFsVmVsb2NpdHksIHZlcnRpY2FsVmVsb2NpdHksIHNjYWxlQ2hhbmdlUmF0
ZSwgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby50aW1lc3RhbXAoKSk7CiAKLSAgICBpZiAo
dmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5pblN0YWJsZVN0YXRlKCkpCisgICAgaWYgKG1f
aXNJblN0YWJsZVN0YXRlKQogICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLnZpZXcoKS0+c2V0
Q3VzdG9tRml4ZWRQb3NpdGlvbkxheW91dFJlY3QoZW5jbG9zaW5nSW50UmVjdCh2aXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVJbmZvLmN1c3RvbUZpeGVkUG9zaXRpb25SZWN0KCkpKTsKIAogICAgIGlm
ICghdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5pc0NoYW5naW5nT2JzY3VyZWRJbnNldHNJ
bnRlcmFjdGl2ZWx5KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRl
eCA0MDk1YWE5NTk4ZmU1MTA2MTJjNjFhNDQ0YzIyYjY4YmIwY2MxMWM2Li5hMmJlYzIwZjc4ZjY2
YTA5MTVmMjRkOTgzNTBiNTk0Njk1YjUyZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEubW0KQEAgLTM2NSw4ICszNjUsMTYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYTo6Zmx1c2hMYXllcnMoKQogICAgIFJlZlB0cjxCYWNraW5nU3RvcmVGbHVzaGVyPiBi
YWNraW5nU3RvcmVGbHVzaGVyID0gQmFja2luZ1N0b3JlRmx1c2hlcjo6Y3JlYXRlKFdlYlByb2Nl
c3M6OnNoYXJlZCgpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCksIFdURjo6bW92ZShjb21taXRF
bmNvZGVyKSwgV1RGOjptb3ZlKGNvbnRleHRzVG9GbHVzaCkpOwogICAgIG1fcGVuZGluZ0JhY2tp
bmdTdG9yZUZsdXNoZXIgPSBiYWNraW5nU3RvcmVGbHVzaGVyOwogCi0gICAgZGlzcGF0Y2hfYXN5
bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdTdG9yZUZsdXNoZXJdeworICAgIHVpbnQ2NF90IHBh
Z2VJRCA9IG1fd2ViUGFnZS5wYWdlSUQoKTsKKyAgICBkaXNwYXRjaF9hc3luYyhtX2NvbW1pdFF1
ZXVlLCBbYmFja2luZ1N0b3JlRmx1c2hlciwgcGFnZUlEXSB7CiAgICAgICAgIGJhY2tpbmdTdG9y
ZUZsdXNoZXItPmZsdXNoKCk7CisKKyAgICAgICAgaWYgKFdlYlBhZ2UgKndlYlBhZ2UgPSBXZWJQ
cm9jZXNzOjpzaGFyZWQoKS53ZWJQYWdlKHBhZ2VJRCkpIHsKKyAgICAgICAgICAgIGRvdWJsZSB0
aW1lc3RhbXAgPSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKTsKKyAgICAgICAgICAgIGRp
c3BhdGNoX2FzeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIF57CisgICAgICAgICAgICAg
ICAgd2ViUGFnZS0+ZGlkRmx1c2hMYXllclRyZWVBdFRpbWUodGltZXN0YW1wKTsKKyAgICAgICAg
ICAgIH0pOworICAgICAgICB9CiAgICAgfSk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235168</attachid>
            <date>2014-07-18 21:58:42 -0700</date>
            <delta_ts>2014-07-21 16:54:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135082-20140718215754.patch</filename>
            <type>text/plain</type>
            <size>23500</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM2NzU5NTBiYmQxYjdk
Y2YzMGQ2YjBhMTdlNzBiZGVlZWQ1OTVhYy4uOGU3NjBiMmIyZDYwNDM0MmM2ZTYxMGRmYzNmOWQx
MTllNzRjMWY1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA3LTE4ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdW1dLMl0g
SW1wcm92ZSBldmVudCB0aHJvdHRsaW5nIGZvciBTY3JvbGwgRXZlbnRzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzUwODIKKyAgICAgICAgPHJkYXI6
Ly9wcm9ibGVtLzE3NDQ1MjY2PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgY29tcG9zZWQgb2YgdHdvIHBhcnRzLiBUaGUgZmly
c3QgcGFydCBpbiB0aGUgV2ViS2l0IGxheWVyCisgICAgICAgIHRyYWNrIGFuIGFwcHJveGltYXRl
IG1lYXN1cmVtZW50IG9mIHRoZSBtYWluIHRocmVhZCByZXNwb25zaXZlbmVzcy4KKyAgICAgICAg
VGhlIHNlY29uZCBwYXJ0IGluIFdlYkNvcmUgdXNlIHRoYXQgaW5mb3JtYXRpb24gdG8gYXZvaWQg
c2VuZGluZyBldmVudHMKKyAgICAgICAgaWYgYSBwYWdlIGlzIHVucmVzcG9uc2l2ZS4KKworICAg
ICAgICBJbiBXZWJDb3JlLCB0aGlzIHBhdGNoIG9ubHkgY29uc2lkZXIgc2Nyb2xsIGV2ZW50cyBz
byBmYXIuIEhvcGVmdWxseSB0aGUgY29uY2VwdAorICAgICAgICBzaG91bGQgYmUgZWFzeSB0byBn
ZW5lcmFsaXplLgorCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5oOgorICAgICAgICAq
IHBhZ2UvQ2hyb21lQ2xpZW50Lmg6CisgICAgICAgIENocm9tZSBjbGllbnQgcHJvdmlkZXMgdXMg
d2l0aCBvbmUgaW5mb3JtYXRpb246IGhvdyBsb25nIGFuIGluY29taW5nIGV2ZW50IHNob3VsZCBi
ZSBkZWxheWVkLgorICAgICAgICBFdmVyeSBwb3J0IGlzIGZyZWUgdG8gaW1wbGVtZW50IHdoYXRl
dmVyIGxvZ2ljIGlzIHN1aXRhYmxlIGZvciB0aGVtLgorCisgICAgICAgICogcGFnZS9GcmFtZVZp
ZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpGcmFtZVZpZXcpOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmRlbGF5ZWRTY3JvbGxFdmVudFRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWVWaWV3OjpzY3JvbGxQb3NpdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpzZW5kU2Nyb2xsRXZlbnQpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3Lmg6CisgICAg
ICAgIFNjcm9sbCBldmVudHMgZG8gbm90IGhhdmUgYW55IGFzc29jaWF0ZWQgaW5mb3JtYXRpb24g
c28gdGhleSBjYW4gYmUgY29hbGVzY2VkIGJ5IGp1c3Qgc2tpcHBpbmcKKyAgICAgICAgYWxsIGlu
cHV0IGhhcGVubmluZyBkdXJpbmcgdGhlIHRocm90dGxpbmcgZGVsYXkuCisKKyAgICAgICAgVGhl
IGltcGxlbWVudGF0aW9uIGlzIGRvbmUgYnkgdXNpbmcgYSB0aW1lciB0byBkZWxheSB0aGUgZXZl
bnRzLgorCiAyMDE0LTA3LTE3ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBGaXhlZCBwb3NpdGlvbiBlbGVtZW50cyBhcmUgbWlzcGxhY2VkIHdoZW4gYSBXSzEgdmll
dyBoYXMgY29udGVudEluc2V0cyBzZXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyZGRjMTVmYTQzMGI5OGNkM2Fi
YmMyMGZmNzVkZjEyMzRkYmMzN2ZhLi5iYzEwYWJhMDYzYjNkZmE0NjU5NmMxNzdiOGFhNmY2YTll
MmJkNzczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTQtMDctMTggIEJlbmphbWlu
IFBvdWxhaW4gIDxicG91bGFpbkBhcHBsZS5jb20+CisKKyAgICAgICAgW2lPU11bV0syXSBJbXBy
b3ZlIGV2ZW50IHRocm90dGxpbmcgZm9yIFNjcm9sbCBFdmVudHMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTA4MgorICAgICAgICA8cmRhcjovL3By
b2JsZW0vMTc0NDUyNjY+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW4gdGhlIFdlYktpdCBsYXllciwgd2Ugd2FudCBhIG1lYXN1cmUgdGhhdCBpcyBy
ZXByZXNlbnRhdGl2ZSBvZiB0aGUgcmVzcG9uc2l2ZW5lc3MuCisKKyAgICAgICAgSW4gdGhpcyBw
YXRjaCwgSSB1c2UgdGhlIHRvdGFsIGRlbGF5IGJldHdlZW4gYSBWaXNpYmxlQ29udGVudFJlY3RV
cGRhdGUgYmVpbmcgZGlzcGF0Y2hlZAorICAgICAgICBieSB0aGUgVUlQcm9jZXNzLCBhbmQgdGhl
IHRpbWUgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEgZmx1c2hlcyB0aGUgbGF5ZXIgdHJlZS4K
KworICAgICAgICBUaGUgdmFsdWUgdXNlZCBmb3IgZXZlbnRUaHJvdHRsaW5nRGVsYXkoKSBpcyBj
b21wdXRlZCBieSBhdmVyYWdpbmcgdGhlIG5ldyB2YWx1ZSB3aXRoCisgICAgICAgIHRoZSBvbGQg
dmFsdWVzIHdpdGggYSA4MC8yMCBzcGxpdCwgZmF2b3JpbmcgdGhlIG9sZCBkYXRhLiBGYXZvcmlu
ZyBoaXN0b3JpY2FsIGRhdGEKKyAgICAgICAgb3ZlciB0aGUgbGFzdCB0aW1pbmcgYXZvaWQgZXhj
ZXNzaXZlbHkgdGhyb3R0bGluZyBmb3IgYSBzaW5nbGUgc2xvdyBmcmFtZS4KKworICAgICAgICBU
aGUgY29tcHV0YXRpb24gb2YgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSBjYW4gYmUgaW1w
cm92ZWQgaW4gdGhlIGZ1dHVyZSwgdGhpcyBpcworICAgICAgICBhIGZpcnN0IGN1dCBrZWVwaW5n
IHRoaW5ncyBzaW1wbGUuCisKKyAgICAgICAgV2l0aCBtX2VzdGltYXRlZE1haW5UaHJlYWRMYXRl
bmN5IGluIG91ciBoYW5kcywgd2UgY2FuIGNvbXB1dGUgb3VyIGV2ZW50VGhyb3R0bGluZ0RlbGF5
KCkuCisgICAgICAgIElmIG1fZXN0aW1hdGVkTWFpblRocmVhZExhdGVuY3kgaXMgc21hbGxlciB0
aGFuIGEgc2luZ2xlIGZyYW1lIHRpbWVzcGFuLCB3ZSBoYXZlIGEgZmFzdCBwYWdlCisgICAgICAg
IGFuZCBub3RoaW5nIGlzIHRocm90dGxlZC4KKworICAgICAgICBJZiBpcyBpdCBtb3JlIHRoYW4g
YSBmcmFtZSwgd2UgdGhyb3R0bGUgc3VjaCB0aGF0IHdlIGNhbiBhdCBsZWFzdCByZW5kZXIgdHdv
IGZyYW1lcworICAgICAgICBwZXIgZXZlbnQgZGlzcGF0Y2ggYmFzZWQgb24gdGhlIGhpc3Rvcmlj
YWwgZGF0YS4KKworICAgICAgICBUaGUgZXhhY3QgdmFsdWVzIHdpbGwgbmVlZCBzb21lIHR3ZWFr
aW5nLCBidXQgdGhpcyBzZXQgZW5zdXJlcyB3ZWxsIHdyaXR0ZW4gcGFnZXMgZ2V0CisgICAgICAg
IDYwIGV2ZW50cyBwZXIgc2Vjb25kcywgd2hpbGUgc2xvdyBwYWdlcyBkbyBub3Qgd2FzdGUgdG9v
IG11Y2ggdGltZSBvbiBldmVudHMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViQ2hyb21l
Q2xpZW50OjpldmVudFRocm90dGxpbmdEZWxheSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld1VwZGF0
ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6CisgICAgICAgIChXZWJLaXQ6
OlZpZXdVcGRhdGVEaXNwYXRjaGVyOjpkaXNwYXRjaFZpc2libGVDb250ZW50UmVjdFVwZGF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGlkRmx1c2hM
YXllclRyZWVBdFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWRDb21taXRMb2Fk
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGFnZTo6ZXZlbnRUaHJvdHRsaW5nRGVsYXkpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYTo6Zmx1c2hMYXllcnMpOgorCiAyMDE0LTA3LTE3ICBCZW5q
YW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdW1dLMl0g
Rml4IHRoZSB1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzIHN5bmNocm9uaXphdGlvbiBmb3IgbG9h
ZCBhZnRlciByMTcxMTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNs
aWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaAppbmRleCBlMjljZjdm
YjQ1YmZkYmQwN2FjMTExOTlmZjhkYWRhMzZiMzc1ZWQzLi5iNmMyMDQ1ZjA0ODcyMmFjNWY0NDhh
MzI5NTczNTBjMDE4Y2IwYmUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9t
ZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKQEAgLTIz
Niw2ICsyMzYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZFByZXZlbnREZWZhdWx0
Rm9yRXZlbnQoKSA9IDA7CiAjZW5kaWYKIAorICAgIHZpcnR1YWwgZG91YmxlIGV2ZW50VGhyb3R0
bGluZ0RlbGF5KCkgeyByZXR1cm4gMDsgfTsKKwogI2lmIFBMQVRGT1JNKElPUykKICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZU1vYmlsZURvY1R5cGUoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCBzZXROZWVkc1Njcm9sbE5vdGlmaWNhdGlvbnMoRnJhbWUqLCBib29sKSA9IDA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggMjk0ODU3ZDY2MmU1MzMxMDIzNzliYWRiZGFmMmMy
YjdmMzE1YWMyYS4uODc0N2I0NTljZjE5MTI0MDBkMzdhZGJhZTliNGRhOGE4NjlmNGU5ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMTcwLDYgKzE3MCw3IEBAIEZyYW1lVmlldzo6
RnJhbWVWaWV3KEZyYW1lJiBmcmFtZSkKICAgICAsIG1fd2FzU2Nyb2xsZWRCeVVzZXIoZmFsc2Up
CiAgICAgLCBtX2luUHJvZ3JhbW1hdGljU2Nyb2xsKGZhbHNlKQogICAgICwgbV9zYWZlVG9Qcm9w
YWdhdGVTY3JvbGxUb1BhcmVudCh0cnVlKQorICAgICwgbV9kZWxheWVkU2Nyb2xsRXZlbnRUaW1l
cih0aGlzLCAmRnJhbWVWaWV3OjpkZWxheWVkU2Nyb2xsRXZlbnRUaW1lckZpcmVkKQogICAgICwg
bV9pc1RyYWNraW5nUmVwYWludHMoZmFsc2UpCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVdoaWxlT2Zm
c2NyZWVuKHRydWUpCiAgICAgLCBtX2V4cG9zZWRSZWN0KEZsb2F0UmVjdDo6aW5maW5pdGVSZWN0
KCkpCkBAIC0yNTUsNiArMjU2LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnJlc2V0KCkKICAgICBtX2Zp
cnN0TGF5b3V0Q2FsbGJhY2tQZW5kaW5nID0gZmFsc2U7CiAgICAgbV93YXNTY3JvbGxlZEJ5VXNl
ciA9IGZhbHNlOwogICAgIG1fc2FmZVRvUHJvcGFnYXRlU2Nyb2xsVG9QYXJlbnQgPSB0cnVlOwor
ICAgIG1fZGVsYXllZFNjcm9sbEV2ZW50VGltZXIuc3RvcCgpOwogICAgIG1fbGFzdFZpZXdwb3J0
U2l6ZSA9IEludFNpemUoKTsKICAgICBtX2xhc3Rab29tRmFjdG9yID0gMS4wZjsKICAgICBtX2lz
VHJhY2tpbmdSZXBhaW50cyA9IGZhbHNlOwpAQCAtMTcwMyw2ICsxNzA1LDExIEBAIEludFBvaW50
IEZyYW1lVmlldzo6bWF4aW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbWF4
aW11bU9mZnNldDsKIH0KIAordm9pZCBGcmFtZVZpZXc6OmRlbGF5ZWRTY3JvbGxFdmVudFRpbWVy
RmlyZWQoVGltZXI8RnJhbWVWaWV3PiYpCit7CisgICAgc2VuZFNjcm9sbEV2ZW50KCk7Cit9CisK
IGJvb2wgRnJhbWVWaWV3OjpmaXhlZEVsZW1lbnRzTGF5b3V0UmVsYXRpdmVUb0ZyYW1lKCkgY29u
c3QKIHsKICAgICByZXR1cm4gZnJhbWUoKS5zZXR0aW5ncygpLmZpeGVkRWxlbWVudHNMYXlvdXRS
ZWxhdGl2ZVRvRnJhbWUoKTsKQEAgLTIwMzksOSArMjA0NiwxNCBAQCB2b2lkIEZyYW1lVmlldzo6
c2Nyb2xsUG9zaXRpb25DaGFuZ2VkVmlhUGxhdGZvcm1XaWRnZXQoY29uc3QgSW50UG9pbnQmIG9s
ZFBvc2l0aQogCiB2b2lkIEZyYW1lVmlldzo6c2Nyb2xsUG9zaXRpb25DaGFuZ2VkKGNvbnN0IElu
dFBvaW50JiBvbGRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIG5ld1Bvc2l0aW9uKQogewotICAg
IGZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc2VuZFNjcm9sbEV2ZW50KCk7Ci0gICAgZnJhbWUoKS5l
dmVudEhhbmRsZXIoKS5kaXNwYXRjaEZha2VNb3VzZU1vdmVFdmVudFNvb24oKTsKLSAgICAKKyAg
ICBkb3VibGUgdGhyb3R0bGluZ0RlbGF5ID0gZnJhbWUoKS5wYWdlKCktPmNocm9tZSgpLmNsaWVu
dCgpLmV2ZW50VGhyb3R0bGluZ0RlbGF5KCk7CisKKyAgICBpZiAoIXRocm90dGxpbmdEZWxheSkg
eworICAgICAgICBtX2RlbGF5ZWRTY3JvbGxFdmVudFRpbWVyLnN0b3AoKTsKKyAgICAgICAgc2Vu
ZFNjcm9sbEV2ZW50KCk7CisgICAgfSBlbHNlIGlmICghbV9kZWxheWVkU2Nyb2xsRXZlbnRUaW1l
ci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2RlbGF5ZWRTY3JvbGxFdmVudFRpbWVyLnN0YXJ0T25l
U2hvdCh0aHJvdHRsaW5nRGVsYXkpOworCiAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lKCkuZG9jdW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPnNlbmRXaWxsUmV2ZWFsRWRnZUV2
ZW50c0lmTmVlZGVkKG9sZFBvc2l0aW9uLCBuZXdQb3NpdGlvbiwgdmlzaWJsZUNvbnRlbnRSZWN0
KCksIGNvbnRlbnRzU2l6ZSgpKTsKIApAQCAtNDEzMiw2ICs0MTQ0LDEyIEBAIHZvaWQgRnJhbWVW
aWV3OjpzY3JvbGxhYmxlQXJlYVNldENoYW5nZWQoKQogICAgIH0KIH0KIAordm9pZCBGcmFtZVZp
ZXc6OnNlbmRTY3JvbGxFdmVudCgpCit7CisgICAgZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zZW5k
U2Nyb2xsRXZlbnQoKTsKKyAgICBmcmFtZSgpLmV2ZW50SGFuZGxlcigpLmRpc3BhdGNoRmFrZU1v
dXNlTW92ZUV2ZW50U29vbigpOworfQorCiB2b2lkIEZyYW1lVmlldzo6cmVtb3ZlQ2hpbGQoV2lk
Z2V0KiB3aWRnZXQpCiB7CiAgICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCmluZGV4IDAwYWYwZDdiMjhkNWJkMTViZjI2ZjU4OTBhNTFjNzEyNjNjZTZm
ZDQuLjZjZjVlYjdiMzUwOTJhNzE2ZTAyOTU2NWYyZDk1NTBlYzcwODFjNWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuaApAQCAtMjQxLDYgKzI0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgaXNSdWJiZXJCYW5kSW5Qcm9ncmVzcygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwg
SW50UG9pbnQgbWluaW11bVNjcm9sbFBvc2l0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCBJbnRQb2ludCBtYXhpbXVtU2Nyb2xsUG9zaXRpb24oKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlbGF5ZWRTY3JvbGxFdmVudFRpbWVyRmlyZWQoVGltZXI8RnJhbWVWaWV3PiYpOwog
CiAgICAgLy8gVGhpcyBpcyBkaWZmZXJlbnQgdGhhbiB2aXNpYmxlQ29udGVudFJlY3QoKSBpbiB0
aGF0IGl0IGlnbm9yZXMgbmVnYXRpdmUgKG9yIG92ZXJseSBwb3NpdGl2ZSkKICAgICAvLyBvZmZz
ZXRzIGZyb20gcnViYmVyLWJhbmRpbmcsIGFuZCBpdCB0YWtlcyB6b29taW5nIGludG8gYWNjb3Vu
dC4gCkBAIC01OTcsNiArNTk4LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjcm9sbFRvQW5jaG9y
KCk7CiAgICAgdm9pZCBzY3JvbGxQb3NpdGlvbkNoYW5nZWQoY29uc3QgSW50UG9pbnQmIG9sZFBv
c2l0aW9uLCBjb25zdCBJbnRQb2ludCYgbmV3UG9zaXRpb24pOwogICAgIHZvaWQgc2Nyb2xsYWJs
ZUFyZWFTZXRDaGFuZ2VkKCk7CisgICAgdm9pZCBzZW5kU2Nyb2xsRXZlbnQoKTsKIAogICAgIGJv
b2wgaGFzQ3VzdG9tU2Nyb2xsYmFycygpIGNvbnN0OwogCkBAIC02NjYsNiArNjY4LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fd2FzU2Nyb2xsZWRCeVVzZXI7CiAgICAgYm9vbCBtX2luUHJvZ3Jh
bW1hdGljU2Nyb2xsOwogICAgIGJvb2wgbV9zYWZlVG9Qcm9wYWdhdGVTY3JvbGxUb1BhcmVudDsK
KyAgICBUaW1lcjxGcmFtZVZpZXc+IG1fZGVsYXllZFNjcm9sbEV2ZW50VGltZXI7CiAKICAgICBk
b3VibGUgbV9sYXN0UGFpbnRUaW1lOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCAwZTE0ZmUx
MGFiNGIxNjNlMWFjMGUxYzM0N2QzMWM2NzMxYzA4ZWNiLi45NDllMmZlMzcxNTc5ZTRiYWYzNmMx
YmRlMzU5MzQ0YWQ1YzQwZDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTE4MSw2ICsxODEs
OCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHdlYkFwcE9yaWVudGF0aW9uc1VwZGF0
ZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2hvd1BsYXliYWNrVGFyZ2V0UGlja2Vy
KGJvb2wgaGFzVmlkZW8pIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBkb3VibGUgZXZlbnRUaHJv
dHRsaW5nRGVsYXkoKSBvdmVycmlkZTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKE9SSUVOVEFUSU9O
X0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvaW9zL1dlYkNocm9tZUNsaWVudElPUy5tbQppbmRleCBmNWJiNDA3
YzRkZGZkYTcwYWY4YjEyNmFiOGNmOTViYmQ5MWIzZTEwLi5hOTlmYzhiOWEzYTk2ZDE2MDY1ZTU1
YzQyOTJkNTIwOTFhM2Y2ZmU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2lvcy9XZWJDaHJvbWVDbGllbnRJT1MubW0KKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9pb3MvV2ViQ2hyb21lQ2xpZW50SU9TLm1t
CkBAIC0xMzUsNiArMTM1LDExIEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpzaG93UGxheWJhY2tU
YXJnZXRQaWNrZXIoYm9vbCBoYXNWaWRlbykKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2hvd1BsYXliYWNrVGFyZ2V0UGlja2VyKGhhc1ZpZGVvLCBtX3BhZ2UtPnJl
Y3RGb3JFbGVtZW50QXRJbnRlcmFjdGlvbkxvY2F0aW9uKCkpKTsKIH0KIAorZG91YmxlIFdlYkNo
cm9tZUNsaWVudDo6ZXZlbnRUaHJvdHRsaW5nRGVsYXkoKQoreworICAgIHJldHVybiBtX3BhZ2Ut
PmV2ZW50VGhyb3R0bGluZ0RlbGF5KCk7Cit9CisKIGludCBXZWJDaHJvbWVDbGllbnQ6OmRldmlj
ZU9yaWVudGF0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9wYWdlLT5kZXZpY2VPcmllbnRh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zp
ZXdVcGRhdGVEaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5jcHAKaW5kZXggYmI1ZmQ5NjlkMTE2ODczMmU0YWNmY2U1
NmRjY2Y4ODRlMWM3NDM4Yy4uMWQ1YmUwNDA3MGVjYTJlODdhZWIyYjhlZDYxNjk3OTgwYjkzMmZm
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRh
dGVEaXNwYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Vmlld1VwZGF0ZURpc3BhdGNoZXIuY3BwCkBAIC02MSw3ICs2MSwxMSBAQCB2b2lkIFZpZXdVcGRh
dGVEaXNwYXRjaGVyOjp2aXNpYmxlQ29udGVudFJlY3RVcGRhdGUodWludDY0X3QgcGFnZUlELCBj
b25zdCBWaXNpYgogICAgIHsKICAgICAgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2RhdGFN
dXRleCk7CiAgICAgICAgIHVwZGF0ZUxpc3RXYXNFbXB0eSA9IG1fbGF0ZXN0VXBkYXRlLmlzRW1w
dHkoKTsKLSAgICAgICAgbV9sYXRlc3RVcGRhdGUuc2V0KHBhZ2VJRCwgdmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlSW5mbyk7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX2xhdGVzdFVwZGF0ZS5m
aW5kKHBhZ2VJRCk7CisgICAgICAgIGlmIChpdGVyYXRvciA9PSBtX2xhdGVzdFVwZGF0ZS5lbmQo
KSkKKyAgICAgICAgICAgIG1fbGF0ZXN0VXBkYXRlLnNldDxVcGRhdGVEYXRhPihwYWdlSUQsIHsg
dmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbywgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5m
by50aW1lc3RhbXAoKSB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaXRlcmF0b3ItPnZh
bHVlLnZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8gPSB2aXNpYmxlQ29udGVudFJlY3RVcGRh
dGVJbmZvOwogICAgIH0KICAgICBpZiAodXBkYXRlTGlzdFdhc0VtcHR5KQogICAgICAgICBSdW5M
b29wOjptYWluKCkuZGlzcGF0Y2goYmluZCgmVmlld1VwZGF0ZURpc3BhdGNoZXI6OmRpc3BhdGNo
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlLCB0aGlzKSk7CkBAIC02OSw3ICs3Myw3IEBAIHZvaWQg
Vmlld1VwZGF0ZURpc3BhdGNoZXI6OnZpc2libGVDb250ZW50UmVjdFVwZGF0ZSh1aW50NjRfdCBw
YWdlSUQsIGNvbnN0IFZpc2liCiAKIHZvaWQgVmlld1VwZGF0ZURpc3BhdGNoZXI6OmRpc3BhdGNo
VmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlKCkKIHsKLSAgICBIYXNoTWFwPHVpbnQ2NF90LCBWaXNp
YmxlQ29udGVudFJlY3RVcGRhdGVJbmZvPiBsb2NhbENvcHk7CisgICAgSGFzaE1hcDx1aW50NjRf
dCwgVXBkYXRlRGF0YT4gbG9jYWxDb3B5OwogICAgIHsKICAgICAgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2RhdGFNdXRleCk7CiAgICAgICAgIGxvY2FsQ29weS5zd2FwKG1fbGF0ZXN0VXBk
YXRlKTsKQEAgLTc3LDcgKzgxLDcgQEAgdm9pZCBWaWV3VXBkYXRlRGlzcGF0Y2hlcjo6ZGlzcGF0
Y2hWaXNpYmxlQ29udGVudFJlY3RVcGRhdGUoKQogCiAgICAgZm9yIChhdXRvJiBzbG90IDogbG9j
YWxDb3B5KSB7CiAgICAgICAgIGlmIChXZWJQYWdlKiB3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hh
cmVkKCkud2ViUGFnZShzbG90LmtleSkpCi0gICAgICAgICAgICB3ZWJQYWdlLT51cGRhdGVWaXNp
YmxlQ29udGVudFJlY3RzKHNsb3QudmFsdWUpOworICAgICAgICAgICAgd2ViUGFnZS0+dXBkYXRl
VmlzaWJsZUNvbnRlbnRSZWN0cyhzbG90LnZhbHVlLnZpc2libGVDb250ZW50UmVjdFVwZGF0ZUlu
Zm8sIHNsb3QudmFsdWUub2xkZXN0VGltZXN0YW1wKTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3VXBkYXRlRGlzcGF0Y2hlci5o
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVy
LmgKaW5kZXggZTJmM2M2YTFjZTBjY2I0NTA5NzliMzZlYWRjZjcxZjQ3ZTg1YWNlZS4uYjUzOGJi
YjRmNWJmMTE1ZjEzY2YyNzZhOTI1ODY2NmQzMmM1OTJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdVcGRhdGVEaXNwYXRjaGVyLmgKQEAg
LTUxLDkgKzUxLDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRpc3BhdGNoVmlzaWJsZUNvbnRl
bnRSZWN0VXBkYXRlKCk7CiAKKyAgICBzdHJ1Y3QgVXBkYXRlRGF0YSB7CisgICAgICAgIFZpc2li
bGVDb250ZW50UmVjdFVwZGF0ZUluZm8gdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbzsKKyAg
ICAgICAgZG91YmxlIG9sZGVzdFRpbWVzdGFtcDsKKyAgICB9OworCiAgICAgUmVmUHRyPFdvcmtR
dWV1ZT4gbV9xdWV1ZTsKICAgICBTcGluTG9jayBtX2RhdGFNdXRleDsKLSAgICBIYXNoTWFwPHVp
bnQ2NF90LCBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvPiBtX2xhdGVzdFVwZGF0ZTsKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBVcGRhdGVEYXRhPiBtX2xhdGVzdFVwZGF0ZTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCmluZGV4IGFmMGU2YWQzOTc2ZTU0ZTk3ZWYyNzBmODNiMjUzMTQ5MmQ1MzZi
ZmIuLjAzZGI2ZjI4Y2IyOGZlYzJjYjFjNDQwOTg5Yjk1NDVlZDAwNjRlZjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTMwNCw2ICszMDQs
OSBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0
aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICAsIG1fdXNlcklzSW50ZXJhY3RpbmcoZmFs
c2UpCiAgICAgLCBtX2hhc1BlbmRpbmdCbHVyTm90aWZpY2F0aW9uKGZhbHNlKQogICAgICwgbV91
c2VUZXN0aW5nVmlld3BvcnRDb25maWd1cmF0aW9uKGZhbHNlKQorICAgICwgbV9pc0luU3RhYmxl
U3RhdGUodHJ1ZSkKKyAgICAsIG1fb2xkZXN0Tm9uU3RhYmxlVXBkYXRlVmlzaWJsZUNvbnRlbnRS
ZWN0c1RpbWVzdGFtcCgwKQorICAgICwgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSgwKQog
ICAgICwgbV9zY3JlZW5TaXplKHBhcmFtZXRlcnMuc2NyZWVuU2l6ZSkKICAgICAsIG1fYXZhaWxh
YmxlU2NyZWVuU2l6ZShwYXJhbWV0ZXJzLmF2YWlsYWJsZVNjcmVlblNpemUpCiAgICAgLCBtX2Rl
dmljZU9yaWVudGF0aW9uKDApCkBAIC0yODY3LDYgKzI4NzAsMjAgQEAgdm9pZCBXZWJQYWdlOjp3
aWxsQ29tbWl0TGF5ZXJUcmVlKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uJiBsYXllclRyYW5z
YWN0aW9uKQogICAgIGxheWVyVHJhbnNhY3Rpb24uc2V0QWxsb3dzVXNlclNjYWxpbmcoYWxsb3dz
VXNlclNjYWxpbmcoKSk7CiAjZW5kaWYKIH0KKwordm9pZCBXZWJQYWdlOjpkaWRGbHVzaExheWVy
VHJlZUF0VGltZShkb3VibGUgdGltZXN0YW1wKQoreworI2lmIFBMQVRGT1JNKElPUykKKyAgICBp
ZiAobV9vbGRlc3ROb25TdGFibGVVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzVGltZXN0YW1wKSB7
CisgICAgICAgIGRvdWJsZSBlbGFwc2VkID0gdGltZXN0YW1wIC0gbV9vbGRlc3ROb25TdGFibGVV
cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzVGltZXN0YW1wOworICAgICAgICBtX29sZGVzdE5vblN0
YWJsZVVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNUaW1lc3RhbXAgPSAwOworCisgICAgICAgIG1f
ZXN0aW1hdGVkTWFpblRocmVhZExhdGVuY3kgPSBtX2VzdGltYXRlZE1haW5UaHJlYWRMYXRlbmN5
ICogMC44MCArIGVsYXBzZWQgKiAwLjIwOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHRpbWVzdGFtcCk7CisjZW5kaWYKK30KICNlbmRpZgogCiAgICAgCkBAIC00NDUyLDYgKzQ0Njks
NyBAQCB2b2lkIFdlYlBhZ2U6OmRpZENvbW1pdExvYWQoV2ViRnJhbWUqIGZyYW1lKQogICAgIG1f
c2NhbGVXYXNTZXRCeVVJUHJvY2VzcyA9IGZhbHNlOwogICAgIG1fZmlyc3RMYXllclRyZWVUcmFu
c2FjdGlvbklEQWZ0ZXJEaWRDb21taXRMb2FkID0gdG9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YSgqbV9kcmF3aW5nQXJlYSkubmV4dFRyYW5zYWN0aW9uSUQoKTsKICAgICBtX3VzZXJIYXNDaGFu
Z2VkUGFnZVNjYWxlRmFjdG9yID0gZmFsc2U7CisgICAgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0
ZW5jeSA9IDEgLyA2MC47CiAKICAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5ldmVudERpc3BhdGNo
ZXIoKS5jbGVhclF1ZXVlZFRvdWNoRXZlbnRzRm9yUGFnZSgqdGhpcyk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQzNmVjYjA5ZmI3NTk0MGJj
MjhlMDdjZGJiNjMyNDdiOGU1YzRlODQuLmI3MGZiNWNmODY3ZmVhZWJmMmJkMmQwNWZmNzAzZmIz
ZjgwZTdmMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
aApAQCAtMjIzLDYgKzIyMyw3IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHZvaWQgd2lsbENvbW1pdExheWVyVHJlZShSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbiYpOwor
ICAgIHZvaWQgZGlkRmx1c2hMYXllclRyZWVBdFRpbWUoZG91YmxlKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKElOU1BFQ1RPUikKQEAgLTUwOSw2ICs1MTAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBk
aXNwYXRjaEFzeW5jaHJvbm91c1RvdWNoRXZlbnRzKGNvbnN0IFZlY3RvcjxXZWJUb3VjaEV2ZW50
LCAxPiYgcXVldWUpOwogICAgIHZvaWQgY29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShjb25z
dCBTdHJpbmcmKTsKICAgICB2b2lkIGV4ZWN1dGVFZGl0Q29tbWFuZFdpdGhDYWxsYmFjayhjb25z
dCBTdHJpbmcmLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKworICAgIGRvdWJsZSBldmVudFRocm90
dGxpbmdEZWxheSgpIGNvbnN0OwogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgdm9pZCBzaG93
SW5zcGVjdG9ySGlnaGxpZ2h0KGNvbnN0IFdlYkNvcmU6OkhpZ2hsaWdodCYpOwogICAgIHZvaWQg
aGlkZUluc3BlY3RvckhpZ2hsaWdodCgpOwpAQCAtNzQ4LDcgKzc1MSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldERldmljZU9yaWVudGF0aW9uKGludDMyX3QpOwogICAgIHZvaWQgZHluYW1pY1Zp
ZXdwb3J0U2l6ZVVwZGF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG1pbmltdW1MYXlvdXRT
aXplLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG1pbmltdW1MYXlvdXRTaXplRm9yTWluaW1h
bFVJLCBjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIG1heGltdW1Vbm9ic2N1cmVkU2l6ZSwgY29u
c3QgV2ViQ29yZTo6RmxvYXRSZWN0JiB0YXJnZXRFeHBvc2VkQ29udGVudFJlY3QsIGNvbnN0IFdl
YkNvcmU6OkZsb2F0UmVjdCYgdGFyZ2V0VW5vYnNjdXJlZFJlY3QsIGNvbnN0IFdlYkNvcmU6OkZs
b2F0UmVjdCYgdGFyZ2V0VW5vYnNjdXJlZFJlY3RJblNjcm9sbFZpZXdDb29yZGluYXRlcywgZG91
YmxlIHNjYWxlLCBpbnQzMl90IGRldmljZU9yaWVudGF0aW9uKTsKICAgICB2b2lkIHN5bmNocm9u
aXplRHluYW1pY1ZpZXdwb3J0VXBkYXRlKGRvdWJsZSYgbmV3VGFyZ2V0U2NhbGUsIFdlYkNvcmU6
OkZsb2F0UG9pbnQmIG5ld1Njcm9sbFBvc2l0aW9uLCB1aW50NjRfdCYgbmV4dFZhbGlkTGF5ZXJU
cmVlVHJhbnNhY3Rpb25JRCk7Ci0gICAgdm9pZCB1cGRhdGVWaXNpYmxlQ29udGVudFJlY3RzKGNv
bnN0IFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8mKTsKKyAgICB2b2lkIHVwZGF0ZVZpc2li
bGVDb250ZW50UmVjdHMoY29uc3QgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mbyYsIGRvdWJs
ZSk7CiAgICAgYm9vbCBzY2FsZVdhc1NldEJ5VUlQcm9jZXNzKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZVdhc1NldEJ5VUlQcm9jZXNzOyB9CiAgICAgdm9pZCB3aWxsU3RhcnRVc2VyVHJpZ2dlcmVk
Wm9vbWluZygpOwogICAgIHZvaWQgYXBwbGljYXRpb25XaWxsUmVzaWduQWN0aXZlKCk7CkBAIC0x
MjMzLDYgKzEyMzYsOSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VySXNJbnRlcmFjdGluZzsK
ICAgICBib29sIG1faGFzUGVuZGluZ0JsdXJOb3RpZmljYXRpb247CiAgICAgYm9vbCBtX3VzZVRl
c3RpbmdWaWV3cG9ydENvbmZpZ3VyYXRpb247CisgICAgYm9vbCBtX2lzSW5TdGFibGVTdGF0ZTsK
KyAgICBkb3VibGUgbV9vbGRlc3ROb25TdGFibGVVcGRhdGVWaXNpYmxlQ29udGVudFJlY3RzVGlt
ZXN0YW1wOworICAgIGRvdWJsZSBtX2VzdGltYXRlZE1haW5UaHJlYWRMYXRlbmN5OwogICAgIFdl
YkNvcmU6OkZsb2F0U2l6ZSBtX3NjcmVlblNpemU7CiAgICAgV2ViQ29yZTo6RmxvYXRTaXplIG1f
YXZhaWxhYmxlU2NyZWVuU2l6ZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IG1fY3VycmVu
dEJsb2NrU2VsZWN0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGFkNzI1MDg0OGFmYTJjMzI0YjZlMGQ5NDdjYmIz
ZWJlMDM4NzU4NzEuLjE2MmIzZDk5YWUwMTZjNjVlOGIyOWMwY2ZmY2Y1MzgxM2IxOTc3MjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW0KQEAgLTE2NzUsNiArMTY3NSwxNCBAQCB2b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0Q29t
bWFuZFdpdGhDYWxsYmFjayhjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1lLCB1aW50NjRfdAogICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsK
IH0KIAorZG91YmxlIFdlYlBhZ2U6OmV2ZW50VGhyb3R0bGluZ0RlbGF5KCkgY29uc3QKK3sKKyAg
ICBpZiAobV9pc0luU3RhYmxlU3RhdGUgfHwgbV9lc3RpbWF0ZWRNYWluVGhyZWFkTGF0ZW5jeSA8
PSAxLiAvIDYwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGQ6Om1pbjxkb3Vi
bGU+KG1fZXN0aW1hdGVkTWFpblRocmVhZExhdGVuY3kgKiAyLCAxKTsKK30KKwogdm9pZCBXZWJQ
YWdlOjpzeW5jQXBwbHlBdXRvY29ycmVjdGlvbihjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24sIGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxUZXh0LCBib29sJiBjb3JyZWN0aW9uQXBwbGllZCkKIHsKICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwpAQCAtMjQzNywxOCArMjQ0NSwxOSBAQCBzdGF0aWMgaW5s
aW5lIEZsb2F0UmVjdCBhZGp1c3RFeHBvc2VkUmVjdEZvckJvdW5kZWRTY2FsZShjb25zdCBGbG9h
dFJlY3QmIGV4cG9zZQogICAgIHJldHVybiBhZGp1c3RFeHBvc2VkUmVjdEZvck5ld1NjYWxlKGV4
cG9zZWRSZWN0LCBleHBvc2VkUmVjdFNjYWxlLCBuZXdTY2FsZSk7CiB9CiAKLXZvaWQgV2ViUGFn
ZTo6dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhjb25zdCBWaXNpYmxlQ29udGVudFJlY3RVcGRh
dGVJbmZvJiB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvKQordm9pZCBXZWJQYWdlOjp1cGRh
dGVWaXNpYmxlQ29udGVudFJlY3RzKGNvbnN0IFZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8m
IHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8sIGRvdWJsZSBvbGRlc3RUaW1lc3RhbXApCiB7
CiAgICAgLy8gU2tpcCBhbnkgVmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlIHRoYXQgaGF2ZSBiZWVu
IHF1ZXVlZCBiZWZvcmUgRGlkQ29tbWl0TG9hZCBzdXBwcmVzc2VzIHRoZSB1cGRhdGVzIGluIHRo
ZSBVSVByb2Nlc3MuCiAgICAgaWYgKHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8ubGFzdExh
eWVyVHJlZVRyYW5zYWN0aW9uSUQoKSA8IG1fZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0
ZXJEaWRDb21taXRMb2FkKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2hhc1JlY2VpdmVkVmlz
aWJsZUNvbnRlbnRSZWN0c0FmdGVyRGlkQ29tbWl0TG9hZCA9IHRydWU7CisgICAgbV9pc0luU3Rh
YmxlU3RhdGUgPSB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmluU3RhYmxlU3RhdGUoKTsK
IAogICAgIGRvdWJsZSBzY2FsZU5vaXNlVGhyZXNob2xkID0gMC4wMDU7CiAgICAgZG91YmxlIGZp
bHRlcmVkU2NhbGUgPSB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLnNjYWxlKCk7CiAgICAg
ZG91YmxlIGN1cnJlbnRTY2FsZSA9IG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgaWYg
KCF2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmluU3RhYmxlU3RhdGUoKSAmJiBmYWJzKGZp
bHRlcmVkU2NhbGUgLSBtX3BhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpKSA8IHNjYWxlTm9pc2VUaHJl
c2hvbGQpIHsKKyAgICBpZiAoIW1faXNJblN0YWJsZVN0YXRlICYmIGZhYnMoZmlsdGVyZWRTY2Fs
ZSAtIG1fcGFnZS0+cGFnZVNjYWxlRmFjdG9yKCkpIDwgc2NhbGVOb2lzZVRocmVzaG9sZCkgewog
ICAgICAgICAvLyBUaW55IGNoYW5nZXMgb2Ygc2NhbGUgZHVyaW5nIGludGVyYWN0aXZlIHpvb20g
Y2F1c2UgY29udGVudCB0byBqdW1wIGJ5IG9uZSBwaXhlbCwgY3JlYXRpbmcKICAgICAgICAgLy8g
dmlzdWFsIG5vaXNlLiBXZSBmaWx0ZXIgdGhvc2UgdXNlbGVzcyB1cGRhdGVzLgogICAgICAgICBm
aWx0ZXJlZFNjYWxlID0gY3VycmVudFNjYWxlOwpAQCAtMjQ1NywyNyArMjQ2NiwzMSBAQCB2b2lk
IFdlYlBhZ2U6OnVwZGF0ZVZpc2libGVDb250ZW50UmVjdHMoY29uc3QgVmlzaWJsZUNvbnRlbnRS
ZWN0VXBkYXRlSW5mbyYgdmlzaQogICAgIGRvdWJsZSBib3VuZGVkU2NhbGUgPSBzdGQ6Om1pbiht
X3ZpZXdwb3J0Q29uZmlndXJhdGlvbi5tYXhpbXVtU2NhbGUoKSwgc3RkOjptYXgobV92aWV3cG9y
dENvbmZpZ3VyYXRpb24ubWluaW11bVNjYWxlKCksIGZpbHRlcmVkU2NhbGUpKTsKIAogICAgIC8v
IFNraXAgcHJvZ3Jlc3NpdmVseSByZWRyYXdpbmcgdGlsZXMgaWYgcGluY2gtem9vbWluZyB3aGls
ZSB0aGUgc3lzdGVtIGlzIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KLSAgICBpZiAoYm91bmRlZFNj
YWxlICE9IGN1cnJlbnRTY2FsZSAmJiAhdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5pblN0
YWJsZVN0YXRlKCkgJiYgbWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaXNVbmRlck1lbW9yeVByZXNz
dXJlKCkpCisgICAgaWYgKGJvdW5kZWRTY2FsZSAhPSBjdXJyZW50U2NhbGUgJiYgIW1faXNJblN0
YWJsZVN0YXRlICYmIG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmlzVW5kZXJNZW1vcnlQcmVzc3Vy
ZSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAobV9pc0luU3RhYmxlU3RhdGUpCisgICAg
ICAgIG1faGFzU3RhYmxlUGFnZVNjYWxlRmFjdG9yID0gdHJ1ZTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX29sZGVzdE5vblN0YWJsZVVwZGF0ZVZpc2libGVDb250ZW50UmVjdHNUaW1lc3Rh
bXApCisgICAgICAgICAgICBtX29sZGVzdE5vblN0YWJsZVVwZGF0ZVZpc2libGVDb250ZW50UmVj
dHNUaW1lc3RhbXAgPSBvbGRlc3RUaW1lc3RhbXA7CisgICAgfQorCiAgICAgRmxvYXRSZWN0IGV4
cG9zZWRSZWN0ID0gdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5leHBvc2VkUmVjdCgpOwog
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZEV4cG9zZWRSZWN0ID0gYWRqdXN0RXhwb3NlZFJlY3RGb3JC
b3VuZGVkU2NhbGUoZXhwb3NlZFJlY3QsIHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uc2Nh
bGUoKSwgYm91bmRlZFNjYWxlKTsKICAgICBtX2RyYXdpbmdBcmVhLT5zZXRFeHBvc2VkQ29udGVu
dFJlY3QoYWRqdXN0ZWRFeHBvc2VkUmVjdCk7CiAKICAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlv
biA9IHJvdW5kZWRJbnRQb2ludCh2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLnVub2JzY3Vy
ZWRSZWN0KCkubG9jYXRpb24oKSk7CiAKLSAgICBpZiAoIW1faGFzU3RhYmxlUGFnZVNjYWxlRmFj
dG9yICYmIHZpc2libGVDb250ZW50UmVjdFVwZGF0ZUluZm8uaW5TdGFibGVTdGF0ZSgpKQotICAg
ICAgICBtX2hhc1N0YWJsZVBhZ2VTY2FsZUZhY3RvciA9IHRydWU7Ci0KICAgICBmbG9hdCBmbG9h
dEJvdW5kZWRTY2FsZSA9IGJvdW5kZWRTY2FsZTsKICAgICBib29sIGhhc1NldFBhZ2VTY2FsZSA9
IGZhbHNlOwogICAgIGlmIChmbG9hdEJvdW5kZWRTY2FsZSAhPSBjdXJyZW50U2NhbGUpIHsKICAg
ICAgICAgbV9zY2FsZVdhc1NldEJ5VUlQcm9jZXNzID0gdHJ1ZTsKLSAgICAgICAgbV9oYXNTdGFi
bGVQYWdlU2NhbGVGYWN0b3IgPSB2aXNpYmxlQ29udGVudFJlY3RVcGRhdGVJbmZvLmluU3RhYmxl
U3RhdGUoKTsKKyAgICAgICAgbV9oYXNTdGFibGVQYWdlU2NhbGVGYWN0b3IgPSBtX2lzSW5TdGFi
bGVTdGF0ZTsKIAogICAgICAgICBtX2R5bmFtaWNTaXplVXBkYXRlSGlzdG9yeS5jbGVhcigpOwog
Ci0gICAgICAgIG1fcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKGZsb2F0Qm91bmRlZFNjYWxlLCBz
Y3JvbGxQb3NpdGlvbiwgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5mby5pblN0YWJsZVN0YXRl
KCkpOworICAgICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihmbG9hdEJvdW5kZWRTY2Fs
ZSwgc2Nyb2xsUG9zaXRpb24sIG1faXNJblN0YWJsZVN0YXRlKTsKICAgICAgICAgaGFzU2V0UGFn
ZVNjYWxlID0gdHJ1ZTsKIAogICAgICAgICBpZiAoTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9z
dCA9IG1fZHJhd2luZ0FyZWEtPmxheWVyVHJlZUhvc3QoKSkKQEAgLTI0ODUsNyArMjQ5OCw3IEBA
IHZvaWQgV2ViUGFnZTo6dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhjb25zdCBWaXNpYmxlQ29u
dGVudFJlY3RVcGRhdGVJbmZvJiB2aXNpCiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6UGFnZVNjYWxlRmFjdG9yRGlkQ2hhbmdlKGZsb2F0Qm91bmRlZFNjYWxlKSk7CiAgICAg
fQogCi0gICAgaWYgKCFoYXNTZXRQYWdlU2NhbGUgJiYgdmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRl
SW5mby5pblN0YWJsZVN0YXRlKCkpIHsKKyAgICBpZiAoIWhhc1NldFBhZ2VTY2FsZSAmJiBtX2lz
SW5TdGFibGVTdGF0ZSkgewogICAgICAgICBtX3BhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihmbG9h
dEJvdW5kZWRTY2FsZSwgc2Nyb2xsUG9zaXRpb24sIHRydWUpOwogICAgICAgICBoYXNTZXRQYWdl
U2NhbGUgPSB0cnVlOwogICAgIH0KQEAgLTI1MDMsNyArMjUxNiw3IEBAIHZvaWQgV2ViUGFnZTo6
dXBkYXRlVmlzaWJsZUNvbnRlbnRSZWN0cyhjb25zdCBWaXNpYmxlQ29udGVudFJlY3RVcGRhdGVJ
bmZvJiB2aXNpCiAKICAgICBmcmFtZVZpZXcuc2V0U2Nyb2xsVmVsb2NpdHkoaG9yaXpvbnRhbFZl
bG9jaXR5LCB2ZXJ0aWNhbFZlbG9jaXR5LCBzY2FsZUNoYW5nZVJhdGUsIHZpc2libGVDb250ZW50
UmVjdFVwZGF0ZUluZm8udGltZXN0YW1wKCkpOwogCi0gICAgaWYgKHZpc2libGVDb250ZW50UmVj
dFVwZGF0ZUluZm8uaW5TdGFibGVTdGF0ZSgpKQorICAgIGlmIChtX2lzSW5TdGFibGVTdGF0ZSkK
ICAgICAgICAgbV9wYWdlLT5tYWluRnJhbWUoKS52aWV3KCktPnNldEN1c3RvbUZpeGVkUG9zaXRp
b25MYXlvdXRSZWN0KGVuY2xvc2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0VXBkYXRlSW5m
by5jdXN0b21GaXhlZFBvc2l0aW9uUmVjdCgpKSk7CiAKICAgICBpZiAoIXZpc2libGVDb250ZW50
UmVjdFVwZGF0ZUluZm8uaXNDaGFuZ2luZ09ic2N1cmVkSW5zZXRzSW50ZXJhY3RpdmVseSgpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5kZXggNDA5NWFhOTU5OGZlNTEw
NjEyYzYxYTQ0NGMyMmI2OGJiMGNjMTFjNi4uYTJiZWMyMGY3OGY2NmEwOTE1ZjI0ZDk4MzUwYjU5
NDY5NWI1MmRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0z
NjUsOCArMzY1LDE2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZsdXNoTGF5
ZXJzKCkKICAgICBSZWZQdHI8QmFja2luZ1N0b3JlRmx1c2hlcj4gYmFja2luZ1N0b3JlRmx1c2hl
ciA9IEJhY2tpbmdTdG9yZUZsdXNoZXI6OmNyZWF0ZShXZWJQcm9jZXNzOjpzaGFyZWQoKS5wYXJl
bnRQcm9jZXNzQ29ubmVjdGlvbigpLCBXVEY6Om1vdmUoY29tbWl0RW5jb2RlciksIFdURjo6bW92
ZShjb250ZXh0c1RvRmx1c2gpKTsKICAgICBtX3BlbmRpbmdCYWNraW5nU3RvcmVGbHVzaGVyID0g
YmFja2luZ1N0b3JlRmx1c2hlcjsKIAotICAgIGRpc3BhdGNoX2FzeW5jKG1fY29tbWl0UXVldWUs
IFtiYWNraW5nU3RvcmVGbHVzaGVyXXsKKyAgICB1aW50NjRfdCBwYWdlSUQgPSBtX3dlYlBhZ2Uu
cGFnZUlEKCk7CisgICAgZGlzcGF0Y2hfYXN5bmMobV9jb21taXRRdWV1ZSwgW2JhY2tpbmdTdG9y
ZUZsdXNoZXIsIHBhZ2VJRF0gewogICAgICAgICBiYWNraW5nU3RvcmVGbHVzaGVyLT5mbHVzaCgp
OworCisgICAgICAgIGlmIChXZWJQYWdlICp3ZWJQYWdlID0gV2ViUHJvY2Vzczo6c2hhcmVkKCku
d2ViUGFnZShwYWdlSUQpKSB7CisgICAgICAgICAgICBkb3VibGUgdGltZXN0YW1wID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CisgICAgICAgICAgICBkaXNwYXRjaF9hc3luYyhkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpLCBeeworICAgICAgICAgICAgICAgIHdlYlBhZ2UtPmRpZEZs
dXNoTGF5ZXJUcmVlQXRUaW1lKHRpbWVzdGFtcCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQogICAgIH0pOwogfQogCg==
</data>
<flag name="review"
          id="259719"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>