<?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>73040</bug_id>
          
          <creation_ts>2011-11-23 12:04:10 -0800</creation_ts>
          <short_desc>FloatQuad::isRectilinear() returns false for 180degree rotations</short_desc>
          <delta_ts>2011-11-28 16:17:18 -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>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>
          
          <blocked>70634</blocked>
    
    <blocked>72965</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to name="Dana Jansens">danakj</assigned_to>
          <cc>backer</cc>
    
    <cc>jamesr</cc>
    
    <cc>kling</cc>
    
    <cc>piman</cc>
    
    <cc>reveman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>508279</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-23 12:04:10 -0800</bug_when>
    <thetext>isRectilinear can&apos;t handle rotations that cause slight rounding errors.  Instead of testing floats for equality, we should test that they are sufficiently close.

This changes the test to check that floats are equal to 13 decimal places.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508281</commentid>
    <comment_count>1</comment_count>
      <attachid>116392</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-23 12:07:05 -0800</bug_when>
    <thetext>Created attachment 116392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508310</commentid>
    <comment_count>2</comment_count>
      <attachid>116392</attachid>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-23 12:42:21 -0800</bug_when>
    <thetext>Comment on attachment 116392
Patch

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

Good catch! This will also increase the number of cases where we can avoid the anti-aliasing shader.

&gt; Source/WebCore/platform/graphics/FloatQuad.cpp:90
&gt; +    return a - b &lt; 0.00000000000001 &amp;&amp; a - b &gt; -0.00000000000001;

I&apos;d put that magic value in a constant:
const float epsilon = 0.00000000000001;
that&apos;s enough to make sure there&apos;s no confusion about its use. Maybe it also doesn&apos;t have to be that small? It just has to be small enough to not affect rendering, right? We have to make a similar check in CCTiledLayerImpl::drawTiles. I used 1 / 1024 there.

and maybe &quot;return fabs(a - b) &lt; epsilon&quot; would be cleaner?

&gt; Source/WebCore/platform/graphics/FloatQuad.cpp:93
&gt;  bool FloatQuad::isRectilinear() const

Maybe it&apos;s a bad idea to do this approximation in isRectilinear(). How about adding a FloatQuad::isCloseToRectilinear()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508329</commentid>
    <comment_count>3</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-23 13:18:16 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 116392 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116392&amp;action=review
&gt; 
&gt; Good catch! This will also increase the number of cases where we can avoid the anti-aliasing shader.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:90
&gt; &gt; +    return a - b &lt; 0.00000000000001 &amp;&amp; a - b &gt; -0.00000000000001;
&gt; 
&gt; I&apos;d put that magic value in a constant:
&gt; const float epsilon = 0.00000000000001;

Sure.

&gt; that&apos;s enough to make sure there&apos;s no confusion about its use. Maybe it also doesn&apos;t have to be that small? It just has to be small enough to not affect rendering, right? We have to make a similar check in CCTiledLayerImpl::drawTiles. I used 1 / 1024 there.

I guess this would be the right value to use in both cases: http://msdn.microsoft.com/en-us/library/6x7575x3(v=vs.71).aspx

&gt; and maybe &quot;return fabs(a - b) &lt; epsilon&quot; would be cleaner?

I think this has an extra floating point instead of boolean instruction (the fabs() vs &amp;&amp;), but I see it used numerous times in the code already so yup. Thanks.

&gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:93
&gt; &gt;  bool FloatQuad::isRectilinear() const
&gt; 
&gt; Maybe it&apos;s a bad idea to do this approximation in isRectilinear(). How about adding a FloatQuad::isCloseToRectilinear()?

Are there places that would want to check isRectilinear and expect a 180 degree rotation to fail ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508344</commentid>
    <comment_count>4</comment_count>
      <attachid>116411</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-23 13:30:19 -0800</bug_when>
    <thetext>Created attachment 116411
use std::numeric_limits&lt;float&gt;::epsilon() for equality comparison</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508386</commentid>
    <comment_count>5</comment_count>
    <who name="David Reveman">reveman</who>
    <bug_when>2011-11-23 14:12:09 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 116392 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116392&amp;action=review
&gt; &gt; 
&gt; &gt; Good catch! This will also increase the number of cases where we can avoid the anti-aliasing shader.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:90
&gt; &gt; &gt; +    return a - b &lt; 0.00000000000001 &amp;&amp; a - b &gt; -0.00000000000001;
&gt; &gt; 
&gt; &gt; I&apos;d put that magic value in a constant:
&gt; &gt; const float epsilon = 0.00000000000001;
&gt; 
&gt; Sure.
&gt; 
&gt; &gt; that&apos;s enough to make sure there&apos;s no confusion about its use. Maybe it also doesn&apos;t have to be that small? It just has to be small enough to not affect rendering, right? We have to make a similar check in CCTiledLayerImpl::drawTiles. I used 1 / 1024 there.
&gt; 
&gt; I guess this would be the right value to use in both cases: http://msdn.microsoft.com/en-us/library/6x7575x3(v=vs.71).aspx
&gt; 
&gt; &gt; and maybe &quot;return fabs(a - b) &lt; epsilon&quot; would be cleaner?
&gt; 
&gt; I think this has an extra floating point instead of boolean instruction (the fabs() vs &amp;&amp;), but I see it used numerous times in the code already so yup. Thanks.

Thanks, it&apos;s just for readability.

&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:93
&gt; &gt; &gt;  bool FloatQuad::isRectilinear() const
&gt; &gt; 
&gt; &gt; Maybe it&apos;s a bad idea to do this approximation in isRectilinear(). How about adding a FloatQuad::isCloseToRectilinear()?
&gt; 
&gt; Are there places that would want to check isRectilinear and expect a 180 degree rotation to fail ?

No need for a isCloseToRectilinear if you use std::numeric_limits&lt;float&gt;::epsilon() like in the current patch. That would only make sense if we rounded based on pixel precision. 

Current patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509458</commentid>
    <comment_count>6</comment_count>
      <attachid>116411</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-27 11:07:46 -0800</bug_when>
    <thetext>Comment on attachment 116411
use std::numeric_limits&lt;float&gt;::epsilon() for equality comparison

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests. (will be covered in layout tests for opaque flag: https://bugs.webkit.org/show_bug.cgi?id=70634)

really? you can&apos;t even right a unit test for this?

&gt; Source/WebCore/platform/graphics/FloatQuad.cpp:89
&gt; +static inline bool equal(float a, float b)

do we actually need this? are there actual cases where exact comparisons fail but this succeeds?

this function name isn&apos;t very good since it isn&apos;t actually testing for equality

&gt; Source/WebCore/platform/graphics/FloatQuad.cpp:91
&gt; +    return fabs(a - b) &lt; std::numeric_limits&lt;float&gt;::epsilon();

WebKit style is to not use the &apos;std::&apos; qualifier here, add an appropriate using definition at the top of the .cpp and use numeric_limits&lt;&gt; unqualified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509814</commentid>
    <comment_count>7</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 07:10:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 116411 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116411&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No new tests. (will be covered in layout tests for opaque flag: https://bugs.webkit.org/show_bug.cgi?id=70634)
&gt; 
&gt; really? you can&apos;t even right a unit test for this?

I can make a chromium unit test sure. Just not looking to be redirected to fixing the general unit test framework to work with WebCore again.

&gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:89
&gt; &gt; +static inline bool equal(float a, float b)
&gt; 
&gt; do we actually need this? are there actual cases where exact comparisons fail but this succeeds?

Rotate a rect by 180 degrees and an == test will fail in the 12th decimal place or so. Thus is no longer considered opaque and won&apos;t use AA etc.

&gt; this function name isn&apos;t very good since it isn&apos;t actually testing for equality

ok will change.

&gt; &gt; Source/WebCore/platform/graphics/FloatQuad.cpp:91
&gt; &gt; +    return fabs(a - b) &lt; std::numeric_limits&lt;float&gt;::epsilon();
&gt; 
&gt; WebKit style is to not use the &apos;std::&apos; qualifier here, add an appropriate using definition at the top of the .cpp and use numeric_limits&lt;&gt; unqualified.

ok! thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509834</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 07:59:04 -0800</bug_when>
    <thetext>&gt; Source/WebCore/platform/graphics/FloatQuad.cpp:37:  Use &apos;using namespace std;&apos; instead of &apos;using std::numeric_limits;&apos;.  [build/using_std] [4]

Style check tells me to use the whole std namespace so I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509837</commentid>
    <comment_count>9</comment_count>
      <attachid>116761</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 08:02:57 -0800</bug_when>
    <thetext>Created attachment 116761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509955</commentid>
    <comment_count>10</comment_count>
      <attachid>116761</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 10:54:39 -0800</bug_when>
    <thetext>Comment on attachment 116761
Patch

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

Thanks for the test. R=me

&gt; Source/WebKit/chromium/tests/FloatQuadTest.cpp:26
&gt; +// FIXME: If we get the TestWebKitAPI framework to bring a full Frame + DOM stack
&gt; +// in a portable way, this test should be shared with all ports!

this FIXME doesn&apos;t really belong in this test - it&apos;s not something to do with this file

&gt; Source/WebKit/chromium/tests/FloatQuadTest.cpp:52
&gt; +    TransformationMatrix nonRectilinearTrans[8];

are there any transformations other than rotations that are interesting for this logic?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510004</commentid>
    <comment_count>11</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 11:24:25 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; this FIXME doesn&apos;t really belong in this test - it&apos;s not something to do with this file

Yep copy/paste error.

&gt; are there any transformations other than rotations that are interesting for this logic?

TBH I&apos;m not entirely sure so I&apos;ll throw in some scale+rotation and some reeeeeally small skews for good measure. Is there something in particular you were thinking of?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510008</commentid>
    <comment_count>12</comment_count>
      <attachid>116790</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 11:26:45 -0800</bug_when>
    <thetext>Created attachment 116790
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510047</commentid>
    <comment_count>13</comment_count>
      <attachid>116790</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 12:00:07 -0800</bug_when>
    <thetext>Comment on attachment 116790
Patch

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

&gt; Source/WebKit/chromium/tests/FloatQuadTest.cpp:54
&gt; +        EXPECT_EQ(true, quad.isRectilinear());

i believe gtest has EXPECT_TRUE and EXPECT_FALSE

&gt; Source/WebKit/chromium/tests/FloatQuadTest.cpp:72
&gt; +        EXPECT_EQ(false, quad.isRectilinear());

EXPECT_FALSE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510094</commentid>
    <comment_count>14</comment_count>
      <attachid>116802</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2011-11-28 12:50:32 -0800</bug_when>
    <thetext>Created attachment 116802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510097</commentid>
    <comment_count>15</comment_count>
      <attachid>116802</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-11-28 12:55:09 -0800</bug_when>
    <thetext>Comment on attachment 116802
Patch

Awesome! Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510309</commentid>
    <comment_count>16</comment_count>
      <attachid>116802</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 16:17:13 -0800</bug_when>
    <thetext>Comment on attachment 116802
Patch

Clearing flags on attachment: 116802

Committed r101300: &lt;http://trac.webkit.org/changeset/101300&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510310</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-28 16:17:18 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116392</attachid>
            <date>2011-11-23 12:07:05 -0800</date>
            <delta_ts>2011-11-23 13:30:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73040-20111123150704.patch</filename>
            <type>text/plain</type>
            <size>1983</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uZTZkODhiNWI3NjgwN2E2ODhlMWE2NTVjNmE4ZGEz
NjhhODRlNDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0UmVjdDo6aXNS
ZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
d2lsbCBiZSBjb3ZlcmVkIGluIGxheW91dCB0ZXN0cyBmb3Igb3BhcXVlIGZsYWc6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYzNCkKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplcXVhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFF1YWQ6OmlzUmVjdGlsaW5lYXIpOgorCiAyMDExLTExLTE2
ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBkZWx0YSBkdXJpbmcgY29tbWl0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAppbmRleCA4MzNm
YTQ0ZjgwYzAyY2Y1YzcwNjA3NTIzZGQ4ZThkOGNmMGNhOTc2Li5hNzVmYTAyY2MwNjY2NjE0OTZl
ZTVmMjMzYjFhNTk4NTU4ZjNjZDJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKQEAgLTg1LDEwICs4NSwxNSBAQCBGbG9hdFJlY3QgRmxvYXRR
dWFkOjpib3VuZGluZ0JveCgpIGNvbnN0CiAgICAgcmV0dXJuIEZsb2F0UmVjdChsZWZ0LCB0b3As
IHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGVx
dWFsKGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgLSBiIDwgMC4wMDAwMDAwMDAw
MDAwMSAmJiBhIC0gYiA+IC0wLjAwMDAwMDAwMDAwMDAxOworfQorCiBib29sIEZsb2F0UXVhZDo6
aXNSZWN0aWxpbmVhcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChtX3AxLngoKSA9PSBtX3AyLngo
KSAmJiBtX3AyLnkoKSA9PSBtX3AzLnkoKSAmJiBtX3AzLngoKSA9PSBtX3A0LngoKSAmJiBtX3A0
LnkoKSA9PSBtX3AxLnkoKSkKLSAgICAgICAgfHwgKG1fcDEueSgpID09IG1fcDIueSgpICYmIG1f
cDIueCgpID09IG1fcDMueCgpICYmIG1fcDMueSgpID09IG1fcDQueSgpICYmIG1fcDQueCgpID09
IG1fcDEueCgpKTsKKyAgICByZXR1cm4gKGVxdWFsKG1fcDEueCgpLCBtX3AyLngoKSkgJiYgZXF1
YWwobV9wMi55KCksIG1fcDMueSgpKSAmJiBlcXVhbChtX3AzLngoKSwgbV9wNC54KCkpICYmIGVx
dWFsKG1fcDQueSgpLCBtX3AxLnkoKSkpCisgICAgICAgIHx8IChlcXVhbChtX3AxLnkoKSwgbV9w
Mi55KCkpICYmIGVxdWFsKG1fcDIueCgpLCBtX3AzLngoKSkgJiYgZXF1YWwobV9wMy55KCksIG1f
cDQueSgpKSAmJiBlcXVhbChtX3A0LngoKSwgbV9wMS54KCkpKTsKIH0KIAogYm9vbCBGbG9hdFF1
YWQ6OmNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116411</attachid>
            <date>2011-11-23 13:30:19 -0800</date>
            <delta_ts>2011-11-28 08:02:50 -0800</delta_ts>
            <desc>use std::numeric_limits&lt;float&gt;::epsilon() for equality comparison</desc>
            <filename>bug-73040-20111123163018.patch</filename>
            <type>text/plain</type>
            <size>2102</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAwNTA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYWI4OTk1YWViMTRlNmMz
NzU2ZGJmNGU2NjdmY2QwYmEyOWY4MmFkNy4uZTZkODhiNWI3NjgwN2E2ODhlMWE2NTVjNmE4ZGEz
NjhhODRlNDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTIzICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0UmVjdDo6aXNS
ZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
d2lsbCBiZSBjb3ZlcmVkIGluIGxheW91dCB0ZXN0cyBmb3Igb3BhcXVlIGZsYWc6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MDYzNCkKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjplcXVhbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGbG9hdFF1YWQ6OmlzUmVjdGlsaW5lYXIpOgorCiAyMDExLTExLTE2
ICBBbGV4YW5kcmUgRWxpYXMgIDxhZWxpYXNAZ29vZ2xlLmNvbT4KIAogICAgICAgICBbY2hyb21p
dW1dIEltcHJvdmVtZW50cyBmb3IgcGFnZSBzY2FsZSBkZWx0YSBkdXJpbmcgY29tbWl0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAppbmRleCA4MzNm
YTQ0ZjgwYzAyY2Y1YzcwNjA3NTIzZGQ4ZThkOGNmMGNhOTc2Li5hNzU2YWRmYTA0OWM4NTA0Y2Fh
NzAxYzM3NWViZDhmYmNkZTUwYjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1
YWQuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxsaW1pdHM+CiAKIHVzaW5n
IHN0ZDo6bWF4OwogdXNpbmcgc3RkOjptaW47CkBAIC04NSwxMCArODYsMTUgQEAgRmxvYXRSZWN0
IEZsb2F0UXVhZDo6Ym91bmRpbmdCb3goKSBjb25zdAogICAgIHJldHVybiBGbG9hdFJlY3QobGVm
dCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBlcXVhbChmbG9hdCBhLCBmbG9hdCBiKQoreworICAgIHJldHVybiBmYWJzKGEgLSBiKSA8
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjplcHNpbG9uKCk7Cit9CisKIGJvb2wgRmxvYXRR
dWFkOjppc1JlY3RpbGluZWFyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1f
cDIueCgpICYmIG1fcDIueSgpID09IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYm
IG1fcDQueSgpID09IG1fcDEueSgpKQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkg
JiYgbV9wMi54KCkgPT0gbV9wMy54KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54
KCkgPT0gbV9wMS54KCkpOworICAgIHJldHVybiAoZXF1YWwobV9wMS54KCksIG1fcDIueCgpKSAm
JiBlcXVhbChtX3AyLnkoKSwgbV9wMy55KCkpICYmIGVxdWFsKG1fcDMueCgpLCBtX3A0LngoKSkg
JiYgZXF1YWwobV9wNC55KCksIG1fcDEueSgpKSkKKyAgICAgICAgfHwgKGVxdWFsKG1fcDEueSgp
LCBtX3AyLnkoKSkgJiYgZXF1YWwobV9wMi54KCksIG1fcDMueCgpKSAmJiBlcXVhbChtX3AzLnko
KSwgbV9wNC55KCkpICYmIGVxdWFsKG1fcDQueCgpLCBtX3AxLngoKSkpOwogfQogCiBib29sIEZs
b2F0UXVhZDo6Y29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiBwKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116761</attachid>
            <date>2011-11-28 08:02:57 -0800</date>
            <delta_ts>2011-11-28 11:26:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73040-20111128110255.patch</filename>
            <type>text/plain</type>
            <size>6597</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzdhYzIzNjRhYzg0MDYw
NDZlMzVmMmU4Y2VmNWRkODA1OGZiNGMxZi4uMWQ3NTk4ZDkzMGQ1ZGRhOWFkN2JiZTQzYzhlMTJj
YzE3Mzc0ZmJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0UXVhZDo6aXNS
ZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0
IEZsb2F0UXVhZFRlc3QuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpdGhpbkVwc2lsb24pOiBDaGVjayB0d28gdmFs
dWVzIGFyZSBhcyBjbG9zZSBhcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgZmxvYXRzLgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKTogVXNlIHdpdGhpbkVwc2lsb24o
KS4KKwogMjAxMS0xMS0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZSBldmFsdWF0aW9uIGRvZXNuJ3Qgd29yayB3
aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHBhZ2Ugd2l0aCBzZXZlcmFsIGZyYW1lcyB0byBhbm90aGVy
IG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwZGI3MmI0NGZlMjA4OTI1MzI1OWNm
NmY2YjJmMWY2ZGMyZGJiYzYyLi45NGQwZDEzMGU3YTI2ZGU3OWFhZDk4NGE2ZTQ0Mzg3ZmE1MDE4
NGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEx
LTI4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0
UXVhZDo6aXNSZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9GbG9hdFF1YWRUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMS0yNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1
cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IGRl
bGV0ZSBXZWJEZXZUb29sc0FnZW50Ojpmcm9udGVuZExvYWRlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggODMzZmE0NGY4MGMwMmNmNWM3
MDYwNzUyM2RkOGU4ZDhjZjBjYTk3Ni4uMWFkNzg3YmEyYzQ1N2ZmMDBlMDczYmRiMmJiN2FiZWY0
NTYzYTlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgogCi11c2luZyBzdGQ6Om1heDsKLXVz
aW5nIHN0ZDo6bWluOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04NSwxMCArODUsMTUgQEAgRmxvYXRSZWN0IEZsb2F0UXVhZDo6Ym91bmRpbmdCb3go
KSBjb25zdAogICAgIHJldHVybiBGbG9hdFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJv
dHRvbSAtIHRvcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCB3aXRoaW5FcHNpbG9uKGZsb2F0
IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIpIDwgbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCk7Cit9CisKIGJvb2wgRmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIueSgpID09
IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1fcDEueSgp
KQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0gbV9wMy54
KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkpOworICAg
IHJldHVybiAod2l0aGluRXBzaWxvbihtX3AxLngoKSwgbV9wMi54KCkpICYmIHdpdGhpbkVwc2ls
b24obV9wMi55KCksIG1fcDMueSgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueCgpLCBtX3A0Lngo
KSkgJiYgd2l0aGluRXBzaWxvbihtX3A0LnkoKSwgbV9wMS55KCkpKQorICAgICAgICB8fCAod2l0
aGluRXBzaWxvbihtX3AxLnkoKSwgbV9wMi55KCkpICYmIHdpdGhpbkVwc2lsb24obV9wMi54KCks
IG1fcDMueCgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueSgpLCBtX3A0LnkoKSkgJiYgd2l0aGlu
RXBzaWxvbihtX3A0LngoKSwgbV9wMS54KCkpKTsKIH0KIAogYm9vbCBGbG9hdFF1YWQ6OmNvbnRh
aW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGUwMTcxYWNkMTNhMWI5Y2MxOWRhYTUxYmJkM2YyM2E3N2Y2ZDg2NmMuLmUy
YjAxZjFhYWQzNDNmNWE2MzgyZmQxOGY5ZjFkMTc3ZTllODM0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtNjYsNiArNjYsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1
bGVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvRmxvYXRRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRl
c3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zsb2F0UXVh
ZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mOTQ5ZWQ0NzVhMjVhY2UyNWEwNWZmYjI0Yzc2Zjc1MmMxYzM3ODUyCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRU
ZXN0LmNwcApAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKy8vIEZJWE1FOiBJZiB3ZSBnZXQgdGhlIFRl
c3RXZWJLaXRBUEkgZnJhbWV3b3JrIHRvIGJyaW5nIGEgZnVsbCBGcmFtZSArIERPTSBzdGFjawor
Ly8gaW4gYSBwb3J0YWJsZSB3YXksIHRoaXMgdGVzdCBzaG91bGQgYmUgc2hhcmVkIHdpdGggYWxs
IHBvcnRzIQorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIK
KworI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlIDxndGVzdC9n
dGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworVEVT
VChGbG9hdFF1YWRUZXN0LCBJc1JlY3RpbGluZWFyVGVzdCkKK3sKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByZWN0aWxpbmVhclRyYW5zWzRdOworICAgIHJlY3RpbGluZWFyVHJhbnNbMV0ucm90
YXRlKDkwKTsKKyAgICByZWN0aWxpbmVhclRyYW5zWzJdLnJvdGF0ZSgxODApOworICAgIHJlY3Rp
bGluZWFyVHJhbnNbM10ucm90YXRlKDI3MCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7
ICsraSkgeworICAgICAgICBGbG9hdFF1YWQgcXVhZCA9IHJlY3RpbGluZWFyVHJhbnNbaV0ubWFw
UXVhZChGbG9hdFJlY3QoMCwgMCwgMTAwLCAxMDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHRydWUs
IHF1YWQuaXNSZWN0aWxpbmVhcigpKTsKKyAgICB9CisKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBub25SZWN0aWxpbmVhclRyYW5zWzhdOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbMF0ucm90
YXRlKDM1OS45OTkpOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbMV0ucm90YXRlKDAuMDAwMDAw
MSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1syXS5yb3RhdGUoODkuOTk5OTk5KTsKKyAgICBu
b25SZWN0aWxpbmVhclRyYW5zWzNdLnJvdGF0ZSg5MC4wMDAwMDAxKTsKKyAgICBub25SZWN0aWxp
bmVhclRyYW5zWzRdLnJvdGF0ZSgxNzkuOTk5OTk5KTsKKyAgICBub25SZWN0aWxpbmVhclRyYW5z
WzVdLnJvdGF0ZSgxODAuMDAwMDAwMSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1s2XS5yb3Rh
dGUoMjY5Ljk5OTk5OSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1s3XS5yb3RhdGUoMjcwLjAw
MDAwMDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA4OyArK2kpIHsKKyAgICAgICAgRmxv
YXRRdWFkIHF1YWQgPSBub25SZWN0aWxpbmVhclRyYW5zW2ldLm1hcFF1YWQoRmxvYXRSZWN0KDAs
IDAsIDEwMCwgMTAwKSk7CisgICAgICAgIEVYUEVDVF9FUShmYWxzZSwgcXVhZC5pc1JlY3RpbGlu
ZWFyKCkpOworICAgIH0KK30KKworfSAvLyBlbXB0eSBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116790</attachid>
            <date>2011-11-28 11:26:45 -0800</date>
            <delta_ts>2011-11-28 12:50:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73040-20111128142644.patch</filename>
            <type>text/plain</type>
            <size>6991</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzdhYzIzNjRhYzg0MDYw
NDZlMzVmMmU4Y2VmNWRkODA1OGZiNGMxZi4uMWQ3NTk4ZDkzMGQ1ZGRhOWFkN2JiZTQzYzhlMTJj
YzE3Mzc0ZmJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0UXVhZDo6aXNS
ZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0
IEZsb2F0UXVhZFRlc3QuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpdGhpbkVwc2lsb24pOiBDaGVjayB0d28gdmFs
dWVzIGFyZSBhcyBjbG9zZSBhcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgZmxvYXRzLgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKTogVXNlIHdpdGhpbkVwc2lsb24o
KS4KKwogMjAxMS0xMS0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZSBldmFsdWF0aW9uIGRvZXNuJ3Qgd29yayB3
aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHBhZ2Ugd2l0aCBzZXZlcmFsIGZyYW1lcyB0byBhbm90aGVy
IG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwZGI3MmI0NGZlMjA4OTI1MzI1OWNm
NmY2YjJmMWY2ZGMyZGJiYzYyLi45NGQwZDEzMGU3YTI2ZGU3OWFhZDk4NGE2ZTQ0Mzg3ZmE1MDE4
NGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEx
LTI4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0
UXVhZDo6aXNSZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9GbG9hdFF1YWRUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMS0yNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1
cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IGRl
bGV0ZSBXZWJEZXZUb29sc0FnZW50Ojpmcm9udGVuZExvYWRlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggODMzZmE0NGY4MGMwMmNmNWM3
MDYwNzUyM2RkOGU4ZDhjZjBjYTk3Ni4uMWFkNzg3YmEyYzQ1N2ZmMDBlMDczYmRiMmJiN2FiZWY0
NTYzYTlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgogCi11c2luZyBzdGQ6Om1heDsKLXVz
aW5nIHN0ZDo6bWluOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04NSwxMCArODUsMTUgQEAgRmxvYXRSZWN0IEZsb2F0UXVhZDo6Ym91bmRpbmdCb3go
KSBjb25zdAogICAgIHJldHVybiBGbG9hdFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJv
dHRvbSAtIHRvcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCB3aXRoaW5FcHNpbG9uKGZsb2F0
IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIpIDwgbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCk7Cit9CisKIGJvb2wgRmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIueSgpID09
IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1fcDEueSgp
KQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0gbV9wMy54
KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkpOworICAg
IHJldHVybiAod2l0aGluRXBzaWxvbihtX3AxLngoKSwgbV9wMi54KCkpICYmIHdpdGhpbkVwc2ls
b24obV9wMi55KCksIG1fcDMueSgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueCgpLCBtX3A0Lngo
KSkgJiYgd2l0aGluRXBzaWxvbihtX3A0LnkoKSwgbV9wMS55KCkpKQorICAgICAgICB8fCAod2l0
aGluRXBzaWxvbihtX3AxLnkoKSwgbV9wMi55KCkpICYmIHdpdGhpbkVwc2lsb24obV9wMi54KCks
IG1fcDMueCgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueSgpLCBtX3A0LnkoKSkgJiYgd2l0aGlu
RXBzaWxvbihtX3A0LngoKSwgbV9wMS54KCkpKTsKIH0KIAogYm9vbCBGbG9hdFF1YWQ6OmNvbnRh
aW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGUwMTcxYWNkMTNhMWI5Y2MxOWRhYTUxYmJkM2YyM2E3N2Y2ZDg2NmMuLmUy
YjAxZjFhYWQzNDNmNWE2MzgyZmQxOGY5ZjFkMTc3ZTllODM0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtNjYsNiArNjYsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1
bGVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvRmxvYXRRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRl
c3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zsb2F0UXVh
ZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42OTZlMWIzMjFkYTA5MWQyNjE1YTVhMzY2MzUxZDE2MjJjZTFhZGJjCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRU
ZXN0LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSB7CisKK1RFU1QoRmxvYXRRdWFkVGVzdCwgSXNSZWN0aWxpbmVhclRlc3Qp
Cit7CisgICAgY29uc3QgaW50IG51bVJlY3RpbGluZWFyID0gODsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByZWN0aWxpbmVhclRyYW5zW251bVJlY3RpbGluZWFyXTsKKyAgICByZWN0aWxpbmVh
clRyYW5zWzFdLnJvdGF0ZSg5MCk7CisgICAgcmVjdGlsaW5lYXJUcmFuc1syXS5yb3RhdGUoMTgw
KTsKKyAgICByZWN0aWxpbmVhclRyYW5zWzNdLnJvdGF0ZSgyNzApOworICAgIHJlY3RpbGluZWFy
VHJhbnNbNF0uc2tld1goMC4wMDAwMDAwMDAwMSk7CisgICAgcmVjdGlsaW5lYXJUcmFuc1s1XS5z
a2V3WSgwLjAwMDAwMDAwMDAxKTsKKyAgICByZWN0aWxpbmVhclRyYW5zWzZdLnNjYWxlKDAuMDAw
MDEpOworICAgIHJlY3RpbGluZWFyVHJhbnNbNl0ucm90YXRlKDE4MCk7CisgICAgcmVjdGlsaW5l
YXJUcmFuc1s3XS5zY2FsZSgxMDAwMDApOworICAgIHJlY3RpbGluZWFyVHJhbnNbN10ucm90YXRl
KDE4MCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJlY3RpbGluZWFyOyArK2kpIHsK
KyAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSByZWN0aWxpbmVhclRyYW5zW2ldLm1hcFF1YWQoRmxv
YXRSZWN0KDAuMDEwMTAxMDEsIDAuMDEwMTAxMDEsIDEwMC4wMTAxMDEwMSwgMTAwLjAxMDEwMTAx
KSk7CisgICAgICAgIEVYUEVDVF9FUSh0cnVlLCBxdWFkLmlzUmVjdGlsaW5lYXIoKSk7CisgICAg
fQorCisgICAgY29uc3QgaW50IG51bU5vblJlY3RpbGluZWFyID0gMTA7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbm9uUmVjdGlsaW5lYXJUcmFuc1tudW1Ob25SZWN0aWxpbmVhcl07CisgICAg
bm9uUmVjdGlsaW5lYXJUcmFuc1swXS5yb3RhdGUoMzU5Ljk5OSk7CisgICAgbm9uUmVjdGlsaW5l
YXJUcmFuc1sxXS5yb3RhdGUoMC4wMDAwMDAxKTsKKyAgICBub25SZWN0aWxpbmVhclRyYW5zWzJd
LnJvdGF0ZSg4OS45OTk5OTkpOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbM10ucm90YXRlKDkw
LjAwMDAwMDEpOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbNF0ucm90YXRlKDE3OS45OTk5OTkp
OworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbNV0ucm90YXRlKDE4MC4wMDAwMDAxKTsKKyAgICBu
b25SZWN0aWxpbmVhclRyYW5zWzZdLnJvdGF0ZSgyNjkuOTk5OTk5KTsKKyAgICBub25SZWN0aWxp
bmVhclRyYW5zWzddLnJvdGF0ZSgyNzAuMDAwMDAwMSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFu
c1s4XS5za2V3WCgwLjAwMDAxKTsKKyAgICBub25SZWN0aWxpbmVhclRyYW5zWzldLnNrZXdZKDAu
MDAwMDEpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Ob25SZWN0aWxpbmVhcjsgKytp
KSB7CisgICAgICAgIEZsb2F0UXVhZCBxdWFkID0gbm9uUmVjdGlsaW5lYXJUcmFuc1tpXS5tYXBR
dWFkKEZsb2F0UmVjdCgwLjAxMDEwMTAxLCAwLjAxMDEwMTAxLCAxMDAuMDEwMTAxMDEsIDEwMC4w
MTAxMDEwMSkpOworICAgICAgICBFWFBFQ1RfRVEoZmFsc2UsIHF1YWQuaXNSZWN0aWxpbmVhcigp
KTsKKyAgICB9Cit9CisKK30gLy8gZW1wdHkgbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116802</attachid>
            <date>2011-11-28 12:50:32 -0800</date>
            <delta_ts>2011-11-28 16:17:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-73040-20111128155030.patch</filename>
            <type>text/plain</type>
            <size>6983</size>
            <attacher name="Dana Jansens">danakj</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTAxMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzdhYzIzNjRhYzg0MDYw
NDZlMzVmMmU4Y2VmNWRkODA1OGZiNGMxZi4uMWQ3NTk4ZDkzMGQ1ZGRhOWFkN2JiZTQzYzhlMTJj
YzE3Mzc0ZmJiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDExLTExLTI4ICBEYW5h
IEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0UXVhZDo6aXNS
ZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlvbnMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdW5pdCB0ZXN0
IEZsb2F0UXVhZFRlc3QuY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndpdGhpbkVwc2lsb24pOiBDaGVjayB0d28gdmFs
dWVzIGFyZSBhcyBjbG9zZSBhcyBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgZmxvYXRzLgorICAgICAg
ICAoV2ViQ29yZTo6RmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKTogVXNlIHdpdGhpbkVwc2lsb24o
KS4KKwogMjAxMS0xMS0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgV2ViIEluc3BlY3RvcjogY29uc29sZSBldmFsdWF0aW9uIGRvZXNuJ3Qgd29yayB3
aGVuIG5hdmlnYXRpbmcgZnJvbSBhIHBhZ2Ugd2l0aCBzZXZlcmFsIGZyYW1lcyB0byBhbm90aGVy
IG9uZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwZGI3MmI0NGZlMjA4OTI1MzI1OWNm
NmY2YjJmMWY2ZGMyZGJiYzYyLi45NGQwZDEzMGU3YTI2ZGU3OWFhZDk4NGE2ZTQ0Mzg3ZmE1MDE4
NGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDExLTEx
LTI4ICBEYW5hIEphbnNlbnMgIDxkYW5ha2pAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEZsb2F0
UXVhZDo6aXNSZWN0aWxpbmVhcigpIHJldHVybnMgZmFsc2UgZm9yIDE4MGRlZ3JlZSByb3RhdGlv
bnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTczMDQw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0cy9GbG9hdFF1YWRUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0xMS0yNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1
cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IGRl
bGV0ZSBXZWJEZXZUb29sc0FnZW50Ojpmcm9udGVuZExvYWRlZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKaW5kZXggODMzZmE0NGY4MGMwMmNmNWM3
MDYwNzUyM2RkOGU4ZDhjZjBjYTk3Ni4uMWFkNzg3YmEyYzQ1N2ZmMDBlMDczYmRiMmJiN2FiZWY0
NTYzYTlhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRRdWFkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1
YWQuY3BwCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAKICNpbmNs
dWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bGltaXRzPgogCi11c2luZyBzdGQ6Om1heDsKLXVz
aW5nIHN0ZDo6bWluOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC04NSwxMCArODUsMTUgQEAgRmxvYXRSZWN0IEZsb2F0UXVhZDo6Ym91bmRpbmdCb3go
KSBjb25zdAogICAgIHJldHVybiBGbG9hdFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJv
dHRvbSAtIHRvcCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCB3aXRoaW5FcHNpbG9uKGZsb2F0
IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGZhYnMoYSAtIGIpIDwgbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjplcHNpbG9uKCk7Cit9CisKIGJvb2wgRmxvYXRRdWFkOjppc1JlY3RpbGluZWFyKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gKG1fcDEueCgpID09IG1fcDIueCgpICYmIG1fcDIueSgpID09
IG1fcDMueSgpICYmIG1fcDMueCgpID09IG1fcDQueCgpICYmIG1fcDQueSgpID09IG1fcDEueSgp
KQotICAgICAgICB8fCAobV9wMS55KCkgPT0gbV9wMi55KCkgJiYgbV9wMi54KCkgPT0gbV9wMy54
KCkgJiYgbV9wMy55KCkgPT0gbV9wNC55KCkgJiYgbV9wNC54KCkgPT0gbV9wMS54KCkpOworICAg
IHJldHVybiAod2l0aGluRXBzaWxvbihtX3AxLngoKSwgbV9wMi54KCkpICYmIHdpdGhpbkVwc2ls
b24obV9wMi55KCksIG1fcDMueSgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueCgpLCBtX3A0Lngo
KSkgJiYgd2l0aGluRXBzaWxvbihtX3A0LnkoKSwgbV9wMS55KCkpKQorICAgICAgICB8fCAod2l0
aGluRXBzaWxvbihtX3AxLnkoKSwgbV9wMi55KCkpICYmIHdpdGhpbkVwc2lsb24obV9wMi54KCks
IG1fcDMueCgpKSAmJiB3aXRoaW5FcHNpbG9uKG1fcDMueSgpLCBtX3A0LnkoKSkgJiYgd2l0aGlu
RXBzaWxvbihtX3A0LngoKSwgbV9wMS54KCkpKTsKIH0KIAogYm9vbCBGbG9hdFF1YWQ6OmNvbnRh
aW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpCmluZGV4IGUwMTcxYWNkMTNhMWI5Y2MxOWRhYTUxYmJkM2YyM2E3N2Y2ZDg2NmMuLmUy
YjAxZjFhYWQzNDNmNWE2MzgyZmQxOGY5ZjFkMTc3ZTllODM0MmEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQpAQCAtNjYsNiArNjYsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2No
ZWR1bGVyU3RhdGVNYWNoaW5lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDU2NoZWR1
bGVyVGVzdENvbW1vbi5oJywKICAgICAgICAgICAgICd0ZXN0cy9DQ1RocmVhZFRhc2tUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvRmxvYXRRdWFkVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRl
c3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zsb2F0UXVh
ZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRUZXN0LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi43NjMzZGNmMTVjZjUyYmEyMjIxZjVjZjA0Y2M3NDFkMGUzMzI3ZTBmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRU
ZXN0LmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSB7CisKK1RFU1QoRmxvYXRRdWFkVGVzdCwgSXNSZWN0aWxpbmVhclRlc3Qp
Cit7CisgICAgY29uc3QgaW50IG51bVJlY3RpbGluZWFyID0gODsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCByZWN0aWxpbmVhclRyYW5zW251bVJlY3RpbGluZWFyXTsKKyAgICByZWN0aWxpbmVh
clRyYW5zWzFdLnJvdGF0ZSg5MCk7CisgICAgcmVjdGlsaW5lYXJUcmFuc1syXS5yb3RhdGUoMTgw
KTsKKyAgICByZWN0aWxpbmVhclRyYW5zWzNdLnJvdGF0ZSgyNzApOworICAgIHJlY3RpbGluZWFy
VHJhbnNbNF0uc2tld1goMC4wMDAwMDAwMDAwMSk7CisgICAgcmVjdGlsaW5lYXJUcmFuc1s1XS5z
a2V3WSgwLjAwMDAwMDAwMDAxKTsKKyAgICByZWN0aWxpbmVhclRyYW5zWzZdLnNjYWxlKDAuMDAw
MDEpOworICAgIHJlY3RpbGluZWFyVHJhbnNbNl0ucm90YXRlKDE4MCk7CisgICAgcmVjdGlsaW5l
YXJUcmFuc1s3XS5zY2FsZSgxMDAwMDApOworICAgIHJlY3RpbGluZWFyVHJhbnNbN10ucm90YXRl
KDE4MCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVJlY3RpbGluZWFyOyArK2kpIHsK
KyAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSByZWN0aWxpbmVhclRyYW5zW2ldLm1hcFF1YWQoRmxv
YXRSZWN0KDAuMDEwMTAxMDEsIDAuMDEwMTAxMDEsIDEwMC4wMTAxMDEwMSwgMTAwLjAxMDEwMTAx
KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHF1YWQuaXNSZWN0aWxpbmVhcigpKTsKKyAgICB9CisK
KyAgICBjb25zdCBpbnQgbnVtTm9uUmVjdGlsaW5lYXIgPSAxMDsKKyAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBub25SZWN0aWxpbmVhclRyYW5zW251bU5vblJlY3RpbGluZWFyXTsKKyAgICBub25S
ZWN0aWxpbmVhclRyYW5zWzBdLnJvdGF0ZSgzNTkuOTk5KTsKKyAgICBub25SZWN0aWxpbmVhclRy
YW5zWzFdLnJvdGF0ZSgwLjAwMDAwMDEpOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbMl0ucm90
YXRlKDg5Ljk5OTk5OSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1szXS5yb3RhdGUoOTAuMDAw
MDAwMSk7CisgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1s0XS5yb3RhdGUoMTc5Ljk5OTk5OSk7Cisg
ICAgbm9uUmVjdGlsaW5lYXJUcmFuc1s1XS5yb3RhdGUoMTgwLjAwMDAwMDEpOworICAgIG5vblJl
Y3RpbGluZWFyVHJhbnNbNl0ucm90YXRlKDI2OS45OTk5OTkpOworICAgIG5vblJlY3RpbGluZWFy
VHJhbnNbN10ucm90YXRlKDI3MC4wMDAwMDAxKTsKKyAgICBub25SZWN0aWxpbmVhclRyYW5zWzhd
LnNrZXdYKDAuMDAwMDEpOworICAgIG5vblJlY3RpbGluZWFyVHJhbnNbOV0uc2tld1koMC4wMDAw
MSk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU5vblJlY3RpbGluZWFyOyArK2kpIHsK
KyAgICAgICAgRmxvYXRRdWFkIHF1YWQgPSBub25SZWN0aWxpbmVhclRyYW5zW2ldLm1hcFF1YWQo
RmxvYXRSZWN0KDAuMDEwMTAxMDEsIDAuMDEwMTAxMDEsIDEwMC4wMTAxMDEwMSwgMTAwLjAxMDEw
MTAxKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRShxdWFkLmlzUmVjdGlsaW5lYXIoKSk7CisgICAg
fQorfQorCit9IC8vIGVtcHR5IG5hbWVzcGFjZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>