<?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>143490</bug_id>
          
          <creation_ts>2015-04-07 11:39:20 -0700</creation_ts>
          <short_desc>optimize content extension interpreting</short_desc>
          <delta_ts>2015-04-07 15:52:55 -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>WebCore Misc.</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1083368</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-07 11:39:20 -0700</bug_when>
    <thetext>There are some simple optimizations that make things a lot faster:
  Not interpreting data urls.  These can be many kilobytes of base64 encoded things like images.
  When jumping to the DFA root, don&apos;t re-add all the actions.  We handle the actions from the root in special optimized ways, anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083372</commentid>
    <comment_count>1</comment_count>
      <attachid>250280</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-07 11:42:16 -0700</bug_when>
    <thetext>Created attachment 250280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083374</commentid>
    <comment_count>2</comment_count>
      <attachid>250281</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-07 12:00:44 -0700</bug_when>
    <thetext>Created attachment 250281
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083423</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-07 14:18:51 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/182492</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083424</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-04-07 14:19:43 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=250281&amp;action=review

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:80
&gt; +    if (resourceLoadInfo.resourceURL.protocolIsData()
&gt; +        || resourceLoadInfo.resourceURL.protocolIsJavaScript())

This could be on a single line.

&gt; Source/WebCore/contentextensions/ContentExtensionsBackend.cpp:130
&gt; +    WTFLogAlways(&quot;Time added: %f microseconds %s&quot;, (addedTimeEnd - addedTimeStart) * 1.0e6, resourceLoadInfo.resourceURL.string().utf8().data());

Isn&apos;t that a bit too verbose? Maybe printing the average after every 100 urls would be easier to work with?

&gt; Source/WebCore/contentextensions/DFABytecodeCompiler.cpp:113
&gt; +    // If we jump to the root, we don&apos;t want to re-add its actions to a HashSet.
&gt; +    // We know we have already added them because the root is always compiled first and we always start interpreting at the beginning.

That&apos;s a good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083462</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-04-07 15:52:55 -0700</bug_when>
    <thetext>Touching URL.h broke things.  Undid that in http://trac.webkit.org/changeset/182500</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250280</attachid>
            <date>2015-04-07 11:42:16 -0700</date>
            <delta_ts>2015-04-07 12:00:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143490-20150407114127.patch</filename>
            <type>text/plain</type>
            <size>6713</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDE1LTA0LTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
Y29udGVudCBleHRlbnNpb25zIGludGVycHJldGluZyBzcGVlZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQ5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKToK
KyAgICAgICAgTWVhc3VyZSB0b3RhbCB0aW1lIGFkZGVkIGJ5IGNvbnRlbnQgZXh0ZW5zaW9ucy4K
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpj
b21waWxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIFdoZW4ganVtcGluZyB0byB0aGUgcm9v
dCwgZG9uJ3QgcmUtYWRkIGFsbCB0aGUgYWN0aW9ucy4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpVUkw6OnByb3RvY29sSXNKYXZhU2NyaXB0KTogQWRkZWQuCisKIDIw
MTUtMDQtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZS1hZGQg
SlNSZWFkYWJsZVN0cmVhbSBhbmQgSlNSZWFkYWJsZVN0cmVhbVJlYWRlciB0aGUgWGNvZGUgcHJv
amVjdCB0bwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250ZW50
ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODI0MzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29t
cGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiArMjEzLDggQEAgc3RkOjplcnJvcl9j
b2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogI2lmIENPTlRFTlRfRVhURU5TSU9OU19QRVJG
T1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0YoIiAgICBUaW1lIHNwZW50IGJ1aWxk
aW5nIGFuZCBjb21waWxpbmcgdGhlIERGQXM6ICVmXG4iLCAoZGZhQnVpbGRUaW1lRW5kIC0gZGZh
QnVpbGRUaW1lU3RhcnQpKTsKKyAgICBkYXRhTG9nRigiICAgIEJ5dGVjb2RlIHNpemUgJXp1XG4i
LCBieXRlY29kZS5zaXplKCkpOworICAgIGRhdGFMb2dGKCIgICAgREZBIGNvdW50ICV6dVxuIiwg
bmZhcy5zaXplKCkpOwogI2VuZGlmCiAKICAgICBjbGllbnQud3JpdGVCeXRlY29kZShXVEY6Om1v
dmUoYnl0ZWNvZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25zL0Nv
bnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNpb24g
MTgyNDMxKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5j
bHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4dGVu
c2lvbi5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAjaW5jbHVk
ZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTcyLDYgKzczLDEzIEBAIHZvaWQgQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjpyZW1vdmVBbGwKIAogVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4dGVu
c2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9hZElu
Zm8mIHJlc291cmNlTG9hZEluZm8pIGNvbnN0CiB7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05TX1BF
UkZPUk1BTkNFX1JFUE9SVElORworICAgIGRvdWJsZSBhZGRlZFRpbWVTdGFydCA9IG1vbm90b25p
Y2FsbHlJbmNyZWFzaW5nVGltZSgpOworI2VuZGlmCisgICAgaWYgKHJlc291cmNlTG9hZEluZm8u
cmVzb3VyY2VVUkwucHJvdG9jb2xJc0RhdGEoKQorICAgICAgICB8fCByZXNvdXJjZUxvYWRJbmZv
LnJlc291cmNlVVJMLnByb3RvY29sSXNKYXZhU2NyaXB0KCkpCisgICAgICAgIHJldHVybiBWZWN0
b3I8QWN0aW9uPigpOworCiAgICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcgPSByZXNvdXJjZUxv
YWRJbmZvLnJlc291cmNlVVJMLnN0cmluZygpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0UodXJs
U3RyaW5nLmNvbnRhaW5zT25seUFTQ0lJKCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBvbmx5IGNv
bnRhaW4gQVNDSUkgY2hhcmFjdGVycy4gVGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1bWVzIHRo
ZSBpbnB1dCBpcyBBU0NJSS4iKTsKICAgICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nID0gdXJs
U3RyaW5nLnV0ZjgoKTsKQEAgLTExNyw2ICsxMjUsMTAgQEAgVmVjdG9yPEFjdGlvbj4gQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICAgICAgZmluYWxBY3Rpb25zLmFwcGVuZChBY3Rp
b24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0LCBjb250ZW50RXh0ZW5zaW9u
LT5pZGVudGlmaWVyKCkpKTsKICAgICAgICAgfQogICAgIH0KKyNpZiBDT05URU5UX0VYVEVOU0lP
TlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgZG91YmxlIGFkZGVkVGltZUVuZCA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIFdURkxvZ0Fsd2F5cygiVGltZSBhZGRlZDog
JWYgbWljcm9zZWNvbmRzICVzIiwgKGFkZGVkVGltZUVuZCAtIGFkZGVkVGltZVN0YXJ0KSAqIDEu
MGU2LCByZXNvdXJjZUxvYWRJbmZvLnJlc291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworI2VuZGlmCiAgICAgcmV0dXJuIGZpbmFsQWN0aW9uczsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxl
ci5jcHAJKHJldmlzaW9uIDE4MjQzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNp
b25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMiArOTMs
MTMgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKAogICAgIGFwcGVu
ZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3RydWN0
aW9uOjpUZXJtaW5hdGUpOwogfQogCi12b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBpbGVO
b2RlKHVuc2lnbmVkIGluZGV4KQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxlTm9k
ZSh1bnNpZ25lZCBpbmRleCwgYm9vbCByb290KQogewogICAgIGNvbnN0IERGQU5vZGUmIG5vZGUg
PSBtX2RmYS5ub2RlQXQoaW5kZXgpOwogCiAgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4IGZv
ciBsaW5raW5nLgotICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVjb2RlLnNp
emUoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0g
PSBtX2J5dGVjb2RlLnNpemUoKTsKIAogICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9kZS5h
Y3Rpb25zKSB7CiAgICAgICAgIC8vIEhpZ2ggYml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFncy4g
U2VlIGNvbXBpbGVSdWxlTGlzdC4KQEAgLTEwNyw2ICsxMDgsMTIgQEAgdm9pZCBERkFCeXRlY29k
ZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbWl0
QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKICAgICB9CisgICAg
CisgICAgLy8gSWYgd2UganVtcCB0byB0aGUgcm9vdCwgd2UgZG9uJ3Qgd2FudCB0byByZS1hZGQg
aXRzIGFjdGlvbnMgdG8gYSBIYXNoU2V0LgorICAgIC8vIFdlIGtub3cgd2UgaGF2ZSBhbHJlYWR5
IGFkZGVkIHRoZW0gYmVjYXVzZSB0aGUgcm9vdCBpcyBhbHdheXMgY29tcGlsZWQgZmlyc3QgYW5k
IHdlIGFsd2F5cyBzdGFydCBpbnRlcnByZXRpbmcgYXQgdGhlIGJlZ2lubmluZy4KKyAgICBpZiAo
cm9vdCkKKyAgICAgICAgbV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9IG1fYnl0ZWNvZGUuc2l6
ZSgpOworICAgIAogICAgIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMobm9kZSk7CiB9CiAKQEAgLTIw
MCwxMCArMjA3LDEwIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCiAgICAg
bV9ub2RlU3RhcnRPZmZzZXRzLnJlc2l6ZShtX2RmYS5zaXplKCkpOwogICAgIAogICAgIC8vIE1h
a2Ugc3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnl0ZWNv
ZGUuCi0gICAgY29tcGlsZU5vZGUobV9kZmEucm9vdCgpKTsKKyAgICBjb21waWxlTm9kZShtX2Rm
YS5yb290KCksIHRydWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmYS5zaXpl
KCk7IGkrKykgewogICAgICAgICBpZiAoaSAhPSBtX2RmYS5yb290KCkpCi0gICAgICAgICAgICBj
b21waWxlTm9kZShpKTsKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKGksIGZhbHNlKTsKICAgICB9
CiAKICAgICAvLyBMaW5rLgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMv
REZBQnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2NvbnRl
bnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMTgyNDMxKQorKysg
U291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVk
IGRlc3RpbmF0aW9uOwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmU7CiAgICAgfTsKLSAgICB2
b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVkKTsKKyAgICB2b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVk
LCBib29sIHJvb3QpOwogICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyhjb25zdCBERkFO
b2RlJik7CiAgICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9VUkwuaAkocmV2aXNpb24gMTgyNDMxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNyBAQCBwdWJs
aWM6CiAgICAgLy8gdGVybWluYXRlZCBBU0NJSSBhcmd1bWVudC4gVGhlIGFyZ3VtZW50IG11c3Qg
YmUgbG93ZXItY2FzZS4KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHByb3RvY29sSXMoY29uc3Qg
Y2hhciopIGNvbnN0OwogICAgIGJvb2wgcHJvdG9jb2xJc0RhdGEoKSBjb25zdCB7IHJldHVybiBw
cm90b2NvbElzKCJkYXRhIik7IH0KKyAgICBib29sIHByb3RvY29sSXNKYXZhU2NyaXB0KCkgY29u
c3QgeyByZXR1cm4gcHJvdG9jb2xJcygiamF2YXNjcmlwdCIpOyB9CiAgICAgYm9vbCBwcm90b2Nv
bElzSW5IVFRQRmFtaWx5KCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0xvY2Fs
RmlsZSgpIGNvbnN0OwogICAgIGJvb2wgaXNCbGFua1VSTCgpIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250281</attachid>
            <date>2015-04-07 12:00:44 -0700</date>
            <delta_ts>2015-04-07 14:16:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-143490-20150407115955.patch</filename>
            <type>text/plain</type>
            <size>7501</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4MjQ4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA0LTA3ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgT3B0aW1pemUg
Y29udGVudCBleHRlbnNpb25zIGludGVycHJldGluZyBzcGVlZC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzQ5MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNp
b25zOjpjb21waWxlUnVsZUxpc3QpOgorICAgICAgICAqIGNvbnRlbnRleHRlbnNpb25zL0NvbnRl
bnRFeHRlbnNpb25zQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5z
aW9uczo6Q29udGVudEV4dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKToK
KyAgICAgICAgTWVhc3VyZSB0b3RhbCB0aW1lIGFkZGVkIGJ5IGNvbnRlbnQgZXh0ZW5zaW9ucy4K
KyAgICAgICAgKiBjb250ZW50ZXh0ZW5zaW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbnRlbnRFeHRlbnNpb25zOjpERkFCeXRlY29kZUNvbXBpbGVyOjpj
b21waWxlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDb250ZW50RXh0ZW5zaW9uczo6REZBQnl0
ZWNvZGVDb21waWxlcjo6Y29tcGlsZSk6CisgICAgICAgIFdoZW4ganVtcGluZyB0byB0aGUgcm9v
dCwgZG9uJ3QgcmUtYWRkIGFsbCB0aGUgYWN0aW9ucy4KKyAgICAgICAgKiBjb250ZW50ZXh0ZW5z
aW9ucy9ERkFCeXRlY29kZUNvbXBpbGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vVVJMLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlVSTDo6aW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vVVJMLmg6
CisgICAgICAgIChXZWJDb3JlOjpVUkw6OnByb3RvY29sSXNKYXZhU2NyaXB0KTogQWRkZWQuCisK
IDIwMTUtMDQtMDcgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZS1h
ZGQgSlNSZWFkYWJsZVN0cmVhbSBhbmQgSlNSZWFkYWJsZVN0cmVhbVJlYWRlciB0aGUgWGNvZGUg
cHJvamVjdCB0bwpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVu
dEV4dGVuc2lvbkNvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jb250
ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9uQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxODI0
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9jb250ZW50ZXh0ZW5zaW9ucy9Db250ZW50RXh0ZW5zaW9u
Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNiArMjEzLDggQEAgc3RkOjplcnJv
cl9jb2RlIGNvbXBpbGVSdWxlTGlzdChDb250ZW50RQogI2lmIENPTlRFTlRfRVhURU5TSU9OU19Q
RVJGT1JNQU5DRV9SRVBPUlRJTkcKICAgICBkb3VibGUgZGZhQnVpbGRUaW1lRW5kID0gbW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCk7CiAgICAgZGF0YUxvZ0YoIiAgICBUaW1lIHNwZW50IGJ1
aWxkaW5nIGFuZCBjb21waWxpbmcgdGhlIERGQXM6ICVmXG4iLCAoZGZhQnVpbGRUaW1lRW5kIC0g
ZGZhQnVpbGRUaW1lU3RhcnQpKTsKKyAgICBkYXRhTG9nRigiICAgIEJ5dGVjb2RlIHNpemUgJXp1
XG4iLCBieXRlY29kZS5zaXplKCkpOworICAgIGRhdGFMb2dGKCIgICAgREZBIGNvdW50ICV6dVxu
IiwgbmZhcy5zaXplKCkpOwogI2VuZGlmCiAKICAgICBjbGllbnQud3JpdGVCeXRlY29kZShXVEY6
Om1vdmUoYnl0ZWNvZGUpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRlbnNpb25z
L0NvbnRlbnRFeHRlbnNpb25zQmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4dGVuc2lvbnNCYWNrZW5kLmNwcAkocmV2aXNp
b24gMTgyNDMxKQorKysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiQ29tcGlsZWRDb250ZW50RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiQ29udGVudEV4
dGVuc2lvbi5oIgorI2luY2x1ZGUgIkNvbnRlbnRFeHRlbnNpb25zRGVidWdnaW5nLmgiCiAjaW5j
bHVkZSAiREZBQnl0ZWNvZGVJbnRlcnByZXRlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKQEAgLTcyLDYgKzczLDEzIEBAIHZvaWQgQ29udGVu
dEV4dGVuc2lvbnNCYWNrZW5kOjpyZW1vdmVBbGwKIAogVmVjdG9yPEFjdGlvbj4gQ29udGVudEV4
dGVuc2lvbnNCYWNrZW5kOjphY3Rpb25zRm9yUmVzb3VyY2VMb2FkKGNvbnN0IFJlc291cmNlTG9h
ZEluZm8mIHJlc291cmNlTG9hZEluZm8pIGNvbnN0CiB7CisjaWYgQ09OVEVOVF9FWFRFTlNJT05T
X1BFUkZPUk1BTkNFX1JFUE9SVElORworICAgIGRvdWJsZSBhZGRlZFRpbWVTdGFydCA9IG1vbm90
b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworI2VuZGlmCisgICAgaWYgKHJlc291cmNlTG9hZElu
Zm8ucmVzb3VyY2VVUkwucHJvdG9jb2xJc0RhdGEoKQorICAgICAgICB8fCByZXNvdXJjZUxvYWRJ
bmZvLnJlc291cmNlVVJMLnByb3RvY29sSXNKYXZhU2NyaXB0KCkpCisgICAgICAgIHJldHVybiBW
ZWN0b3I8QWN0aW9uPigpOworCiAgICAgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcgPSByZXNvdXJj
ZUxvYWRJbmZvLnJlc291cmNlVVJMLnN0cmluZygpOwogICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
dXJsU3RyaW5nLmNvbnRhaW5zT25seUFTQ0lJKCksICJBIGRlY29kZWQgVVJMIHNob3VsZCBvbmx5
IGNvbnRhaW4gQVNDSUkgY2hhcmFjdGVycy4gVGhlIG1hdGNoaW5nIGFsZ29yaXRobSBhc3N1bWVz
IHRoZSBpbnB1dCBpcyBBU0NJSS4iKTsKICAgICBjb25zdCBDU3RyaW5nJiB1cmxDU3RyaW5nID0g
dXJsU3RyaW5nLnV0ZjgoKTsKQEAgLTExNyw2ICsxMjUsMTAgQEAgVmVjdG9yPEFjdGlvbj4gQ29u
dGVudEV4dGVuc2lvbnNCYWNrZW5kOgogICAgICAgICAgICAgZmluYWxBY3Rpb25zLmFwcGVuZChB
Y3Rpb24oQWN0aW9uVHlwZTo6Q1NTRGlzcGxheU5vbmVTdHlsZVNoZWV0LCBjb250ZW50RXh0ZW5z
aW9uLT5pZGVudGlmaWVyKCkpKTsKICAgICAgICAgfQogICAgIH0KKyNpZiBDT05URU5UX0VYVEVO
U0lPTlNfUEVSRk9STUFOQ0VfUkVQT1JUSU5HCisgICAgZG91YmxlIGFkZGVkVGltZUVuZCA9IG1v
bm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpOworICAgIFdURkxvZ0Fsd2F5cygiVGltZSBhZGRl
ZDogJWYgbWljcm9zZWNvbmRzICVzIiwgKGFkZGVkVGltZUVuZCAtIGFkZGVkVGltZVN0YXJ0KSAq
IDEuMGU2LCByZXNvdXJjZUxvYWRJbmZvLnJlc291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworI2VuZGlmCiAgICAgcmV0dXJuIGZpbmFsQWN0aW9uczsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21w
aWxlci5jcHAJKHJldmlzaW9uIDE4MjQzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2NvbnRlbnRleHRl
bnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MywxMiAr
OTMsMTMgQEAgdm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjplbWl0VGVybWluYXRlKAogICAgIGFw
cGVuZDxERkFCeXRlY29kZUluc3RydWN0aW9uPihtX2J5dGVjb2RlLCBERkFCeXRlY29kZUluc3Ry
dWN0aW9uOjpUZXJtaW5hdGUpOwogfQogCi12b2lkIERGQUJ5dGVjb2RlQ29tcGlsZXI6OmNvbXBp
bGVOb2RlKHVuc2lnbmVkIGluZGV4KQordm9pZCBERkFCeXRlY29kZUNvbXBpbGVyOjpjb21waWxl
Tm9kZSh1bnNpZ25lZCBpbmRleCwgYm9vbCByb290KQogewogICAgIGNvbnN0IERGQU5vZGUmIG5v
ZGUgPSBtX2RmYS5ub2RlQXQoaW5kZXgpOwogCiAgICAgLy8gUmVjb3JkIHN0YXJ0aW5nIGluZGV4
IGZvciBsaW5raW5nLgotICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRleF0gPSBtX2J5dGVjb2Rl
LnNpemUoKTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIG1fbm9kZVN0YXJ0T2Zmc2V0c1tpbmRl
eF0gPSBtX2J5dGVjb2RlLnNpemUoKTsKIAogICAgIGZvciAodWludDY0X3QgYWN0aW9uIDogbm9k
ZS5hY3Rpb25zKSB7CiAgICAgICAgIC8vIEhpZ2ggYml0cyBhcmUgdXNlZCB0byBzdG9yZSBmbGFn
cy4gU2VlIGNvbXBpbGVSdWxlTGlzdC4KQEAgLTEwNyw2ICsxMDgsMTIgQEAgdm9pZCBERkFCeXRl
Y29kZUNvbXBpbGVyOjpjb21waWxlTm9kZSh1bgogICAgICAgICBlbHNlCiAgICAgICAgICAgICBl
bWl0QXBwZW5kQWN0aW9uKHN0YXRpY19jYXN0PHVuc2lnbmVkPihhY3Rpb24pKTsKICAgICB9Cisg
ICAgCisgICAgLy8gSWYgd2UganVtcCB0byB0aGUgcm9vdCwgd2UgZG9uJ3Qgd2FudCB0byByZS1h
ZGQgaXRzIGFjdGlvbnMgdG8gYSBIYXNoU2V0LgorICAgIC8vIFdlIGtub3cgd2UgaGF2ZSBhbHJl
YWR5IGFkZGVkIHRoZW0gYmVjYXVzZSB0aGUgcm9vdCBpcyBhbHdheXMgY29tcGlsZWQgZmlyc3Qg
YW5kIHdlIGFsd2F5cyBzdGFydCBpbnRlcnByZXRpbmcgYXQgdGhlIGJlZ2lubmluZy4KKyAgICBp
ZiAocm9vdCkKKyAgICAgICAgbV9ub2RlU3RhcnRPZmZzZXRzW2luZGV4XSA9IG1fYnl0ZWNvZGUu
c2l6ZSgpOworICAgIAogICAgIGNvbXBpbGVOb2RlVHJhbnNpdGlvbnMobm9kZSk7CiB9CiAKQEAg
LTIwMCwxMCArMjA3LDEwIEBAIHZvaWQgREZBQnl0ZWNvZGVDb21waWxlcjo6Y29tcGlsZSgpCiAg
ICAgbV9ub2RlU3RhcnRPZmZzZXRzLnJlc2l6ZShtX2RmYS5zaXplKCkpOwogICAgIAogICAgIC8v
IE1ha2Ugc3VyZSB0aGUgcm9vdCBpcyBhbHdheXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnl0
ZWNvZGUuCi0gICAgY29tcGlsZU5vZGUobV9kZmEucm9vdCgpKTsKKyAgICBjb21waWxlTm9kZSht
X2RmYS5yb290KCksIHRydWUpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2RmYS5z
aXplKCk7IGkrKykgewogICAgICAgICBpZiAoaSAhPSBtX2RmYS5yb290KCkpCi0gICAgICAgICAg
ICBjb21waWxlTm9kZShpKTsKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKGksIGZhbHNlKTsKICAg
ICB9CiAKICAgICAvLyBMaW5rLgpJbmRleDogU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lv
bnMvREZBQnl0ZWNvZGVDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nv
bnRlbnRleHRlbnNpb25zL0RGQUJ5dGVjb2RlQ29tcGlsZXIuaAkocmV2aXNpb24gMTgyNDMxKQor
KysgU291cmNlL1dlYkNvcmUvY29udGVudGV4dGVuc2lvbnMvREZBQnl0ZWNvZGVDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2ln
bmVkIGRlc3RpbmF0aW9uOwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmU7CiAgICAgfTsKLSAg
ICB2b2lkIGNvbXBpbGVOb2RlKHVuc2lnbmVkKTsKKyAgICB2b2lkIGNvbXBpbGVOb2RlKHVuc2ln
bmVkLCBib29sIHJvb3QpOwogICAgIHZvaWQgY29tcGlsZU5vZGVUcmFuc2l0aW9ucyhjb25zdCBE
RkFOb2RlJik7CiAgICAgdm9pZCBjb21waWxlQ2hlY2tGb3JSYW5nZShjb25zdCBSYW5nZSYpOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAJKHJldmlzaW9uIDE4MjQzMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw3ICs0NzAs
NyBAQCB2b2lkIFVSTDo6aW5pdChjb25zdCBVUkwmIGJhc2UsIGNvbnN0IFN0CiAgICAgLy8gRm9y
IGNvbXBhdGliaWxpdHkgd2l0aCBXaW4gSUUsIHRyZWF0IGJhY2tzbGFzaGVzIGFzIGlmIHRoZXkg
d2VyZSBzbGFzaGVzLAogICAgIC8vIGFzIGxvbmcgYXMgd2UncmUgbm90IGRlYWxpbmcgd2l0aCBq
YXZhc2NyaXB0OiBvciBkYXRhOiBVUkxzLgogICAgIFN0cmluZyByZWwgPSByZWxhdGl2ZTsKLSAg
ICBpZiAocmVsLmNvbnRhaW5zKCdcXCcpICYmICEocHJvdG9jb2xJc0phdmFTY3JpcHQocmVsKSB8
fCBwcm90b2NvbElzKHJlbCwgImRhdGEiKSkpCisgICAgaWYgKHJlbC5jb250YWlucygnXFwnKSAm
JiAhKFdlYkNvcmU6OnByb3RvY29sSXNKYXZhU2NyaXB0KHJlbCkgfHwgcHJvdG9jb2xJcyhyZWws
ICJkYXRhIikpKQogICAgICAgICByZWwgPSBzdWJzdGl0dXRlQmFja3NsYXNoZXMocmVsKTsKIAog
ICAgIGJvb2wgYWxsQVNDSUkgPSByZWwuY29udGFpbnNPbmx5QVNDSUkoKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1VSTC5oCShyZXZpc2lvbiAxODI0MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9VUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDYgKzEyNyw3IEBAIHB1YmxpYzoKICAgICAv
LyB0ZXJtaW5hdGVkIEFTQ0lJIGFyZ3VtZW50LiBUaGUgYXJndW1lbnQgbXVzdCBiZSBsb3dlci1j
YXNlLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcHJvdG9jb2xJcyhjb25zdCBjaGFyKikgY29u
c3Q7CiAgICAgYm9vbCBwcm90b2NvbElzRGF0YSgpIGNvbnN0IHsgcmV0dXJuIHByb3RvY29sSXMo
ImRhdGEiKTsgfQorICAgIGJvb2wgcHJvdG9jb2xJc0phdmFTY3JpcHQoKSBjb25zdCB7IHJldHVy
biBwcm90b2NvbElzKCJqYXZhc2NyaXB0Iik7IH0KICAgICBib29sIHByb3RvY29sSXNJbkhUVFBG
YW1pbHkoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzTG9jYWxGaWxlKCkgY29u
c3Q7CiAgICAgYm9vbCBpc0JsYW5rVVJMKCkgY29uc3Q7Cg==
</data>
<flag name="review"
          id="275098"
          type_id="1"
          status="+"
          setter="beidson"
    />
          </attachment>
      

    </bug>

</bugzilla>