<?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>66452</bug_id>
          
          <creation_ts>2011-08-17 22:48:11 -0700</creation_ts>
          <short_desc>Attempt at making CSSSelector a little easier to understand and a little less bug-prone.</short_desc>
          <delta_ts>2011-08-28 17:26:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Luke Macpherson">macpherson</reporter>
          <assigned_to name="Luke Macpherson">macpherson</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>452860</commentid>
    <comment_count>0</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-17 22:48:11 -0700</bug_when>
    <thetext>Attempt at making CSSSelector a little easier to understand and a little less bug-prone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452864</commentid>
    <comment_count>1</comment_count>
      <attachid>104306</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-17 23:01:31 -0700</bug_when>
    <thetext>Created attachment 104306
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453217</commentid>
    <comment_count>2</comment_count>
      <attachid>104306</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-18 11:59:46 -0700</bug_when>
    <thetext>Comment on attachment 104306
Patch

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

&gt; Source/WebCore/css/CSSSelector.h:284
&gt; -        union DataUnion {
&gt; -            DataUnion() : m_value(0) { }
&gt; -            AtomicStringImpl* m_value;
&gt; -            RareData* m_rareData;
&gt; -        } m_data;
&gt; +        AtomicString m_value;
&gt; +        OwnPtr&lt;RareData&gt; m_rareData;

This adds a pointer to the object. We should find a way to make the code clear without making the object larger.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453632</commentid>
    <comment_count>3</comment_count>
      <attachid>104459</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-18 22:02:02 -0700</bug_when>
    <thetext>Created attachment 104459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453634</commentid>
    <comment_count>4</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-18 22:05:57 -0700</bug_when>
    <thetext>FYI, I did some measurements. Roughly 25% of the time m_data is null. Roughly 5% of the time rare data is needed. I never saw m_isForPage set on a production website, so moved it into rare data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453902</commentid>
    <comment_count>5</comment_count>
      <attachid>104459</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-19 10:17:23 -0700</bug_when>
    <thetext>Comment on attachment 104459
Patch

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

I&apos;m confused as to how this works.  This doesn&apos;t seem very much like the rare-data system used on RenderStyle.  Data&lt;&gt; wrappers on RenderStyle are basically fancy RefPtrs which allow for COW and sharing between styles.  I assume that&apos;s not what&apos;s going on here.

&gt; Source/WebCore/css/CSSSelector.cpp:64
&gt; +        if (selector-&gt;isForPage())

Is this @page?  If so that&apos;s a printing-only selector and definitely rare.

&gt; Source/WebCore/css/CSSSelector.cpp:671
&gt; +    createRareData();

Sad that this is needed explicitly. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453903</commentid>
    <comment_count>6</comment_count>
      <attachid>104459</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-19 10:17:39 -0700</bug_when>
    <thetext>Comment on attachment 104459
Patch

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

&gt; Source/WebCore/css/CSSSelector.h:322
&gt; +        OwnPtr&lt;Data&gt; m_data;

This is an admirable attempt to clean up the memory use here, but given that 3/4 of the time we have non-null data, we will be allocating an extra memory block 3/4 of the time. An extra memory block is quite costly. I don’t think this is a good change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453905</commentid>
    <comment_count>7</comment_count>
      <attachid>104459</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-19 10:19:00 -0700</bug_when>
    <thetext>Comment on attachment 104459
Patch

“cleaning up magic” is fine, but if it makes the objects larger I am not sure it’s good to do it.

Lets find a way to clean up and make the object smaller!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454439</commentid>
    <comment_count>8</comment_count>
      <attachid>104459</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-21 19:10:59 -0700</bug_when>
    <thetext>Comment on attachment 104459
Patch

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

&gt;&gt; Source/WebCore/css/CSSSelector.cpp:671
&gt;&gt; +    createRareData();
&gt; 
&gt; Sad that this is needed explicitly. :(

Yeah, I originally wanted to have Data automatically upgrade itself to RareData if a rare setter was called, but that was hard to do without increasing the size of those structures with some kind of pointer back to the CSSSelector instance. If you can think of a solution let me know.

&gt;&gt; Source/WebCore/css/CSSSelector.h:322
&gt;&gt; +        OwnPtr&lt;Data&gt; m_data;
&gt; 
&gt; This is an admirable attempt to clean up the memory use here, but given that 3/4 of the time we have non-null data, we will be allocating an extra memory block 3/4 of the time. An extra memory block is quite costly. I don’t think this is a good change.

The existing code already allocates an extra memory object for m_data.m_value or m_data.m_rareData, so I don&apos;t think this change makes that situation any worse.
This patch actually makes CSSSelector itself a little bit tighter by moving several bits, though due to alignment you don&apos;t notice it on 64 bit architectures.
The original patch I had moved m_value onto the parent object to avoid this extra allocation for the 75% case, but obviously that costs you in the 25% where it isn&apos;t used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454629</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-22 09:34:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; &gt; This is an admirable attempt to clean up the memory use here, but given that 3/4 of the time we have non-null data, we will be allocating an extra memory block 3/4 of the time. An extra memory block is quite costly. I don’t think this is a good change.
&gt; 
&gt; The existing code already allocates an extra memory object for m_data.m_value or m_data.m_rareData

That’s incorrect. The m_data.m_value is an AtomicStringImpl*, which does not allocate any memory if it’s a string already in the atomic string table. Further, the new code allocates a block to hold the AtomicStringImpl*.

Unless I missed something, this definitely adds a new memory block. Please don’t add a new memory block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455116</commentid>
    <comment_count>10</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-22 17:53:35 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; &gt; This is an admirable attempt to clean up the memory use here, but given that 3/4 of the time we have non-null data, we will be allocating an extra memory block 3/4 of the time. An extra memory block is quite costly. I don’t think this is a good change.
&gt; &gt; 
&gt; &gt; The existing code already allocates an extra memory object for m_data.m_value or m_data.m_rareData
&gt; 
&gt; That’s incorrect. The m_data.m_value is an AtomicStringImpl*, which does not allocate any memory if it’s a string already in the atomic string table. Further, the new code allocates a block to hold the AtomicStringImpl*.
&gt; 
&gt; Unless I missed something, this definitely adds a new memory block. Please don’t add a new memory block.

Right you are, but now I&apos;m stumped. I think this code is clearly nicer, but am at a loss as to how to resolve this constraint. Extending AtomicStringImpl was all I could think of, and that seems to be pretty painful. Do you have any ideas?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455202</commentid>
    <comment_count>11</comment_count>
      <attachid>104790</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-22 23:09:01 -0700</bug_when>
    <thetext>Created attachment 104790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455470</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-23 10:15:22 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I think this code is clearly nicer, but am at a loss as to how to resolve this constraint. Extending AtomicStringImpl was all I could think of, and that seems to be pretty painful. Do you have any ideas?

If your goal is to make the union clearer, I think you could make a class to manage the union to keep the strangeness tightly encapsulated. The only problem with that is that the class needs both the pointer and a boolean and I’m not sure how to make the boolean share storage with the rest of the class.

There’s no reason that the code to manage the trickiness of the union needs to be spread out in the class, mixed in with other code, and isolating it could get the clarity without sacrificing memory size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456540</commentid>
    <comment_count>13</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-24 17:05:34 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #10)
&gt; &gt; I think this code is clearly nicer, but am at a loss as to how to resolve this constraint. Extending AtomicStringImpl was all I could think of, and that seems to be pretty painful. Do you have any ideas?
&gt; 
&gt; If your goal is to make the union clearer, I think you could make a class to manage the union to keep the strangeness tightly encapsulated. The only problem with that is that the class needs both the pointer and a boolean and I’m not sure how to make the boolean share storage with the rest of the class.
&gt; 
&gt; There’s no reason that the code to manage the trickiness of the union needs to be spread out in the class, mixed in with other code, and isolating it could get the clarity without sacrificing memory size.

Yes, there are two problems as I see it:
1) The DIY reference counting appears to be wrong.
2) The union is a mess, and encapsulating the logic would help.

I have some more ideas... lets see how they pan out in code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456669</commentid>
    <comment_count>14</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-24 23:29:40 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #10)
&gt; &gt; &gt; I think this code is clearly nicer, but am at a loss as to how to resolve this constraint. Extending AtomicStringImpl was all I could think of, and that seems to be pretty painful. Do you have any ideas?
&gt; &gt; 
&gt; &gt; If your goal is to make the union clearer, I think you could make a class to manage the union to keep the strangeness tightly encapsulated. The only problem with that is that the class needs both the pointer and a boolean and I’m not sure how to make the boolean share storage with the rest of the class.
&gt; &gt; 
&gt; &gt; There’s no reason that the code to manage the trickiness of the union needs to be spread out in the class, mixed in with other code, and isolating it could get the clarity without sacrificing memory size.
&gt; 
&gt; Yes, there are two problems as I see it:
&gt; 1) The DIY reference counting appears to be wrong.
&gt; 2) The union is a mess, and encapsulating the logic would help.
&gt; 
&gt; I have some more ideas... lets see how they pan out in code.

I spent some time writing a templated union class that used the low-order pointer bits to store determine which of the union values was in use and handled the refcounting. I don&apos;t think it was any better than the patch that is currently up though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456921</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 09:47:10 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I don&apos;t think it was any better than the patch that is currently up though.

I understand that’s your overall judgement, but could you explain the difference between the two? What are the pros and cons of that other one and the patch that is currently up? Does the patch that is currently up use a larger object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457248</commentid>
    <comment_count>16</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 16:29:09 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; I don&apos;t think it was any better than the patch that is currently up though.
&gt; 
&gt; I understand that’s your overall judgement, but could you explain the difference between the two? What are the pros and cons of that other one and the patch that is currently up? Does the patch that is currently up use a larger object?

The current patch:
1) Should not introduce a size overhead over the existing code.
2) Still uses the union.
3) Fixes the reference counting bugs I could see.
4) Passes AtomicString around by value where appropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457253</commentid>
    <comment_count>17</comment_count>
      <attachid>104790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 16:35:41 -0700</bug_when>
    <thetext>Comment on attachment 104790
Patch

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

I don’t understand this change at all. It’s customary to pass reference counted objects like these by const&amp; to avoid the reference count churn. If changing them all has some benefit, you’ll need to state it so the code is not just changed back!

&gt; Source/WebCore/css/CSSSelector.cpp:382
&gt; -CSSSelector::PseudoType CSSSelector::parsePseudoType(const AtomicString&amp; name)
&gt; +CSSSelector::PseudoType CSSSelector::parsePseudoType(AtomicString name)

Could you explain the motivation for this further? Generally passing a structure holding a RefPtr like this by value an anti-pattern that causes additional reference count churn, but I presume there is a good reason to not do it here of some sort. Since someone after you is likely to change this to const AtomicString&amp; unless you add a comment, I think you should also add a comment here explaining the unusual situation.

&gt; Source/WebCore/css/CSSSelector.cpp:391
&gt; -bool CSSSelector::isUnknownPseudoType(const AtomicString&amp; name)
&gt; +bool CSSSelector::isUnknownPseudoType(AtomicString name)

Same question/comment as above.

&gt; Source/WebCore/css/CSSSelector.cpp:530
&gt; -    const AtomicString&amp; prefix = m_tag.prefix();
&gt; -    const AtomicString&amp; localName = m_tag.localName();
&gt; +    AtomicString prefix = m_tag.prefix();
&gt; +    AtomicString localName = m_tag.localName();

Why the change?

&gt; Source/WebCore/css/CSSSelector.cpp:585
&gt; -            const AtomicString&amp; prefix = cs-&gt;attribute().prefix();
&gt; +            AtomicString prefix = cs-&gt;attribute().prefix();

Why the change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457257</commentid>
    <comment_count>18</comment_count>
      <attachid>104790</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 16:41:32 -0700</bug_when>
    <thetext>Comment on attachment 104790
Patch

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

&gt;&gt; Source/WebCore/css/CSSSelector.cpp:382
&gt;&gt; +CSSSelector::PseudoType CSSSelector::parsePseudoType(AtomicString name)
&gt; 
&gt; Could you explain the motivation for this further? Generally passing a structure holding a RefPtr like this by value an anti-pattern that causes additional reference count churn, but I presume there is a good reason to not do it here of some sort. Since someone after you is likely to change this to const AtomicString&amp; unless you add a comment, I think you should also add a comment here explaining the unusual situation.

I had only just thought about that 5 minutes ago and was about to go back and change them.

&gt;&gt; Source/WebCore/css/CSSSelector.cpp:391
&gt;&gt; +bool CSSSelector::isUnknownPseudoType(AtomicString name)
&gt; 
&gt; Same question/comment as above.

Will revert.

&gt;&gt; Source/WebCore/css/CSSSelector.cpp:530
&gt;&gt; +    AtomicString localName = m_tag.localName();
&gt; 
&gt; Why the change?

Will revert.

&gt;&gt; Source/WebCore/css/CSSSelector.cpp:585
&gt;&gt; +            AtomicString prefix = cs-&gt;attribute().prefix();
&gt; 
&gt; Why the change?

Will revert.

&gt; Source/WebCore/css/CSSSelector.h:-228
&gt; -        const AtomicString&amp; value() const { return *reinterpret_cast&lt;const AtomicString*&gt;(m_hasRareData ? &amp;m_data.m_rareData-&gt;m_value : &amp;m_data.m_value); }

Do you approve of this change? I think it&apos;s worth eliminating this cast - I had to trace through at least 5 classes to verify that this would actually work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457258</commentid>
    <comment_count>19</comment_count>
      <attachid>104790</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 16:44:36 -0700</bug_when>
    <thetext>Comment on attachment 104790
Patch

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

&gt;&gt; Source/WebCore/css/CSSSelector.h:-228

&gt; 
&gt; Do you approve of this change? I think it&apos;s worth eliminating this cast - I had to trace through at least 5 classes to verify that this would actually work.

Well, the cast had a direct benefit, less reference count churn. Given that we have verified that it works, what is the concrete benefit to changing this? I haven’t seen evidence that this has been causing us trouble in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457262</commentid>
    <comment_count>20</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 16:59:21 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 104790 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104790&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/css/CSSSelector.h:-228
&gt; 
&gt; &gt; 
&gt; &gt; Do you approve of this change? I think it&apos;s worth eliminating this cast - I had to trace through at least 5 classes to verify that this would actually work.
&gt; 
&gt; Well, the cast had a direct benefit, less reference count churn. Given that we have verified that it works, what is the concrete benefit to changing this? I haven’t seen evidence that this has been causing us trouble in the past.

I verified that the types would line up, but not that the reference count would be correctly incremented and decremented. OTOH, it&apos;s surely not worth this level of dependence on the internals of so many classes just to avoid a single increment + decrement is it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457263</commentid>
    <comment_count>21</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 17:00:30 -0700</bug_when>
    <thetext>The code definitely works. (In reply to comment #20)
&gt; OTOH, it&apos;s surely not worth this level of dependence on the internals of so many classes just to avoid a single increment + decrement is it?

You’re being really dramatic about the cost! It works fine. It doesn’t seem important to change this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457269</commentid>
    <comment_count>22</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 17:08:05 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; The code definitely works. (In reply to comment #20)
&gt; &gt; OTOH, it&apos;s surely not worth this level of dependence on the internals of so many classes just to avoid a single increment + decrement is it?
&gt; 
&gt; You’re being really dramatic about the cost! It works fine. It doesn’t seem important to change this.

I think the engineering cost of code that I can&apos;t easily read and verify the correctness of is high. The code comments seem to back this up. It&apos;s a tradeoff between engineering / stylistic cost and runtime cost, so you might see that apples vs oranges call slightly differently to me.

We have seen crashes in this code, so there is at least some evidence that being hard to understand could be leading to bugs.
http://code.google.com/p/chromium/issues/detail?id=92970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457276</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 17:15:15 -0700</bug_when>
    <thetext>Your argument seems to be this: “We are seeing crashes in this code, so we should rewrite the code so that it is more readable (to you at least). We do know this rewrite will make it at least ever so slightly less efficient. We have no evidence the rewrite fixes any bugs, but rewriting for clarity is good especially if we have some crash reports in the code being rewritten.”

I don’t think that’s a compelling argument for change. I’d be a lot more interested if we had actually reproduced a bug and were fixing it, or had an improvement other than, “We think this is more elegant and easier to read.”

I think shouldn’t take rewriting tested code lightly, even if we don’t like its style. In particular, I don’t like removing optimizations without even measuring the effect of doing so for personal taste reasons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457283</commentid>
    <comment_count>24</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 17:27:55 -0700</bug_when>
    <thetext>I&apos;m just going to keep improving the code. It&apos;s less emotive, and probably more productive than engaging in a debate on the philosophy of software engineering here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457335</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 19:22:04 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; I&apos;m just going to keep improving the code. It&apos;s less emotive, and probably more productive than engaging in a debate on the philosophy of software engineering here.

OK, I’ll just keep making the code worse with unpleasant debate!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457339</commentid>
    <comment_count>26</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 19:36:38 -0700</bug_when>
    <thetext>More seriously, though, I have no objections to making improvements here, but I think for the cost/benefit to be right I’d want it to both be cleaner and measurably as efficient or more efficient than we code we have.

I do think that can be accomplished by tighter encapsulation of the union trick. The type punning between AtomicString and AtomicStringImpl* is the same optimization as is done by HashMap, so maybe there’s some opportunity to make a helper in WTF for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457348</commentid>
    <comment_count>27</comment_count>
      <attachid>105296</attachid>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 20:10:12 -0700</bug_when>
    <thetext>Created attachment 105296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457363</commentid>
    <comment_count>28</comment_count>
      <attachid>105296</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-25 20:59:14 -0700</bug_when>
    <thetext>Comment on attachment 105296
Patch

Looks like this would lead to a storage leak. I wonder if there is a simple way to test for the leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457370</commentid>
    <comment_count>29</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 21:26:21 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 105296 [details])
&gt; Looks like this would lead to a storage leak. I wonder if there is a simple way to test for the leak.

My best guess is that setValue() is usually not called multiple times in practice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457390</commentid>
    <comment_count>30</comment_count>
    <who name="Luke Macpherson">macpherson</who>
    <bug_when>2011-08-25 22:14:05 -0700</bug_when>
    <thetext>Testing seems to confirm this. In the fast test cases and some general browsing setValue hasn&apos;t been called twice yet, so perhaps this is a theoretical leak rather than an actual one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458035</commentid>
    <comment_count>31</comment_count>
      <attachid>105296</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-28 17:26:34 -0700</bug_when>
    <thetext>Comment on attachment 105296
Patch

Clearing flags on attachment: 105296

Committed r93952: &lt;http://trac.webkit.org/changeset/93952&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>458036</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-28 17:26:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104306</attachid>
            <date>2011-08-17 23:01:31 -0700</date>
            <delta_ts>2011-08-18 22:01:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66452-20110818160128.patch</filename>
            <type>text/plain</type>
            <size>9718</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjgyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDgtMTcgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBdHRlbXB0IGF0
IG1ha2luZyBDU1NTZWxlY3RvciBhIGxpdHRsZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgYSBs
aXR0bGUgbGVzcyBidWctcHJvbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjQ1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAvIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAg
ICAgICBUaGUgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRvIGNsZWFuIHVwIHNvbWUgb2YgdGhlIG1h
Z2ljIHRoYXQgaGFwcGVucyBpbnNpZGUgQ1NTU2VsZWN0b3IsCisgICAgICAgIHBhcnRpY3VsYXJs
eSB0aGUgc2VsZi1tYW5hZ2VtZW50IG9mIHBvaW50ZXJzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4K
KworICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6
OmF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXRBcmd1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpwYXJzZU50aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6bWF0Y2hOdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmlzU2ltcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpSYXJlRGF0YTo6UmFyZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEpOgorICAgICAg
ICAqIGNzcy9DU1NTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OkNT
U1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjp+Q1NTU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2Vs
ZWN0b3I6OmFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZWxlY3Rv
ckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldFZhbHVlKToKKyAgICAg
ICAgKiBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVj
dG9yTGlzdDo6ZGVsZXRlU2VsZWN0b3JzKToKKwogMjAxMS0wOC0xNyAgQW5uaWUgU3VsbGl2YW4g
IDxzdWxsaXZhbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVkdWNlIHVzYWdlcyBvZiBTdHJp
bmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxl
Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNw
cAkocmV2aXNpb24gOTMyODIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogICAgIAogdm9pZCBDU1NTZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIGlm
IChtX2hhc1JhcmVEYXRhKSAKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIE1vdmUgdGhlIHZhbHVl
IHRvIHRoZSByYXJlIGRhdGEgc3R1Y3R1cmUuCi0gICAgbV9kYXRhLm1fcmFyZURhdGEgPSBuZXcg
UmFyZURhdGEoYWRvcHRSZWYobV9kYXRhLm1fdmFsdWUpKTsKLSAgICBtX2hhc1JhcmVEYXRhID0g
dHJ1ZTsKKyAgICBpZiAoIW1fcmFyZURhdGEpCisgICAgICAgIG1fcmFyZURhdGEgPSBhZG9wdFB0
cihuZXcgUmFyZURhdGEoKSk7CiB9CiAKIHVuc2lnbmVkIENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0
eSgpIGNvbnN0CkBAIC02NDgsNDIgKzY0NSw0MiBAQCBjb25zdCBRdWFsaWZpZWROYW1lJiBDU1NT
ZWxlY3Rvcjo6YXR0cmliCiAgICAgY2FzZSBDbGFzczoKICAgICAgICAgcmV0dXJuIGNsYXNzQXR0
cjsKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5t
X3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSA6IGFueVFOYW1lKCk7CisgICAgICAgIHJldHVybiBtX3Jh
cmVEYXRhID8gbV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUgOiBhbnlRTmFtZSgpOwogICAgIH0KIH0K
IAogdm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZh
bHVlKSAKIHsgCiAgICAgY3JlYXRlUmFyZURhdGEoKTsgCi0gICAgbV9kYXRhLm1fcmFyZURhdGEt
Pm1fYXR0cmlidXRlID0gdmFsdWU7IAorICAgIG1fcmFyZURhdGEtPm1fYXR0cmlidXRlID0gdmFs
dWU7CiB9CiAgICAgCiB2b2lkIENTU1NlbGVjdG9yOjpzZXRBcmd1bWVudChjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlKSAKIHsgCiAgICAgY3JlYXRlUmFyZURhdGEoKTsgCi0gICAgbV9kYXRhLm1f
cmFyZURhdGEtPm1fYXJndW1lbnQgPSB2YWx1ZTsgCisgICAgbV9yYXJlRGF0YS0+bV9hcmd1bWVu
dCA9IHZhbHVlOwogfQogICAgIAogdm9pZCBDU1NTZWxlY3Rvcjo6c2V0U2VsZWN0b3JMaXN0KFBh
c3NPd25QdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxlY3Rvckxpc3QpCiB7CiAgICAgY3JlYXRlUmFy
ZURhdGEoKTsgCi0gICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0ID0gc2VsZWN0
b3JMaXN0OworICAgIG1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0ID0gc2VsZWN0b3JMaXN0Owog
fQogCiBib29sIENTU1NlbGVjdG9yOjpwYXJzZU50aCgpCiB7Ci0gICAgaWYgKCFtX2hhc1JhcmVE
YXRhKQorICAgIGlmICghbV9yYXJlRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChtX3BhcnNlZE50aCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgbV9wYXJzZWROdGggPSBt
X2RhdGEubV9yYXJlRGF0YS0+cGFyc2VOdGgoKTsKKyAgICBtX3BhcnNlZE50aCA9IG1fcmFyZURh
dGEtPnBhcnNlTnRoKCk7CiAgICAgcmV0dXJuIG1fcGFyc2VkTnRoOwogfQogCiBib29sIENTU1Nl
bGVjdG9yOjptYXRjaE50aChpbnQgY291bnQpCiB7Ci0gICAgQVNTRVJUKG1faGFzUmFyZURhdGEp
OwotICAgIHJldHVybiBtX2RhdGEubV9yYXJlRGF0YS0+bWF0Y2hOdGgoY291bnQpOworICAgIEFT
U0VSVChtX3JhcmVEYXRhKTsKKyAgICByZXR1cm4gbV9yYXJlRGF0YS0+bWF0Y2hOdGgoY291bnQp
OwogfQogCiBib29sIENTU1NlbGVjdG9yOjppc1NpbXBsZSgpIGNvbnN0CkBAIC03MDMsNyArNzAw
LDcgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6aXNTaW1wbGUoKSBjb25zdAogICAgIGlmIChtX21hdGNo
ID09IElkIHx8IG1fbWF0Y2ggPT0gQ2xhc3MgfHwgbV9tYXRjaCA9PSBQc2V1ZG9DbGFzcykKICAg
ICAgICAgbnVtQ29uZGl0aW9ucysrOwogCi0gICAgaWYgKG1faGFzUmFyZURhdGEgJiYgbV9kYXRh
Lm1fcmFyZURhdGEtPm1fYXR0cmlidXRlICE9IGFueVFOYW1lKCkpCisgICAgaWYgKG1fcmFyZURh
dGEgJiYgbV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUgIT0gYW55UU5hbWUoKSkKICAgICAgICAgbnVt
Q29uZGl0aW9ucysrOwogCiAgICAgLy8gbnVtQ29uZGl0aW9ucyBpcyAwIGZvciBhIHVuaXZlcnNh
bCBzZWxlY3Rvci4KQEAgLTcxMSw5ICs3MDgsOCBAQCBib29sIENTU1NlbGVjdG9yOjppc1NpbXBs
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIG51bUNvbmRpdGlvbnMgPD0gMTsKIH0KIAotQ1NTU2VsZWN0
b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVl
KQotICAgIDogbV92YWx1ZSh2YWx1ZS5sZWFrUmVmKCkpCi0gICAgLCBtX2EoMCkKK0NTU1NlbGVj
dG9yOjpSYXJlRGF0YTo6UmFyZURhdGEoKQorICAgIDogbV9hKDApCiAgICAgLCBtX2IoMCkKICAg
ICAsIG1fYXR0cmlidXRlKGFueVFOYW1lKCkpCiAgICAgLCBtX2FyZ3VtZW50KG51bGxBdG9tKQpA
QCAtNzIyLDggKzcxOCw2IEBAIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6UmFyZURhdGEoUGFzc1Jl
ZlAKIAogQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEoKQogewotICAgIGlmIChtX3Zh
bHVlKQotICAgICAgICBtX3ZhbHVlLT5kZXJlZigpOwogfQogICAgIAogLy8gYSBoZWxwZXIgZnVu
Y3Rpb24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVj
dG9yLmgJKHJldmlzaW9uIDkzMjgyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAgICAgLCBtX3BhcnNlZE50aChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJ
blNlbGVjdG9yTGlzdChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJblRhZ0hpc3Rvcnko
dHJ1ZSkKLSAgICAgICAgICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKICAgICAgICAgICAgICwg
bV9pc0ZvclBhZ2UoZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFnKGFueVFOYW1lKCkpCiAgICAg
ICAgIHsKQEAgLTU1LDcgKzU0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
LCBtX3BhcnNlZE50aChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJblNlbGVjdG9yTGlz
dChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJblRhZ0hpc3RvcnkodHJ1ZSkKLSAgICAg
ICAgICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0ZvclBhZ2Uo
ZmFsc2UpCiAgICAgICAgICAgICAsIG1fdGFnKHFOYW1lKQogICAgICAgICB7CkBAIC02MywxMCAr
NjEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgfkNTU1NlbGVjdG9yKCkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKG1faGFzUmFyZURhdGEpCi0gICAgICAgICAgICAgICAg
ZGVsZXRlIG1fZGF0YS5tX3JhcmVEYXRhOwotICAgICAgICAgICAgZWxzZSBpZiAobV9kYXRhLm1f
dmFsdWUpCi0gICAgICAgICAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvKioKQEAgLTIyMCwxOCArMjE0LDE4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgQ1NTU2VsZWN0b3IqIHRhZ0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2lz
TGFzdEluVGFnSGlzdG9yeSA/IDAgOiBjb25zdF9jYXN0PENTU1NlbGVjdG9yKj4odGhpcyArIDEp
OyB9CiAKICAgICAgICAgYm9vbCBoYXNUYWcoKSBjb25zdCB7IHJldHVybiBtX3RhZyAhPSBhbnlR
TmFtZSgpOyB9Ci0gICAgICAgIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gbV9t
YXRjaCA9PSBJZCB8fCBtX21hdGNoID09IENsYXNzIHx8IChtX2hhc1JhcmVEYXRhICYmIG1fZGF0
YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSAhPSBhbnlRTmFtZSgpKTsgfQorICAgICAgICBib29s
IGhhc0F0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0Y2ggPT0gSWQgfHwgbV9tYXRjaCA9
PSBDbGFzcyB8fCAobV9yYXJlRGF0YSAmJiBtX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSAhPSBhbnlR
TmFtZSgpKTsgfQogICAgICAgICAKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnKCkg
Y29uc3QgeyByZXR1cm4gbV90YWc7IH0KICAgICAgICAgLy8gQXRvbWljU3RyaW5nIGlzIHJlYWxs
eSBqdXN0IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNvIHRoZSBjYXN0IGJlbG93IGlzIHNhZmUuCiAg
ICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBh
Y2NlcHQgQXRvbWljU3RyaW5nSW1wbD8KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+
KG1faGFzUmFyZURhdGEgPyAmbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgOiAmbV9kYXRhLm1f
dmFsdWUpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAgICAgICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZSgp
IGNvbnN0OwotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX2FyZ3VtZW50IDogbnVs
bEF0b207IH0KLSAgICAgICAgQ1NTU2VsZWN0b3JMaXN0KiBzZWxlY3Rvckxpc3QoKSBjb25zdCB7
IHJldHVybiBtX2hhc1JhcmVEYXRhID8gbV9kYXRhLm1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0
LmdldCgpIDogMDsgfQorICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fYXJndW1lbnQgOiBudWxsQXRv
bTsgfQorICAgICAgICBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IDA7IH0K
ICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVl
KSB7IG1fdGFnID0gdmFsdWU7IH0KLSAgICAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNT
dHJpbmcmKTsKKyAgICAgICAgdm9pZCBzZXRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnKSB7
IG1fdGFnID0gdGFnOyB9CisgICAgICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkgeyBtX3ZhbHVlID0gdmFsdWU7IH0KICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgICAgICB2b2lkIHNldEFyZ3VtZW50KGNvbnN0IEF0
b21pY1N0cmluZyYpOwogICAgICAgICB2b2lkIHNldFNlbGVjdG9yTGlzdChQYXNzT3duUHRyPENT
U1NlbGVjdG9yTGlzdD4pOwpAQCAtMjYzLDcgKzI1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgYm9vbCBtX3BhcnNlZE50aCAgICAgICAgICAgICAgOiAxOyAvLyBVc2VkIGZvciA6
bnRoLSogCiAgICAgICAgIGJvb2wgbV9pc0xhc3RJblNlbGVjdG9yTGlzdCAgIDogMTsKICAgICAg
ICAgYm9vbCBtX2lzTGFzdEluVGFnSGlzdG9yeSAgICAgOiAxOwotICAgICAgICBib29sIG1faGFz
UmFyZURhdGEgICAgICAgICAgICA6IDE7CiAgICAgICAgIGJvb2wgbV9pc0ZvclBhZ2UgICAgICAg
ICAgICAgIDogMTsKIAogICAgICAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eUZvck9uZVNlbGVjdG9y
KCkgY29uc3Q7CkBAIC0yNzMsMTMgKzI2NiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShS
YXJlRGF0YSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6Ci0gICAg
ICAgICAgICBSYXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVlKTsKKyAg
ICAgICAgICAgIFJhcmVEYXRhKCk7CiAgICAgICAgICAgICB+UmFyZURhdGEoKTsKIAogICAgICAg
ICAgICAgYm9vbCBwYXJzZU50aCgpOwogICAgICAgICAgICAgYm9vbCBtYXRjaE50aChpbnQgY291
bnQpOwogCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOyAvLyBQbGFpbiBw
b2ludGVyIHRvIGtlZXAgdGhpbmdzIHVuaWZvcm0gd2l0aCB0aGUgdW5pb24uCiAgICAgICAgICAg
ICBpbnQgbV9hOyAvLyBVc2VkIGZvciA6bnRoLSoKICAgICAgICAgICAgIGludCBtX2I7IC8vIFVz
ZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgUXVhbGlmaWVkTmFtZSBtX2F0dHJpYnV0ZTsgLy8g
dXNlZCBmb3IgYXR0cmlidXRlIHNlbGVjdG9yCkBAIC0yODgsMTEgKzI4MCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgfTsKICAgICAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YSgpOwog
ICAgICAgICAKLSAgICAgICAgdW5pb24gRGF0YVVuaW9uIHsKLSAgICAgICAgICAgIERhdGFVbmlv
bigpIDogbV92YWx1ZSgwKSB7IH0KLSAgICAgICAgICAgIEF0b21pY1N0cmluZ0ltcGwqIG1fdmFs
dWU7Ci0gICAgICAgICAgICBSYXJlRGF0YSogbV9yYXJlRGF0YTsKLSAgICAgICAgfSBtX2RhdGE7
CisgICAgICAgIEF0b21pY1N0cmluZyBtX3ZhbHVlOworICAgICAgICBPd25QdHI8UmFyZURhdGE+
IG1fcmFyZURhdGE7CiAgICAgICAgIAogICAgICAgICBRdWFsaWZpZWROYW1lIG1fdGFnOwogICAg
IH07CkBAIC0zMjYsMTggKzMxNSw2IEBAIGlubGluZSBib29sIENTU1NlbGVjdG9yOjppc1NpYmxp
bmdTZWxlY3QKICAgICAgICAgfHwgdHlwZSA9PSBQc2V1ZG9OdGhMYXN0Q2hpbGQKICAgICAgICAg
fHwgdHlwZSA9PSBQc2V1ZG9OdGhMYXN0T2ZUeXBlOwogfQotICAgIAotaW5saW5lIHZvaWQgQ1NT
U2VsZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCi17IAotICAgIC8v
IE5lZWQgdG8gZG8gcmVmIGNvdW50aW5nIG1hbnVhbGx5IGZvciB0aGUgdW5pb24uCi0gICAgaWYg
KG1faGFzUmFyZURhdGEpIHsKLSAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgPSB2
YWx1ZS5pbXBsKCk7Ci0gICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlLT5yZWYoKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGEubV92YWx1ZSA9IHZhbHVlLmltcGwo
KTsKLSAgICBtX2RhdGEubV92YWx1ZS0+cmVmKCk7Ci19CiAKIGlubGluZSB2b2lkIG1vdmUoUGFz
c093blB0cjxDU1NTZWxlY3Rvcj4gZnJvbSwgQ1NTU2VsZWN0b3IqIHRvKSAKIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCShyZXZpc2lvbiA5MzI4MikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDMsNiArMTAzLDcgQEAgdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmRlbGV0ZVNlbGVjdG9ycygpCiAg
ICAgICAgIH0KICAgICAgICAgZmFzdEZyZWUobV9zZWxlY3RvckFycmF5KTsKICAgICB9CisgICAg
bV9zZWxlY3RvckFycmF5ID0gMDsKIH0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104459</attachid>
            <date>2011-08-18 22:02:02 -0700</date>
            <delta_ts>2011-08-22 23:08:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66452-20110819150159.patch</filename>
            <type>text/plain</type>
            <size>14098</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMzc2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDgtMTggIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBdHRlbXB0IGF0
IG1ha2luZyBDU1NTZWxlY3RvciBhIGxpdHRsZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgYSBs
aXR0bGUgbGVzcyBidWctcHJvbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjQ1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAvIG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAg
ICAgICBUaGUgZ29hbCBvZiB0aGlzIHBhdGNoIGlzIHRvIGNsZWFuIHVwIHNvbWUgb2YgdGhlIG1h
Z2ljIHRoYXQgaGFwcGVucyBpbnNpZGUgQ1NTU2VsZWN0b3IsCisgICAgICAgIHBhcnRpY3VsYXJs
eSB0aGUgc2VsZi1tYW5hZ2VtZW50IG9mIHBvaW50ZXJzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4K
KworICAgICAgICAqIGNzcy9DU1NTZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
ZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6
OmF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXRBcmd1bWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0U2VsZWN0b3JMaXN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpwYXJzZU50aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6bWF0Y2hOdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmlzU2ltcGxlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpSYXJlRGF0YTo6UmFyZURhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEpOgorICAgICAg
ICAqIGNzcy9DU1NTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OkNT
U1NlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjp+Q1NTU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2Vs
ZWN0b3I6OmFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZWxlY3Rv
ckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OnNldFZhbHVlKToKKyAgICAg
ICAgKiBjc3MvQ1NTU2VsZWN0b3JMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1NlbGVj
dG9yTGlzdDo6ZGVsZXRlU2VsZWN0b3JzKToKKwogMjAxMS0wOC0xOCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxyZGFyOi8vcHJvYmxlbS85OTczMTk0PiBGb250
cyB0aGF0IHNwZWNpZnkgYSBwb3NpdGl2ZSBkZXNjZW5kZXIgdmFsdWUgYXJlIHRyZWF0ZWQgYXMg
aGF2aW5nIGRlc2NlbmRlcnMgZW5kaW5nIGFib3ZlIHRoZSBiYXNlbGluZQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCShyZXZpc2lvbiA5MzM3NikKKysrIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE0ICszNywyMiBAQAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwotICAgIAor
Cit2b2lkIENTU1NlbGVjdG9yOjpjcmVhdGVEYXRhKCkKK3sKKyAgICBpZiAoIW1fZGF0YSkKKyAg
ICAgICAgbV9kYXRhID0gYWRvcHRQdHIobmV3IERhdGEobnVsbEF0b20pKTsKK30KKwogdm9pZCBD
U1NTZWxlY3Rvcjo6Y3JlYXRlUmFyZURhdGEoKQogewotICAgIGlmIChtX2hhc1JhcmVEYXRhKSAK
KyAgICBpZiAobV9kYXRhICYmIG1fZGF0YS0+aXNSYXJlRGF0YSgpKQogICAgICAgICByZXR1cm47
Ci0gICAgLy8gTW92ZSB0aGUgdmFsdWUgdG8gdGhlIHJhcmUgZGF0YSBzdHVjdHVyZS4KLSAgICBt
X2RhdGEubV9yYXJlRGF0YSA9IG5ldyBSYXJlRGF0YShhZG9wdFJlZihtX2RhdGEubV92YWx1ZSkp
OwotICAgIG1faGFzUmFyZURhdGEgPSB0cnVlOworCisgICAgQXRvbWljU3RyaW5nIHZhbHVlID0g
bnVsbEF0b207CisgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgdmFsdWUgPSBtX2RhdGEtPnZhbHVl
KCk7CisgICAgbV9kYXRhID0gYWRvcHRQdHIobmV3IFJhcmVEYXRhKHZhbHVlKSk7CiB9CiAKIHVu
c2lnbmVkIENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpIGNvbnN0CkBAIC01Myw3ICs2MSw3IEBA
IHVuc2lnbmVkIENTU1NlbGVjdG9yOjpzcGVjaWZpY2l0eSgpIGNvbnMKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWF4VmFsdWVNYXNrID0gMHhmZmZmZmY7CiAgICAgdW5zaWduZWQgdG90YWwg
PSAwOwogICAgIGZvciAoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gdGhpczsgc2VsZWN0
b3I7IHNlbGVjdG9yID0gc2VsZWN0b3ItPnRhZ0hpc3RvcnkoKSkgewotICAgICAgICBpZiAoc2Vs
ZWN0b3ItPm1faXNGb3JQYWdlKQorICAgICAgICBpZiAoc2VsZWN0b3ItPmlzRm9yUGFnZSgpKQog
ICAgICAgICAgICAgcmV0dXJuICh0b3RhbCArIHNlbGVjdG9yLT5zcGVjaWZpY2l0eUZvclBhZ2Uo
KSkgJiBtYXhWYWx1ZU1hc2s7CiAgICAgICAgIHRvdGFsID0gKHRvdGFsICsgc2VsZWN0b3ItPnNw
ZWNpZmljaXR5Rm9yT25lU2VsZWN0b3IoKSkgJiBtYXhWYWx1ZU1hc2s7CiAgICAgfQpAQCAtNjQ4
LDQyICs2NTYsMzcgQEAgY29uc3QgUXVhbGlmaWVkTmFtZSYgQ1NTU2VsZWN0b3I6OmF0dHJpYgog
ICAgIGNhc2UgQ2xhc3M6CiAgICAgICAgIHJldHVybiBjbGFzc0F0dHI7CiAgICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIG1faGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRy
aWJ1dGUgOiBhbnlRTmFtZSgpOworICAgICAgICByZXR1cm4gbV9kYXRhID8gbV9kYXRhLT5hdHRy
aWJ1dGUoKSA6IGFueVFOYW1lKCk7CiAgICAgfQogfQogCiB2b2lkIENTU1NlbGVjdG9yOjpzZXRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdmFsdWUpIAogeyAKICAgICBjcmVhdGVSYXJl
RGF0YSgpOyAKLSAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUgPSB2YWx1ZTsgCisg
ICAgbV9kYXRhLT5zZXRBdHRyaWJ1dGUodmFsdWUpOwogfQogICAgIAogdm9pZCBDU1NTZWxlY3Rv
cjo6c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgCiB7IAotICAgIGNyZWF0
ZVJhcmVEYXRhKCk7IAotICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2FyZ3VtZW50ID0gdmFsdWU7
IAorICAgIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAgbV9kYXRhLT5zZXRBcmd1bWVudCh2YWx1ZSk7
CiB9CiAgICAgCiB2b2lkIENTU1NlbGVjdG9yOjpzZXRTZWxlY3Rvckxpc3QoUGFzc093blB0cjxD
U1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCkKIHsKICAgICBjcmVhdGVSYXJlRGF0YSgpOyAK
LSAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QgPSBzZWxlY3Rvckxpc3Q7Cisg
ICAgbV9kYXRhLT5zZXRTZWxlY3Rvckxpc3Qoc2VsZWN0b3JMaXN0KTsKIH0KIAogYm9vbCBDU1NT
ZWxlY3Rvcjo6cGFyc2VOdGgoKQogewotICAgIGlmICghbV9oYXNSYXJlRGF0YSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChtX3BhcnNlZE50aCkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgbV9wYXJzZWROdGggPSBtX2RhdGEubV9yYXJlRGF0YS0+cGFyc2VOdGgoKTsKLSAgICBy
ZXR1cm4gbV9wYXJzZWROdGg7CisgICAgcmV0dXJuIG1fZGF0YSAmJiBtX2RhdGEtPnBhcnNlTnRo
KCk7CiB9CiAKIGJvb2wgQ1NTU2VsZWN0b3I6Om1hdGNoTnRoKGludCBjb3VudCkKIHsKLSAgICBB
U1NFUlQobV9oYXNSYXJlRGF0YSk7Ci0gICAgcmV0dXJuIG1fZGF0YS5tX3JhcmVEYXRhLT5tYXRj
aE50aChjb3VudCk7CisgICAgQVNTRVJUKG1fZGF0YSk7CisgICAgcmV0dXJuIG1fZGF0YS0+bWF0
Y2hOdGgoY291bnQpOwogfQogCiBib29sIENTU1NlbGVjdG9yOjppc1NpbXBsZSgpIGNvbnN0CkBA
IC03MDMsNyArNzA2LDcgQEAgYm9vbCBDU1NTZWxlY3Rvcjo6aXNTaW1wbGUoKSBjb25zdAogICAg
IGlmIChtX21hdGNoID09IElkIHx8IG1fbWF0Y2ggPT0gQ2xhc3MgfHwgbV9tYXRjaCA9PSBQc2V1
ZG9DbGFzcykKICAgICAgICAgbnVtQ29uZGl0aW9ucysrOwogCi0gICAgaWYgKG1faGFzUmFyZURh
dGEgJiYgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXR0cmlidXRlICE9IGFueVFOYW1lKCkpCisgICAg
aWYgKG1fZGF0YSAmJiBtX2RhdGEtPmF0dHJpYnV0ZSgpICE9IGFueVFOYW1lKCkpCiAgICAgICAg
IG51bUNvbmRpdGlvbnMrKzsKIAogICAgIC8vIG51bUNvbmRpdGlvbnMgaXMgMCBmb3IgYSB1bml2
ZXJzYWwgc2VsZWN0b3IuCkBAIC03MTEsOCArNzE0LDEwIEBAIGJvb2wgQ1NTU2VsZWN0b3I6Omlz
U2ltcGxlKCkgY29uc3QKICAgICByZXR1cm4gbnVtQ29uZGl0aW9ucyA8PSAxOwogfQogCi1DU1NT
ZWxlY3Rvcjo6UmFyZURhdGE6OlJhcmVEYXRhKFBhc3NSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4g
dmFsdWUpCi0gICAgOiBtX3ZhbHVlKHZhbHVlLmxlYWtSZWYoKSkKK0NTU1NlbGVjdG9yOjpSYXJl
RGF0YTo6UmFyZURhdGEoQXRvbWljU3RyaW5nIHZhbHVlKQorICAgIDogRGF0YSh2YWx1ZSkKKyAg
ICAsIG1faXNGb3JQYWdlKGZhbHNlKQorICAgICwgbV9wYXJzZWROdGgoZmFsc2UpCiAgICAgLCBt
X2EoMCkKICAgICAsIG1fYigwKQogICAgICwgbV9hdHRyaWJ1dGUoYW55UU5hbWUoKSkKQEAgLTcy
MiwxMyArNzI3LDE0IEBAIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6UmFyZURhdGEoUGFzc1JlZlAK
IAogQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEoKQogewotICAgIGlmIChtX3ZhbHVl
KQotICAgICAgICBtX3ZhbHVlLT5kZXJlZigpOwogfQogICAgIAogLy8gYSBoZWxwZXIgZnVuY3Rp
b24gZm9yIHBhcnNpbmcgbnRoLWFyZ3VtZW50cwogYm9vbCBDU1NTZWxlY3Rvcjo6UmFyZURhdGE6
OnBhcnNlTnRoKCkKIHsKKyAgICBpZiAobV9wYXJzZWROdGgpCisgICAgICAgIHJldHVybiB0cnVl
OworCiAgICAgU3RyaW5nIGFyZ3VtZW50ID0gbV9hcmd1bWVudC5sb3dlcigpOwogICAgIAogICAg
IGlmIChhcmd1bWVudC5pc0VtcHR5KCkpCkBAIC03NjYsNiArNzcyLDcgQEAgYm9vbCBDU1NTZWxl
Y3Rvcjo6UmFyZURhdGE6OnBhcnNlTnRoKCkKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBt
X2IgPSBhcmd1bWVudC50b0ludCgpOwogICAgIH0KKyAgICBtX3BhcnNlZE50aCA9IHRydWU7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTc4NSw0ICs3OTIsOCBAQCBib29sIENTU1NlbGVjdG9y
OjpSYXJlRGF0YTo6bWF0Y2hOdGgoaW50CiAgICAgfQogfQogCit2b2lkIENTU1NlbGVjdG9yOjpS
YXJlRGF0YTo6c2V0U2VsZWN0b3JMaXN0KFBhc3NPd25QdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxl
Y3Rvckxpc3QpCit7CisgICAgbV9zZWxlY3Rvckxpc3QgPSBzZWxlY3Rvckxpc3Q7Cit9CiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkocmV2aXNp
b24gOTMzNzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMzksMTEgKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAg
OiBtX3JlbGF0aW9uKERlc2NlbmRhbnQpCiAgICAgICAgICAgICAsIG1fbWF0Y2goTm9uZSkKICAg
ICAgICAgICAgICwgbV9wc2V1ZG9UeXBlKFBzZXVkb05vdFBhcnNlZCkKLSAgICAgICAgICAgICwg
bV9wYXJzZWROdGgoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNMYXN0SW5TZWxlY3Rvckxpc3Qo
ZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNMYXN0SW5UYWdIaXN0b3J5KHRydWUpCi0gICAgICAg
ICAgICAsIG1faGFzUmFyZURhdGEoZmFsc2UpCi0gICAgICAgICAgICAsIG1faXNGb3JQYWdlKGZh
bHNlKQogICAgICAgICAgICAgLCBtX3RhZyhhbnlRTmFtZSgpKQogICAgICAgICB7CiAgICAgICAg
IH0KQEAgLTUyLDIxICs0OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICA6
IG1fcmVsYXRpb24oRGVzY2VuZGFudCkKICAgICAgICAgICAgICwgbV9tYXRjaChOb25lKQogICAg
ICAgICAgICAgLCBtX3BzZXVkb1R5cGUoUHNldWRvTm90UGFyc2VkKQotICAgICAgICAgICAgLCBt
X3BhcnNlZE50aChmYWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJblNlbGVjdG9yTGlzdChm
YWxzZSkKICAgICAgICAgICAgICwgbV9pc0xhc3RJblRhZ0hpc3RvcnkodHJ1ZSkKLSAgICAgICAg
ICAgICwgbV9oYXNSYXJlRGF0YShmYWxzZSkKLSAgICAgICAgICAgICwgbV9pc0ZvclBhZ2UoZmFs
c2UpCiAgICAgICAgICAgICAsIG1fdGFnKHFOYW1lKQogICAgICAgICB7CiAgICAgICAgIH0KIAog
ICAgICAgICB+Q1NTU2VsZWN0b3IoKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9oYXNS
YXJlRGF0YSkKLSAgICAgICAgICAgICAgICBkZWxldGUgbV9kYXRhLm1fcmFyZURhdGE7Ci0gICAg
ICAgICAgICBlbHNlIGlmIChtX2RhdGEubV92YWx1ZSkKLSAgICAgICAgICAgICAgICBtX2RhdGEu
bV92YWx1ZS0+ZGVyZWYoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qKgpAQCAtMjIwLDE4ICsy
MTAsMTggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDU1NTZWxlY3RvciogdGFnSGlz
dG9yeSgpIGNvbnN0IHsgcmV0dXJuIG1faXNMYXN0SW5UYWdIaXN0b3J5ID8gMCA6IGNvbnN0X2Nh
c3Q8Q1NTU2VsZWN0b3IqPih0aGlzICsgMSk7IH0KIAogICAgICAgICBib29sIGhhc1RhZygpIGNv
bnN0IHsgcmV0dXJuIG1fdGFnICE9IGFueVFOYW1lKCk7IH0KLSAgICAgICAgYm9vbCBoYXNBdHRy
aWJ1dGUoKSBjb25zdCB7IHJldHVybiBtX21hdGNoID09IElkIHx8IG1fbWF0Y2ggPT0gQ2xhc3Mg
fHwgKG1faGFzUmFyZURhdGEgJiYgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXR0cmlidXRlICE9IGFu
eVFOYW1lKCkpOyB9CisgICAgICAgIGJvb2wgaGFzQXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4g
bV9tYXRjaCA9PSBJZCB8fCBtX21hdGNoID09IENsYXNzIHx8IChtX2RhdGEgJiYgbV9kYXRhLT5h
dHRyaWJ1dGUoKSAhPSBhbnlRTmFtZSgpKTsgfQogICAgICAgICAKICAgICAgICAgY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnKCkgY29uc3QgeyByZXR1cm4gbV90YWc7IH0KICAgICAgICAgLy8gQXRv
bWljU3RyaW5nIGlzIHJlYWxseSBqdXN0IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNvIHRoZSBjYXN0
IGJlbG93IGlzIHNhZmUuCiAgICAgICAgIC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwgc2l0ZXMgY291
bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQgQXRvbWljU3RyaW5nSW1wbD8KLSAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNv
bnN0IEF0b21pY1N0cmluZyo+KG1faGFzUmFyZURhdGEgPyAmbV9kYXRhLm1fcmFyZURhdGEtPm1f
dmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUpOyB9CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEgPyBtX2RhdGEtPnZhbHVlKCkgOiBudWxsQXRv
bTsgfQogICAgICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUoKSBjb25zdDsKLSAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
UmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9hcmd1bWVudCA6IG51bGxBdG9tOyB9Ci0g
ICAgICAgIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IDA7
IH0KKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YSA/IG1fZGF0YS0+YXJndW1lbnQoKSA6IG51bGxBdG9tOyB9CisgICAgICAgIENTU1Nl
bGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhID8gbV9kYXRh
LT5zZWxlY3Rvckxpc3QoKSA6IDA7IH0KICAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0VGFnKGNv
bnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSB7IG1fdGFnID0gdmFsdWU7IH0KLSAgICAgICAgdm9p
ZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBzZXRUYWcoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnKSB7IG1fdGFnID0gdGFnOyB9CisgICAgICAgIHZvaWQgc2V0
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBjcmVhdGVEYXRhKCk7IG1fZGF0YS0+
c2V0VmFsdWUodmFsdWUpOyB9CiAgICAgICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKTsKICAgICAgICAgdm9pZCBzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcm
KTsKICAgICAgICAgdm9pZCBzZXRTZWxlY3Rvckxpc3QoUGFzc093blB0cjxDU1NTZWxlY3Rvckxp
c3Q+KTsKQEAgLTI1MiwzNCArMjQyLDc1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBib29sIGlzU2ltcGxlKCkgY29uc3Q7CiAKLSAgICAgICAgYm9vbCBpc0ZvclBhZ2UoKSBjb25z
dCB7IHJldHVybiBtX2lzRm9yUGFnZTsgfQotICAgICAgICB2b2lkIHNldEZvclBhZ2UoKSB7IG1f
aXNGb3JQYWdlID0gdHJ1ZTsgfQorICAgICAgICBib29sIGlzRm9yUGFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YSAmJiBtX2RhdGEtPmlzRm9yUGFnZSgpOyB9CisgICAgICAgIHZvaWQgc2V0Rm9y
UGFnZSgpIHsgY3JlYXRlUmFyZURhdGEoKTsgbV9kYXRhLT5zZXRGb3JQYWdlKCk7IH0KIAogICAg
ICAgICB1bnNpZ25lZCBtX3JlbGF0aW9uICAgICAgICAgICA6IDM7IC8vIGVudW0gUmVsYXRpb24K
ICAgICAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX21hdGNoICAgICAgOiA0OyAvLyBlbnVtIE1hdGNo
Ci0gICAgICAgIG11dGFibGUgdW5zaWduZWQgbV9wc2V1ZG9UeXBlIDogODsgLy8gUHNldWRvVHlw
ZQorICAgICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fcHNldWRvVHlwZSA6IDc7IC8vIGVudW0gUHNl
dWRvVHlwZQogICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBib29sIG1fcGFyc2VkTnRo
ICAgICAgICAgICAgICA6IDE7IC8vIFVzZWQgZm9yIDpudGgtKiAKICAgICAgICAgYm9vbCBtX2lz
TGFzdEluU2VsZWN0b3JMaXN0ICAgOiAxOwogICAgICAgICBib29sIG1faXNMYXN0SW5UYWdIaXN0
b3J5ICAgICA6IDE7Ci0gICAgICAgIGJvb2wgbV9oYXNSYXJlRGF0YSAgICAgICAgICAgIDogMTsK
LSAgICAgICAgYm9vbCBtX2lzRm9yUGFnZSAgICAgICAgICAgICAgOiAxOwogCiAgICAgICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5Rm9yT25lU2VsZWN0b3IoKSBjb25zdDsKICAgICAgICAgdW5zaWdu
ZWQgc3BlY2lmaWNpdHlGb3JQYWdlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgZXh0cmFjdFBzZXVk
b1R5cGUoKSBjb25zdDsKIAotICAgICAgICBzdHJ1Y3QgUmFyZURhdGEgewotICAgICAgICAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoUmFyZURhdGEpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
KyAgICAgICAgY2xhc3MgRGF0YSB7CiAgICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFJhcmVE
YXRhKFBhc3NSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4gdmFsdWUpOwotICAgICAgICAgICAgflJh
cmVEYXRhKCk7CisgICAgICAgICAgICBEYXRhKEF0b21pY1N0cmluZyB2YWx1ZSkgOiBtX3ZhbHVl
KHZhbHVlKSB7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgfkRhdGEoKSB7IH0KIAotICAgICAgICAg
ICAgYm9vbCBwYXJzZU50aCgpOwotICAgICAgICAgICAgYm9vbCBtYXRjaE50aChpbnQgY291bnQp
OworICAgICAgICAgICAgdmlydHVhbCBib29sIGlzUmFyZURhdGEoKSB7IHJldHVybiBmYWxzZTsg
fQogCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOyAvLyBQbGFpbiBwb2lu
dGVyIHRvIGtlZXAgdGhpbmdzIHVuaWZvcm0gd2l0aCB0aGUgdW5pb24uCisgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgICAgICAg
ICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fdmFsdWUgPSB2
YWx1ZTsgfQorCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGb3JQYWdlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRGb3JQYWdlKCkgeyBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsgfQorCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgcGFyc2VOdGgoKSB7
IHJldHVybiBmYWxzZTsgfQorICAgICAgICAgICAgdmlydHVhbCBib29sIG1hdGNoTnRoKGludCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAgICAgICAgIHZp
cnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKCkgeyByZXR1cm4gYW55UU5hbWUo
KTsgfQorICAgICAgICAgICAgdmlydHVhbCB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJikgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCisgICAgICAgICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQoKSB7IHJldHVybiBudWxsQXRvbTsgfQorICAg
ICAgICAgICAgdmlydHVhbCB2b2lkIHNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYpIHsg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKworICAgICAgICAgICAgdmlydHVhbCBDU1NTZWxlY3Rv
ckxpc3QqIHNlbGVjdG9yTGlzdCgpIHsgcmV0dXJuIDA7IH0KKyAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWxlY3Rvckxpc3QoUGFzc093blB0cjxDU1NTZWxlY3Rvckxpc3Q+KSB7IEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOyB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBBdG9taWNT
dHJpbmcgbV92YWx1ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdm9pZCBjcmVhdGVEYXRhKCk7CisK
KyAgICAgICAgY2xhc3MgUmFyZURhdGEgOiBwdWJsaWMgRGF0YSB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIFJhcmVEYXRhKEF0b21pY1N0cmluZyk7CisgICAgICAgICAgICB2aXJ0dWFs
IH5SYXJlRGF0YSgpOworCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSYXJlRGF0YSgpIHsg
cmV0dXJuIHRydWU7IH0KKworICAgICAgICAgICAgdmlydHVhbCBib29sIGlzRm9yUGFnZSgpIHsg
cmV0dXJuIG1faXNGb3JQYWdlOyB9CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0Rm9yUGFn
ZSgpIHsgbV9pc0ZvclBhZ2UgPSB0cnVlOyB9CisKKyAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBw
YXJzZU50aCgpOworICAgICAgICAgICAgdmlydHVhbCBib29sIG1hdGNoTnRoKGludCBjb3VudCk7
CisKKyAgICAgICAgICAgIHZpcnR1YWwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKCkg
eyByZXR1cm4gbV9hdHRyaWJ1dGU7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKSB7IG1fYXR0cmlidXRlID0gYXR0
cmlidXRlOyB9CisKKyAgICAgICAgICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1
bWVudCgpIHsgcmV0dXJuIG1fYXJndW1lbnQ7IH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBz
ZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3VtZW50KSB7IG1fYXJndW1lbnQgPSBh
cmd1bWVudDsgfQorCisgICAgICAgICAgICB2aXJ0dWFsIENTU1NlbGVjdG9yTGlzdCogc2VsZWN0
b3JMaXN0KCkgeyByZXR1cm4gbV9zZWxlY3Rvckxpc3QuZ2V0KCk7IH0KKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRTZWxlY3Rvckxpc3QoUGFzc093blB0cjxDU1NTZWxlY3Rvckxpc3Q+KTsK
KworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgYm9vbCBtX2lzRm9yUGFnZTsKKyAgICAg
ICAgICAgIGJvb2wgbV9wYXJzZWROdGg7IC8vIFVzZWQgZm9yIDpudGgtKgogICAgICAgICAgICAg
aW50IG1fYTsgLy8gVXNlZCBmb3IgOm50aC0qCiAgICAgICAgICAgICBpbnQgbV9iOyAvLyBVc2Vk
IGZvciA6bnRoLSoKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgbV9hdHRyaWJ1dGU7IC8vIHVz
ZWQgZm9yIGF0dHJpYnV0ZSBzZWxlY3RvcgpAQCAtMjg3LDEyICszMTgsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICBPd25QdHI8Q1NTU2VsZWN0b3JMaXN0PiBtX3NlbGVjdG9y
TGlzdDsgLy8gVXNlZCBmb3IgOi13ZWJraXQtYW55IGFuZCA6bm90CiAgICAgICAgIH07CiAgICAg
ICAgIHZvaWQgY3JlYXRlUmFyZURhdGEoKTsKLSAgICAgICAgCi0gICAgICAgIHVuaW9uIERhdGFV
bmlvbiB7Ci0gICAgICAgICAgICBEYXRhVW5pb24oKSA6IG1fdmFsdWUoMCkgeyB9Ci0gICAgICAg
ICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOwotICAgICAgICAgICAgUmFyZURhdGEqIG1f
cmFyZURhdGE7Ci0gICAgICAgIH0gbV9kYXRhOworCisgICAgICAgIE93blB0cjxEYXRhPiBtX2Rh
dGE7CiAgICAgICAgIAogICAgICAgICBRdWFsaWZpZWROYW1lIG1fdGFnOwogICAgIH07CkBAIC0z
MjYsMTggKzM1Myw2IEBAIGlubGluZSBib29sIENTU1NlbGVjdG9yOjppc1NpYmxpbmdTZWxlY3QK
ICAgICAgICAgfHwgdHlwZSA9PSBQc2V1ZG9OdGhMYXN0Q2hpbGQKICAgICAgICAgfHwgdHlwZSA9
PSBQc2V1ZG9OdGhMYXN0T2ZUeXBlOwogfQotICAgIAotaW5saW5lIHZvaWQgQ1NTU2VsZWN0b3I6
OnNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCi17IAotICAgIC8vIE5lZWQgdG8g
ZG8gcmVmIGNvdW50aW5nIG1hbnVhbGx5IGZvciB0aGUgdW5pb24uCi0gICAgaWYgKG1faGFzUmFy
ZURhdGEpIHsKLSAgICAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgPSB2YWx1ZS5pbXBs
KCk7Ci0gICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlLT5yZWYoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBtX2RhdGEubV92YWx1ZSA9IHZhbHVlLmltcGwoKTsKLSAgICBt
X2RhdGEubV92YWx1ZS0+cmVmKCk7Ci19CiAKIGlubGluZSB2b2lkIG1vdmUoUGFzc093blB0cjxD
U1NTZWxlY3Rvcj4gZnJvbSwgQ1NTU2VsZWN0b3IqIHRvKSAKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCShyZXZpc2lvbiA5MzM3NikKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTZWxlY3Rvckxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMsNiArMTAz
LDcgQEAgdm9pZCBDU1NTZWxlY3Rvckxpc3Q6OmRlbGV0ZVNlbGVjdG9ycygpCiAgICAgICAgIH0K
ICAgICAgICAgZmFzdEZyZWUobV9zZWxlY3RvckFycmF5KTsKICAgICB9CisgICAgbV9zZWxlY3Rv
ckFycmF5ID0gMDsKIH0KIAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104790</attachid>
            <date>2011-08-22 23:09:01 -0700</date>
            <delta_ts>2011-08-25 20:10:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66452-20110823160859.patch</filename>
            <type>text/plain</type>
            <size>7700</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNTgwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDgtMjIgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBBdHRlbXB0IGF0
IG1ha2luZyBDU1NTZWxlY3RvciBhIGxpdHRsZSBlYXNpZXIgdG8gdW5kZXJzdGFuZCBhbmQgYSBs
aXR0bGUgbGVzcyBidWctcHJvbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjQ1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAvIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlZC4KKwor
ICAgICAgICBUaGlzIHBhdGNoIGFpbXMgdG8gY2xlYW4gdXAgQ1NTU2VsZWN0b3IgYW5kIG1ha2Ug
cmVmZXJlbmNlIGNvdW50aW5nIG1vcmUgcm9idXN0IHdpdGhvdXQgaW5jcmVhc2luZyBtZW1vcnkg
b3ZlcmhlYWQuCisKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0
b3I6OmlzVW5rbm93blBzZXVkb1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6
OnNlbGVjdG9yVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6c2V0QXJndW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rvcjo6UmFyZURhdGE6On5SYXJlRGF0YSk6Cisg
ICAgICAgICogY3NzL0NTU1NlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6dmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU2VsZWN0b3I6OmFyZ3VtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1NlbGVjdG9yOjpzZXRWYWx1ZSk6CisKIDIwMTEtMDgtMjIgIEpv
aG4gQmF0ZXMgIDxqYmF0ZXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBJbXBsZW1lbnRlZCBza2lh
IHN1cHBvcnQgZm9yIGNhY2hpbmcgcmVzaXplcyBvZiBjcm9wcGVkIGltYWdlcy4KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAkocmV2aXNpb24gOTM1NjgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBA
IHZvaWQgQ1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKCkKICAgICBpZiAobV9oYXNSYXJlRGF0
YSkgCiAgICAgICAgIHJldHVybjsKICAgICAvLyBNb3ZlIHRoZSB2YWx1ZSB0byB0aGUgcmFyZSBk
YXRhIHN0dWN0dXJlLgotICAgIG1fZGF0YS5tX3JhcmVEYXRhID0gbmV3IFJhcmVEYXRhKGFkb3B0
UmVmKG1fZGF0YS5tX3ZhbHVlKSk7CisgICAgbV9kYXRhLm1fcmFyZURhdGEgPSBuZXcgUmFyZURh
dGEoQXRvbWljU3RyaW5nKG1fZGF0YS5tX3ZhbHVlKSk7CiAgICAgbV9oYXNSYXJlRGF0YSA9IHRy
dWU7CiB9CiAKQEAgLTM3OSw3ICszNzksNyBAQCBzdGF0aWMgSGFzaE1hcDxBdG9taWNTdHJpbmdJ
bXBsKiwgQ1NTU2VsCiAgICAgcmV0dXJuIG5hbWVUb1BzZXVkb1R5cGU7CiB9CiAKLUNTU1NlbGVj
dG9yOjpQc2V1ZG9UeXBlIENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKQorQ1NTU2VsZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcnNl
UHNldWRvVHlwZShBdG9taWNTdHJpbmcgbmFtZSkKIHsKICAgICBpZiAobmFtZS5pc051bGwoKSkK
ICAgICAgICAgcmV0dXJuIFBzZXVkb1Vua25vd247CkBAIC0zODgsNyArMzg4LDcgQEAgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb1R5cGUgQ1NTU2VsZWN0b3I6OnBhcgogICAgIHJldHVybiBzbG90ID09IG5h
bWVUb1BzZXVkb1R5cGUtPmVuZCgpID8gUHNldWRvVW5rbm93biA6IHNsb3QtPnNlY29uZDsKIH0K
IAotYm9vbCBDU1NTZWxlY3Rvcjo6aXNVbmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWUpCitib29sIENTU1NlbGVjdG9yOjppc1Vua25vd25Qc2V1ZG9UeXBlKEF0b21pY1N0
cmluZyBuYW1lKQogewogICAgIHJldHVybiBwYXJzZVBzZXVkb1R5cGUobmFtZSkgPT0gUHNldWRv
VW5rbm93bjsKIH0KQEAgLTUyNiw4ICs1MjYsOCBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVj
dG9yVGV4dCgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIHN0ciA9ICIiOwogCi0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXggPSBtX3RhZy5wcmVmaXgoKTsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGxvY2FsTmFtZSA9IG1fdGFnLmxvY2FsTmFtZSgpOworICAgIEF0b21pY1N0cmluZyBwcmVm
aXggPSBtX3RhZy5wcmVmaXgoKTsKKyAgICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0gbV90YWcu
bG9jYWxOYW1lKCk7CiAgICAgaWYgKG1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6Ok5vbmUgfHwgIXBy
ZWZpeC5pc051bGwoKSB8fCBsb2NhbE5hbWUgIT0gc3RhckF0b20pIHsKICAgICAgICAgaWYgKHBy
ZWZpeC5pc051bGwoKSkKICAgICAgICAgICAgIHN0ciA9IGxvY2FsTmFtZTsKQEAgLTU4Miw3ICs1
ODIsNyBAQCBTdHJpbmcgQ1NTU2VsZWN0b3I6OnNlbGVjdG9yVGV4dCgpIGNvbnN0CiAgICAgICAg
ICAgICBzdHIgKz0gY3MtPnZhbHVlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAoY3MtPmhhc0F0dHJp
YnV0ZSgpKSB7CiAgICAgICAgICAgICBzdHIgKz0gIlsiOwotICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBwcmVmaXggPSBjcy0+YXR0cmlidXRlKCkucHJlZml4KCk7CisgICAgICAgICAg
ICBBdG9taWNTdHJpbmcgcHJlZml4ID0gY3MtPmF0dHJpYnV0ZSgpLnByZWZpeCgpOwogICAgICAg
ICAgICAgaWYgKCFwcmVmaXguaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBzdHIuYXBwZW5k
KHByZWZpeCk7CiAgICAgICAgICAgICAgICAgc3RyLmFwcGVuZCgifCIpOwpAQCAtNjU4LDcgKzY1
OCw3IEBAIHZvaWQgQ1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZShjb25zdCBRdWEKICAgICBtX2Rh
dGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGUgPSB2YWx1ZTsgCiB9CiAgICAgCi12b2lkIENTU1Nl
bGVjdG9yOjpzZXRBcmd1bWVudChjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKSAKK3ZvaWQgQ1NT
U2VsZWN0b3I6OnNldEFyZ3VtZW50KEF0b21pY1N0cmluZyB2YWx1ZSkKIHsgCiAgICAgY3JlYXRl
UmFyZURhdGEoKTsgCiAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1fYXJndW1lbnQgPSB2YWx1ZTsg
CkBAIC03MTEsOCArNzExLDggQEAgYm9vbCBDU1NTZWxlY3Rvcjo6aXNTaW1wbGUoKSBjb25zdAog
ICAgIHJldHVybiBudW1Db25kaXRpb25zIDw9IDE7CiB9CiAKLUNTU1NlbGVjdG9yOjpSYXJlRGF0
YTo6UmFyZURhdGEoUGFzc1JlZlB0cjxBdG9taWNTdHJpbmdJbXBsPiB2YWx1ZSkKLSAgICA6IG1f
dmFsdWUodmFsdWUubGVha1JlZigpKQorQ1NTU2VsZWN0b3I6OlJhcmVEYXRhOjpSYXJlRGF0YShB
dG9taWNTdHJpbmcgdmFsdWUpCisgICAgOiBtX3ZhbHVlKHZhbHVlKQogICAgICwgbV9hKDApCiAg
ICAgLCBtX2IoMCkKICAgICAsIG1fYXR0cmlidXRlKGFueVFOYW1lKCkpCkBAIC03MjIsMTAgKzcy
Miw4IEBAIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6UmFyZURhdGEoUGFzc1JlZlAKIAogQ1NTU2Vs
ZWN0b3I6OlJhcmVEYXRhOjp+UmFyZURhdGEoKQogewotICAgIGlmIChtX3ZhbHVlKQotICAgICAg
ICBtX3ZhbHVlLT5kZXJlZigpOwogfQotICAgIAorCiAvLyBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig
cGFyc2luZyBudGgtYXJndW1lbnRzCiBib29sIENTU1NlbGVjdG9yOjpSYXJlRGF0YTo6cGFyc2VO
dGgoKQogewpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHJldmlzaW9uIDkzNTY4KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIx
MSw4ICsyMTEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8UHNldWRvVHlwZT4obV9wc2V1ZG9UeXBlKTsKICAgICAgICAgfQogCi0gICAgICAg
IHN0YXRpYyBQc2V1ZG9UeXBlIHBhcnNlUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgaXNVbmtub3duUHNldWRvVHlwZShjb25zdCBBdG9taWNTdHJp
bmcmKTsKKyAgICAgICAgc3RhdGljIFBzZXVkb1R5cGUgcGFyc2VQc2V1ZG9UeXBlKEF0b21pY1N0
cmluZyk7CisgICAgICAgIHN0YXRpYyBib29sIGlzVW5rbm93blBzZXVkb1R5cGUoQXRvbWljU3Ry
aW5nKTsKICAgICAgICAgc3RhdGljIFBzZXVkb0lkIHBzZXVkb0lkKFBzZXVkb1R5cGUpOwogCiAg
ICAgICAgIC8vIFNlbGVjdG9ycyBhcmUga2VwdCBpbiBhbiBhcnJheSBieSBDU1NTZWxlY3Rvckxp
c3QuIFRoZSBuZXh0IGNvbXBvbmVudCBvZiB0aGUgc2VsZWN0b3IgaXMgCkBAIC0yMjMsMTcgKzIy
MywxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaGFzQXR0cmlidXRlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRjaCA9PSBJZCB8fCBtX21hdGNoID09IENsYXNzIHx8IChtX2hh
c1JhcmVEYXRhICYmIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSAhPSBhbnlRTmFtZSgp
KTsgfQogICAgICAgICAKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnKCkgY29uc3Qg
eyByZXR1cm4gbV90YWc7IH0KLSAgICAgICAgLy8gQXRvbWljU3RyaW5nIGlzIHJlYWxseSBqdXN0
IGFuIEF0b21pY1N0cmluZ0ltcGwqIHNvIHRoZSBjYXN0IGJlbG93IGlzIHNhZmUuCi0gICAgICAg
IC8vIEZJWE1FOiBQZXJoYXBzIGNhbGwgc2l0ZXMgY291bGQgYmUgY2hhbmdlZCB0byBhY2NlcHQg
QXRvbWljU3RyaW5nSW1wbD8KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+KG1faGFz
UmFyZURhdGEgPyAmbV9kYXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUp
OyB9CisgICAgICAgIEF0b21pY1N0cmluZyB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFy
ZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZSA6IEF0b21pY1N0cmluZyhtX2RhdGEu
bV92YWx1ZSk7IH0KICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKCkgY29u
c3Q7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2hhc1JhcmVEYXRhID8gbV9kYXRhLm1fcmFyZURhdGEtPm1fYXJndW1lbnQgOiBudWxsQXRv
bTsgfQorICAgICAgICBBdG9taWNTdHJpbmcgYXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hh
c1JhcmVEYXRhID8gbV9kYXRhLm1fcmFyZURhdGEtPm1fYXJndW1lbnQgOiBudWxsQXRvbTsgfQog
ICAgICAgICBDU1NTZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzUmFyZURhdGEgPyBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QuZ2V0KCkgOiAw
OyB9CiAgICAgICAgIAogICAgICAgICB2b2lkIHNldFRhZyhjb25zdCBRdWFsaWZpZWROYW1lJiB2
YWx1ZSkgeyBtX3RhZyA9IHZhbHVlOyB9Ci0gICAgICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRv
bWljU3RyaW5nJik7CisgICAgICAgIHZvaWQgc2V0VmFsdWUoQXRvbWljU3RyaW5nKTsKICAgICAg
ICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAgICAgICB2b2lk
IHNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgICAgICB2b2lkIHNldEFyZ3Vt
ZW50KEF0b21pY1N0cmluZyk7CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0b3JMaXN0KFBhc3NPd25Q
dHI8Q1NTU2VsZWN0b3JMaXN0Pik7CiAgICAgICAgIAogICAgICAgICBib29sIHBhcnNlTnRoKCk7
CkBAIC0yNzMsMTMgKzI3MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0cnVj
dCBSYXJlRGF0YSB7CiAgICAgICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSYXJlRGF0YSk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBS
YXJlRGF0YShQYXNzUmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+IHZhbHVlKTsKKyAgICAgICAgICAg
IFJhcmVEYXRhKEF0b21pY1N0cmluZyB2YWx1ZSk7CiAgICAgICAgICAgICB+UmFyZURhdGEoKTsK
IAogICAgICAgICAgICAgYm9vbCBwYXJzZU50aCgpOwogICAgICAgICAgICAgYm9vbCBtYXRjaE50
aChpbnQgY291bnQpOwogCi0gICAgICAgICAgICBBdG9taWNTdHJpbmdJbXBsKiBtX3ZhbHVlOyAv
LyBQbGFpbiBwb2ludGVyIHRvIGtlZXAgdGhpbmdzIHVuaWZvcm0gd2l0aCB0aGUgdW5pb24uCisg
ICAgICAgICAgICBBdG9taWNTdHJpbmcgbV92YWx1ZTsKICAgICAgICAgICAgIGludCBtX2E7IC8v
IFVzZWQgZm9yIDpudGgtKgogICAgICAgICAgICAgaW50IG1fYjsgLy8gVXNlZCBmb3IgOm50aC0q
CiAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIG1fYXR0cmlidXRlOyAvLyB1c2VkIGZvciBhdHRy
aWJ1dGUgc2VsZWN0b3IKQEAgLTMyNywxNCArMzI1LDE1IEBAIGlubGluZSBib29sIENTU1NlbGVj
dG9yOjppc1NpYmxpbmdTZWxlY3QKICAgICAgICAgfHwgdHlwZSA9PSBQc2V1ZG9OdGhMYXN0T2ZU
eXBlOwogfQogICAgIAotaW5saW5lIHZvaWQgQ1NTU2VsZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCitpbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6c2V0VmFsdWUoQXRv
bWljU3RyaW5nIHZhbHVlKQogeyAKLSAgICAvLyBOZWVkIHRvIGRvIHJlZiBjb3VudGluZyBtYW51
YWxseSBmb3IgdGhlIHVuaW9uLgogICAgIGlmIChtX2hhc1JhcmVEYXRhKSB7Ci0gICAgICAgIG1f
ZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlID0gdmFsdWUuaW1wbCgpOwotICAgICAgICBtX2RhdGEu
bV9yYXJlRGF0YS0+bV92YWx1ZS0+cmVmKCk7CisgICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5t
X3ZhbHVlID0gdmFsdWU7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgLy8gTmVlZCB0byBk
byByZWYgY291bnRpbmcgbWFudWFsbHkgZm9yIHRoZSBBdG9taWNTdHJpbmdJbXBsLgorICAgIGlm
IChtX2RhdGEubV92YWx1ZSkKKyAgICAgICAgbV9kYXRhLm1fdmFsdWUtPmRlcmVmKCk7CiAgICAg
bV9kYXRhLm1fdmFsdWUgPSB2YWx1ZS5pbXBsKCk7CiAgICAgbV9kYXRhLm1fdmFsdWUtPnJlZigp
OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105296</attachid>
            <date>2011-08-25 20:10:12 -0700</date>
            <delta_ts>2011-08-28 17:26:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66452-20110826131010.patch</filename>
            <type>text/plain</type>
            <size>1981</size>
            <attacher name="Luke Macpherson">macpherson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzODM3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDgtMjUgIEx1a2UgTWFj
cGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KKworICAgICAgICBGaXggcmVmZXJl
bmNlIGNvdW50aW5nIG9mIHZhbHVlcyBpbiBDU1NTZWxlY3Rvci4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2NDUyCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIC8gbm8gZnVuY3Rpb25h
bGl0eSBjaGFuZ2VkLgorCisgICAgICAgIENhbGwgZGVyZWYgd2hlbiByZWFzc2lnbmluZyB0aGUg
dmFsdWUuCisKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1NlbGVjdG9yOjpzZXRWYWx1ZSk6CisKIDIwMTEtMDgtMjUgIEp1bGllbiBDaGFmZnJhaXgg
IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ29uY2VudHJhdGUgUmVuZGVyTGF5
ZXIgcmVwYWludCByZWN0cyB1cGRhdGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2Vs
ZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAko
cmV2aXNpb24gOTM4MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgYXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hhc1JhcmVEYXRhID8g
bV9kYXRhLm1fcmFyZURhdGEtPm1fYXJndW1lbnQgOiBudWxsQXRvbTsgfQogICAgICAgICBDU1NT
ZWxlY3Rvckxpc3QqIHNlbGVjdG9yTGlzdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzUmFyZURhdGEg
PyBtX2RhdGEubV9yYXJlRGF0YS0+bV9zZWxlY3Rvckxpc3QuZ2V0KCkgOiAwOyB9Ci0gICAgICAg
IAorCiAgICAgICAgIHZvaWQgc2V0VGFnKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlKSB7IG1f
dGFnID0gdmFsdWU7IH0KICAgICAgICAgdm9pZCBzZXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcm
KTsKICAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwpAQCAt
MzI4LDEzICszMjgsMTcgQEAgaW5saW5lIGJvb2wgQ1NTU2VsZWN0b3I6OmlzU2libGluZ1NlbGVj
dAogfQogICAgIAogaW5saW5lIHZvaWQgQ1NTU2VsZWN0b3I6OnNldFZhbHVlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdmFsdWUpCi17IAorewogICAgIC8vIE5lZWQgdG8gZG8gcmVmIGNvdW50aW5nIG1h
bnVhbGx5IGZvciB0aGUgdW5pb24uCiAgICAgaWYgKG1faGFzUmFyZURhdGEpIHsKKyAgICAgICAg
aWYgKG1fZGF0YS5tX3JhcmVEYXRhLT5tX3ZhbHVlKQorICAgICAgICAgICAgbV9kYXRhLm1fcmFy
ZURhdGEtPm1fdmFsdWUtPmRlcmVmKCk7CiAgICAgICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX3Zh
bHVlID0gdmFsdWUuaW1wbCgpOwogICAgICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV92YWx1ZS0+
cmVmKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWYgKG1fZGF0YS5tX3ZhbHVlKQor
ICAgICAgICBtX2RhdGEubV92YWx1ZS0+ZGVyZWYoKTsKICAgICBtX2RhdGEubV92YWx1ZSA9IHZh
bHVlLmltcGwoKTsKICAgICBtX2RhdGEubV92YWx1ZS0+cmVmKCk7CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>