<?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>73784</bug_id>
          
          <creation_ts>2011-12-04 15:25:33 -0800</creation_ts>
          <short_desc>Use HashMap&lt;OwnPtr&gt; in CollectionCache</short_desc>
          <delta_ts>2013-05-07 08:57:58 -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>DOM</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>73757</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>514779</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-04 15:25:33 -0800</bug_when>
    <thetext>Use HashMap&lt;OwnPtr&gt; in CollectionCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514780</commentid>
    <comment_count>1</comment_count>
      <attachid>117812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-04 15:27:30 -0800</bug_when>
    <thetext>Created attachment 117812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514821</commentid>
    <comment_count>2</comment_count>
      <attachid>117812</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-12-04 18:35:29 -0800</bug_when>
    <thetext>Comment on attachment 117812
Patch

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

&gt; Source/WebCore/html/HTMLCollection.cpp:344
&gt; +            OwnPtr&lt;Vector&lt;Element*&gt; &gt;&amp; nameVector = m_info-&gt;nameCache.add(nameAttrVal.impl(), nullptr).first-&gt;second;
&gt; +            if (!nameVector)
&gt; +                nameVector = adoptPtr(new Vector&lt;Element*&gt;);

Given how much this pattern repeats, it seems like we could factor them into functions, e.g ensureNameCache() and ensureIdCache().
That would also make the &quot;// add to foo cache&quot; comments even more redundant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515458</commentid>
    <comment_count>3</comment_count>
      <attachid>117812</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-05 15:40:26 -0800</bug_when>
    <thetext>Comment on attachment 117812
Patch

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

&gt;&gt; Source/WebCore/html/HTMLCollection.cpp:344
&gt;&gt; +                nameVector = adoptPtr(new Vector&lt;Element*&gt;);
&gt; 
&gt; Given how much this pattern repeats, it seems like we could factor them into functions, e.g ensureNameCache() and ensureIdCache().
&gt; That would also make the &quot;// add to foo cache&quot; comments even more redundant.

I think I can make a helper function that we can use at all 6 call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515963</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-06 09:30:06 -0800</bug_when>
    <thetext>Committed r102147: &lt;http://trac.webkit.org/changeset/102147&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515982</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-06 09:48:45 -0800</bug_when>
    <thetext>Wouldn&apos;t it be even better to just to use HashMap&lt;AtomicStringImpl*, Vector&lt;Element*&gt; &gt; ? Do we lack optimization for moving Vectors in HashMaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515999</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-06 10:11:12 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Wouldn&apos;t it be even better to just to use HashMap&lt;AtomicStringImpl*, Vector&lt;Element*&gt; &gt; ? Do we lack optimization for moving Vectors in HashMaps?

I don’t know if it would be better. I don’t know how well we accommodate vectors when moving hash table entries around. Also, empty and deleted slots would use a lot more memory than they do for OwnPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516002</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-06 10:16:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I don’t know if it would be better. I don’t know how well we accommodate vectors when moving hash table entries around. Also, empty and deleted slots would use a lot more memory than they do for OwnPtr.

Empty vector is a pointer and a size_t. Considering that used values now use more memory the difference shouldn&apos;t be huge. Extra indirection is slower and the type looks uglier so it would be nice if the pure vector case was efficient too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516007</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-06 10:20:38 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I don’t know if it would be better. I don’t know how well we accommodate vectors when moving hash table entries around. Also, empty and deleted slots would use a lot more memory than they do for OwnPtr.
&gt; 
&gt; Empty vector is a pointer and a size_t. Considering that used values now use more memory the difference shouldn&apos;t be huge. Extra indirection is slower and the type looks uglier so it would be nice if the pure vector case was efficient too.

Sure, sounds like a neat project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516008</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-12-06 10:22:26 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Empty vector is a pointer and a size_t.

I believe it’s a pointer (m_buffer) and two size_t&apos;s (m_capacity and m_size).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516016</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-12-06 10:35:35 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; Empty vector is a pointer and a size_t.
&gt; 
&gt; I believe it’s a pointer (m_buffer) and two size_t&apos;s (m_capacity and m_size).

You are right. Optimizing m_capacity away from Vector in null case might be a good memory win.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117812</attachid>
            <date>2011-12-04 15:27:30 -0800</date>
            <delta_ts>2011-12-05 15:40:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73784-20111204152729.patch</filename>
            <type>text/plain</type>
            <size>8089</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTk2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTEyLTA0ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgSGFzaE1hcDxPd25QdHI+IGlu
IENvbGxlY3Rpb25DYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NzM3ODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGh0bWwvQ29sbGVjdGlvbkNhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNv
bGxlY3Rpb25DYWNoZTo6Y29weUNhY2hlTWFwKTogVXNlIGFkb3B0UHRyLgorICAgICAgICAoV2Vi
Q29yZTo6Q29sbGVjdGlvbkNhY2hlOjpyZXNldCk6IFJlbW92ZWQgbm93LXVubmVlZGVkIGNhbGxz
IHRvIGRlbGV0ZUFsbFZhbHVlcy4KKworICAgICAgICAqIGh0bWwvQ29sbGVjdGlvbkNhY2hlLmg6
IENoYW5nZWQgbWFwcGVkIHR5cGUgaW4gTm9kZUNhY2hlTWFwIHRvIE93blB0ci4KKworICAgICAg
ICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxl
Y3Rpb246OnVwZGF0ZU5hbWVDYWNoZSk6IFVwZGF0ZWQgY2FjaGUgY29kZSB0byB3b3JrIHdpdGgg
T3duUHRyLgorICAgICAgICBBbHNvIGVsaW1pbmF0ZWQgYW4gdW5uZWVkZWQgZ2V0IGNhbGwgYmVm
b3JlIHRoZSBhZGQ7IHdlIGNhbiBkbyBib3RoIGF0IG9uY2UuCisgICAgICAgICogaHRtbC9IVE1M
Rm9ybUNvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9u
Ojp1cGRhdGVOYW1lQ2FjaGUpOiBEaXR0by4KKwogMjAxMS0xMi0wNCAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBISUVSQVJDSFlfUkVRVUVTVF9FUlIgY2hlY2sg
aW4gY2hlY2tBY2NlcHRDaGlsZCBzaG91bGQgYmUgb3B0aW1pemVkIGZvciBuZXdDaGlsZCB3aXRo
b3V0IGNoaWxkcmVuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25DYWNoZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Db2xsZWN0aW9uQ2FjaGUuY3Bw
CShyZXZpc2lvbiAxMDE5NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25DYWNo
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDYgKzIxLDggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDb2xsZWN0aW9uQ2FjaGUuaCIKIAorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ29sbGVjdGlvbkNhY2hlOjpDb2xsZWN0
aW9uQ2FjaGUoKQpAQCAtMzQsNyArMzYsNyBAQCBpbmxpbmUgdm9pZCBDb2xsZWN0aW9uQ2FjaGU6
OmNvcHlDYWNoZU1hCiAgICAgQVNTRVJUKGRlc3QuaXNFbXB0eSgpKTsKICAgICBOb2RlQ2FjaGVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHNyYy5lbmQoKTsKICAgICBmb3IgKE5vZGVDYWNoZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzcmMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAg
ICAgICBkZXN0LmFkZChpdC0+Zmlyc3QsIG5ldyBWZWN0b3I8RWxlbWVudCo+KCppdC0+c2Vjb25k
KSk7CisgICAgICAgIGRlc3QuYWRkKGl0LT5maXJzdCwgYWRvcHRQdHIobmV3IFZlY3RvcjxFbGVt
ZW50Kj4oKml0LT5zZWNvbmQpKSk7CiB9CiAKIENvbGxlY3Rpb25DYWNoZTo6Q29sbGVjdGlvbkNh
Y2hlKGNvbnN0IENvbGxlY3Rpb25DYWNoZSYgb3RoZXIpCkBAIC02NSwxMiArNjcsNiBAQCB2b2lk
IENvbGxlY3Rpb25DYWNoZTo6c3dhcChDb2xsZWN0aW9uQ2FjCiAgICAgc3RkOjpzd2FwKGhhc05h
bWVDYWNoZSwgb3RoZXIuaGFzTmFtZUNhY2hlKTsKIH0KIAotQ29sbGVjdGlvbkNhY2hlOjp+Q29s
bGVjdGlvbkNhY2hlKCkKLXsKLSAgICBkZWxldGVBbGxWYWx1ZXMoaWRDYWNoZSk7Ci0gICAgZGVs
ZXRlQWxsVmFsdWVzKG5hbWVDYWNoZSk7Ci19Ci0KIHZvaWQgQ29sbGVjdGlvbkNhY2hlOjpyZXNl
dCgpCiB7CiAgICAgY3VycmVudCA9IDA7CkBAIC03OCw5ICs3NCw3IEBAIHZvaWQgQ29sbGVjdGlv
bkNhY2hlOjpyZXNldCgpCiAgICAgbGVuZ3RoID0gMDsKICAgICBoYXNMZW5ndGggPSBmYWxzZTsK
ICAgICBlbGVtZW50c0FycmF5UG9zaXRpb24gPSAwOwotICAgIGRlbGV0ZUFsbFZhbHVlcyhpZENh
Y2hlKTsKICAgICBpZENhY2hlLmNsZWFyKCk7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG5hbWVDYWNo
ZSk7CiAgICAgbmFtZUNhY2hlLmNsZWFyKCk7CiAgICAgaGFzTmFtZUNhY2hlID0gZmFsc2U7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0NvbGxlY3Rpb25DYWNoZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgJKHJldmlzaW9uIDEwMTk2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvQ29sbGVjdGlvbkNhY2hlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDE0ICs0MCwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHN3YXAodG1wKTsKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogICAgIH0KLSAgICB+Q29sbGVjdGlvbkNhY2hlKCk7CiAKICAgICB2
b2lkIHJlc2V0KCk7CiAgICAgdm9pZCBzd2FwKENvbGxlY3Rpb25DYWNoZSYpOwogCiAgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIFZlY3RvcjxFbGVtZW50Kj4qPiBOb2RlQ2FjaGVNYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPEF0b21pY1N0cmluZ0ltcGwqLCBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+ID4gTm9kZUNh
Y2hlTWFwOwogCiAgICAgdWludDY0X3QgdmVyc2lvbjsKICAgICBFbGVtZW50KiBjdXJyZW50OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAJKHJldmlzaW9uIDEwMTk2
NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjcsMTEgKzMyNyw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVD
YWNoZSgpIGMKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmdl
dEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCi0gICAgICAgICAgICBWZWN0b3I8RWxl
bWVudCo+KiBpZFZlY3RvciA9IG1faW5mby0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7
Ci0gICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3Ig
PSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKLSAgICAgICAgICAgICAgICBtX2luZm8tPmlkQ2FjaGUu
YWRkKGlkQXR0clZhbC5pbXBsKCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIGlkVmVjdG9yID0gbV9pbmZvLT5pZENhY2hl
LmFkZChpZEF0dHJWYWwuaW1wbCgpLCBudWxscHRyKS5maXJzdC0+c2Vjb25kOworICAgICAgICAg
ICAgaWYgKCFpZFZlY3RvcikKKyAgICAgICAgICAgICAgICBpZFZlY3RvciA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZSk7CiAg
ICAgICAgIH0KICAgICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFs
ICE9IG5hbWVBdHRyVmFsCkBAIC0zNDEsMTEgKzMzOSw5IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246
OnVwZGF0ZU5hbWVDYWNoZSgpIGMKICAgICAgICAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1lKGVt
YmVkVGFnKSB8fCBlLT5oYXNMb2NhbE5hbWUoaW5wdXRUYWcpIHx8CiAgICAgICAgICAgICAgICAg
IGUtPmhhc0xvY2FsTmFtZShzZWxlY3RUYWcpKSkpIHsKICAgICAgICAgICAgIC8vIGFkZCB0byBu
YW1lIGNhY2hlCi0gICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+KiBuYW1lVmVjdG9yID0gbV9p
bmZvLT5uYW1lQ2FjaGUuZ2V0KG5hbWVBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAo
IW5hbWVWZWN0b3IpIHsKLSAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gbmV3IFZlY3RvcjxF
bGVtZW50Kj47Ci0gICAgICAgICAgICAgICAgbV9pbmZvLT5uYW1lQ2FjaGUuYWRkKG5hbWVBdHRy
VmFsLmltcGwoKSwgbmFtZVZlY3Rvcik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBPd25Q
dHI8VmVjdG9yPEVsZW1lbnQqPiA+JiBuYW1lVmVjdG9yID0gbV9pbmZvLT5uYW1lQ2FjaGUuYWRk
KG5hbWVBdHRyVmFsLmltcGwoKSwgbnVsbHB0cikuZmlyc3QtPnNlY29uZDsKKyAgICAgICAgICAg
IGlmICghbmFtZVZlY3RvcikKKyAgICAgICAgICAgICAgICBuYW1lVmVjdG9yID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxFbGVtZW50Kj4pOwogICAgICAgICAgICAgbmFtZVZlY3Rvci0+YXBwZW5kKGUp
OwogICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bGxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b2xsZWN0aW9uLmNwcAkocmV2aXNpb24gMTAxOTY3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUNvbGxlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsMjEgKzE3MSwxNyBA
QCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKICAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAg
ICAgICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQotICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVt
ZW50Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgpKTsK
LSAgICAgICAgICAgICAgICBpZiAoIWlkVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlk
VmVjdG9yID0gbmV3IFZlY3RvcjxFbGVtZW50Kj47Ci0gICAgICAgICAgICAgICAgICAgIGluZm8o
KS0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgaWRWZWN0b3IpOwotICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBPd25QdHI8VmVjdG9yPEVsZW1lbnQqPiA+JiBpZFZlY3Rv
ciA9IGluZm8oKS0+aWRDYWNoZS5hZGQoaWRBdHRyVmFsLmltcGwoKSwgbnVsbHB0cikuZmlyc3Qt
PnNlY29uZDsKKyAgICAgICAgICAgICAgICBpZiAoIWlkVmVjdG9yKQorICAgICAgICAgICAgICAg
ICAgICBpZFZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+KTsKICAgICAgICAg
ICAgICAgICBpZFZlY3Rvci0+YXBwZW5kKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGZvdW5k
SW5wdXRFbGVtZW50cy5hZGQoaWRBdHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICBpZiAoIW5hbWVBdHRyVmFsLmlzRW1wdHkoKSAmJiBpZEF0dHJWYWwgIT0gbmFtZUF0
dHJWYWwpIHsKICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gbmFtZSBjYWNoZQotICAgICAgICAg
ICAgICAgIFZlY3RvcjxFbGVtZW50Kj4qIG5hbWVWZWN0b3IgPSBpbmZvKCktPm5hbWVDYWNoZS5n
ZXQobmFtZUF0dHJWYWwuaW1wbCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoIW5hbWVWZWN0b3Ip
IHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZVZlY3RvciA9IG5ldyBWZWN0b3I8RWxlbWVudCo+
OwotICAgICAgICAgICAgICAgICAgICBpbmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwu
aW1wbCgpLCBuYW1lVmVjdG9yKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
T3duUHRyPFZlY3RvcjxFbGVtZW50Kj4gPiYgbmFtZVZlY3RvciA9IGluZm8oKS0+bmFtZUNhY2hl
LmFkZChuYW1lQXR0clZhbC5pbXBsKCksIG51bGxwdHIpLmZpcnN0LT5zZWNvbmQ7CisgICAgICAg
ICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKQorICAgICAgICAgICAgICAgICAgICBuYW1lVmVjdG9y
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxFbGVtZW50Kj4pOwogICAgICAgICAgICAgICAgIG5hbWVW
ZWN0b3ItPmFwcGVuZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICBmb3VuZElucHV0RWxlbWVu
dHMuYWRkKG5hbWVBdHRyVmFsLmltcGwoKSk7CiAgICAgICAgICAgICB9CkBAIC0xOTgsMjAgKzE5
NCwxNiBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hlCiAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkgJiYgIWZvdW5kSW5w
dXRFbGVtZW50cy5jb250YWlucyhpZEF0dHJWYWwuaW1wbCgpKSkgewogICAgICAgICAgICAgLy8g
YWRkIHRvIGlkIGNhY2hlCi0gICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFZlY3RvciA9
IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRBdHRyVmFsLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAo
IWlkVmVjdG9yKSB7Ci0gICAgICAgICAgICAgICAgaWRWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1l
bnQqPjsKLSAgICAgICAgICAgICAgICBpbmZvKCktPmlkQ2FjaGUuYWRkKGlkQXR0clZhbC5pbXBs
KCksIGlkVmVjdG9yKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE93blB0cjxWZWN0b3I8
RWxlbWVudCo+ID4mIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmFkZChpZEF0dHJWYWwuaW1w
bCgpLCBudWxscHRyKS5maXJzdC0+c2Vjb25kOworICAgICAgICAgICAgaWYgKCFpZFZlY3RvcikK
KyAgICAgICAgICAgICAgICBpZFZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8RWxlbWVudCo+
KTsKICAgICAgICAgICAgIGlkVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKCFuYW1lQXR0clZhbC5pc0VtcHR5KCkgJiYgaWRBdHRyVmFsICE9IG5hbWVBdHRy
VmFsICYmICFmb3VuZElucHV0RWxlbWVudHMuY29udGFpbnMobmFtZUF0dHJWYWwuaW1wbCgpKSkg
ewogICAgICAgICAgICAgLy8gYWRkIHRvIG5hbWUgY2FjaGUKLSAgICAgICAgICAgIFZlY3RvcjxF
bGVtZW50Kj4qIG5hbWVWZWN0b3IgPSBpbmZvKCktPm5hbWVDYWNoZS5nZXQobmFtZUF0dHJWYWwu
aW1wbCgpKTsKLSAgICAgICAgICAgIGlmICghbmFtZVZlY3RvcikgewotICAgICAgICAgICAgICAg
IG5hbWVWZWN0b3IgPSBuZXcgVmVjdG9yPEVsZW1lbnQqPjsKLSAgICAgICAgICAgICAgICBpbmZv
KCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBuYW1lVmVjdG9yKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIE93blB0cjxWZWN0b3I8RWxlbWVudCo+ID4mIG5hbWVWZWN0
b3IgPSBpbmZvKCktPm5hbWVDYWNoZS5hZGQobmFtZUF0dHJWYWwuaW1wbCgpLCBudWxscHRyKS5m
aXJzdC0+c2Vjb25kOworICAgICAgICAgICAgaWYgKCFuYW1lVmVjdG9yKQorICAgICAgICAgICAg
ICAgIG5hbWVWZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEVsZW1lbnQqPik7CiAgICAgICAg
ICAgICBuYW1lVmVjdG9yLT5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIH0KICAgICB9Cg==
</data>
<flag name="review"
          id="117372"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>