<?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>34538</bug_id>
          
          <creation_ts>2010-02-03 12:18:18 -0800</creation_ts>
          <short_desc>audio engine: add Complex number class</short_desc>
          <delta_ts>2010-02-11 16:20:20 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>OS X 10.5</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>0</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187467</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 12:18:18 -0800</bug_when>
    <thetext>The audio engine needs a class representing a complex number.  It&apos;s used in various DSP / math algorithms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187485</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-02-03 13:09:00 -0800</bug_when>
    <thetext>Are there reasons we can&apos;t use std::complex other than the normal WebCore rule of not using stdlib types. If it is usable for your purposes, I think we should consider augmenting the rule for this, like we do for std::pair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187486</commentid>
    <comment_count>2</comment_count>
      <attachid>48062</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 13:12:34 -0800</bug_when>
    <thetext>Created attachment 48062
patch for Complex number class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187488</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 13:15:30 -0800</bug_when>
    <thetext>Hi Sam, I anticipate extending this class in the future for various DSP algorithms, so I&apos;d prefer to use our own implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187492</commentid>
    <comment_count>4</comment_count>
      <attachid>48062</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-03 13:21:52 -0800</bug_when>
    <thetext>Comment on attachment 48062
patch for Complex number class

&gt; +    Complex() : m_real(0.0), m_imag(0.0) { }

We try to keep abbreviations to a minimum in WebKit and use words instead. So this would normally be called &quot;imaginary&quot;, not &quot;imag&quot;.

&gt; +    double abs() const { return sqrt(m_real*m_real + m_imag*m_imag); }

We put spaces around operators like &quot;*&quot;.

&gt; +    double magnitude() const { return abs(); }

Do we really need both the names &quot;abs()&quot; and &quot;magnitude()&quot;? How about choosing just one? I suggest &quot;magnitude&quot;.

&gt; +    void setMagnitudePhase(double mag, double phase)
&gt; +    {
&gt; +        m_real = mag * cos(phase);
&gt; +        m_imag = mag * sin(phase);
&gt; +    }

It seems like we&apos;d want this to be a function that returns a Complex, rather than a setter.

&gt; +protected:
&gt; +    double m_real;
&gt; +    double m_imag;

private, not protected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187495</commentid>
    <comment_count>5</comment_count>
      <attachid>48065</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 13:36:42 -0800</bug_when>
    <thetext>Created attachment 48065
addresses Darin Adler&apos;s initial comments

Hi Darin, thanks for having such a quick look!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187496</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-03 13:38:58 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi Sam, I anticipate extending this class in the future for various DSP
&gt; algorithms, so I&apos;d prefer to use our own implementation.

I think we can add lots of functions that work with std::complex too, though, so I’m not sure a new class is the right way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187500</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 13:47:01 -0800</bug_when>
    <thetext>subclassing std::complex to add additional methods looks like a problem since the ivars are private.  I&apos;d prefer, if at all possible, to have something lightweight and more easily modifiable to our needs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187502</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-03 13:51:00 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; subclassing std::complex to add additional methods looks like a problem since
&gt; the ivars are private.  I&apos;d prefer, if at all possible, to have something
&gt; lightweight and more easily modifiable to our needs.

The technique is not subclassing. It&apos;s functions that take and return complex objects.

I hear you expressing your preference. But I don’t see a good reason to consider std::complex heavyweight. And it comes with many of the functions you’d want to use already implemented. We should really consider it seriously before adding our own.

Maybe you could show some coding examples to clarify why the code ends up looking so much cleaner with your class than if you used std::complex?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187506</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 13:58:44 -0800</bug_when>
    <thetext>OK - don&apos;t want to rock the boat too much :)
I&apos;m sure it will be possible to adapt to std::complex.  This will probably be fine for the current engine code.  If it starts to get too messy, as I&apos;ve been fearing, then we can revisit it later.

Thanks for having a look - I guess we can close out this bug...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187528</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 16:13:27 -0800</bug_when>
    <thetext>Closing as wontfix per Chris&apos; comment above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187530</commentid>
    <comment_count>11</comment_count>
      <attachid>48065</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-03 16:14:56 -0800</bug_when>
    <thetext>Comment on attachment 48065
addresses Darin Adler&apos;s initial comments

Clearing review flag per Chris&apos;s above comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187542</commentid>
    <comment_count>12</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-03 16:24:07 -0800</bug_when>
    <thetext>Sorry, I&apos;m re-opening this.  I posted to webkit-dev with the problems with std::complex - re-pasting here:

In the process of switching my code over to use std::complex I noticed a conflict with isinf(), isnan(), etc.

The problem is that simply including:

#include &lt;complex&gt;

breaks the isinf(), isnan() functions (and some others I think).  So now I&apos;m getting compile errors in any header files which use these functions, such as WebGLFloatArray.h (which I need to include for music visualizer stuff).
I&apos;m a bit queasy about all the side-effects of simply including &lt;complex&gt; and am not even sure how to address the current situation, short of switching all of webkit over to using std::isinf, std::isnan, etc.

Now I remember having similar problems with this in other codebases I&apos;ve worked on, as the effects of &lt;complex&gt; seem to be viral...

Unless somebody has a reasonable fix for the sinister side-effects of including
&lt;complex&gt; I&apos;d like my patch to be re-considered.

Thanks,
Chris</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187885</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-04 11:59:10 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; So now I&apos;m
&gt; getting compile errors in any header files which use these functions, such as
&gt; WebGLFloatArray.h

Lets start by fixing those -- if it really ends up being too much of a pain we can fall back. I don’t want to give up at the first sign of trouble. It’s great to not have to reinvent the C++ library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187923</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-04 13:41:52 -0800</bug_when>
    <thetext>Hi Darin, I&apos;ve been trying to move forward by changing all the uses of isnan() in the WebGL header files to std::isnan().  This also required including &lt;cmath&gt; in all of these header files so that std::isnan() is defined.

But now this appears to be having a cascading effect, and this creates a compile error in
JSImmediate.h (a use of the signbit() function) in JavaScriptCore.  After including &lt;cmath&gt; here and using std::signbit(), I&apos;m now getting a compile error in CachedResource ( function isfinite() ).  I&apos;ve found that the isfinite() function is used many places in the codebase, as well as isinf(), isnan(), etc. etc.

So, I&apos;m not sure what to do.  I&apos;m very uncomfortable trying to do a massive munge to convert the whole codebase to be &lt;cmath&gt; friendly since I&apos;m very new here, especially considering possible differences across platforms.  I think it would be a very large number of changes.

What do you think we should do?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187928</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-04 13:50:00 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Hi Darin, I&apos;ve been trying to move forward by changing all the uses of isnan()
&gt; in the WebGL header files to std::isnan().  This also required including
&gt; &lt;cmath&gt; in all of these header files so that std::isnan() is defined.

Could you post your patch in progress somewhere so I can spend a little time on this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187931</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-04 13:59:30 -0800</bug_when>
    <thetext>One of the first things I noticed is that many of those isnan checks are unneeded, because converting NaN to an integer already yields a zero. Not directly relevant, but something I spotted while looking at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189470</commentid>
    <comment_count>17</comment_count>
      <attachid>48516</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-10 14:37:19 -0800</bug_when>
    <thetext>Created attachment 48516
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189472</commentid>
    <comment_count>18</comment_count>
      <attachid>48516</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-10 14:40:56 -0800</bug_when>
    <thetext>Comment on attachment 48516
Patch

I&apos;ve removed my original patch where I created a new complex number class which was defined in Complex.h.  Instead, I&apos;ve added a utilities header for adding new methods on std::complex as recommended by Darin Adler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189516</commentid>
    <comment_count>19</comment_count>
      <attachid>48516</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-10 16:13:18 -0800</bug_when>
    <thetext>Comment on attachment 48516
Patch

I like everything about this except for the suffix Utilities. I think this file would be just fine named Complex.h -- named after the typedef that&apos;s in it.

&gt; +#include &lt;stdio.h&gt;

Why include this? We should not.

I&apos;m going to say review- because I think we should not choose this filename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189538</commentid>
    <comment_count>20</comment_count>
      <attachid>48533</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-10 17:32:41 -0800</bug_when>
    <thetext>Created attachment 48533
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189540</commentid>
    <comment_count>21</comment_count>
      <attachid>48533</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2010-02-10 17:34:30 -0800</bug_when>
    <thetext>Comment on attachment 48533
Patch

changed filename from ComplexUtilities.h to Complex.h
also removed #include &lt;stdio.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189826</commentid>
    <comment_count>22</comment_count>
      <attachid>48533</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-11 16:20:08 -0800</bug_when>
    <thetext>Comment on attachment 48533
Patch

Clearing flags on attachment: 48533

Committed r54684: &lt;http://trac.webkit.org/changeset/54684&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189827</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-11 16:20:20 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48062</attachid>
            <date>2010-02-03 13:12:34 -0800</date>
            <delta_ts>2010-02-03 13:36:42 -0800</delta_ts>
            <desc>patch for Complex number class</desc>
            <filename>ttt</filename>
            <type>text/plain</type>
            <size>4898</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDItMDMgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBDb21wbGV4IG51bWJlciBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1MzgKKworICAgICAgICBObyB0ZXN0cyBz
aW5jZSBubyBqYXZhc2NyaXB0IEFQSSB5ZXQgZm9yIGF1ZGlvIGVuZ2luZQorCisgICAgICAgICog
cGxhdGZvcm0vYXVkaW86IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0NvbXBsZXgu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4OjpDb21wbGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBsZXg6OnJlYWwpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6aW1h
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4OjpzZXRSZWFsKToKKyAgICAgICAgKFdlYkNv
cmU6OkNvbXBsZXg6OnNldEltYWcpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6YWJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXg6Om1hZ25pdHVkZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wbGV4OjpwaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4Ojpjb25qdWdhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6c2V0TWFnbml0dWRlUGhhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleDo6cHJpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6
cHJpbnRNYWdQaGFzZSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcispOgorICAgICAgICAo
V2ViQ29yZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpvcGVyYXRvciAvICk6CisKIDIwMTAtMDItMDMgIERyZXcgV2lsc29uICA8
YXR3aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9z
a3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbXBsZXguaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0NvbXBsZXguaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29tcGxleC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBDb21wbGV4X2gKKyNkZWZpbmUgQ29tcGxleF9oCisKKyNpbmNsdWRl
IDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDb21wbGV4IHsKK3B1YmxpYzogICAKKyAgICBDb21wbGV4KCkgOiBtX3JlYWwoMC4wKSwg
bV9pbWFnKDAuMCkgeyB9CisgICAgQ29tcGxleChkb3VibGUgcmVhbCwgZG91YmxlIGltYWcpIDog
bV9yZWFsKHJlYWwpLCBtX2ltYWcoaW1hZykgeyB9CisKKyAgICBkb3VibGUgcmVhbCgpIGNvbnN0
IHsgcmV0dXJuIG1fcmVhbDsgfQorICAgIGRvdWJsZSBpbWFnKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnOyB9CisgICAgdm9pZCBzZXRSZWFsKGRvdWJsZSByZWFsKSB7IG1fcmVhbCA9IHJlYWw7IH0K
KyAgICB2b2lkIHNldEltYWcoZG91YmxlIGltYWcpIHsgbV9pbWFnID0gaW1hZzsgfQorICAgIAor
ICAgIGRvdWJsZSBhYnMoKSBjb25zdCB7IHJldHVybiBzcXJ0KG1fcmVhbCptX3JlYWwgKyBtX2lt
YWcqbV9pbWFnKTsgfQorICAgIGRvdWJsZSBtYWduaXR1ZGUoKSBjb25zdCB7IHJldHVybiBhYnMo
KTsgfQorICAgIGRvdWJsZSBwaGFzZSgpIGNvbnN0IHsgcmV0dXJuIGF0YW4yKG1faW1hZywgbV9y
ZWFsKTsgfQorCisgICAgQ29tcGxleCBjb25qdWdhdGUoKSBjb25zdCB7IHJldHVybiBDb21wbGV4
KG1fcmVhbCwgLW1faW1hZyk7IH0KKworICAgIHZvaWQgc2V0TWFnbml0dWRlUGhhc2UoZG91Ymxl
IG1hZywgZG91YmxlIHBoYXNlKQorICAgIHsKKyAgICAgICAgbV9yZWFsID0gbWFnICogY29zKHBo
YXNlKTsKKyAgICAgICAgbV9pbWFnID0gbWFnICogc2luKHBoYXNlKTsKKyAgICB9CisKKyAgICAv
LyBGb3IgZGVidWdnaW5nCisgICAgdm9pZCBwcmludCgpIGNvbnN0IHsgcHJpbnRmKCIoJWYgJWYp
IiwgbV9yZWFsLCBtX2ltYWcpOyB9CisgICAgdm9pZCBwcmludE1hZ1BoYXNlKCkgY29uc3QgeyBw
cmludGYoIiglZiAlZikiLCBhYnMoKSwgcGhhc2UoKSk7IH0KKworcHJvdGVjdGVkOgorICAgIGRv
dWJsZSBtX3JlYWw7CisgICAgZG91YmxlIG1faW1hZzsKK307CisKK2lubGluZSBDb21wbGV4IG9w
ZXJhdG9yKyhjb25zdCBDb21wbGV4JiB2MSwgY29uc3QgQ29tcGxleCYgdjIpCit7CisgICAgcmV0
dXJuIENvbXBsZXgodjEucmVhbCgpICsgdjIucmVhbCgpLCB2MS5pbWFnKCkgKyB2Mi5pbWFnKCkp
OworfQorCitpbmxpbmUgQ29tcGxleCBvcGVyYXRvci0oY29uc3QgQ29tcGxleCYgdjEsIGNvbnN0
IENvbXBsZXgmIHYyKQoreworICAgIHJldHVybiBDb21wbGV4KHYxLnJlYWwoKSAtIHYyLnJlYWwo
KSwgdjEuaW1hZygpIC0gdjIuaW1hZygpKTsKK30KKworaW5saW5lIENvbXBsZXggb3BlcmF0b3Iq
KGRvdWJsZSBrLCBjb25zdCBDb21wbGV4JiB2KQoreworICAgIHJldHVybiBDb21wbGV4KGsgKiB2
LnJlYWwoKSwgayAqIHYuaW1hZygpKTsKK30KKworaW5saW5lIENvbXBsZXggb3BlcmF0b3IqKGNv
bnN0IENvbXBsZXgmIHYxLCBjb25zdCBDb21wbGV4JiB2MikKK3sKKyAgICByZXR1cm4gQ29tcGxl
eCh2MS5yZWFsKCkgKiB2Mi5yZWFsKCkgLSB2MS5pbWFnKCkgKiB2Mi5pbWFnKCksIHYxLnJlYWwo
KSAqIHYyLmltYWcoKSArIHYxLmltYWcoKSAqIHYyLnJlYWwoKSk7Cit9CisKK2lubGluZSBDb21w
bGV4IG9wZXJhdG9yIC8gKGNvbnN0IENvbXBsZXgmIHYxLCBjb25zdCBDb21wbGV4JiB2MikKK3sK
KyAgICBDb21wbGV4IGM7CisgICAgYy5zZXRNYWduaXR1ZGVQaGFzZSh2MS5tYWduaXR1ZGUoKSAv
IHYyLm1hZ25pdHVkZSgpLCB2MS5waGFzZSgpIC0gdjIucGhhc2UoKSk7CisgICAgcmV0dXJuIGM7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIENvbXBsZXhfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48065</attachid>
            <date>2010-02-03 13:36:42 -0800</date>
            <delta_ts>2010-02-10 14:37:11 -0800</delta_ts>
            <desc>addresses Darin Adler&apos;s initial comments</desc>
            <filename>ttt</filename>
            <type>text/plain</type>
            <size>6129</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDI5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMTAtMDItMDMgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBh
dWRpbyBlbmdpbmU6IGFkZCBDb21wbGV4IG51bWJlciBjbGFzcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1MzgKKworICAgICAgICBObyB0ZXN0cyBz
aW5jZSBubyBqYXZhc2NyaXB0IEFQSSB5ZXQgZm9yIGF1ZGlvIGVuZ2luZQorCisgICAgICAgICog
RGVyaXZlZFNvdXJjZXMuY3BwOiBDb3BpZWQgZnJvbSBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLmNw
cC4KKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUuZ3lw
L1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFdmVu
dFRhcmdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvRXZlbnRUYXJnZXQpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTU9iamVjdHNJbmNsdWRlLmg6CisgICAg
ICAgICogYmluZGluZ3MvdjgvRGVyaXZlZFNvdXJjZXNBbGxJbk9uZS5jcHA6CisgICAgICAgICog
YmluZGluZ3MvdjgvVjhET01XcmFwcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvVjhJbmRleC5jcHA6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhJbmRleC5oOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAg
ICogY29uZmlnLmg6CisgICAgICAgICogZG9tL0V2ZW50VGFyZ2V0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50VGFyZ2V0Ojp0b0NhY2hlZEF1ZGlvUmVxdWVzdCk6CisgICAgICAgICogZG9t
L0V2ZW50VGFyZ2V0Lmg6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjppbmxpbmVUYWdMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50
OjppbkVpdGhlclRhZ0xpc3QpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmNoZWNr
RFREKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWdOYW1lcy5pbjoKKyAgICAgICAgKiBwYWdlL0RP
TVdpbmRvdy5pZGw6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW86IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2F1ZGlvL0NvbXBsZXguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4OjpDb21wbGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXg6OnJlYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleDo6aW1hZyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4Ojpz
ZXRSZWFsKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXg6OnNldEltYWcpOgorICAgICAgICAo
V2ViQ29yZTo6Q29tcGxleDo6YWJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXg6Om1hZ25p
dHVkZSk6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4OjpwaGFzZSk6CisgICAgICAgIChXZWJD
b3JlOjpDb21wbGV4Ojpjb25qdWdhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6c2V0
TWFnbml0dWRlUGhhc2UpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleDo6cHJpbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleDo6cHJpbnRNYWdQaGFzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpvcGVyYXRvcispOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3ItKToKKyAgICAgICAgKFdl
YkNvcmU6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciAvICk6CisKIDIw
MTAtMDItMDMgIERyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0NvbXBsZXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Nv
bXBsZXguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQ29tcGxleC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDb21wbGV4X2gKKyNkZWZp
bmUgQ29tcGxleF9oCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb21wbGV4IHsKK3B1YmxpYzogICAKKyAgICBD
b21wbGV4KCkgOiBtX3JlYWwoMC4wKSwgbV9pbWFnaW5hcnkoMC4wKSB7IH0KKyAgICBDb21wbGV4
KGRvdWJsZSByZWFsLCBkb3VibGUgaW1hZ2luYXJ5KSA6IG1fcmVhbChyZWFsKSwgbV9pbWFnaW5h
cnkoaW1hZ2luYXJ5KSB7IH0KKworICAgIGRvdWJsZSByZWFsKCkgY29uc3QgeyByZXR1cm4gbV9y
ZWFsOyB9CisgICAgZG91YmxlIGltYWdpbmFyeSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2luYXJ5
OyB9CisgICAgdm9pZCBzZXRSZWFsKGRvdWJsZSByZWFsKSB7IG1fcmVhbCA9IHJlYWw7IH0KKyAg
ICB2b2lkIHNldEltYWdpbmFyeShkb3VibGUgaW1hZ2luYXJ5KSB7IG1faW1hZ2luYXJ5ID0gaW1h
Z2luYXJ5OyB9CisgICAgCisgICAgZG91YmxlIG1hZ25pdHVkZSgpIGNvbnN0IHsgcmV0dXJuIHNx
cnQobV9yZWFsICogbV9yZWFsICsgbV9pbWFnaW5hcnkgKiBtX2ltYWdpbmFyeSk7IH0KKyAgICBk
b3VibGUgcGhhc2UoKSBjb25zdCB7IHJldHVybiBhdGFuMihtX2ltYWdpbmFyeSwgbV9yZWFsKTsg
fQorCisgICAgQ29tcGxleCBjb25qdWdhdGUoKSBjb25zdCB7IHJldHVybiBDb21wbGV4KG1fcmVh
bCwgLW1faW1hZ2luYXJ5KTsgfQorCisgICAgc3RhdGljIENvbXBsZXggY29tcGxleEZyb21NYWdu
aXR1ZGVQaGFzZShkb3VibGUgbWFnbml0dWRlLCBkb3VibGUgcGhhc2UpCisgICAgeworICAgICAg
ICBkb3VibGUgcmVhbCA9IG1hZ25pdHVkZSAqIGNvcyhwaGFzZSk7CisgICAgICAgIGRvdWJsZSBp
bWFnaW5hcnkgPSBtYWduaXR1ZGUgKiBzaW4ocGhhc2UpOworICAgICAgICByZXR1cm4gQ29tcGxl
eChyZWFsLCBpbWFnaW5hcnkpOworICAgIH0KKworICAgIC8vIEZvciBkZWJ1Z2dpbmcKKyAgICB2
b2lkIHByaW50KCkgY29uc3QgeyBwcmludGYoIiglZiAlZikiLCBtX3JlYWwsIG1faW1hZ2luYXJ5
KTsgfQorICAgIHZvaWQgcHJpbnRNYWduaXR1ZGVQaGFzZSgpIGNvbnN0IHsgcHJpbnRmKCIoJWYg
JWYpIiwgbWFnbml0dWRlKCksIHBoYXNlKCkpOyB9CisKK3ByaXZhdGU6CisgICAgZG91YmxlIG1f
cmVhbDsKKyAgICBkb3VibGUgbV9pbWFnaW5hcnk7Cit9OworCitpbmxpbmUgQ29tcGxleCBvcGVy
YXRvcisoY29uc3QgQ29tcGxleCYgdjEsIGNvbnN0IENvbXBsZXgmIHYyKQoreworICAgIHJldHVy
biBDb21wbGV4KHYxLnJlYWwoKSArIHYyLnJlYWwoKSwgdjEuaW1hZ2luYXJ5KCkgKyB2Mi5pbWFn
aW5hcnkoKSk7Cit9CisKK2lubGluZSBDb21wbGV4IG9wZXJhdG9yLShjb25zdCBDb21wbGV4JiB2
MSwgY29uc3QgQ29tcGxleCYgdjIpCit7CisgICAgcmV0dXJuIENvbXBsZXgodjEucmVhbCgpIC0g
djIucmVhbCgpLCB2MS5pbWFnaW5hcnkoKSAtIHYyLmltYWdpbmFyeSgpKTsKK30KKworaW5saW5l
IENvbXBsZXggb3BlcmF0b3IqKGRvdWJsZSBrLCBjb25zdCBDb21wbGV4JiB2KQoreworICAgIHJl
dHVybiBDb21wbGV4KGsgKiB2LnJlYWwoKSwgayAqIHYuaW1hZ2luYXJ5KCkpOworfQorCitpbmxp
bmUgQ29tcGxleCBvcGVyYXRvciooY29uc3QgQ29tcGxleCYgdjEsIGNvbnN0IENvbXBsZXgmIHYy
KQoreworICAgIHJldHVybiBDb21wbGV4KHYxLnJlYWwoKSAqIHYyLnJlYWwoKSAtIHYxLmltYWdp
bmFyeSgpICogdjIuaW1hZ2luYXJ5KCksIHYxLnJlYWwoKSAqIHYyLmltYWdpbmFyeSgpICsgdjEu
aW1hZ2luYXJ5KCkgKiB2Mi5yZWFsKCkpOworfQorCitpbmxpbmUgQ29tcGxleCBvcGVyYXRvciAv
IChjb25zdCBDb21wbGV4JiB2MSwgY29uc3QgQ29tcGxleCYgdjIpCit7CisgICAgcmV0dXJuIENv
bXBsZXg6OmNvbXBsZXhGcm9tTWFnbml0dWRlUGhhc2UodjEubWFnbml0dWRlKCkgLyB2Mi5tYWdu
aXR1ZGUoKSwgdjEucGhhc2UoKSAtIHYyLnBoYXNlKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBDb21wbGV4X2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48516</attachid>
            <date>2010-02-10 14:37:19 -0800</date>
            <delta_ts>2010-02-10 17:32:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34538-20100210143718.patch</filename>
            <type>text/plain</type>
            <size>2779</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA1NTMzNTBjLi4zMjRlZWRhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTAtMDItMTAgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhdWRpbyBlbmdpbmU6
IGFkZCBjb21wbGV4IG51bWJlciB1dGlsaXR5IGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NTM4CisKKyAgICAgICAgKiB3dGYvQ29tcGxleFV0
aWxpdGllcy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBsZXhGcm9tTWFnbml0dWRl
UGhhc2UpOgorCiAyMDEwLTAyLTA5ICBKb2huIFN1bGxpdmFuICA8c3VsbGl2YW5AYXBwbGUuY29t
PgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDc3
MgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXhVdGlsaXRpZXMuaCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9Db21wbGV4VXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUK
aW5kZXggMDAwMDAwMC4uM2M0NDMzMwotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9Db21wbGV4VXRpbGl0aWVzLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ29tcGxl
eFV0aWxpdGllc19oCisjZGVmaW5lIENvbXBsZXhVdGlsaXRpZXNfaAorCisjaW5jbHVkZSA8Y29t
cGxleD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBDb21w
bGV4OworCitpbmxpbmUgQ29tcGxleCBjb21wbGV4RnJvbU1hZ25pdHVkZVBoYXNlKGRvdWJsZSBt
YWduaXR1ZGUsIGRvdWJsZSBwaGFzZSkKK3sKKyAgICByZXR1cm4gQ29tcGxleChtYWduaXR1ZGUg
KiBjb3MocGhhc2UpLCBtYWduaXR1ZGUgKiBzaW4ocGhhc2UpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gQ29tcGxleFV0aWxpdGllc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48533</attachid>
            <date>2010-02-10 17:32:41 -0800</date>
            <delta_ts>2010-02-11 16:20:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34538-20100210173240.patch</filename>
            <type>text/plain</type>
            <size>2689</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA1NTMzNTBjLi42Yjc1ZjYxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTAtMDItMTAgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBhdWRpbyBlbmdpbmU6
IGFkZCBDb21wbGV4IG51bWJlciBjbGFzcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1MzgKKworICAgICAgICAqIHd0Zi9Db21wbGV4Lmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y29tcGxleEZyb21NYWduaXR1ZGVQaGFzZSk6CisKIDIwMTAt
MDItMDkgIEpvaG4gU3VsbGl2YW4gIDxzdWxsaXZhbkBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzcyCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS93dGYvQ29tcGxleC5oIGIvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXgu
aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5jZmQxZDIwCi0tLSAvZGV2L251
bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0NvbXBsZXguaApAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBDb21wbGV4X2gKKyNkZWZpbmUgQ29tcGxleF9oCisKKyNpbmNsdWRlIDxjb21wbGV4
PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBDb21wbGV4OworCitpbmxpbmUgQ29tcGxleCBj
b21wbGV4RnJvbU1hZ25pdHVkZVBoYXNlKGRvdWJsZSBtYWduaXR1ZGUsIGRvdWJsZSBwaGFzZSkK
K3sKKyAgICByZXR1cm4gQ29tcGxleChtYWduaXR1ZGUgKiBjb3MocGhhc2UpLCBtYWduaXR1ZGUg
KiBzaW4ocGhhc2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
Q29tcGxleF9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>