<?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>30926</bug_id>
          
          <creation_ts>2009-10-29 13:49:42 -0700</creation_ts>
          <short_desc>Optimizations to Element::getAttribute</short_desc>
          <delta_ts>2009-11-10 14:29:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jens Alfke">jens</reporter>
          <assigned_to name="Jens Alfke">jens</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>159058</commentid>
    <comment_count>0</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-29 13:49:42 -0700</bug_when>
    <thetext>Driven by some Shark profiles, I&apos;ve added some optimizations to Element::getAttribute(String). This is a hot call in some of the Dromaeo DOM benchmarks.

(1) When checking whether the attribute name is &apos;style&apos;, do a case-insensitive compare instead of creating a temporary lowercased string.
(2) Avoid this comparison entirely if m_isStyleAttributeValid is set
(3) In NamedNodeMap::getAttributeItem, avoid a bunch of unnecessary calls to QualifiedName::toString (which generates two temp strings) and redundant string comparisons.

getAttributeItem() could be optimized further to avoid having to generate temporary strings altogether, but that&apos;s farther than I want to go right now (and will only have an effect if there are attributes with prefixed names, which I think is rare in HTML.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159064</commentid>
    <comment_count>1</comment_count>
      <attachid>42139</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-29 13:56:06 -0700</bug_when>
    <thetext>Created attachment 42139
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159066</commentid>
    <comment_count>2</comment_count>
      <attachid>42140</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-29 13:59:06 -0700</bug_when>
    <thetext>Created attachment 42140
oops, correct patch

Oops, I attached an obsolete patch file. This is the right one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159094</commentid>
    <comment_count>3</comment_count>
      <attachid>42140</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-29 14:44:15 -0700</bug_when>
    <thetext>Comment on attachment 42140
oops, correct patch

Patches for review need change log entries in the patch. Please don&apos;t put them up for review without the change log entry since it makes extra work for reviewers.

Since this is a performance optimization, were you able to measure the speedup?

&gt; Index: WebCore/dom/Element.cpp
&gt; ===================================================================
&gt; --- WebCore/dom/Element.cpp	(revision 50224)
&gt; +++ WebCore/dom/Element.cpp	(working copy)
&gt; @@ -488,9 +488,12 @@ static inline bool shouldIgnoreAttribute
&gt;  
&gt;  const AtomicString&amp; Element::getAttribute(const String&amp; name) const
&gt;  {
&gt; -    String localName = shouldIgnoreAttributeCase(this) ? name.lower() : name;
&gt; -    if (localName == styleAttr.localName() &amp;&amp; !m_isStyleAttributeValid)
&gt; -        updateStyleAttribute();
&gt; +    bool ignoreCase = shouldIgnoreAttributeCase(this);
&gt; +    // Update the &apos;style&apos; attribute if it&apos;s invalid and being requested:
&gt; +    if (!m_isStyleAttributeValid)
&gt; +        if (ignoreCase ? equalIgnoringCase(name, styleAttr.localName())
&gt; +                       : (name == styleAttr.localName()))
&gt; +            updateStyleAttribute();

Multiple line if statement body needs braces to match WebKit style guide.

I also think you should avoid the unusual formatting here -- we frown on lining code up like the &quot;?&quot; and &quot;:&quot; here since it&apos;s high maintenance (has to be reformatted if you rename things).

One way to avoid that would be to put the comparison into an inline function that takes a boolean:

    static bool equalPossiblyIgnoringCase(const String&amp; a, const AtomicString&amp; b, bool ignoreCase)
    {
        if (ignoreCase)
            return equalIgnoringCase(a, b);
        return a == b;
    }

Then you could change things back to a single line if,.

    if (!m_isStyleAttributeValue &amp;&amp; equalPossiblyIgnoringCase(name, styleAttr.localName(), ignoreCase))
        updateStyleAttribute();

Maybe you like this, or maybe you will find some other way of eliminating the unusual formatting, or maybe you will want to start a thread on webkit-dev suggesting we do this style of formatting ;-)

&gt;      if (namedAttrMap)
&gt; -        if (Attribute* a = namedAttrMap-&gt;getAttributeItem(name, shouldIgnoreAttributeCase(this)))
&gt; +        if (Attribute* a = namedAttrMap-&gt;getAttributeItem(name, ignoreCase))
&gt;              return a-&gt;value();

Since you&apos;re touching this code, you should add the braces we would have used if writing this code anew, and give the local variable a name that&apos;s a word instead of a letter.

&gt; +            // FIXME: Would be faster to do this test without generating a temporary string.

I think the FIXME needs to explain why you didn&apos;t do it. Maybe just wording it this way: &quot;Would be faster if we could compare a QualifiedName to a string without generating a temporary string.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159118</commentid>
    <comment_count>4</comment_count>
      <attachid>42154</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-29 15:36:28 -0700</bug_when>
    <thetext>Created attachment 42154
patch 3

Sorry about forgetting the changelog again; don&apos;t know why I keep doing that...

I took your advice to create an inline string-comparison helper, but added it to the String class since I needed it in both source files and it could be useful elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159121</commentid>
    <comment_count>5</comment_count>
      <attachid>42154</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-29 15:41:09 -0700</bug_when>
    <thetext>Comment on attachment 42154
patch 3

Does this make a specific performance test demonstrably faster?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159123</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-29 15:41:58 -0700</bug_when>
    <thetext>(I don&apos;t mean to sound like I&apos;m doubting that it does.  Just interested in knowing more specifics.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159128</commentid>
    <comment_count>7</comment_count>
      <attachid>42154</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-29 15:49:53 -0700</bug_when>
    <thetext>Comment on attachment 42154
patch 3

You didn’t answer my question from the original review: &quot;Since this is a performance optimization, were you able to measure the speedup?&quot;

&gt; +    bool ignoreCase = shouldIgnoreAttributeCase(this);
&gt; +    // Update the &apos;style&apos; attribute if it&apos;s invalid and being requested:
&gt; +    if (!m_isStyleAttributeValid &amp;&amp; equalPossiblyIgnoringCase(name, styleAttr.localName(), ignoreCase))
&gt;          updateStyleAttribute();

I would have put a blank line before the comment to make the paragraphing look right.

&gt; -    if (namedAttrMap)
&gt; -        if (Attribute* a = namedAttrMap-&gt;getAttributeItem(name, shouldIgnoreAttributeCase(this)))
&gt; -            return a-&gt;value();
&gt; +    if (namedAttrMap) {
&gt; +        Attribute* attribute = namedAttrMap-&gt;getAttributeItem(name, ignoreCase);
&gt; +        if (attribute)
&gt; +            return attribute-&gt;value();
&gt; +    }

You took the definition of the local variable out of the if statement. Why?

&gt; +    return ignoreCase ? equalIgnoringCase(a,b) : (a == b);

Need a space after the comma.

Since the only comments here are a small number of trivial formatting things, I&apos;ll say r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159381</commentid>
    <comment_count>8</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-30 11:35:14 -0700</bug_when>
    <thetext>&gt; Since this is a performance optimization, were you able to measure the speedup?

Good question. I had seen improvement on Dromaeo&apos;s DOM Attributes test yesterday, but hadn&apos;t written the numbers down. I tried to replicate it this morning, doing at least six runs either way, but the numbers were now coming up a few points _worse_ with the patch. WTF? I must have either gotten the before/after results mixed up yesterday, or hit some lucky jitter in the test timing that made it better...

After more Shark&apos;ing I&apos;ve found that the problem is that equalIgnoringCase is much, much slower than equal, and the old getAttributeItem code was (intentionally?) optimized for the case where the very first attribute in the list exactly matches the input name. In that case it does only a single == comparison and exits. That seems to be what&apos;s going on in that Dromaeo test, judging by the sample counts. In any other situation it would have been faster with the patch.

This gives me the idea of first scanning the list case-sensitively, and then only scanning insensitively if that fails. This will be faster in the presumably-typical case where the attribute is searched for with the same case in which it appears in the document (and that most searches are for attributes that exist.) I&apos;ll try that and see how it affects the scores.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159440</commentid>
    <comment_count>9</comment_count>
      <attachid>42232</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-10-30 14:19:01 -0700</bug_when>
    <thetext>Created attachment 42232
patch 4 with better optimization

OK, here is an improved optimization for NamedAttrMap. It runs through the list once doing equality checks on the prefix-less attributes, and if that fails, if necessary it runs through again doing the full check.

In Chromium, I saw a 20% speedup in the getAttribute sub-test, and a 3% speedup in the DOM Attributes test it&apos;s part of. Other core DOM tests were not noticeably affected.
In Safari, there was only a 3% improvement in the getAttribute sub-test and no noticeable change in the tests.

From a bit of Shark&apos;ing around, it looks like the difference is because Safari spends a lot of time in JSC string copying and GC during the getAttribute test, while Chromium doesn&apos;t. So in Safari, the improvement to Element::getAttribute(String) is lost in the noise. Not sure why the difference in behavior. That also explains why Chromium is already 50% faster than Safari on the DOM Attributes test. (It sucks on some of the other tests, though.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159453</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-30 14:40:10 -0700</bug_when>
    <thetext>The Core DOM test suite is not a performance test and not at all representative of real use on the web.

I’m not sure we should be using it to guide our decisions about performance optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159455</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-30 14:40:31 -0700</bug_when>
    <thetext>Oh, sorry, my bad. The test in question is Dromaeo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159458</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-10-30 14:41:54 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Oh, sorry, my bad. The test in question is Dromaeo.

And that *is* a performance test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161268</commentid>
    <comment_count>13</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-06 16:43:22 -0800</bug_when>
    <thetext>Patch #4 has been out for a week; any chance of a review soon? (I know that patch 3 got a review+, but I made some nontrivial changes after that and I think it needs to be looked at again.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161270</commentid>
    <comment_count>14</comment_count>
      <attachid>42232</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-06 16:47:09 -0800</bug_when>
    <thetext>Comment on attachment 42232
patch 4 with better optimization

&gt; +        Attribute* attribute = namedAttrMap-&gt;getAttributeItem(name, ignoreCase);
&gt; +        if (attribute)
&gt; +            return attribute-&gt;value();

You took the local variable definition out of the if. Why?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161677</commentid>
    <comment_count>15</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 11:39:08 -0800</bug_when>
    <thetext>&gt; You took the local variable definition out of the if. Why?

Oops, I forgot to answer that the first time; sorry. The answer is that I think assignments inside conditional expressions are bad, both because they&apos;re hard to notice and because the same construct infamously arises due to a typo (&quot;if (x=5) ...&quot;). I&apos;ll use them sometimes in a while() test because they can make the code a lot simpler, but otherwise I think they&apos;re bad news, and the one here didn&apos;t seem necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161687</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-11-09 11:55:18 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Oops, I forgot to answer that the first time; sorry. The answer is that I think
&gt; assignments inside conditional expressions are bad, both because they&apos;re hard
&gt; to notice and because the same construct infamously arises due to a typo (&quot;if
&gt; (x=5) ...&quot;). I&apos;ll use them sometimes in a while() test because they can make
&gt; the code a lot simpler, but otherwise I think they&apos;re bad news, and the one
&gt; here didn&apos;t seem necessary.

This code:

    if (x = 5)

gives a warning under gcc and so can&apos;t be checked in to our project. We are talking about this code:

    if (int max = maxLength())

which seems like a separate issue to me and not at all hard to notice. I&apos;d appreciate it if you consider either following the prevailing style in WebKit or discussing with the others on webkit-dev if you want to change the style.

I understand you personally think these are bad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161723</commentid>
    <comment_count>17</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 12:57:05 -0800</bug_when>
    <thetext>I&apos;m sorry, I didn&apos;t realize this was a contentious issue. There&apos;s nothing about it one way or the other in the WebKit style guide, and I don&apos;t remember having seen any other instances of this in WebKit code; so I thought it was just a bit of cruft that crept in, and I cleaned it up while I was already editing those same lines.

(In some earlier patches I was specifically told during the review to _not_ follow a prevailing idiom in that source file, and even to optionally clean up existing usage -- an example is the usage of PassRefPtrs as local variables in StringImpl.cpp.)

&gt; which seems like a separate issue to me and not at all hard to notice.

Well, I personally found that block confusing; it took a bit of searching to locate where the variable &apos;max&apos; was declared, since I couldn&apos;t find a line beginning &quot;int max =...&quot;. I wasn&apos;t even aware that variables declared in the scope of an &apos;if&apos; would be in context inside the if&apos;s body — I don&apos;t think I&apos;ve ever seen that done before.

Anyway, I&apos;ll change it back and upload a new patch in a minute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161754</commentid>
    <comment_count>18</comment_count>
      <attachid>42795</attachid>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-09 13:24:20 -0800</bug_when>
    <thetext>Created attachment 42795
patch with &quot;if(Attribute*...&quot; restored

Only change is to the previously discussed &apos;if&apos; statement:

-        if (Attribute* a = namedAttrMap-&gt;getAttributeItem(name, shouldIgnoreAttributeCase(this)))
-            return a-&gt;value();
+        if (Attribute* attribute = namedAttrMap-&gt;getAttributeItem(name, ignoreCase))
+            return attribute-&gt;value();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>162222</commentid>
    <comment_count>19</comment_count>
    <who name="Jens Alfke">jens</who>
    <bug_when>2009-11-10 14:29:50 -0800</bug_when>
    <thetext>Committed revision 50763.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42139</attachid>
            <date>2009-10-29 13:56:06 -0700</date>
            <delta_ts>2009-10-29 13:59:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>getAttribute.patch</filename>
            <type>text/plain</type>
            <size>2635</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDIyNCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODgsOSArNDg4LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGUKIAogY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFN0cmluZyBsb2NhbE5h
bWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFt
ZTsKLSAgICBpZiAobG9jYWxOYW1lID09IHN0eWxlQXR0ci5sb2NhbE5hbWUoKSAmJiAhbV9pc1N0
eWxlQXR0cmlidXRlVmFsaWQpCi0gICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CisgICAg
Ym9vbCBpZ25vcmVDYXNlID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKTsKKyAgICAv
LyBVcGRhdGUgdGhlICdzdHlsZScgYXR0cmlidXRlIGlmIGl0J3MgaW52YWxpZCBhbmQgYmVpbmcg
cmVxdWVzdGVkOgorICAgIGlmICghbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQpCisgICAgICAgIGlm
IChpZ25vcmVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgc3R5bGVBdHRyLmxvY2FsTmFt
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICA6IGVxdWFsKG5hbWUsIHN0eWxlQXR0ci5sb2Nh
bE5hbWUoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKICNpZiBFTkFC
TEUoU1ZHKQogICAgIGlmICghbV9hcmVTVkdBdHRyaWJ1dGVzVmFsaWQpCkBAIC00OTgsNyArNTAx
LDcgQEAgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1dAogI2VuZGlmCiAK
ICAgICBpZiAobmFtZWRBdHRyTWFwKQotICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFtZWRB
dHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Uo
dGhpcykpKQorICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFtZWRBdHRyTWFwLT5nZXRBdHRy
aWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2UpKQogICAgICAgICAgICAgcmV0dXJuIGEtPnZhbHVl
KCk7CiAgICAgCiAgICAgcmV0dXJuIG51bGxBdG9tOwpJbmRleDogV2ViQ29yZS9kb20vTmFtZWRB
dHRyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCShy
ZXZpc2lvbiA1MDIyNCkKKysrIFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE3OCwxMCArMTc4LDE4IEBAIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpnZXRB
dHRyaWJ1dGVJdGUKIHsKICAgICB1bnNpZ25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2F0dHJpYnV0ZXNb
aV0tPm5hbWUoKS5oYXNQcmVmaXgoKSAmJiBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS5sb2NhbE5h
bWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsK
LSAgICAgICAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UgPyBlcXVhbElnbm9yaW5nQ2Fz
ZShtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS50b1N0cmluZygpLCBuYW1lKSA6IG5hbWUgPT0gbV9h
dHRyaWJ1dGVzW2ldLT5uYW1lKCkudG9TdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXNbaV0uZ2V0KCk7CisgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1l
ID0gbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCk7CisgICAgICAgIGlmICghYXR0ck5hbWUuaGFzUHJl
Zml4KCkpIHsKKyAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlID8gZXF1
YWxJZ25vcmluZ0Nhc2UoYXR0ck5hbWUubG9jYWxOYW1lKCksIG5hbWUpIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBlcXVhbChhdHRyTmFtZS5sb2NhbE5hbWUo
KSwgbmFtZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBmYXN0ZXIg
dG8gZG8gdGhpcyB0ZXN0IHdpdGhvdXQgZ2VuZXJhdGluZyBhIHRlbXBvcmFyeSBzdHJpbmcuCisg
ICAgICAgICAgICBTdHJpbmcgYXR0ck5hbWVTdHJpbmcgPSBhdHRyTmFtZS50b1N0cmluZygpOwor
ICAgICAgICAgICAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UgPyBlcXVhbElnbm9yaW5n
Q2FzZShhdHRyTmFtZVN0cmluZywgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogZXF1YWwoYXR0ck5hbWVTdHJpbmcsIG5hbWUpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaV0uZ2V0KCk7CisgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIDA7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42140</attachid>
            <date>2009-10-29 13:59:06 -0700</date>
            <delta_ts>2009-10-29 15:36:28 -0700</delta_ts>
            <desc>oops, correct patch</desc>
            <filename>getAttribute.patch</filename>
            <type>text/plain</type>
            <size>2627</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDIyNCkKKysrIFdlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODgsOSArNDg4LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGUKIAogY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRB
dHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIFN0cmluZyBsb2NhbE5h
bWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFt
ZTsKLSAgICBpZiAobG9jYWxOYW1lID09IHN0eWxlQXR0ci5sb2NhbE5hbWUoKSAmJiAhbV9pc1N0
eWxlQXR0cmlidXRlVmFsaWQpCi0gICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CisgICAg
Ym9vbCBpZ25vcmVDYXNlID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKTsKKyAgICAv
LyBVcGRhdGUgdGhlICdzdHlsZScgYXR0cmlidXRlIGlmIGl0J3MgaW52YWxpZCBhbmQgYmVpbmcg
cmVxdWVzdGVkOgorICAgIGlmICghbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQpCisgICAgICAgIGlm
IChpZ25vcmVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgc3R5bGVBdHRyLmxvY2FsTmFt
ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICA6IChuYW1lID09IHN0eWxlQXR0ci5sb2NhbE5h
bWUoKSkpCisgICAgICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAjaWYgRU5BQkxF
KFNWRykKICAgICBpZiAoIW1fYXJlU1ZHQXR0cmlidXRlc1ZhbGlkKQpAQCAtNDk4LDcgKzUwMSw3
IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXQKICNlbmRpZgogCiAg
ICAgaWYgKG5hbWVkQXR0ck1hcCkKLSAgICAgICAgaWYgKEF0dHJpYnV0ZSogYSA9IG5hbWVkQXR0
ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRo
aXMpKSkKKyAgICAgICAgaWYgKEF0dHJpYnV0ZSogYSA9IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmli
dXRlSXRlbShuYW1lLCBpZ25vcmVDYXNlKSkKICAgICAgICAgICAgIHJldHVybiBhLT52YWx1ZSgp
OwogICAgIAogICAgIHJldHVybiBudWxsQXRvbTsKSW5kZXg6IFdlYkNvcmUvZG9tL05hbWVkQXR0
ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2
aXNpb24gNTAyMjQpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0dHJNYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsMTAgKzE3OCwxOCBAQCBBdHRyaWJ1dGUqIE5hbWVkTm9kZU1hcDo6Z2V0QXR0
cmlidXRlSXRlCiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAgIGlmICghbV9hdHRyaWJ1dGVzW2ld
LT5uYW1lKCkuaGFzUHJlZml4KCkgJiYgbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkubG9jYWxOYW1l
KCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaV0uZ2V0KCk7Ci0g
ICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2Uo
bV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkudG9TdHJpbmcoKSwgbmFtZSkgOiBuYW1lID09IG1fYXR0
cmlidXRlc1tpXS0+bmFtZSgpLnRvU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9hdHRy
aWJ1dGVzW2ldLmdldCgpOworICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9
IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICBpZiAoIWF0dHJOYW1lLmhhc1ByZWZp
eCgpKSB7CisgICAgICAgICAgICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSA/IGVxdWFs
SWdub3JpbmdDYXNlKGF0dHJOYW1lLmxvY2FsTmFtZSgpLCBuYW1lKSAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKGF0dHJOYW1lLmxvY2FsTmFtZSgpID09IG5h
bWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2F0dHJpYnV0ZXNbaV0uZ2V0KCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogV291bGQgYmUgZmFzdGVyIHRvIGRv
IHRoaXMgdGVzdCB3aXRob3V0IGdlbmVyYXRpbmcgYSB0ZW1wb3Jhcnkgc3RyaW5nLgorICAgICAg
ICAgICAgU3RyaW5nIGF0dHJOYW1lU3RyaW5nID0gYXR0ck5hbWUudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2Uo
YXR0ck5hbWVTdHJpbmcsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IChhdHRyTmFtZVN0cmluZyA9PSBuYW1lKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9hdHRyaWJ1dGVzW2ldLmdldCgpOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAw
OwogfQo=
</data>
<flag name="review"
          id="23644"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42154</attachid>
            <date>2009-10-29 15:36:28 -0700</date>
            <delta_ts>2009-10-30 14:19:01 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>getAttribute.patch</filename>
            <type>text/plain</type>
            <size>4400</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDI1OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMjkgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPcHRp
bWl6YXRpb25zIHRvIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA5MjYKKworICAgICAgICBKdXN0IG9wdGltaXph
dGlvbjsgZG9lc24ndCByZXF1aXJlIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6IFNwZWVkIHVw
IGNvbXBhcmlzb24gb2YgYXR0cmlidXRlIG5hbWUgd2l0aCAnc3R5bGUnLgorICAgICAgICAqIGRv
bS9OYW1lZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpnZXRB
dHRyaWJ1dGVJdGVtKTogQXZvaWQgdW5uZWNlc3NhcnkgY29tcGFyaXNvbnMgYW5kIHRlbXBvcmFy
eSBzdHJpbmdzLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyaW5nOjplcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNl
KTogTmV3IHV0aWxpdHkgdXNlZCBieSB0aGUgYWJvdmUuCisKIDIwMDktMTAtMjcgIENocmlzIEZs
ZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KSW5kZXg6IFdlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiA1MDI1OCkKKysrIFdlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODgsOCArNDg4LDkgQEAgc3RhdGljIGlubGlu
ZSBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1l
bnQ6OmdldEF0dHJpYnV0ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgU3RyaW5n
IGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2Vy
KCkgOiBuYW1lOwotICAgIGlmIChsb2NhbE5hbWUgPT0gc3R5bGVBdHRyLmxvY2FsTmFtZSgpICYm
ICFtX2lzU3R5bGVBdHRyaWJ1dGVWYWxpZCkKKyAgICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJ
Z25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpOworICAgIC8vIFVwZGF0ZSB0aGUgJ3N0eWxlJyBhdHRy
aWJ1dGUgaWYgaXQncyBpbnZhbGlkIGFuZCBiZWluZyByZXF1ZXN0ZWQ6CisgICAgaWYgKCFtX2lz
U3R5bGVBdHRyaWJ1dGVWYWxpZCAmJiBlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNlKG5hbWUsIHN0
eWxlQXR0ci5sb2NhbE5hbWUoKSwgaWdub3JlQ2FzZSkpCiAgICAgICAgIHVwZGF0ZVN0eWxlQXR0
cmlidXRlKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNDk3LDkgKzQ5OCwxMSBAQCBjb25zdCBB
dG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0CiAgICAgICAgIHVwZGF0ZUFuaW1hdGVk
U1ZHQXR0cmlidXRlKG5hbWUpOwogI2VuZGlmCiAKLSAgICBpZiAobmFtZWRBdHRyTWFwKQotICAg
ICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykpKQotICAgICAgICAgICAgcmV0dXJu
IGEtPnZhbHVlKCk7CisgICAgaWYgKG5hbWVkQXR0ck1hcCkgeworICAgICAgICBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSA9IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVD
YXNlKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZSkKKyAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGUtPnZhbHVlKCk7CisgICAgfQogICAgIAogICAgIHJldHVybiBudWxsQXRvbTsKIH0KSW5kZXg6
IFdlYkNvcmUvZG9tL05hbWVkQXR0ck1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
TmFtZWRBdHRyTWFwLmNwcAkocmV2aXNpb24gNTAyNTgpCisrKyBXZWJDb3JlL2RvbS9OYW1lZEF0
dHJNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzgsMTAgKzE3OCwxNyBAQCBBdHRyaWJ1dGUq
IE5hbWVkTm9kZU1hcDo6Z2V0QXR0cmlidXRlSXRlCiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVu
Z3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Ci0gICAgICAg
IGlmICghbV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkuaGFzUHJlZml4KCkgJiYgbV9hdHRyaWJ1dGVz
W2ldLT5uYW1lKCkubG9jYWxOYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBtX2F0
dHJpYnV0ZXNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
ID8gZXF1YWxJZ25vcmluZ0Nhc2UobV9hdHRyaWJ1dGVzW2ldLT5uYW1lKCkudG9TdHJpbmcoKSwg
bmFtZSkgOiBuYW1lID09IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLnRvU3RyaW5nKCkpCi0gICAg
ICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzW2ldLmdldCgpOworICAgICAgICBjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICBp
ZiAoIWF0dHJOYW1lLmhhc1ByZWZpeCgpKSB7CisgICAgICAgICAgICBpZiAoZXF1YWxQb3NzaWJs
eUlnbm9yaW5nQ2FzZShuYW1lLCBhdHRyTmFtZS5sb2NhbE5hbWUoKSwgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBmYXN0
ZXIgdG8gZG8gdGhpcyBjb21wYXJpc29uIHdpdGhvdXQgY2FsbGluZyB0b1N0cmluZywgd2hpY2gK
KyAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBvcmFyeSBzdHJpbmcgYnkgY29uY2F0ZW5h
dGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVhY2hlZAorICAgICAgICAgICAgLy8gaWYg
dGhlIGF0dHJpYnV0ZSBuYW1lIGhhcyBhIHByZWZpeCwgd2hpY2ggaXMgcmFyZSBpbiBIVE1MLgor
ICAgICAgICAgICAgaWYgKGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2UobmFtZSwgYXR0ck5hbWUu
dG9TdHJpbmcoKSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1
cm4gMDsKIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZp
c2lvbiA1MDI1OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODYsNiArMjg2LDExIEBAIGlubGluZSBib29sIGVxdWFsSWdub3Jp
bmdDYXNlKGNvbnN0IFN0cmkKIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0
cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBs
KCksIGIpOyB9CiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBj
b25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsg
fQogCitpbmxpbmUgYm9vbCBlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYg
YSwgY29uc3QgU3RyaW5nJiBiLCBib29sIGlnbm9yZUNhc2UpIAoreworICAgIHJldHVybiBpZ25v
cmVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2UoYSxiKSA6IChhID09IGIpOworfQorCiBpbmxpbmUg
Ym9vbCBlcXVhbElnbm9yaW5nTnVsbGl0eShjb25zdCBTdHJpbmcmIGEsIGNvbnN0IFN0cmluZyYg
YikgeyByZXR1cm4gZXF1YWxJZ25vcmluZ051bGxpdHkoYS5pbXBsKCksIGIuaW1wbCgpKTsgfQog
CiBpbmxpbmUgYm9vbCBvcGVyYXRvciEoY29uc3QgU3RyaW5nJiBzdHIpIHsgcmV0dXJuIHN0ci5p
c051bGwoKTsgfQo=
</data>
<flag name="review"
          id="23656"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42232</attachid>
            <date>2009-10-30 14:19:01 -0700</date>
            <delta_ts>2009-11-09 13:24:20 -0800</delta_ts>
            <desc>patch 4 with better optimization</desc>
            <filename>getAttribute2.patch</filename>
            <type>text/plain</type>
            <size>5118</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDM0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMzAgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPcHRp
bWl6YXRpb25zIHRvIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA5MjYKKworICAgICAgICBKdXN0IG9wdGltaXph
dGlvbjsgZG9lc24ndCByZXF1aXJlIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6IFNwZWVkIHVw
IGNvbXBhcmlzb24gb2YgYXR0cmlidXRlIG5hbWUgd2l0aCAnc3R5bGUnLgorICAgICAgICAqIGRv
bS9OYW1lZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpnZXRB
dHRyaWJ1dGVJdGVtKTogQXZvaWQgdW5uZWNlc3NhcnkgY29tcGFyaXNvbnMgYW5kIHRlbXBvcmFy
eSBzdHJpbmdzLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyaW5nOjplcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNl
KTogTmV3IHV0aWxpdHkgdXNlZCBieSB0aGUgYWJvdmUuCisKIDIwMDktMTAtMzAgIEpvaG4gR3Jl
Z2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gNTAzNDgpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg4LDggKzQ4OCwxMCBAQCBzdGF0aWMgaW5saW5lIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6
Z2V0QXR0cmlidXRlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBTdHJpbmcgbG9j
YWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93ZXIoKSA6
IG5hbWU7Ci0gICAgaWYgKGxvY2FsTmFtZSA9PSBzdHlsZUF0dHIubG9jYWxOYW1lKCkgJiYgIW1f
aXNTdHlsZUF0dHJpYnV0ZVZhbGlkKQorICAgIGJvb2wgaWdub3JlQ2FzZSA9IHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UodGhpcyk7CisgICAgCisgICAgLy8gVXBkYXRlIHRoZSAnc3R5bGUnIGF0
dHJpYnV0ZSBpZiBpdCdzIGludmFsaWQgYW5kIGJlaW5nIHJlcXVlc3RlZDoKKyAgICBpZiAoIW1f
aXNTdHlsZUF0dHJpYnV0ZVZhbGlkICYmIGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2UobmFtZSwg
c3R5bGVBdHRyLmxvY2FsTmFtZSgpLCBpZ25vcmVDYXNlKSkKICAgICAgICAgdXBkYXRlU3R5bGVB
dHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCkBAIC00OTcsOSArNDk5LDExIEBAIGNvbnN0
IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXQKICAgICAgICAgdXBkYXRlQW5pbWF0
ZWRTVkdBdHRyaWJ1dGUobmFtZSk7CiAjZW5kaWYKIAotICAgIGlmIChuYW1lZEF0dHJNYXApCi0g
ICAgICAgIGlmIChBdHRyaWJ1dGUqIGEgPSBuYW1lZEF0dHJNYXAtPmdldEF0dHJpYnV0ZUl0ZW0o
bmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSkpCi0gICAgICAgICAgICByZXR1
cm4gYS0+dmFsdWUoKTsKKyAgICBpZiAobmFtZWRBdHRyTWFwKSB7CisgICAgICAgIEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9y
ZUNhc2UpOworICAgICAgICBpZiAoYXR0cmlidXRlKQorICAgICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZS0+dmFsdWUoKTsKKyAgICB9CiAgICAgCiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQpJbmRl
eDogV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9OYW1lZEF0dHJNYXAuY3BwCShyZXZpc2lvbiA1MDM0OCkKKysrIFdlYkNvcmUvZG9tL05hbWVk
QXR0ck1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NywxMSArMTc3LDMzIEBAIFBhc3NSZWZQ
dHI8Tm9kZT4gTmFtZWROb2RlTWFwOjppdGVtKHVuc2kKIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFw
OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAgIHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAg
IGJvb2wgZG9TbG93Q2hlY2sgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlOworICAgIAorICAg
IC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYXR0cmlidXRlIGV4aXN0cyBhbmQg
aXRzIG5hbWUgZXhhY3RseSBtYXRjaGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW47ICsraSkgewotICAgICAgICBpZiAoIW1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLmhhc1ByZWZp
eCgpICYmIG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLmxvY2FsTmFtZSgpID09IG5hbWUpCi0gICAg
ICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVzW2ldLmdldCgpOwotICAgICAgICBpZiAoc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSA/IGVxdWFsSWdub3JpbmdDYXNlKG1fYXR0cmlidXRlc1tpXS0+
bmFtZSgpLnRvU3RyaW5nKCksIG5hbWUpIDogbmFtZSA9PSBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUo
KS50b1N0cmluZygpKQotICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsK
KyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBtX2F0dHJpYnV0ZXNbaV0t
Pm5hbWUoKTsKKyAgICAgICAgaWYgKCFhdHRyTmFtZS5oYXNQcmVmaXgoKSkgeworICAgICAgICAg
ICAgaWYgKG5hbWUgPT0gYXR0ck5hbWUubG9jYWxOYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBk
b1Nsb3dDaGVjayA9IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIENvbnRpbnVlIHRvIGNoZWNr
aW5nIGNhc2UtaW5zZW5zaXRpdmVseSBhbmQvb3IgZnVsbCBuYW1lc3BhY2VkIG5hbWVzIGlmIG5l
Y2Vzc2FyeToKKyAgICBpZiAoZG9TbG93Q2hlY2spIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpOworICAgICAgICAgICAgaWYgKCFhdHRy
TmFtZS5oYXNQcmVmaXgoKSkgeworICAgICAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRy
aWJ1dGVDYXNlICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJOYW1lLmxvY2FsTmFtZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGZh
c3RlciB0byBkbyB0aGlzIGNvbXBhcmlzb24gd2l0aG91dCBjYWxsaW5nIHRvU3RyaW5nLCB3aGlj
aAorICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlcyBhIHRlbXBvcmFyeSBzdHJpbmcgYnkgY29u
Y2F0ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNoIGlzIG9ubHkgcmVhY2hlZAorICAgICAgICAgICAg
ICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgbmFtZSBoYXMgYSBwcmVmaXgsIHdoaWNoIGlzIHJhcmUg
aW4gSFRNTC4KKyAgICAgICAgICAgICAgICBpZiAoZXF1YWxQb3NzaWJseUlnbm9yaW5nQ2FzZShu
YW1lLCBhdHRyTmFtZS50b1N0cmluZygpLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gMDsKIH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCShyZXZpc2lvbiA1MDM0OCkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODYsNiAr
Mjg2LDExIEBAIGlubGluZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmkKIGlubGlu
ZSBib29sIGVxdWFsSWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikg
eyByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIpOyB9CiBpbmxpbmUgYm9vbCBl
cXVhbElnbm9yaW5nQ2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJu
IGVxdWFsSWdub3JpbmdDYXNlKGEsIGIuaW1wbCgpKTsgfQogCitpbmxpbmUgYm9vbCBlcXVhbFBv
c3NpYmx5SWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiLCBib29s
IGlnbm9yZUNhc2UpIAoreworICAgIHJldHVybiBpZ25vcmVDYXNlID8gZXF1YWxJZ25vcmluZ0Nh
c2UoYSwgYikgOiAoYSA9PSBiKTsKK30KKwogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ051bGxp
dHkoY29uc3QgU3RyaW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdOdWxsaXR5KGEuaW1wbCgpLCBiLmltcGwoKSk7IH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3Ih
KGNvbnN0IFN0cmluZyYgc3RyKSB7IHJldHVybiBzdHIuaXNOdWxsKCk7IH0K
</data>
<flag name="review"
          id="23736"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42795</attachid>
            <date>2009-11-09 13:24:20 -0800</date>
            <delta_ts>2009-11-09 15:25:48 -0800</delta_ts>
            <desc>patch with &quot;if(Attribute*...&quot; restored</desc>
            <filename>getAttribute2.patch</filename>
            <type>text/plain</type>
            <size>5220</size>
            <attacher name="Jens Alfke">jens</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MDM0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMDktMTAtMzAgIEplbnMgQWxma2UgIDxzbmVqQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPcHRp
bWl6YXRpb25zIHRvIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA5MjYKKworICAgICAgICBKdXN0IG9wdGltaXph
dGlvbjsgZG9lc24ndCByZXF1aXJlIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGRvbS9FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZSk6IFNwZWVkIHVw
IGNvbXBhcmlzb24gb2YgYXR0cmlidXRlIG5hbWUgd2l0aCAnc3R5bGUnLgorICAgICAgICAqIGRv
bS9OYW1lZEF0dHJNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmFtZWROb2RlTWFwOjpnZXRB
dHRyaWJ1dGVJdGVtKTogQXZvaWQgdW5uZWNlc3NhcnkgY29tcGFyaXNvbnMgYW5kIHRlbXBvcmFy
eSBzdHJpbmdzLgorICAgICAgICAqIHBsYXRmb3JtL3RleHQvUGxhdGZvcm1TdHJpbmcuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtU3RyaW5nOjplcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNl
KTogTmV3IHV0aWxpdHkgdXNlZCBieSB0aGUgYWJvdmUuCisKIDIwMDktMTAtMzAgIEpvaG4gR3Jl
Z2cgIDxqb2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29y
ZS9kb20vTmFtZWRBdHRyTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVm9sdW1lcy9ZdHRyaXVtL3Ny
Yy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkocmV2aXNp
b24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvV2Vi
Q29yZS9kb20vTmFtZWRBdHRyTWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3LDEyICsxNzcs
MzQgQEAKIEF0dHJpYnV0ZSogTmFtZWROb2RlTWFwOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFN0
cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAg
IHVuc2lnbmVkIGxlbiA9IGxlbmd0aCgpOworICAgIGJvb2wgZG9TbG93Q2hlY2sgPSBzaG91bGRJ
Z25vcmVBdHRyaWJ1dGVDYXNlOworICAgIAorICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3
aGVyZSB0aGUgYXR0cmlidXRlIGV4aXN0cyBhbmQgaXRzIG5hbWUgZXhhY3RseSBtYXRjaGVzLgog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47ICsraSkgewotICAgICAgICBpZiAoIW1f
YXR0cmlidXRlc1tpXS0+bmFtZSgpLmhhc1ByZWZpeCgpICYmIG1fYXR0cmlidXRlc1tpXS0+bmFt
ZSgpLmxvY2FsTmFtZSgpID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gbV9hdHRyaWJ1dGVz
W2ldLmdldCgpOwotICAgICAgICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSA/IGVxdWFs
SWdub3JpbmdDYXNlKG1fYXR0cmlidXRlc1tpXS0+bmFtZSgpLnRvU3RyaW5nKCksIG5hbWUpIDog
bmFtZSA9PSBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKS50b1N0cmluZygpKQotICAgICAgICAgICAg
cmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUgPSBtX2F0dHJpYnV0ZXNbaV0tPm5hbWUoKTsKKyAgICAgICAgaWYgKCFhdHRy
TmFtZS5oYXNQcmVmaXgoKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gYXR0ck5hbWUubG9j
YWxOYW1lKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBkb1Nsb3dDaGVjayA9IHRydWU7CiAgICAgfQor
ICAgIAorICAgIC8vIENvbnRpbnVlIHRvIGNoZWNraW5nIGNhc2UtaW5zZW5zaXRpdmVseSBhbmQv
b3IgZnVsbCBuYW1lc3BhY2VkIG5hbWVzIGlmIG5lY2Vzc2FyeToKKyAgICBpZiAoZG9TbG93Q2hl
Y2spIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAg
ICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSA9IG1fYXR0cmlidXRlc1tpXS0+
bmFtZSgpOworICAgICAgICAgICAgaWYgKCFhdHRyTmFtZS5oYXNQcmVmaXgoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlICYmIGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsIGF0dHJOYW1lLmxvY2FsTmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIG1fYXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdvdWxkIGJlIGZhc3RlciB0byBkbyB0aGlzIGNvbXBhcmlzb24g
d2l0aG91dCBjYWxsaW5nIHRvU3RyaW5nLCB3aGljaAorICAgICAgICAgICAgICAgIC8vIGdlbmVy
YXRlcyBhIHRlbXBvcmFyeSBzdHJpbmcgYnkgY29uY2F0ZW5hdGlvbi4gQnV0IHRoaXMgYnJhbmNo
IGlzIG9ubHkgcmVhY2hlZAorICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBhdHRyaWJ1dGUgbmFt
ZSBoYXMgYSBwcmVmaXgsIHdoaWNoIGlzIHJhcmUgaW4gSFRNTC4KKyAgICAgICAgICAgICAgICBp
ZiAoZXF1YWxQb3NzaWJseUlnbm9yaW5nQ2FzZShuYW1lLCBhdHRyTmFtZS50b1N0cmluZygpLCBz
aG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1f
YXR0cmlidXRlc1tpXS5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAg
ICByZXR1cm4gMDsKIH0KIApJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkv
V2ViS2l0L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9Wb2x1bWVzL1l0
dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2
aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4OSw4ICs0ODksMTAg
QEAKIAogY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAogewotICAgIFN0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVB
dHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKLSAgICBpZiAobG9jYWxO
YW1lID09IHN0eWxlQXR0ci5sb2NhbE5hbWUoKSAmJiAhbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQp
CisgICAgYm9vbCBpZ25vcmVDYXNlID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKTsK
KyAgICAKKyAgICAvLyBVcGRhdGUgdGhlICdzdHlsZScgYXR0cmlidXRlIGlmIGl0J3MgaW52YWxp
ZCBhbmQgYmVpbmcgcmVxdWVzdGVkOgorICAgIGlmICghbV9pc1N0eWxlQXR0cmlidXRlVmFsaWQg
JiYgZXF1YWxQb3NzaWJseUlnbm9yaW5nQ2FzZShuYW1lLCBzdHlsZUF0dHIubG9jYWxOYW1lKCks
IGlnbm9yZUNhc2UpKQogICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAjaWYgRU5B
QkxFKFNWRykKQEAgLTQ5OSw4ICs1MDEsOCBAQAogI2VuZGlmCiAKICAgICBpZiAobmFtZWRBdHRy
TWFwKQotICAgICAgICBpZiAoQXR0cmlidXRlKiBhID0gbmFtZWRBdHRyTWFwLT5nZXRBdHRyaWJ1
dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykpKQotICAgICAgICAg
ICAgcmV0dXJuIGEtPnZhbHVlKCk7CisgICAgICAgIGlmIChBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IG5hbWVkQXR0ck1hcC0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBpZ25vcmVDYXNlKSkKKyAgICAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgCiAgICAgcmV0dXJuIG51bGxB
dG9tOwogfQpJbmRleDogL1ZvbHVtZXMvWXR0cml1bS9zcmMvdGhpcmRfcGFydHkvV2ViS2l0L1dl
YkNvcmUvcGxhdGZvcm0vdGV4dC9QbGF0Zm9ybVN0cmluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9Wb2x1
bWVzL1l0dHJpdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9XZWJDb3JlL3BsYXRmb3JtL3RleHQv
UGxhdGZvcm1TdHJpbmcuaAkocmV2aXNpb24gNTA2NjQpCisrKyAvVm9sdW1lcy9ZdHRyaXVtL3Ny
Yy90aGlyZF9wYXJ0eS9XZWJLaXQvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1BsYXRmb3JtU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Niw2ICsyODYsMTEgQEAKIGlubGluZSBib29sIGVxdWFs
SWdub3JpbmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gZXF1
YWxJZ25vcmluZ0Nhc2UoYS5pbXBsKCksIGIpOyB9CiBpbmxpbmUgYm9vbCBlcXVhbElnbm9yaW5n
Q2FzZShjb25zdCBjaGFyKiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3Jp
bmdDYXNlKGEsIGIuaW1wbCgpKTsgfQogCitpbmxpbmUgYm9vbCBlcXVhbFBvc3NpYmx5SWdub3Jp
bmdDYXNlKGNvbnN0IFN0cmluZyYgYSwgY29uc3QgU3RyaW5nJiBiLCBib29sIGlnbm9yZUNhc2Up
IAoreworICAgIHJldHVybiBpZ25vcmVDYXNlID8gZXF1YWxJZ25vcmluZ0Nhc2UoYSwgYikgOiAo
YSA9PSBiKTsKK30KKwogaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ051bGxpdHkoY29uc3QgU3Ry
aW5nJiBhLCBjb25zdCBTdHJpbmcmIGIpIHsgcmV0dXJuIGVxdWFsSWdub3JpbmdOdWxsaXR5KGEu
aW1wbCgpLCBiLmltcGwoKSk7IH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhKGNvbnN0IFN0cmlu
ZyYgc3RyKSB7IHJldHVybiBzdHIuaXNOdWxsKCk7IH0K
</data>
<flag name="review"
          id="24377"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>