<?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>85004</bug_id>
          
          <creation_ts>2012-04-26 13:54:27 -0700</creation_ts>
          <short_desc>Cache parsed stylesheets</short_desc>
          <delta_ts>2012-04-27 23:17:47 -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>CSS</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>
          
          <blocked>77745</blocked>
    
    <blocked>85038</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dacarson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>610940</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-26 13:54:27 -0700</bug_when>
    <thetext>CSS parsing is ~1-3% of WebCore CPU usage on average pages, more on sites with large stylesheets. We currently reparse all stylesheets from source text when they are encountered again. In many browsing scenarios we can eliminate lot of this by caching the parsed stylesheets. For example it is very common for subpages of a site to share the stylesheets.

In the future we will also be able to share the actual data structures between pages for significant memory savings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610965</commentid>
    <comment_count>1</comment_count>
      <attachid>139068</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-26 14:17:15 -0700</bug_when>
    <thetext>Created attachment 139068
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611020</commentid>
    <comment_count>2</comment_count>
      <attachid>139068</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-04-26 15:00:23 -0700</bug_when>
    <thetext>Comment on attachment 139068
patch

Yes!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611030</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-26 15:26:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/115379</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611209</commentid>
    <comment_count>4</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-04-26 20:15:42 -0700</bug_when>
    <thetext>Somehow, this change made http/tests/inspector/network/network-initiator.html start failing: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=http%2Ftests%2Finspector%2Fnetwork%2Fnetwork-initiator.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611266</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-26 23:10:43 -0700</bug_when>
    <thetext>Reopen not to forget fixing this regression. I skipped in on Qt by r115408 to paint the bot green again. Please unskip it with the proper fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611613</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2012-04-27 10:02:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Reopen not to forget fixing this regression. I skipped in on Qt by r115408 to paint the bot green again. Please unskip it with the proper fix.

Filed bug 85038 to track this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611616</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-27 10:03:49 -0700</bug_when>
    <thetext>In the future please file bug instead of reopening.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611636</commentid>
    <comment_count>8</comment_count>
      <attachid>139068</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-04-27 10:29:24 -0700</bug_when>
    <thetext>Comment on attachment 139068
patch

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

I decided to do a quick pass of review on this patch even though it’s already been landed once.

&gt; Source/WebCore/css/CSSStyleSheet.cpp:83
&gt; +    // FIXME: This ignores the children of media and region rules.
&gt; +    // Most rules are StyleRules.

I’m not sure this should say FIXME unless you actually think it needs to be fixed.

&gt; Source/WebCore/css/StylePropertySet.cpp:1003
&gt; +unsigned StylePropertySet::averageSizeInBytes()

Do we really want to pay function call overhead for this? Why not just put it inline in the header?

&gt; Source/WebCore/html/HTMLLinkElement.cpp:305
&gt; +        RefPtr&lt;MediaQuerySet&gt; media = MediaQuerySet::createAllowingDescriptionSyntax(m_media);
&gt; +        restoredSheet-&gt;setMediaQueries(media.release());

I think this would read better without the local variable:

    restoredSheet-&gt;setMediaQueries(MediaQuerySet::createAllowingDescriptionSyntax(m_media));

&gt; Source/WebCore/html/HTMLLinkElement.cpp:311
&gt; +        m_sheet = CSSStyleSheet::create(restoredSheet, this);
&gt; +        m_loading = false;
&gt; +        sheetLoaded();
&gt; +        notifyLoadedSheetAndAllCriticalSubresources(false);

This is the kind of code I find almost impossible to review. Are these the key lines of code to call to simulate a successfully loaded sheet? Is this now synchronous where the old code path was asynchronous? I don’t know how to tell.

&gt; Source/WebCore/loader/cache/CachedCSSStyleSheet.h:56
&gt; +        virtual void destroyDecodedData() OVERRIDE;

Can this be private or protected rather than public?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611795</commentid>
    <comment_count>9</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-04-27 13:02:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; Source/WebCore/css/CSSStyleSheet.cpp:83
&gt; &gt; +    // FIXME: This ignores the children of media and region rules.
&gt; &gt; +    // Most rules are StyleRules.
&gt; 
&gt; I’m not sure this should say FIXME unless you actually think it needs to be fixed.

It might be worth fixing. Note that the two comments are really on different topic. The first one is about counting the rules, the second one is about the multiplier.

&gt; &gt; Source/WebCore/css/StylePropertySet.cpp:1003
&gt; &gt; +unsigned StylePropertySet::averageSizeInBytes()
&gt; 
&gt; Do we really want to pay function call overhead for this? Why not just put it inline in the header?

That would requires including headers from header that can currently be avoided, or moving the code away from the classes that we are being measured.

The function is not called often. I think other factors are more important.

&gt; &gt; Source/WebCore/html/HTMLLinkElement.cpp:311
&gt; &gt; +        m_sheet = CSSStyleSheet::create(restoredSheet, this);
&gt; &gt; +        m_loading = false;
&gt; &gt; +        sheetLoaded();
&gt; &gt; +        notifyLoadedSheetAndAllCriticalSubresources(false);
&gt; 
&gt; This is the kind of code I find almost impossible to review. Are these the key lines of code to call to simulate a successfully loaded sheet? Is this now synchronous where the old code path was asynchronous? I don’t know how to tell.

The right solution is to factor the load completion code better. It is a mess. I have refactored quite a bit to make this patch possible but I didn&apos;t get into that yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612151</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-27 22:15:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; In the future please file bug instead of reopening.

In the future please run layout tests instead of introducing new regressions. 

I think reopening is much more simple than file-ing a new bug to fix
regressions. It is the simplest way to tell the author if something 
is wrong and let the author and reviewer to determine if the bug
can be fixed quickly or rollout needed or new bug report needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612167</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-04-27 23:09:34 -0700</bug_when>
    <thetext>Antti is right. Re-opening a bug that is fixed to track something related - even if broken by its fix - is semantically incorrect and confusing. Please don&apos;t do it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>612168</commentid>
    <comment_count>12</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-04-27 23:17:47 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Antti is right. Re-opening a bug that is fixed to track something related - even if broken by its fix - is semantically incorrect and confusing. Please don&apos;t do it.

OK, sorry for reopening bug this bug. I won&apos;t do it anymore and won&apos;t notice if you introduce new regressions. :(</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139068</attachid>
            <date>2012-04-26 14:17:15 -0700</date>
            <delta_ts>2012-04-27 10:29:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-cache-2.patch</filename>
            <type>text/plain</type>
            <size>11812</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNTM1NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEyLTA0LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBDYWNoZSBwYXJzZWQgc3R5bGVz
aGVldHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1
MDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ1NT
IHBhcnNpbmcgaXMgfjEtMyUgb2YgV2ViQ29yZSBDUFUgdXNhZ2Ugb24gYXZlcmFnZSBwYWdlcywg
bW9yZSBvbiBzaXRlcyB3aXRoIGxhcmdlIHN0eWxlc2hlZXRzLiAKKyAgICAgICAgV2UgY3VycmVu
dGx5IHJlcGFyc2UgYWxsIHN0eWxlc2hlZXRzIGZyb20gc291cmNlIHRleHQgd2hlbiB0aGV5IGFy
ZSBlbmNvdW50ZXJlZCBhZ2Fpbi4gSW4gbWFueSAKKyAgICAgICAgYnJvd3Npbmcgc2NlbmFyaW9z
IHdlIGNhbiBlbGltaW5hdGUgbG90IG9mIHRoaXMgYnkgY2FjaGluZyB0aGUgcGFyc2VkIHN0eWxl
c2hlZXRzLiBGb3IgZXhhbXBsZSAKKyAgICAgICAgaXQgaXMgdmVyeSBjb21tb24gZm9yIHN1YnBh
Z2VzIG9mIGEgc2l0ZSB0byBzaGFyZSB0aGUgc3R5bGVzaGVldHMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhdGNoIGVuYWJsZXMgbWVtb3J5IGNhY2hpbmcgZm9yIHN0eWxlc2hlZXQgbG9hZGVk
IHVzaW5nIHRoZSA8bGluaz4gZWxlbWVudC4gT25seSBzdHlsZXNoZWV0cworICAgICAgICB0aGF0
IGhhdmUgbm8gaW1wb3J0IHJ1bGVzIGFyZSBjYWNoZWFibGUgZm9yIG5vdy4KKyAgICAgICAgCisg
ICAgICAgIENhY2hlZCBzdHlsZXNoZWV0cyBhcmUgY29waWVkIG9uIHJlc3RvcmUgc28gdGhlcmUg
aXMgbm8gc2hhcmluZyAoYW5kIG5vIG1lbW9yeSB3aW5zKSB5ZXQuCisgICAgICAgIEluIHRoZSBm
dXR1cmUgd2Ugd2lsbCBhbHNvIGJlIGFibGUgdG8gc2hhcmUgdGhlIGFjdHVhbCBkYXRhIHN0cnVj
dHVyZXMgYmV0d2VlbiBwYWdlcyBmb3IgCisgICAgICAgIHNpZ25pZmljYW50IG1lbW9yeSBzYXZp
bmdzLgorICAgICAgICAKKyAgICAgICAgQWZ0ZXIgYnJvd3NpbmcgYXJvdW5kIGZvciBhIHdoaWxl
IDw1JSBvZiB0aGUgbWVtb3J5IGNhY2hlIGRhdGEgd2FzIGluIHBhcnNlZCBzdHlsZXNoZWV0cyBz
byB0aGlzCisgICAgICAgIGRvZXMgbm90IGJsb2F0IHRoZSBjYWNoZSBzaWduaWZpY2FudGx5Lgor
CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmVzdGltYXRlZFNpemVJbkJ5dGVz
KToKKyAgICAgICAgCisgICAgICAgICAgICBFc3RpbWF0ZSBzdHlsZXNoZWV0IHNpemUgc28gd2Ug
Y2FuIGhhbmRlIHRoZSBkZWNvZGVkIGRhdGEgcHJ1bmluZyBjb3JyZWN0bHkuCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAoU3R5bGVTaGVldEludGVybmFsKToKKyAg
ICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVByb3BlcnR5U2V0OjphdmVyYWdlU2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgICogY3NzL1N0eWxlUHJvcGVydHlTZXQuaDoKKyAgICAgICAgKFN0eWxlUHJvcGVydHlT
ZXQpOgorICAgICAgICAqIGNzcy9TdHlsZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVSdWxlOjphdmVyYWdlU2l6ZUluQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1N0eWxlUnVsZS5oOgorICAgICAgICAoU3R5bGVSdWxlKToKKyAgICAgICAgKiBodG1s
L0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQpOgorICAgICAgICAKKyAgICAgICAgICAgIFNhdmUgYW5kIHJlc3Rv
cmUgcGFyc2VkIHN0eWxlc2hlZXQuIFRoZSBjdXJyZW50IENTUyBwYXJzZSBjb250ZXh0IG11c3Qg
YmUgaWRlbnRpY2FsIHRvIHRoZSBjYWNoZWQgCisgICAgICAgICAgICBzdHlsZXNoZWV0cy4gVGhp
cyBlbnN1cmVzIHRoYXQgdGhlIHBhcnNpbmcgcmVzdWx0cyB3b3VsZCBiZSBpZGVudGljYWwuCisK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRlc3Ry
b3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0Ojpy
ZXN0b3JlUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHls
ZVNoZWV0OjpzYXZlUGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZENTU1N0eWxlU2hlZXQuaDoKKyAgICAgICAgCisgICAgICAgICAgICBUaGUgcGFyc2VkIHN0
eWxlc2hlZXQgY2FjaGUgaXMgY29uc2lkZXJlZCBkZWNvZGVkIGRhdGEsIHNpbWlsYXIgdG8gaW1h
Z2UgYml0bWFwcywgYW5kIHVzZXMgdGhlCisgICAgICAgICAgICBzYW1lIG1lY2hhbmlzbSBmb3Ig
cHJ1bmluZy4KKworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYWNoZWRDU1NTdHlsZVNo
ZWV0KToKKwogMjAxMi0wNC0yNiAgSnVzdGluIE5vdm9zYWQgIDxqdW5vdkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW0Nocm9taXVtXSBTaW5nbGUgYnVmZmVyZWQgY2FudmFzIGxheWVycyB3aXRo
IHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hl
ZXQuY3BwCShyZXZpc2lvbiAxMTUzMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDI0IEBAIHN0YXRpYyBib29sIGlz
QWNjZXB0YWJsZUNTU1N0eWxlU2hlZXRQYXIKIH0KICNlbmRpZgogCisvLyBSb3VnaCBzaXplIGVz
dGltYXRlIGZvciBjYWNoZS4KK3Vuc2lnbmVkIFN0eWxlU2hlZXRJbnRlcm5hbDo6ZXN0aW1hdGVk
U2l6ZUluQnl0ZXMoKSBjb25zdAoreworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IHRh
a2UgaW50byBhY2NvdW50IHNpemUgb2YgdGhlIHN0cmluZ3MgaGFuZ2luZyBmcm9tIHZhcmlvdXMg
b2JqZWN0cy4gCisgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBuZWFybHkgYWxsIG9mIG9m
IHRoZW0gYXJlIGF0b21pYyBhbmQgd291bGQgZXhpc3QgYW55d2F5LgorICAgIHVuc2lnbmVkIHNp
emUgPSBzaXplb2YoKnRoaXMpOworCisgICAgLy8gRklYTUU6IFRoaXMgaWdub3JlcyB0aGUgY2hp
bGRyZW4gb2YgbWVkaWEgYW5kIHJlZ2lvbiBydWxlcy4KKyAgICAvLyBNb3N0IHJ1bGVzIGFyZSBT
dHlsZVJ1bGVzLgorICAgIHNpemUgKz0gcnVsZUNvdW50KCkgKiBTdHlsZVJ1bGU6OmF2ZXJhZ2VT
aXplSW5CeXRlcygpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVs
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQg
PSBtX2ltcG9ydFJ1bGVzW2ldLT5zdHlsZVNoZWV0KCkpCisgICAgICAgICAgICBzaXplICs9IHNo
ZWV0LT5lc3RpbWF0ZWRTaXplSW5CeXRlcygpOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30K
KwogU3R5bGVTaGVldEludGVybmFsOjpTdHlsZVNoZWV0SW50ZXJuYWwoU3R5bGVSdWxlSW1wb3J0
KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFs
VVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgIDogbV9vd25lclJ1bGUo
b3duZXJSdWxlKQogICAgICwgbV9vcmlnaW5hbFVSTChvcmlnaW5hbFVSTCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTE1MzM2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw4IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBydWxlQ291bnQoKSBjb25zdDsKICAgICAKICAgICBib29s
IHVzZXNSZW1Vbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlc1JlbVVuaXRzOyB9CisKKyAgICB1
bnNpZ25lZCBlc3RpbWF0ZWRTaXplSW5CeXRlcygpIGNvbnN0OwogICAgIAogICAgIGJvb2wgd3Jh
cHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgp
OwogICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkocmV2aXNpb24gMTE1Mjk4KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAwLDEwICsxMDAwLDE5IEBAIHZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6Y2xlYXJQYXJlbnRF
bGVtZW4KICAgICBwcm9wZXJ0eVNldENTU09NV3JhcHBlck1hcCgpLmdldCh0aGlzKS0+Y2xlYXJQ
YXJlbnRFbGVtZW50KCk7CiB9CiAKK3Vuc2lnbmVkIFN0eWxlUHJvcGVydHlTZXQ6OmF2ZXJhZ2VT
aXplSW5CeXRlcygpCit7CisgICAgLy8gUGxlYXNlIHVwZGF0ZSB0aGlzIGlmIHRoZSBzdG9yYWdl
IHNjaGVtZSBjaGFuZ2VzIHNvIHRoYXQgdGhpcyBsb25nZXIgcmVmbGVjdHMgdGhlIGFjdHVhbCBz
aXplLgorICAgIHJldHVybiBzaXplb2YoU3R5bGVQcm9wZXJ0eVNldCk7Cit9CisKKy8vIFNlZSB0
aGUgZnVuY3Rpb24gYWJvdmUgaWYgeW91IG5lZWQgdG8gdXBkYXRlIHRoaXMuCiBjbGFzcyBTYW1l
U2l6ZUFzU3R5bGVQcm9wZXJ0eVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNTdHls
ZVByb3BlcnR5U2V0PiB7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5LCA0PiBwcm9wZXJ0aWVzOwog
ICAgIHVuc2lnbmVkIGJpdGZpZWxkOwogfTsKIENPTVBJTEVfQVNTRVJUKHNpemVvZihTdHlsZVBy
b3BlcnR5U2V0KSA9PSBzaXplb2YoU2FtZVNpemVBc1N0eWxlUHJvcGVydHlTZXQpLCBzdHlsZV9w
cm9wZXJ0eV9zZXRfc2hvdWxkX3N0YXlfc21hbGwpOwogCisKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCShyZXZpc2lvbiAx
MTUyOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMsNiArMTEzLDggQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBFeHBhbmQg
dGhlIGNvbmNlcHQgb2YgbXV0YWJsZS9pbW11dGFibGUgU3R5bGVQcm9wZXJ0eVNldC4KICAgICBi
b29sIGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duc0NTU09NV3JhcHBlcjsgfQogCisg
ICAgc3RhdGljIHVuc2lnbmVkIGF2ZXJhZ2VTaXplSW5CeXRlcygpOworCiBwcml2YXRlOgogICAg
IFN0eWxlUHJvcGVydHlTZXQoQ1NTUGFyc2VyTW9kZSk7CiAgICAgU3R5bGVQcm9wZXJ0eVNldChj
b25zdCBWZWN0b3I8Q1NTUHJvcGVydHk+Jik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmNw
cAkocmV2aXNpb24gMTE1Mjk4KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0Myw2ICsxNDMsMTEgQEAgUGFzc1JlZlB0cjxDU1NSdWxlPiBT
dHlsZVJ1bGVCYXNlOjpjcmVhdAogICAgIHJldHVybiBydWxlLnJlbGVhc2UoKTsKIH0KIAordW5z
aWduZWQgU3R5bGVSdWxlOjphdmVyYWdlU2l6ZUluQnl0ZXMoKQoreworICAgIHJldHVybiBzaXpl
b2YoU3R5bGVSdWxlKSArIFN0eWxlUHJvcGVydHlTZXQ6OmF2ZXJhZ2VTaXplSW5CeXRlcygpOwor
fQorCiBTdHlsZVJ1bGU6OlN0eWxlUnVsZShpbnQgc291cmNlTGluZSkKICAgICA6IFN0eWxlUnVs
ZUJhc2UoU3R5bGUsIHNvdXJjZUxpbmUpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZS5oCShy
ZXZpc2lvbiAxMTUyOTgpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOCBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFN0
eWxlUnVsZT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVJ1bGUoKnRo
aXMpKTsgfQogCisgICAgc3RhdGljIHVuc2lnbmVkIGF2ZXJhZ2VTaXplSW5CeXRlcygpOworCiBw
cml2YXRlOgogICAgIFN0eWxlUnVsZShpbnQgc291cmNlTGluZSk7CiAgICAgU3R5bGVSdWxlKGNv
bnN0IFN0eWxlUnVsZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50
LmNwcAkocmV2aXNpb24gMTE1Mjk4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTUsNiArMjk1LDIzIEBAIHZvaWQgSFRNTExp
bmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGMKICAgICB9CiAKICAgICBDU1NQYXJzZXJDb250
ZXh0IHBhcnNlckNvbnRleHQoZG9jdW1lbnQoKSwgYmFzZVVSTCwgY2hhcnNldCk7CisKKyAgICBp
ZiAoUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gcmVzdG9yZWRTaGVldCA9IGNvbnN0X2Nhc3Q8
Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGNhY2hlZFN0eWxlU2hlZXQpLT5yZXN0b3JlUGFyc2VkU3R5
bGVTaGVldChwYXJzZXJDb250ZXh0KSkgeworICAgICAgICBBU1NFUlQocmVzdG9yZWRTaGVldC0+
aXNDYWNoZWFibGUoKSk7CisgICAgICAgIEFTU0VSVCghcmVzdG9yZWRTaGVldC0+aXNMb2FkaW5n
KCkpOworCisgICAgICAgIC8vIHJlc3RvcmVQYXJzZWRTdHlsZVNoZWV0KCkgY3VycmVudGx5IHJl
dHVybnMgYSBjb3B5IHNvIGl0IGlzIG9rIHRvIG11dGF0ZSB0aGUgcXVlcmllcyBhbmQgdGhlIHRp
dGxlIGxpa2UgdGhpcy4KKyAgICAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVk
aWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKTsKKyAg
ICAgICAgcmVzdG9yZWRTaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHJlc3RvcmVkU2hlZXQtPnNldFRpdGxlKHRpdGxlKCkpOworCisgICAgICAgIG1fc2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUocmVzdG9yZWRTaGVldCwgdGhpcyk7CisgICAgICAg
IG1fbG9hZGluZyA9IGZhbHNlOworICAgICAgICBzaGVldExvYWRlZCgpOworICAgICAgICBub3Rp
ZnlMb2FkZWRTaGVldEFuZEFsbENyaXRpY2FsU3VicmVzb3VyY2VzKGZhbHNlKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKwogICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHN0eWxlU2hl
ZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZShocmVmLCBiYXNlVVJMLCBwYXJzZXJDb250
ZXh0KTsKICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQsIHRo
aXMpOwogCkBAIC0zMDcsNiArMzI0LDkgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnNldENTU1N0
eWxlU2hlZXQoYwogICAgIG1fbG9hZGluZyA9IGZhbHNlOwogICAgIHN0eWxlU2hlZXQtPm5vdGlm
eUxvYWRlZFNoZWV0KGNhY2hlZFN0eWxlU2hlZXQpOwogICAgIHN0eWxlU2hlZXQtPmNoZWNrTG9h
ZGVkKCk7CisKKyAgICBpZiAoc3R5bGVTaGVldC0+aXNDYWNoZWFibGUoKSkKKyAgICAgICAgY29u
c3RfY2FzdDxDYWNoZWRDU1NTdHlsZVNoZWV0Kj4oY2FjaGVkU3R5bGVTaGVldCktPnNhdmVQYXJz
ZWRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOwogfQogCiBib29sIEhUTUxMaW5rRWxlbWVudDo6c3R5
bGVTaGVldElzTG9hZGluZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
bG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTUyOTgpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKIAotI2luY2x1ZGUgIk1lbW9yeUNhY2hlLmgi
CisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50V2Fsa2VyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkU3R5bGVTaGVldENsaWVudC5oIgogI2luY2x1
ZGUgIkhUVFBQYXJzZXJzLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVk
ZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTQ4LDUg
KzE1MCwzNyBAQCBib29sIENhY2hlZENTU1N0eWxlU2hlZXQ6OmNhblVzZVNoZWV0KGJvCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiB0eXBlT0s7CiB9Ci0gCisKK3ZvaWQgQ2FjaGVk
Q1NTU3R5bGVTaGVldDo6ZGVzdHJveURlY29kZWREYXRhKCkKK3sKKyAgICBtX3BhcnNlZFN0eWxl
U2hlZXRDYWNoZS5jbGVhcigpOworICAgIHNldERlY29kZWRTaXplKDApOworfQorCitQYXNzUmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gQ2FjaGVkQ1NTU3R5bGVTaGVldDo6cmVzdG9yZVBhcnNl
ZFN0eWxlU2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBpZiAo
IW1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAvLyBDYWNo
ZWQgc3R5bGVzaGVldCBoYXMgbXV0YXRlZCwga2ljayBpdCBvdXQuCisgICAgaWYgKCFtX3BhcnNl
ZFN0eWxlU2hlZXRDYWNoZS0+aXNDYWNoZWFibGUoKSkgeworICAgICAgICBtX3BhcnNlZFN0eWxl
U2hlZXRDYWNoZS5jbGVhcigpOworICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIGlmIChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cGFyc2Vy
Q29udGV4dCgpICE9IGNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworCisgICAgZGlkQWNjZXNz
RGVjb2RlZERhdGEoY3VycmVudFRpbWUoKSk7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCBjb3B5
LW9uLXdyaXRlIHRvIGF2b2lkIGNvcHlpbmcgd2hlbiBub3QgbmVjZXNzYXJ5LgorICAgIHJldHVy
biBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+Y29weSgpOworfQorCit2b2lkIENhY2hlZENTU1N0
eWxlU2hlZXQ6OnNhdmVQYXJzZWRTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVy
bmFsPiBzaGVldCkKK3sKKyAgICBBU1NFUlQoc2hlZXQgJiYgc2hlZXQtPmlzQ2FjaGVhYmxlKCkp
OworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0gc2hlZXQ7CisKKyAgICBzZXREZWNvZGVk
U2l6ZShtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+ZXN0aW1hdGVkU2l6ZUluQnl0ZXMoKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENT
U1N0eWxlU2hlZXQuaAkocmV2aXNpb24gMTE1Mjk4KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBDYWNoZWRSZXNvdXJjZUNsaWVu
dDsKICAgICBjbGFzcyBTaGFyZWRCdWZmZXI7CisgICAgY2xhc3MgU3R5bGVTaGVldEludGVybmFs
OwogICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisgICAgc3RydWN0IENTU1BhcnNlckNv
bnRleHQ7CiAKICAgICBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0IDogcHVibGljIENhY2hlZFJl
c291cmNlIHsKICAgICBwdWJsaWM6CkBAIC01MSw3ICs1MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhKFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBlcnJvcihD
YWNoZWRSZXNvdXJjZTo6U3RhdHVzKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveURl
Y29kZWREYXRhKCkgT1ZFUlJJREU7CisKICAgICAgICAgdm9pZCBjaGVja05vdGlmeSgpOworCisg
ICAgICAgIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiByZXN0b3JlUGFyc2VkU3R5bGVT
aGVldChjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgICAgIHZvaWQgc2F2ZVBhcnNlZFN0
eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+KTsKICAgICAKICAgICBwcml2
YXRlOgogICAgICAgICBib29sIGNhblVzZVNoZWV0KGJvb2wgZW5mb3JjZU1JTUVUeXBlLCBib29s
KiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdDsKQEAgLTYwLDYgKzY3LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgUmVmUHRyPFRleHRSZXNvdXJjZURlY29k
ZXI+IG1fZGVjb2RlcjsKICAgICAgICAgU3RyaW5nIG1fZGVjb2RlZFNoZWV0VGV4dDsKKworICAg
ICAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsK
ICAgICB9OwogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>