<?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>73789</bug_id>
          
          <creation_ts>2011-12-04 18:04:03 -0800</creation_ts>
          <short_desc>Need SSE optimization for SincResampler::Process()</short_desc>
          <delta_ts>2011-12-07 21:24:03 -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>Web Audio</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="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>crogers</cc>
    
    <cc>kbr</cc>
    
    <cc>rtoy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>514801</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 18:04:03 -0800</bug_when>
    <thetext>Here is a FIXME about SIMD optimizations on a piece of loop code which optimized by unrolling, use SSE will get greater enhancement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514888</commentid>
    <comment_count>1</comment_count>
      <attachid>117838</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 21:26:19 -0800</bug_when>
    <thetext>Created attachment 117838
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514891</commentid>
    <comment_count>2</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 21:29:02 -0800</bug_when>
    <thetext>From my test this optimization got about 45% performance improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514913</commentid>
    <comment_count>3</comment_count>
      <attachid>117838</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-04 22:30:52 -0800</bug_when>
    <thetext>Comment on attachment 117838
Patch

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

&gt; Source/WebCore/platform/audio/SincResampler.cpp:-249
&gt; -            // FIXME: add SIMD optimizations for the following. The scalar code-path can probably also be optimized better.

This could be changed to
// FIXME: add ARM NEON optimizations for the following. The scalar code-path can probably also be optimized better.
:)

&gt; Source/WebCore/platform/audio/SincResampler.cpp:262
&gt; +                input = *inputP++;
&gt; +                sum1 += input * *k1;
&gt; +                sum2 += input * *k2;
&gt; +                ++k1;
&gt; +                ++k2;

You should put your code under the #define CONVOLVE_ONE_SAMPLE and use the macro here.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:267
&gt; +            int group = n / 4;

Typically you can just compute the end pointer so you do not have to keep track of that.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:355
&gt; +                input = *inputP++;
&gt; +                sum1 += input * *k1;
&gt; +                sum2 += input * *k2;
&gt; +                ++k1;
&gt; +                ++k2;

Same regarding CONVOLVE_ONE_SAMPLE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514915</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-04 22:31:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; From my test this optimization got about 45% performance improvement.

Any idea why such little improvement?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514916</commentid>
    <comment_count>5</comment_count>
      <attachid>117838</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-04 22:34:05 -0800</bug_when>
    <thetext>Comment on attachment 117838
Patch

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

&gt; Source/WebCore/platform/audio/SincResampler.cpp:287
&gt; +                    pInput = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(inputP));
&gt; +                    pK1 = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(k1));
&gt; +                    pK2 = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(k2));

Personally I prefer to have _mm_load_ps explicitly but that is a question of style I guess...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514922</commentid>
    <comment_count>6</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 22:49:17 -0800</bug_when>
    <thetext>Thanks for your fast response and comments.
(In reply to comment #3)
&gt; (From update of attachment 117838 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117838&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:-249
&gt; &gt; -            // FIXME: add SIMD optimizations for the following. The scalar code-path can probably also be optimized better.
&gt; 
&gt; This could be changed to
&gt; // FIXME: add ARM NEON optimizations for the following. The scalar code-path can probably also be optimized better.
&gt; :)
&gt; 
OK, I`ll add it.
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:262
&gt; &gt; +                input = *inputP++;
&gt; &gt; +                sum1 += input * *k1;
&gt; &gt; +                sum2 += input * *k2;
&gt; &gt; +                ++k1;
&gt; &gt; +                ++k2;
&gt; 
&gt; You should put your code under the #define CONVOLVE_ONE_SAMPLE and use the macro here.
&gt; 
All right.
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:267
&gt; &gt; +            int group = n / 4;
&gt; 
&gt; Typically you can just compute the end pointer so you do not have to keep track of that.
&gt; 
I don`t quite understand here, do you mean we just use end pointer to count the loop? 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:355
&gt; &gt; +                input = *inputP++;
&gt; &gt; +                sum1 += input * *k1;
&gt; &gt; +                sum2 += input * *k2;
&gt; &gt; +                ++k1;
&gt; &gt; +                ++k2;
&gt; 
&gt; Same regarding CONVOLVE_ONE_SAMPLE.
All right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514925</commentid>
    <comment_count>7</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 22:55:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; &gt; From my test this optimization got about 45% performance improvement.
&gt; 
&gt; Any idea why such little improvement?

The data is compared with the original impl with unrolling which also has some improvement. And for sse we must handle the address alignment and it produces the memory copy so it pulls down the performance. For the vadd (https://bugs.webkit.org/show_bug.cgi?id=73182) , using similar way, we just get the 100% performance improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514934</commentid>
    <comment_count>8</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-04 23:35:20 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 117838 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117838&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:287
&gt; &gt; +                    pInput = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(inputP));
&gt; &gt; +                    pK1 = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(k1));
&gt; &gt; +                    pK2 = reinterpret_cast&lt;__m128*&gt;(const_cast&lt;float*&gt;(k2));
&gt; 
&gt; Personally I prefer to have _mm_load_ps explicitly but that is a question of style I guess...

I tried to use _mm_load_ps instead of _cast way and got some regression, from about 45% to 38%. I think the additional ops of function call resulted it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514962</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-05 00:43:47 -0800</bug_when>
    <thetext>&gt; &gt; Personally I prefer to have _mm_load_ps explicitly but that is a question of style I guess...
&gt; 
&gt; I tried to use _mm_load_ps instead of _cast way and got some regression, from about 45% to 38%. I think the additional ops of function call resulted it.

That is really strange. Intrinsics should not result in function calls, they are supposed to be always inlined. Are you sure you are not testing a debug build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514989</commentid>
    <comment_count>10</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-05 02:31:56 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; &gt; Personally I prefer to have _mm_load_ps explicitly but that is a question of style I guess...
&gt; &gt; 
&gt; &gt; I tried to use _mm_load_ps instead of _cast way and got some regression, from about 45% to 38%. I think the additional ops of function call resulted it.
&gt; 
&gt; That is really strange. Intrinsics should not result in function calls, they are supposed to be always inlined. Are you sure you are not testing a debug build?

Yes, you are right, there is no function call, so I did some investigation and found there were additional 2 movaps and 1 movl when using _mm_load_ps, while the reinterpret_cast is executed more directly.

Here is some details of test:
 === 
sse              run time: 10 s 430768981 ns
sse with mm_load run time: 11 s 386974860 ns
std              run time: 15 s 747296354 ns
sse              speed up = 1.509697
sse with mm_load speed up = 1.382922</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514991</commentid>
    <comment_count>11</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-05 02:43:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; &gt; &gt; Personally I prefer to have _mm_load_ps explicitly but that is a question of style I guess...
&gt; &gt; &gt; 
&gt; &gt; &gt; I tried to use _mm_load_ps instead of _cast way and got some regression, from about 45% to 38%. I think the additional ops of function call resulted it.
&gt; &gt; 
&gt; &gt; That is really strange. Intrinsics should not result in function calls, they are supposed to be always inlined. Are you sure you are not testing a debug build?
&gt; 
&gt; Yes, you are right, there is no function call, so I did some investigation and found there were additional 2 movaps and 1 movl when using _mm_load_ps, while the reinterpret_cast is executed more directly.
&gt; 
&gt; Here is some details of test:
&gt;  === 
&gt; sse              run time: 10 s 430768981 ns
&gt; sse with mm_load run time: 11 s 386974860 ns
&gt; std              run time: 15 s 747296354 ns
&gt; sse              speed up = 1.509697
&gt; sse with mm_load speed up = 1.382922

More update:

It should be the gcc optimization problem, if using -O2 I got the same result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515051</commentid>
    <comment_count>12</comment_count>
      <attachid>117871</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-05 06:52:07 -0800</bug_when>
    <thetext>Created attachment 117871
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515055</commentid>
    <comment_count>13</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-05 07:00:41 -0800</bug_when>
    <thetext>Hi Poulain,
    Thanks your review. I updated the patch as your comments and get the new test result. The improvement is up to about 70% when complied with -O2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515163</commentid>
    <comment_count>14</comment_count>
      <attachid>117871</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-05 10:16:33 -0800</bug_when>
    <thetext>Comment on attachment 117871
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        Implement the SSE optimization in SincResampler::process()
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=73789
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

You should add a little description, mentioning the performance gain of the change.

&gt; Source/WebCore/ChangeLog:10
&gt; +        * platform/audio/SincResampler.cpp:
&gt; +        (WebCore::SincResampler::process):
&gt;  2011-12-05  Roland Steiner  &lt;rolandsteiner@chromium.org&gt;

Missing space at the end of the ChangeLog.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:264
&gt; +            while ((reinterpret_cast&lt;size_t&gt;(inputP) &amp; 0x0F) &amp;&amp; n) {

This should be uintptr_t instead of size_t.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:270
&gt; +            int group = n / 4;

Instead of tracking this, you could find the end, and then loop until the end: 
while (mInput &lt; end) {
   ...
}
The advantage is you remove the computation of group-- from a tight loop.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:282
&gt; +            sums1 = _mm_setzero_ps();
&gt; +            sums2 = _mm_setzero_ps();

You can move those to the lines where you declare sums1 and sums2.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:284
&gt; +            k1Aligned = !(reinterpret_cast&lt;size_t&gt;(k1) &amp; 0x0F);
&gt; +            k2Aligned = !(reinterpret_cast&lt;size_t&gt;(k2) &amp; 0x0F);

This should be uintptr_t instead of size_t.

&gt; Source/WebCore/platform/audio/SincResampler.cpp:298
&gt; +                    mul1 = _mm_mul_ps(mInput, mK1);
&gt; +                    mul2 = _mm_mul_ps(mInput, mK2);
&gt; +                    sums1 = _mm_add_ps(sums1, mul1);
&gt; +                    sums2 = _mm_add_ps(sums2, mul2);
&gt; +
&gt; +                    inputP += 4;
&gt; +                    k1 += 4;
&gt; +                    k2 += 4;

This code is copied three time. It could be moved to a macro CONVOLVE_4_SAMPLE_SSE.
You can try an inline function but I think that will fail with MSVC compiler due to a bug when passing vectors as arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515164</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-05 10:17:38 -0800</bug_when>
    <thetext>&gt; Hi Poulain,

My first name is Benjamin :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515705</commentid>
    <comment_count>16</comment_count>
      <attachid>118001</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-06 00:33:36 -0800</bug_when>
    <thetext>Created attachment 118001
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515717</commentid>
    <comment_count>17</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-06 00:43:18 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; Hi Poulain,
&gt; 
&gt; My first name is Benjamin :)

Hi Benjamin, 
    So sorry for misusing your name -_-!
    I updated the patch as your comments, please help to review.

    Also I have a question that I tried to use script webkit-patch to upload the patch, but it showed me &quot;Failed to assign bug to you (can&apos;t find assigned_to) control&quot; and upload failed, does that mean I cannot upload by script unless I`m the assignee?

    Thank you~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515729</commentid>
    <comment_count>18</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-06 01:43:41 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt;     I updated the patch as your comments, please help to review.

Please also update the Changelog.

&gt;     Also I have a question that I tried to use script webkit-patch to upload the patch, but it showed me &quot;Failed to assign bug to you (can&apos;t find assigned_to) control&quot; and upload failed, does that mean I cannot upload by script unless I`m the assignee?

It is because you do not have yet the EditBug privileges. Please file a bug for webkit-patch, in my opinion it should work regardless, and just ignore that step.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515734</commentid>
    <comment_count>19</comment_count>
      <attachid>118008</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-06 01:58:58 -0800</bug_when>
    <thetext>Created attachment 118008
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>515737</commentid>
    <comment_count>20</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-06 02:00:52 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt;     I updated the patch as your comments, please help to review.
&gt; 
&gt; Please also update the Changelog.
&gt; 
&gt; &gt;     Also I have a question that I tried to use script webkit-patch to upload the patch, but it showed me &quot;Failed to assign bug to you (can&apos;t find assigned_to) control&quot; and upload failed, does that mean I cannot upload by script unless I`m the assignee?
&gt; 
&gt; It is because you do not have yet the EditBug privileges. Please file a bug for webkit-patch, in my opinion it should work regardless, and just ignore that step.

OK, I`ll file a bug.
And Changelog updated, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516001</commentid>
    <comment_count>21</comment_count>
      <attachid>118008</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-06 10:14:56 -0800</bug_when>
    <thetext>Comment on attachment 118008
Patch

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

&gt; Source/WebCore/platform/audio/SincResampler.cpp:260
&gt; +#ifdef __SSE2__

I think visually, it might make more sense to stick the entire #ifdef __SSE2__ code inside the original
 {
   float input;
   ...
 }

So we get something like
 {
   float input;
#ifdef __SSE2__
   ...
#else
   &lt;original code&gt;
#endif
 }

&gt; Source/WebCore/platform/audio/SincResampler.cpp:282
&gt; +#define CONVOLVE_4_SAMPLE                    \

Nit:  Probably should be named CONVOLVE_4_SAMPLES (plural, not singular).

&gt; Source/WebCore/platform/audio/SincResampler.cpp:293
&gt; +                    mInput = _mm_load_ps(inputP);

I might consider adding a new macro

#define LOAD_DATA(l1, l2) \
  mInput = mm_load_ps(inputP); \
  mK1 = _mm_##l1_ps(k1); \
  mK2 = _mm_##l2_ps(k2)

Then here we can say
  LOAD_DATA(load, load);

And below, we can have
  LOAD_DATA(loadu, load);
  LOAD_DATA(load, loadu);
  LOAD_DATA(loadu, loadu);

This makes it easy to see that they&apos;re all the same except whether we do aligned or unaligned loads.

(I didn&apos;t test this code; some minor changes might be needed.)

&gt; Source/WebCore/platform/audio/SincResampler.cpp:327
&gt; +            groupSumP = reinterpret_cast&lt;float*&gt;(&amp;sums2);

I think I&apos;d write the above as

sum1 += groupSumP[0];
sum1 += groupSumP[1];
sum1 += groupSumP[2];
sum1 += groupSumP[3];

Or maybe just sum1 += groupSumP[0] + groupSumP[1] + groupSumP[2] + groupSumP[3]

Same for sum2 below.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516399</commentid>
    <comment_count>22</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-06 17:19:39 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 118008 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118008&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:260
&gt; &gt; +#ifdef __SSE2__
&gt; 
&gt; I think visually, it might make more sense to stick the entire #ifdef __SSE2__ code inside the original
&gt;  {
&gt;    float input;
&gt;    ...
&gt;  }
&gt; 
&gt; So we get something like
&gt;  {
&gt;    float input;
&gt; #ifdef __SSE2__
&gt;    ...
&gt; #else
&gt;    &lt;original code&gt;
&gt; #endif
&gt;  }
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:282
&gt; &gt; +#define CONVOLVE_4_SAMPLE                    \
&gt; 
&gt; Nit:  Probably should be named CONVOLVE_4_SAMPLES (plural, not singular).
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:293
&gt; &gt; +                    mInput = _mm_load_ps(inputP);
&gt; 
&gt; I might consider adding a new macro
&gt; 
&gt; #define LOAD_DATA(l1, l2) \
&gt;   mInput = mm_load_ps(inputP); \
&gt;   mK1 = _mm_##l1_ps(k1); \
&gt;   mK2 = _mm_##l2_ps(k2)
&gt; 
&gt; Then here we can say
&gt;   LOAD_DATA(load, load);
&gt; 
&gt; And below, we can have
&gt;   LOAD_DATA(loadu, load);
&gt;   LOAD_DATA(load, loadu);
&gt;   LOAD_DATA(loadu, loadu);
&gt; 
&gt; This makes it easy to see that they&apos;re all the same except whether we do aligned or unaligned loads.
&gt; 
&gt; (I didn&apos;t test this code; some minor changes might be needed.)
&gt; 
&gt; &gt; Source/WebCore/platform/audio/SincResampler.cpp:327
&gt; &gt; +            groupSumP = reinterpret_cast&lt;float*&gt;(&amp;sums2);
&gt; 
&gt; I think I&apos;d write the above as
&gt; 
&gt; sum1 += groupSumP[0];
&gt; sum1 += groupSumP[1];
&gt; sum1 += groupSumP[2];
&gt; sum1 += groupSumP[3];
&gt; 
&gt; Or maybe just sum1 += groupSumP[0] + groupSumP[1] + groupSumP[2] + groupSumP[3]
&gt; 
&gt; Same for sum2 below.

Hi Raymond,
    Thanks your good comments, I`ll update it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516453</commentid>
    <comment_count>23</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-06 19:45:35 -0800</bug_when>
    <thetext>&gt; Then here we can say
&gt;   LOAD_DATA(load, load);
&gt; 
&gt; And below, we can have
&gt;   LOAD_DATA(loadu, load);
&gt;   LOAD_DATA(load, loadu);
&gt;   LOAD_DATA(loadu, loadu);
&gt; 
&gt; This makes it easy to see that they&apos;re all the same except whether we do aligned or unaligned loads.

I think this would be much harder to follow than the existing code...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516756</commentid>
    <comment_count>24</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-07 11:01:24 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; Then here we can say
&gt; &gt;   LOAD_DATA(load, load);
&gt; &gt; 
&gt; &gt; And below, we can have
&gt; &gt;   LOAD_DATA(loadu, load);
&gt; &gt;   LOAD_DATA(load, loadu);
&gt; &gt;   LOAD_DATA(loadu, loadu);
&gt; &gt; 
&gt; &gt; This makes it easy to see that they&apos;re all the same except whether we do aligned or unaligned loads.
&gt; 
&gt; I think this would be much harder to follow than the existing code...

That&apos;s why I said &quot;maybe add&quot;.  But it took me a bit of time to see what was different between the three branches.  Just one character difference...

I won&apos;t mind of the macro is not added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>516868</commentid>
    <comment_count>25</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-07 13:18:46 -0800</bug_when>
    <thetext>The patch looks correct to me but I&apos;d like the comments of Raymond to be fixed before landing.

I think &quot;load&quot; and &quot;loadu&quot; are common enough to avoid a LOAD_DATA macro but I leave that up to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517094</commentid>
    <comment_count>26</comment_count>
      <attachid>118305</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-07 18:48:14 -0800</bug_when>
    <thetext>Created attachment 118305
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517101</commentid>
    <comment_count>27</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-07 18:56:09 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Created an attachment (id=118305) [details]
&gt; Patch

Patch is updated with keeping LOAD_DATA macro.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517137</commentid>
    <comment_count>28</comment_count>
      <attachid>118305</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-07 20:08:34 -0800</bug_when>
    <thetext>Comment on attachment 118305
Patch

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

&gt; Source/WebCore/platform/audio/SincResampler.cpp:319
&gt; +                // Summarize the SSE results to sum1 and sum2

Make comments look like sentences by starting with a capital letter and ending with a period (punctation). One exception may be end of line comments like this &quot;if (x == y) // false for NaN&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517147</commentid>
    <comment_count>29</comment_count>
      <attachid>118320</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-07 20:32:35 -0800</bug_when>
    <thetext>Created attachment 118320
Patch

Add the period for the comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517151</commentid>
    <comment_count>30</comment_count>
      <attachid>118320</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-12-07 20:37:44 -0800</bug_when>
    <thetext>Comment on attachment 118320
Patch

Looks correct.

Sorry it took so many iterations to find all the little issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517152</commentid>
    <comment_count>31</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2011-12-07 20:42:12 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 118320 [details])
&gt; Looks correct.
&gt; 
&gt; Sorry it took so many iterations to find all the little issues.

That`s all right, it could make me to pay more attention to the details in the feature, thanks all your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517168</commentid>
    <comment_count>32</comment_count>
      <attachid>118320</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-07 21:23:57 -0800</bug_when>
    <thetext>Comment on attachment 118320
Patch

Clearing flags on attachment: 118320

Committed r102312: &lt;http://trac.webkit.org/changeset/102312&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517169</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-07 21:24:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117838</attachid>
            <date>2011-12-04 21:26:19 -0800</date>
            <delta_ts>2011-12-05 06:52:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>6419</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">RnJvbSBjYzUwNjRmYmY0ZTRlNzk1ZjBkNGQ1YjJlZDVkYWE0Y2EyYmIzYzFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYaW5nbmFuIFdhbmcgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+
CkRhdGU6IE1vbiwgNSBEZWMgMjAxMSAxMzoyNToxMiArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIElt
cGxlbWVudCB0aGUgU1NFIG9wdGltaXphdGlvbiBpbiBTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKCkK
Ci0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDEwICsrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcCB8
ICAxMTIgKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTIxIGluc2Vy
dGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGM5MmU5MWIuLjk2NmM2MGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0xMi0wNCAgWGluZ25hbiBXYW5nICA8
eGluZ25hbi53YW5nQGludGVsLmNvbT4KKworICAgICAgICBJbXBsZW1lbnQgdGhlIFNTRSBvcHRp
bWl6YXRpb24gaW4gU2luY1Jlc2FtcGxlcjo6cHJvY2VzcygpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mzc4OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2FtcGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKToKKwogMjAx
MS0xMi0wNCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAgYm9y
ZGVyLXdpZHRoOiBpbml0aWFsIGFuZCBib3JkZXItY29sb3I6IGluaXRpYWwgY2Fubm90IGJlIHJl
bW92ZWQgdmlhIENTU09NLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vU2luY1Jlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcAppbmRleCBhOTQzZGYyLi45M2ExNzMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcApAQCAtMzUsNiArMzUsMTAgQEAK
ICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNp
ZmRlZiBfX1NTRTJfXworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIC8vIElucHV0IGJ1ZmZlciBsYXlvdXQsIGRpdmlkaW5nIHRoZSB0b3Rh
bCBidWZmZXIgaW50byByZWdpb25zIChyMCAtIHI1KToKQEAgLTI0Niw3ICsyNTAsMTEyIEBAIHZv
aWQgU2luY1Jlc2FtcGxlcjo6cHJvY2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92
aWRlciwgZmxvYXQqIGRlc3RpbmF0CiAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIHNpbmdsZSBv
dXRwdXQgc2FtcGxlLiAKICAgICAgICAgICAgIGludCBuID0gbV9rZXJuZWxTaXplOwogCi0gICAg
ICAgICAgICAvLyBGSVhNRTogYWRkIFNJTUQgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGZvbGxvd2lu
Zy4gVGhlIHNjYWxhciBjb2RlLXBhdGggY2FuIHByb2JhYmx5IGFsc28gYmUgb3B0aW1pemVkIGJl
dHRlci4KKyNpZmRlZiBfX1NTRTJfXworICAgICAgICAgICAgZmxvYXQgaW5wdXQ7CisKKyAgICAg
ICAgICAgIC8vIElmIHRoZSBzb3VyY2VQIGFkZHJlc3MgaXMgbm90IDE2LWJ5dGUgYWxpZ25lZCwg
dGhlIGZpcnN0IHNldmVyYWwgZnJhbWVzIChhdCBtb3N0IHRocmVlKSBzaG91bGQgYmUgcHJvY2Vz
c2VkIHNlcGVyYXRlbHkuCisgICAgICAgICAgICB3aGlsZSAoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6
ZV90PihpbnB1dFApICYgMHgwRikgJiYgbikgeworICAgICAgICAgICAgICAgIGlucHV0ID0gKmlu
cHV0UCsrOworICAgICAgICAgICAgICAgIHN1bTEgKz0gaW5wdXQgKiAqazE7CisgICAgICAgICAg
ICAgICAgc3VtMiArPSBpbnB1dCAqICprMjsKKyAgICAgICAgICAgICAgICArK2sxOworICAgICAg
ICAgICAgICAgICsrazI7CisgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBOb3cgdGhlIGlucHV0UCBpcyBhbGlnbmVkIGFuZCBzdGFydCB0byBhcHBs
eSBTU0UuCisgICAgICAgICAgICBpbnQgZ3JvdXAgPSBuIC8gNDsKKyAgICAgICAgICAgIF9fbTEy
OCogcElucHV0OworICAgICAgICAgICAgX19tMTI4KiBwSzE7CisgICAgICAgICAgICBfX20xMjgq
IHBLMjsKKyAgICAgICAgICAgIF9fbTEyOCBtdWwxOworICAgICAgICAgICAgX19tMTI4IG11bDI7
CisgICAgICAgICAgICBfX20xMjggc3VtczE7CisgICAgICAgICAgICBfX20xMjggc3VtczI7Cisg
ICAgICAgICAgICBib29sIGsxQWxpZ25lZDsKKyAgICAgICAgICAgIGJvb2wgazJBbGlnbmVkOwor
CisgICAgICAgICAgICBzdW1zMSA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgICAgICAgICAgICBzdW1z
MiA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgICAgICAgICAgICBrMUFsaWduZWQgPSAhKHJlaW50ZXJw
cmV0X2Nhc3Q8c2l6ZV90PihrMSkgJiAweDBGKTsKKyAgICAgICAgICAgIGsyQWxpZ25lZCA9ICEo
cmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KGsyKSAmIDB4MEYpOworCisgICAgICAgICAgICBpZiAo
azFBbGlnbmVkICYmIGsyQWxpZ25lZCkgeyAvLyBib3RoIGFsaWduZWQKKyAgICAgICAgICAgICAg
ICB3aGlsZSAoZ3JvdXAtLSkgeworICAgICAgICAgICAgICAgICAgICBwSW5wdXQgPSByZWludGVy
cHJldF9jYXN0PF9fbTEyOCo+KGNvbnN0X2Nhc3Q8ZmxvYXQqPihpbnB1dFApKTsKKyAgICAgICAg
ICAgICAgICAgICAgcEsxID0gcmVpbnRlcnByZXRfY2FzdDxfX20xMjgqPihjb25zdF9jYXN0PGZs
b2F0Kj4oazEpKTsKKyAgICAgICAgICAgICAgICAgICAgcEsyID0gcmVpbnRlcnByZXRfY2FzdDxf
X20xMjgqPihjb25zdF9jYXN0PGZsb2F0Kj4oazIpKTsKKyAgICAgICAgICAgICAgICAgICAgbXVs
MSA9IF9tbV9tdWxfcHMoKnBJbnB1dCwgKnBLMSk7CisgICAgICAgICAgICAgICAgICAgIG11bDIg
PSBfbW1fbXVsX3BzKCpwSW5wdXQsICpwSzIpOworICAgICAgICAgICAgICAgICAgICBzdW1zMSA9
IF9tbV9hZGRfcHMoc3VtczEsIG11bDEpOworICAgICAgICAgICAgICAgICAgICBzdW1zMiA9IF9t
bV9hZGRfcHMoc3VtczIsIG11bDIpOworCisgICAgICAgICAgICAgICAgICAgIGlucHV0UCArPSA0
OworICAgICAgICAgICAgICAgICAgICBrMSArPSA0OworICAgICAgICAgICAgICAgICAgICBrMiAr
PSA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIWsxQWxpZ25l
ZCAmJiBrMkFsaWduZWQpIHsgLy8gb25seSBrMiBhbGlnbmVkCisgICAgICAgICAgICAgICAgd2hp
bGUgKGdyb3VwLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgcElucHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDxfX20xMjgqPihjb25zdF9jYXN0PGZsb2F0Kj4oaW5wdXRQKSk7CisgICAgICAgICAgICAg
ICAgICAgIHBLMiA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4Kj4oY29uc3RfY2FzdDxmbG9hdCo+
KGsyKSk7CisgICAgICAgICAgICAgICAgICAgIG11bDEgPSBfbW1fbXVsX3BzKCpwSW5wdXQsIF9t
bV9sb2FkdV9wcyhrMSkpOworICAgICAgICAgICAgICAgICAgICBtdWwyID0gX21tX211bF9wcygq
cElucHV0LCAqcEsyKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtczEgPSBfbW1fYWRkX3BzKHN1
bXMxLCBtdWwxKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtczIgPSBfbW1fYWRkX3BzKHN1bXMy
LCBtdWwyKTsKKworICAgICAgICAgICAgICAgICAgICBpbnB1dFAgKz0gNDsKKyAgICAgICAgICAg
ICAgICAgICAgazEgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgazIgKz0gNDsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGsxQWxpZ25lZCAmJiAhazJBbGlnbmVk
KSB7IC8vIG9ubHkgazEgYWxpZ25lZAorICAgICAgICAgICAgICAgIHdoaWxlIChncm91cC0tKSB7
CisgICAgICAgICAgICAgICAgICAgIHBJbnB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8X19tMTI4Kj4o
Y29uc3RfY2FzdDxmbG9hdCo+KGlucHV0UCkpOworICAgICAgICAgICAgICAgICAgICBwSzEgPSBy
ZWludGVycHJldF9jYXN0PF9fbTEyOCo+KGNvbnN0X2Nhc3Q8ZmxvYXQqPihrMSkpOworICAgICAg
ICAgICAgICAgICAgICBtdWwxID0gX21tX211bF9wcygqcElucHV0LCAqcEsxKTsKKyAgICAgICAg
ICAgICAgICAgICAgbXVsMiA9IF9tbV9tdWxfcHMoKnBJbnB1dCwgX21tX2xvYWR1X3BzKGsyKSk7
CisgICAgICAgICAgICAgICAgICAgIHN1bXMxID0gX21tX2FkZF9wcyhzdW1zMSwgbXVsMSk7Cisg
ICAgICAgICAgICAgICAgICAgIHN1bXMyID0gX21tX2FkZF9wcyhzdW1zMiwgbXVsMik7CisKKyAg
ICAgICAgICAgICAgICAgICAgaW5wdXRQICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGsxICs9
IDQ7CisgICAgICAgICAgICAgICAgICAgIGsyICs9IDQ7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsgLy8gYm90aCBub24tYWxpZ25lZAorICAgICAgICAgICAgICAgIHdo
aWxlIChncm91cC0tKSB7CisgICAgICAgICAgICAgICAgICAgIHBJbnB1dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8X19tMTI4Kj4oY29uc3RfY2FzdDxmbG9hdCo+KGlucHV0UCkpOworICAgICAgICAgICAg
ICAgICAgICBtdWwxID0gX21tX211bF9wcygqcElucHV0LCBfbW1fbG9hZHVfcHMoazEpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbXVsMiA9IF9tbV9tdWxfcHMoKnBJbnB1dCwgX21tX2xvYWR1X3Bz
KGsyKSk7CisgICAgICAgICAgICAgICAgICAgIHN1bXMxID0gX21tX2FkZF9wcyhzdW1zMSwgbXVs
MSk7CisgICAgICAgICAgICAgICAgICAgIHN1bXMyID0gX21tX2FkZF9wcyhzdW1zMiwgbXVsMik7
CisKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRQICs9IDQ7CisgICAgICAgICAgICAgICAgICAg
IGsxICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGsyICs9IDQ7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTdW1tYXJpemUgdGhlIFNTRSByZXN1
bHRzIHRvIHN1bTEgYW5kIHN1bTIKKyAgICAgICAgICAgIGZsb2F0KiBncm91cFN1bVAgPSByZWlu
dGVycHJldF9jYXN0PGZsb2F0Kj4oJnN1bXMxKTsKKyAgICAgICAgICAgIHN1bTEgKz0gKmdyb3Vw
U3VtUDsKKyAgICAgICAgICAgIHN1bTEgKz0gKihncm91cFN1bVAgKyAxKTsKKyAgICAgICAgICAg
IHN1bTEgKz0gKihncm91cFN1bVAgKyAyKTsKKyAgICAgICAgICAgIHN1bTEgKz0gKihncm91cFN1
bVAgKyAzKTsKKyAgICAgICAgICAgIGdyb3VwU3VtUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
Pigmc3VtczIpOworICAgICAgICAgICAgc3VtMiArPSAqZ3JvdXBTdW1QOworICAgICAgICAgICAg
c3VtMiArPSAqKGdyb3VwU3VtUCArIDEpOworICAgICAgICAgICAgc3VtMiArPSAqKGdyb3VwU3Vt
UCArIDIpOworICAgICAgICAgICAgc3VtMiArPSAqKGdyb3VwU3VtUCArIDMpOworCisgICAgICAg
ICAgICBuICU9IDQ7CisgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgIGlu
cHV0ID0gKmlucHV0UCsrOworICAgICAgICAgICAgICAgIHN1bTEgKz0gaW5wdXQgKiAqazE7Cisg
ICAgICAgICAgICAgICAgc3VtMiArPSBpbnB1dCAqICprMjsKKyAgICAgICAgICAgICAgICArK2sx
OworICAgICAgICAgICAgICAgICsrazI7CisgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAg
ICAgfQorI2Vsc2UKIAogI2RlZmluZSBDT05WT0xWRV9PTkVfU0FNUExFICAgICAgXAogICAgICAg
ICAgICAgaW5wdXQgPSAqaW5wdXRQKys7ICAgXApAQCAtMzY2LDYgKzQ3NSw3IEBAIHZvaWQgU2lu
Y1Jlc2FtcGxlcjo6cHJvY2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwg
ZmxvYXQqIGRlc3RpbmF0CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gTGluZWFybHkgaW50ZXJw
b2xhdGUgdGhlIHR3byAiY29udm9sdXRpb25zIi4KICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQg
PSAoMS4wIC0ga2VybmVsSW50ZXJwb2xhdGlvbkZhY3RvcikgKiBzdW0xICsga2VybmVsSW50ZXJw
b2xhdGlvbkZhY3RvciAqIHN1bTI7Ci0tIAoxLjcuNS40Cgo=
</data>
<flag name="review"
          id="117411"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117871</attachid>
            <date>2011-12-05 06:52:07 -0800</date>
            <delta_ts>2011-12-06 00:33:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5937</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZjRhYzNkLi45N2ZmNTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTEtMTItMDUgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHRoZSBTU0Ugb3B0aW1pemF0aW9uIGluIFNpbmNSZXNhbXBsZXI6
OnByb2Nlc3MoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2luY1Jlc2FtcGxlcjo6cHJvY2Vzcyk6CiAyMDExLTEyLTA1ICBSb2xhbmQgU3RlaW5lciAgPHJv
bGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIDxzdHlsZSBzY29wZWQ+OiBBZGQg
J3Njb3BlZCcgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9TaW5jUmVzYW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1Np
bmNSZXNhbXBsZXIuY3BwCmluZGV4IGE5NDNkZjIuLmExMDgzMDQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwCkBAIC0zNSw2ICszNSwxMCBA
QAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAor
I2lmZGVmIF9fU1NFMl9fCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisjZW5kaWYKKwogdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIAogLy8gSW5wdXQgYnVmZmVyIGxheW91dCwgZGl2aWRpbmcgdGhlIHRv
dGFsIGJ1ZmZlciBpbnRvIHJlZ2lvbnMgKHIwIC0gcjUpOgpAQCAtMjQ2LDggKzI1MCw2IEBAIHZv
aWQgU2luY1Jlc2FtcGxlcjo6cHJvY2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92
aWRlciwgZmxvYXQqIGRlc3RpbmF0CiAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIHNpbmdsZSBv
dXRwdXQgc2FtcGxlLiAKICAgICAgICAgICAgIGludCBuID0gbV9rZXJuZWxTaXplOwogCi0gICAg
ICAgICAgICAvLyBGSVhNRTogYWRkIFNJTUQgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGZvbGxvd2lu
Zy4gVGhlIHNjYWxhciBjb2RlLXBhdGggY2FuIHByb2JhYmx5IGFsc28gYmUgb3B0aW1pemVkIGJl
dHRlci4KLQogI2RlZmluZSBDT05WT0xWRV9PTkVfU0FNUExFICAgICAgXAogICAgICAgICAgICAg
aW5wdXQgPSAqaW5wdXRQKys7ICAgXAogICAgICAgICAgICAgc3VtMSArPSBpbnB1dCAqICprMTsg
XApAQCAtMjU1LDYgKzI1NywxMDkgQEAgdm9pZCBTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKEF1ZGlv
U291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBmbG9hdCogZGVzdGluYXQKICAgICAgICAg
ICAgICsrazE7ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICsrazI7CiAKKyNpZmRlZiBf
X1NTRTJfXworICAgICAgICAgICAgZmxvYXQgaW5wdXQ7CisKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBzb3VyY2VQIGFkZHJlc3MgaXMgbm90IDE2LWJ5dGUgYWxpZ25lZCwgdGhlIGZpcnN0IHNldmVy
YWwgZnJhbWVzIChhdCBtb3N0IHRocmVlKSBzaG91bGQgYmUgcHJvY2Vzc2VkIHNlcGVyYXRlbHku
CisgICAgICAgICAgICB3aGlsZSAoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihpbnB1dFApICYg
MHgwRikgJiYgbikgeworICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUKKyAgICAg
ICAgICAgICAgICBuLS07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyB0aGUg
aW5wdXRQIGlzIGFsaWduZWQgYW5kIHN0YXJ0IHRvIGFwcGx5IFNTRS4KKyAgICAgICAgICAgIGlu
dCBncm91cCA9IG4gLyA0OworICAgICAgICAgICAgX19tMTI4IG1JbnB1dDsKKyAgICAgICAgICAg
IF9fbTEyOCBtSzE7CisgICAgICAgICAgICBfX20xMjggbUsyOworICAgICAgICAgICAgX19tMTI4
IG11bDE7CisgICAgICAgICAgICBfX20xMjggbXVsMjsKKyAgICAgICAgICAgIF9fbTEyOCBzdW1z
MTsKKyAgICAgICAgICAgIF9fbTEyOCBzdW1zMjsKKyAgICAgICAgICAgIGJvb2wgazFBbGlnbmVk
OworICAgICAgICAgICAgYm9vbCBrMkFsaWduZWQ7CisKKyAgICAgICAgICAgIHN1bXMxID0gX21t
X3NldHplcm9fcHMoKTsKKyAgICAgICAgICAgIHN1bXMyID0gX21tX3NldHplcm9fcHMoKTsKKyAg
ICAgICAgICAgIGsxQWxpZ25lZCA9ICEocmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KGsxKSAmIDB4
MEYpOworICAgICAgICAgICAgazJBbGlnbmVkID0gIShyZWludGVycHJldF9jYXN0PHNpemVfdD4o
azIpICYgMHgwRik7CisKKyAgICAgICAgICAgIGlmIChrMUFsaWduZWQgJiYgazJBbGlnbmVkKSB7
IC8vIGJvdGggYWxpZ25lZAorICAgICAgICAgICAgICAgIHdoaWxlIChncm91cC0tKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1JbnB1dCA9IF9tbV9sb2FkX3BzKGlucHV0UCk7CisgICAgICAgICAg
ICAgICAgICAgIG1LMSA9IF9tbV9sb2FkX3BzKGsxKTsKKyAgICAgICAgICAgICAgICAgICAgbUsy
ID0gX21tX2xvYWRfcHMoazIpOworICAgICAgICAgICAgICAgICAgICBtdWwxID0gX21tX211bF9w
cyhtSW5wdXQsIG1LMSk7CisgICAgICAgICAgICAgICAgICAgIG11bDIgPSBfbW1fbXVsX3BzKG1J
bnB1dCwgbUsyKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtczEgPSBfbW1fYWRkX3BzKHN1bXMx
LCBtdWwxKTsKKyAgICAgICAgICAgICAgICAgICAgc3VtczIgPSBfbW1fYWRkX3BzKHN1bXMyLCBt
dWwyKTsKKworICAgICAgICAgICAgICAgICAgICBpbnB1dFAgKz0gNDsKKyAgICAgICAgICAgICAg
ICAgICAgazEgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgazIgKz0gNDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFrMUFsaWduZWQgJiYgazJBbGlnbmVkKSB7
IC8vIG9ubHkgazIgYWxpZ25lZAorICAgICAgICAgICAgICAgIHdoaWxlIChncm91cC0tKSB7Cisg
ICAgICAgICAgICAgICAgICAgIG1JbnB1dCA9IF9tbV9sb2FkX3BzKGlucHV0UCk7CisgICAgICAg
ICAgICAgICAgICAgIG1LMSA9IF9tbV9sb2FkdV9wcyhrMSk7CisgICAgICAgICAgICAgICAgICAg
IG1LMiA9IF9tbV9sb2FkX3BzKGsyKTsKKyAgICAgICAgICAgICAgICAgICAgbXVsMSA9IF9tbV9t
dWxfcHMobUlucHV0LCBtSzEpOworICAgICAgICAgICAgICAgICAgICBtdWwyID0gX21tX211bF9w
cyhtSW5wdXQsIG1LMik7CisgICAgICAgICAgICAgICAgICAgIHN1bXMxID0gX21tX2FkZF9wcyhz
dW1zMSwgbXVsMSk7CisgICAgICAgICAgICAgICAgICAgIHN1bXMyID0gX21tX2FkZF9wcyhzdW1z
MiwgbXVsMik7CisKKyAgICAgICAgICAgICAgICAgICAgaW5wdXRQICs9IDQ7CisgICAgICAgICAg
ICAgICAgICAgIGsxICs9IDQ7CisgICAgICAgICAgICAgICAgICAgIGsyICs9IDQ7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChrMUFsaWduZWQgJiYgIWsyQWxpZ25l
ZCkgeyAvLyBvbmx5IGsxIGFsaWduZWQKKyAgICAgICAgICAgICAgICB3aGlsZSAoZ3JvdXAtLSkg
eworICAgICAgICAgICAgICAgICAgICBtSW5wdXQgPSBfbW1fbG9hZF9wcyhpbnB1dFApOworICAg
ICAgICAgICAgICAgICAgICBtSzEgPSBfbW1fbG9hZF9wcyhrMSk7CisgICAgICAgICAgICAgICAg
ICAgIG1LMiA9IF9tbV9sb2FkdV9wcyhrMik7CisgICAgICAgICAgICAgICAgICAgIG11bDEgPSBf
bW1fbXVsX3BzKG1JbnB1dCwgbUsxKTsKKyAgICAgICAgICAgICAgICAgICAgbXVsMiA9IF9tbV9t
dWxfcHMobUlucHV0LCBtSzIpOworICAgICAgICAgICAgICAgICAgICBzdW1zMSA9IF9tbV9hZGRf
cHMoc3VtczEsIG11bDEpOworICAgICAgICAgICAgICAgICAgICBzdW1zMiA9IF9tbV9hZGRfcHMo
c3VtczIsIG11bDIpOworCisgICAgICAgICAgICAgICAgICAgIGlucHV0UCArPSA0OworICAgICAg
ICAgICAgICAgICAgICBrMSArPSA0OworICAgICAgICAgICAgICAgICAgICBrMiArPSA0OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7IC8vIGJvdGggbm9uLWFsaWduZWQK
KyAgICAgICAgICAgICAgICB3aGlsZSAoZ3JvdXAtLSkgeworICAgICAgICAgICAgICAgICAgICBt
SW5wdXQgPSBfbW1fbG9hZF9wcyhpbnB1dFApOworICAgICAgICAgICAgICAgICAgICBtSzEgPSBf
bW1fbG9hZHVfcHMoazEpOworICAgICAgICAgICAgICAgICAgICBtSzIgPSBfbW1fbG9hZHVfcHMo
azIpOworICAgICAgICAgICAgICAgICAgICBtdWwxID0gX21tX211bF9wcyhtSW5wdXQsIG1LMSk7
CisgICAgICAgICAgICAgICAgICAgIG11bDIgPSBfbW1fbXVsX3BzKG1JbnB1dCwgbUsyKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3VtczEgPSBfbW1fYWRkX3BzKHN1bXMxLCBtdWwxKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3VtczIgPSBfbW1fYWRkX3BzKHN1bXMyLCBtdWwyKTsKKworICAgICAg
ICAgICAgICAgICAgICBpbnB1dFAgKz0gNDsKKyAgICAgICAgICAgICAgICAgICAgazEgKz0gNDsK
KyAgICAgICAgICAgICAgICAgICAgazIgKz0gNDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1bW1hcml6ZSB0aGUgU1NFIHJlc3VsdHMgdG8gc3Vt
MSBhbmQgc3VtMgorICAgICAgICAgICAgZmxvYXQqIGdyb3VwU3VtUCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8ZmxvYXQqPigmc3VtczEpOworICAgICAgICAgICAgc3VtMSArPSAqZ3JvdXBTdW1QOworICAg
ICAgICAgICAgc3VtMSArPSAqKGdyb3VwU3VtUCArIDEpOworICAgICAgICAgICAgc3VtMSArPSAq
KGdyb3VwU3VtUCArIDIpOworICAgICAgICAgICAgc3VtMSArPSAqKGdyb3VwU3VtUCArIDMpOwor
ICAgICAgICAgICAgZ3JvdXBTdW1QID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KCZzdW1zMik7
CisgICAgICAgICAgICBzdW0yICs9ICpncm91cFN1bVA7CisgICAgICAgICAgICBzdW0yICs9ICoo
Z3JvdXBTdW1QICsgMSk7CisgICAgICAgICAgICBzdW0yICs9ICooZ3JvdXBTdW1QICsgMik7Cisg
ICAgICAgICAgICBzdW0yICs9ICooZ3JvdXBTdW1QICsgMyk7CisKKyAgICAgICAgICAgIG4gJT0g
NDsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05F
X1NBTVBMRQorICAgICAgICAgICAgICAgIG4tLTsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAg
ICAgICAgICAvLyBGSVhNRTogYWRkIEFSTSBORU9OIG9wdGltaXphdGlvbnMgZm9yIHRoZSBmb2xs
b3dpbmcuIFRoZSBzY2FsYXIgY29kZS1wYXRoIGNhbiBwcm9iYWJseSBhbHNvIGJlIG9wdGltaXpl
ZCBiZXR0ZXIuCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgZmxvYXQgaW5wdXQ7CiAg
ICAgICAgICAgICAgICAgCkBAIC0zNjYsNiArNDcxLDcgQEAgdm9pZCBTaW5jUmVzYW1wbGVyOjpw
cm9jZXNzKEF1ZGlvU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBmbG9hdCogZGVzdGlu
YXQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KKyNlbmRpZgogCiAgICAgICAgICAgICAvLyBMaW5lYXJseSBpbnRlcnBvbGF0ZSB0aGUgdHdv
ICJjb252b2x1dGlvbnMiLgogICAgICAgICAgICAgZG91YmxlIHJlc3VsdCA9ICgxLjAgLSBrZXJu
ZWxJbnRlcnBvbGF0aW9uRmFjdG9yKSAqIHN1bTEgKyBrZXJuZWxJbnRlcnBvbGF0aW9uRmFjdG9y
ICogc3VtMjsK
</data>
<flag name="review"
          id="117459"
          type_id="1"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118001</attachid>
            <date>2011-12-06 00:33:36 -0800</date>
            <delta_ts>2011-12-06 01:58:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5217</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MDlmMjEyLi43YTRkMWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTEtMTItMDYgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHRoZSBTU0Ugb3B0aW1pemF0aW9uIGluIFNpbmNSZXNhbXBsZXI6
OnByb2Nlc3MoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2luY1Jlc2FtcGxlcjo6cHJvY2Vzcyk6CisKIDIwMTEtMTItMDUgIFJhZmFlbCBXZWluc3RlaW4g
IDxyYWZhZWx3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbTXV0YXRpb25PYnNlcnZlcnNdIFN1
cHBvcnQgJ2F0dHJpYnV0ZXMnIG11dGF0aW9uIHJlY29yZHMgZm9yIGVsZW1lbnQucmVtb3ZlQXR0
cmlidXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVz
YW1wbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIu
Y3BwCmluZGV4IGE5NDNkZjIuLjgwNTU0YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL1NpbmNSZXNhbXBsZXIuY3BwCkBAIC0zNSw2ICszNSwxMCBAQAogI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAorI2lmZGVmIF9fU1NF
Ml9fCisjaW5jbHVkZSA8ZW1taW50cmluLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0
ZDsKIAogLy8gSW5wdXQgYnVmZmVyIGxheW91dCwgZGl2aWRpbmcgdGhlIHRvdGFsIGJ1ZmZlciBp
bnRvIHJlZ2lvbnMgKHIwIC0gcjUpOgpAQCAtMjQ2LDggKzI1MCw2IEBAIHZvaWQgU2luY1Jlc2Ft
cGxlcjo6cHJvY2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgZmxvYXQq
IGRlc3RpbmF0CiAgICAgICAgICAgICAvLyBHZW5lcmF0ZSBhIHNpbmdsZSBvdXRwdXQgc2FtcGxl
LiAKICAgICAgICAgICAgIGludCBuID0gbV9rZXJuZWxTaXplOwogCi0gICAgICAgICAgICAvLyBG
SVhNRTogYWRkIFNJTUQgb3B0aW1pemF0aW9ucyBmb3IgdGhlIGZvbGxvd2luZy4gVGhlIHNjYWxh
ciBjb2RlLXBhdGggY2FuIHByb2JhYmx5IGFsc28gYmUgb3B0aW1pemVkIGJldHRlci4KLQogI2Rl
ZmluZSBDT05WT0xWRV9PTkVfU0FNUExFICAgICAgXAogICAgICAgICAgICAgaW5wdXQgPSAqaW5w
dXRQKys7ICAgXAogICAgICAgICAgICAgc3VtMSArPSBpbnB1dCAqICprMTsgXApAQCAtMjU1LDYg
KzI1Nyw4NiBAQCB2b2lkIFNpbmNSZXNhbXBsZXI6OnByb2Nlc3MoQXVkaW9Tb3VyY2VQcm92aWRl
ciogc291cmNlUHJvdmlkZXIsIGZsb2F0KiBkZXN0aW5hdAogICAgICAgICAgICAgKytrMTsgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgKytrMjsKIAorI2lmZGVmIF9fU1NFMl9fCisgICAg
ICAgICAgICBmbG9hdCBpbnB1dDsKKworICAgICAgICAgICAgLy8gSWYgdGhlIHNvdXJjZVAgYWRk
cmVzcyBpcyBub3QgMTYtYnl0ZSBhbGlnbmVkLCB0aGUgZmlyc3Qgc2V2ZXJhbCBmcmFtZXMgKGF0
IG1vc3QgdGhyZWUpIHNob3VsZCBiZSBwcm9jZXNzZWQgc2VwZXJhdGVseS4KKyAgICAgICAgICAg
IHdoaWxlICgocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGlucHV0UCkgJiAweDBGKSAmJiBu
KSB7CisgICAgICAgICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRQorICAgICAgICAgICAgICAg
IG4tLTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IHRoZSBpbnB1dFAgaXMg
YWxpZ25lZCBhbmQgc3RhcnQgdG8gYXBwbHkgU1NFLgorICAgICAgICAgICAgZmxvYXQqIGVuZFAg
PSBpbnB1dFAgKyBuIC0gbiAlIDQ7CisgICAgICAgICAgICBfX20xMjggbUlucHV0OworICAgICAg
ICAgICAgX19tMTI4IG1LMTsKKyAgICAgICAgICAgIF9fbTEyOCBtSzI7CisgICAgICAgICAgICBf
X20xMjggbXVsMTsKKyAgICAgICAgICAgIF9fbTEyOCBtdWwyOworCisgICAgICAgICAgICBfX20x
Mjggc3VtczEgPSBfbW1fc2V0emVyb19wcygpOworICAgICAgICAgICAgX19tMTI4IHN1bXMyID0g
X21tX3NldHplcm9fcHMoKTsKKyAgICAgICAgICAgIGJvb2wgazFBbGlnbmVkID0gIShyZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oazEpICYgMHgwRik7CisgICAgICAgICAgICBib29sIGsyQWxp
Z25lZCA9ICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGsyKSAmIDB4MEYpOworCisjZGVm
aW5lIENPTlZPTFZFXzRfU0FNUExFICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBt
dWwxID0gX21tX211bF9wcyhtSW5wdXQsIG1LMSk7ICBcCisgICAgICAgICAgICBtdWwyID0gX21t
X211bF9wcyhtSW5wdXQsIG1LMik7ICBcCisgICAgICAgICAgICBzdW1zMSA9IF9tbV9hZGRfcHMo
c3VtczEsIG11bDEpOyBcCisgICAgICAgICAgICBzdW1zMiA9IF9tbV9hZGRfcHMoc3VtczIsIG11
bDIpOyBcCisgICAgICAgICAgICBpbnB1dFAgKz0gNDsgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgICAgICBrMSArPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBrMiArPSA0OworCisgICAgICAgICAgICBpZiAoazFBbGlnbmVkICYmIGsyQWxpZ25lZCkgeyAv
LyBib3RoIGFsaWduZWQKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5wdXRQIDwgZW5kUCkgewor
ICAgICAgICAgICAgICAgICAgICBtSW5wdXQgPSBfbW1fbG9hZF9wcyhpbnB1dFApOworICAgICAg
ICAgICAgICAgICAgICBtSzEgPSBfbW1fbG9hZF9wcyhrMSk7CisgICAgICAgICAgICAgICAgICAg
IG1LMiA9IF9tbV9sb2FkX3BzKGsyKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfNF9T
QU1QTEUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFrMUFsaWdu
ZWQgJiYgazJBbGlnbmVkKSB7IC8vIG9ubHkgazIgYWxpZ25lZAorICAgICAgICAgICAgICAgIHdo
aWxlIChpbnB1dFAgPCBlbmRQKSB7CisgICAgICAgICAgICAgICAgICAgIG1JbnB1dCA9IF9tbV9s
b2FkX3BzKGlucHV0UCk7CisgICAgICAgICAgICAgICAgICAgIG1LMSA9IF9tbV9sb2FkdV9wcyhr
MSk7CisgICAgICAgICAgICAgICAgICAgIG1LMiA9IF9tbV9sb2FkX3BzKGsyKTsKKyAgICAgICAg
ICAgICAgICAgICAgQ09OVk9MVkVfNF9TQU1QTEUKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKGsxQWxpZ25lZCAmJiAhazJBbGlnbmVkKSB7IC8vIG9ubHkgazEgYWxp
Z25lZAorICAgICAgICAgICAgICAgIHdoaWxlIChpbnB1dFAgPCBlbmRQKSB7CisgICAgICAgICAg
ICAgICAgICAgIG1JbnB1dCA9IF9tbV9sb2FkX3BzKGlucHV0UCk7CisgICAgICAgICAgICAgICAg
ICAgIG1LMSA9IF9tbV9sb2FkX3BzKGsxKTsKKyAgICAgICAgICAgICAgICAgICAgbUsyID0gX21t
X2xvYWR1X3BzKGsyKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfNF9TQU1QTEUKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBib3RoIG5vbi1hbGlnbmVk
CisgICAgICAgICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAgICAgICAg
ICAgICAgbUlucHV0ID0gX21tX2xvYWRfcHMoaW5wdXRQKTsKKyAgICAgICAgICAgICAgICAgICAg
bUsxID0gX21tX2xvYWR1X3BzKGsxKTsKKyAgICAgICAgICAgICAgICAgICAgbUsyID0gX21tX2xv
YWR1X3BzKGsyKTsKKyAgICAgICAgICAgICAgICAgICAgQ09OVk9MVkVfNF9TQU1QTEUKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFN1bW1hcml6ZSB0
aGUgU1NFIHJlc3VsdHMgdG8gc3VtMSBhbmQgc3VtMgorICAgICAgICAgICAgZmxvYXQqIGdyb3Vw
U3VtUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmc3VtczEpOworICAgICAgICAgICAgc3Vt
MSArPSAqZ3JvdXBTdW1QOworICAgICAgICAgICAgc3VtMSArPSAqKGdyb3VwU3VtUCArIDEpOwor
ICAgICAgICAgICAgc3VtMSArPSAqKGdyb3VwU3VtUCArIDIpOworICAgICAgICAgICAgc3VtMSAr
PSAqKGdyb3VwU3VtUCArIDMpOworICAgICAgICAgICAgZ3JvdXBTdW1QID0gcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KCZzdW1zMik7CisgICAgICAgICAgICBzdW0yICs9ICpncm91cFN1bVA7Cisg
ICAgICAgICAgICBzdW0yICs9ICooZ3JvdXBTdW1QICsgMSk7CisgICAgICAgICAgICBzdW0yICs9
ICooZ3JvdXBTdW1QICsgMik7CisgICAgICAgICAgICBzdW0yICs9ICooZ3JvdXBTdW1QICsgMyk7
CisKKyAgICAgICAgICAgIG4gJT0gNDsKKyAgICAgICAgICAgIHdoaWxlIChuKSB7CisgICAgICAg
ICAgICAgICAgQ09OVk9MVkVfT05FX1NBTVBMRQorICAgICAgICAgICAgICAgIG4tLTsKKyAgICAg
ICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIEFSTSBORU9OIG9wdGlt
aXphdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcuIFRoZSBzY2FsYXIgY29kZS1wYXRoIGNhbiBwcm9i
YWJseSBhbHNvIGJlIG9wdGltaXplZCBiZXR0ZXIuCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgZmxvYXQgaW5wdXQ7CiAgICAgICAgICAgICAgICAgCkBAIC0zNjYsNiArNDQ4LDcgQEAg
dm9pZCBTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKEF1ZGlvU291cmNlUHJvdmlkZXIqIHNvdXJjZVBy
b3ZpZGVyLCBmbG9hdCogZGVzdGluYXQKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KKyNlbmRpZgogCiAgICAgICAgICAgICAvLyBMaW5lYXJs
eSBpbnRlcnBvbGF0ZSB0aGUgdHdvICJjb252b2x1dGlvbnMiLgogICAgICAgICAgICAgZG91Ymxl
IHJlc3VsdCA9ICgxLjAgLSBrZXJuZWxJbnRlcnBvbGF0aW9uRmFjdG9yKSAqIHN1bTEgKyBrZXJu
ZWxJbnRlcnBvbGF0aW9uRmFjdG9yICogc3VtMjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118008</attachid>
            <date>2011-12-06 01:58:58 -0800</date>
            <delta_ts>2011-12-07 18:48:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5308</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1MDlmMjEyLi45ODRkZmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMTItMDYgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHRoZSBTU0Ugb3B0aW1pemF0aW9uIGluIFNpbmNSZXNhbXBsZXI6
OnByb2Nlc3MoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIZXJlIGlzIGFib3V0IDcwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiB0aGUgaG90IHNw
b3Qgb2Ygc2FtcGxlIGNvbnZvbHZpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbmNSZXNhbXBsZXI6OnByb2Nlc3Mp
OgorCiAyMDExLTEyLTA1ICBSYWZhZWwgV2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW011dGF0aW9uT2JzZXJ2ZXJzXSBTdXBwb3J0ICdhdHRyaWJ1dGVzJyBtdXRh
dGlvbiByZWNvcmRzIGZvciBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2FtcGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcAppbmRleCBhOTQzZGYyLi44MDU1
NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1w
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVy
LmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZmRlZiBfX1NTRTJfXworI2luY2x1ZGUgPGVtbWludHJp
bi5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIC8vIElucHV0IGJ1ZmZlciBs
YXlvdXQsIGRpdmlkaW5nIHRoZSB0b3RhbCBidWZmZXIgaW50byByZWdpb25zIChyMCAtIHI1KToK
QEAgLTI0Niw4ICsyNTAsNiBAQCB2b2lkIFNpbmNSZXNhbXBsZXI6OnByb2Nlc3MoQXVkaW9Tb3Vy
Y2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGZsb2F0KiBkZXN0aW5hdAogICAgICAgICAgICAg
Ly8gR2VuZXJhdGUgYSBzaW5nbGUgb3V0cHV0IHNhbXBsZS4gCiAgICAgICAgICAgICBpbnQgbiA9
IG1fa2VybmVsU2l6ZTsKIAotICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBTSU1EIG9wdGltaXph
dGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcuIFRoZSBzY2FsYXIgY29kZS1wYXRoIGNhbiBwcm9iYWJs
eSBhbHNvIGJlIG9wdGltaXplZCBiZXR0ZXIuCi0KICNkZWZpbmUgQ09OVk9MVkVfT05FX1NBTVBM
RSAgICAgIFwKICAgICAgICAgICAgIGlucHV0ID0gKmlucHV0UCsrOyAgIFwKICAgICAgICAgICAg
IHN1bTEgKz0gaW5wdXQgKiAqazE7IFwKQEAgLTI1NSw2ICsyNTcsODYgQEAgdm9pZCBTaW5jUmVz
YW1wbGVyOjpwcm9jZXNzKEF1ZGlvU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyLCBmbG9h
dCogZGVzdGluYXQKICAgICAgICAgICAgICsrazE7ICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgICsrazI7CiAKKyNpZmRlZiBfX1NTRTJfXworICAgICAgICAgICAgZmxvYXQgaW5wdXQ7CisK
KyAgICAgICAgICAgIC8vIElmIHRoZSBzb3VyY2VQIGFkZHJlc3MgaXMgbm90IDE2LWJ5dGUgYWxp
Z25lZCwgdGhlIGZpcnN0IHNldmVyYWwgZnJhbWVzIChhdCBtb3N0IHRocmVlKSBzaG91bGQgYmUg
cHJvY2Vzc2VkIHNlcGVyYXRlbHkuCisgICAgICAgICAgICB3aGlsZSAoKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihpbnB1dFApICYgMHgwRikgJiYgbikgeworICAgICAgICAgICAgICAgIENP
TlZPTFZFX09ORV9TQU1QTEUKKyAgICAgICAgICAgICAgICBuLS07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIE5vdyB0aGUgaW5wdXRQIGlzIGFsaWduZWQgYW5kIHN0YXJ0IHRvIGFw
cGx5IFNTRS4KKyAgICAgICAgICAgIGZsb2F0KiBlbmRQID0gaW5wdXRQICsgbiAtIG4gJSA0Owor
ICAgICAgICAgICAgX19tMTI4IG1JbnB1dDsKKyAgICAgICAgICAgIF9fbTEyOCBtSzE7CisgICAg
ICAgICAgICBfX20xMjggbUsyOworICAgICAgICAgICAgX19tMTI4IG11bDE7CisgICAgICAgICAg
ICBfX20xMjggbXVsMjsKKworICAgICAgICAgICAgX19tMTI4IHN1bXMxID0gX21tX3NldHplcm9f
cHMoKTsKKyAgICAgICAgICAgIF9fbTEyOCBzdW1zMiA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgICAg
ICAgICAgICBib29sIGsxQWxpZ25lZCA9ICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGsx
KSAmIDB4MEYpOworICAgICAgICAgICAgYm9vbCBrMkFsaWduZWQgPSAhKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihrMikgJiAweDBGKTsKKworI2RlZmluZSBDT05WT0xWRV80X1NBTVBMRSAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgbXVsMSA9IF9tbV9tdWxfcHMobUlucHV0
LCBtSzEpOyAgXAorICAgICAgICAgICAgbXVsMiA9IF9tbV9tdWxfcHMobUlucHV0LCBtSzIpOyAg
XAorICAgICAgICAgICAgc3VtczEgPSBfbW1fYWRkX3BzKHN1bXMxLCBtdWwxKTsgXAorICAgICAg
ICAgICAgc3VtczIgPSBfbW1fYWRkX3BzKHN1bXMyLCBtdWwyKTsgXAorICAgICAgICAgICAgaW5w
dXRQICs9IDQ7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgazEgKz0gNDsgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgazIgKz0gNDsKKworICAgICAgICAg
ICAgaWYgKGsxQWxpZ25lZCAmJiBrMkFsaWduZWQpIHsgLy8gYm90aCBhbGlnbmVkCisgICAgICAg
ICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAgICAgICAgICAgICAgbUlu
cHV0ID0gX21tX2xvYWRfcHMoaW5wdXRQKTsKKyAgICAgICAgICAgICAgICAgICAgbUsxID0gX21t
X2xvYWRfcHMoazEpOworICAgICAgICAgICAgICAgICAgICBtSzIgPSBfbW1fbG9hZF9wcyhrMik7
CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFXzRfU0FNUExFCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmICghazFBbGlnbmVkICYmIGsyQWxpZ25lZCkgeyAvLyBv
bmx5IGsyIGFsaWduZWQKKyAgICAgICAgICAgICAgICB3aGlsZSAoaW5wdXRQIDwgZW5kUCkgewor
ICAgICAgICAgICAgICAgICAgICBtSW5wdXQgPSBfbW1fbG9hZF9wcyhpbnB1dFApOworICAgICAg
ICAgICAgICAgICAgICBtSzEgPSBfbW1fbG9hZHVfcHMoazEpOworICAgICAgICAgICAgICAgICAg
ICBtSzIgPSBfbW1fbG9hZF9wcyhrMik7CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFXzRf
U0FNUExFCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChrMUFsaWdu
ZWQgJiYgIWsyQWxpZ25lZCkgeyAvLyBvbmx5IGsxIGFsaWduZWQKKyAgICAgICAgICAgICAgICB3
aGlsZSAoaW5wdXRQIDwgZW5kUCkgeworICAgICAgICAgICAgICAgICAgICBtSW5wdXQgPSBfbW1f
bG9hZF9wcyhpbnB1dFApOworICAgICAgICAgICAgICAgICAgICBtSzEgPSBfbW1fbG9hZF9wcyhr
MSk7CisgICAgICAgICAgICAgICAgICAgIG1LMiA9IF9tbV9sb2FkdV9wcyhrMik7CisgICAgICAg
ICAgICAgICAgICAgIENPTlZPTFZFXzRfU0FNUExFCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsgLy8gYm90aCBub24tYWxpZ25lZAorICAgICAgICAgICAgICAgIHdoaWxl
IChpbnB1dFAgPCBlbmRQKSB7CisgICAgICAgICAgICAgICAgICAgIG1JbnB1dCA9IF9tbV9sb2Fk
X3BzKGlucHV0UCk7CisgICAgICAgICAgICAgICAgICAgIG1LMSA9IF9tbV9sb2FkdV9wcyhrMSk7
CisgICAgICAgICAgICAgICAgICAgIG1LMiA9IF9tbV9sb2FkdV9wcyhrMik7CisgICAgICAgICAg
ICAgICAgICAgIENPTlZPTFZFXzRfU0FNUExFCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBTdW1tYXJpemUgdGhlIFNTRSByZXN1bHRzIHRvIHN1bTEg
YW5kIHN1bTIKKyAgICAgICAgICAgIGZsb2F0KiBncm91cFN1bVAgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oJnN1bXMxKTsKKyAgICAgICAgICAgIHN1bTEgKz0gKmdyb3VwU3VtUDsKKyAgICAg
ICAgICAgIHN1bTEgKz0gKihncm91cFN1bVAgKyAxKTsKKyAgICAgICAgICAgIHN1bTEgKz0gKihn
cm91cFN1bVAgKyAyKTsKKyAgICAgICAgICAgIHN1bTEgKz0gKihncm91cFN1bVAgKyAzKTsKKyAg
ICAgICAgICAgIGdyb3VwU3VtUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmc3VtczIpOwor
ICAgICAgICAgICAgc3VtMiArPSAqZ3JvdXBTdW1QOworICAgICAgICAgICAgc3VtMiArPSAqKGdy
b3VwU3VtUCArIDEpOworICAgICAgICAgICAgc3VtMiArPSAqKGdyb3VwU3VtUCArIDIpOworICAg
ICAgICAgICAgc3VtMiArPSAqKGdyb3VwU3VtUCArIDMpOworCisgICAgICAgICAgICBuICU9IDQ7
CisgICAgICAgICAgICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9T
QU1QTEUKKyAgICAgICAgICAgICAgICBuLS07CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAg
ICAgICAgLy8gRklYTUU6IGFkZCBBUk0gTkVPTiBvcHRpbWl6YXRpb25zIGZvciB0aGUgZm9sbG93
aW5nLiBUaGUgc2NhbGFyIGNvZGUtcGF0aCBjYW4gcHJvYmFibHkgYWxzbyBiZSBvcHRpbWl6ZWQg
YmV0dGVyLgogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZsb2F0IGlucHV0OwogICAg
ICAgICAgICAgICAgIApAQCAtMzY2LDYgKzQ0OCw3IEBAIHZvaWQgU2luY1Jlc2FtcGxlcjo6cHJv
Y2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlciwgZmxvYXQqIGRlc3RpbmF0
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CisjZW5kaWYKIAogICAgICAgICAgICAgLy8gTGluZWFybHkgaW50ZXJwb2xhdGUgdGhlIHR3byAi
Y29udm9sdXRpb25zIi4KICAgICAgICAgICAgIGRvdWJsZSByZXN1bHQgPSAoMS4wIC0ga2VybmVs
SW50ZXJwb2xhdGlvbkZhY3RvcikgKiBzdW0xICsga2VybmVsSW50ZXJwb2xhdGlvbkZhY3RvciAq
IHN1bTI7Cg==
</data>
<flag name="review"
          id="117653"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="117654"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118305</attachid>
            <date>2011-12-07 18:48:14 -0800</date>
            <delta_ts>2011-12-07 20:32:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5163</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZmZmM2E3Li45ZjM2Zjg1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMTItMDcgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHRoZSBTU0Ugb3B0aW1pemF0aW9uIGluIFNpbmNSZXNhbXBsZXI6
OnByb2Nlc3MoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIZXJlIGlzIGFib3V0IDcwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiB0aGUgaG90IHNw
b3Qgb2Ygc2FtcGxlIGNvbnZvbHZpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcDoKKwogMjAxMS0xMi0wNyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gSW50cm9kdWNlIEFzc2VydE1hdGNoaW5nRW51bXMu
Y3BwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2Ft
cGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNw
cAppbmRleCBhOTQzZGYyLi45ODc1NGY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJB
dWRpb0J1cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZmRlZiBfX1NTRTJf
XworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIC8vIElucHV0IGJ1ZmZlciBsYXlvdXQsIGRpdmlkaW5nIHRoZSB0b3RhbCBidWZmZXIgaW50
byByZWdpb25zIChyMCAtIHI1KToKQEAgLTI0Niw4ICsyNTAsNiBAQCB2b2lkIFNpbmNSZXNhbXBs
ZXI6OnByb2Nlc3MoQXVkaW9Tb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGZsb2F0KiBk
ZXN0aW5hdAogICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBzaW5nbGUgb3V0cHV0IHNhbXBsZS4g
CiAgICAgICAgICAgICBpbnQgbiA9IG1fa2VybmVsU2l6ZTsKIAotICAgICAgICAgICAgLy8gRklY
TUU6IGFkZCBTSU1EIG9wdGltaXphdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcuIFRoZSBzY2FsYXIg
Y29kZS1wYXRoIGNhbiBwcm9iYWJseSBhbHNvIGJlIG9wdGltaXplZCBiZXR0ZXIuCi0KICNkZWZp
bmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgIFwKICAgICAgICAgICAgIGlucHV0ID0gKmlucHV0
UCsrOyAgIFwKICAgICAgICAgICAgIHN1bTEgKz0gaW5wdXQgKiAqazE7IFwKQEAgLTI1Nyw2ICsy
NTksNzYgQEAgdm9pZCBTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKEF1ZGlvU291cmNlUHJvdmlkZXIq
IHNvdXJjZVByb3ZpZGVyLCBmbG9hdCogZGVzdGluYXQKIAogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGZsb2F0IGlucHV0OworCisjaWZkZWYgX19TU0UyX18KKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgc291cmNlUCBhZGRyZXNzIGlzIG5vdCAxNi1ieXRlIGFsaWduZWQsIHRoZSBm
aXJzdCBzZXZlcmFsIGZyYW1lcyAoYXQgbW9zdCB0aHJlZSkgc2hvdWxkIGJlIHByb2Nlc3NlZCBz
ZXBlcmF0ZWx5LgorICAgICAgICAgICAgICAgIHdoaWxlICgocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGlucHV0UCkgJiAweDBGKSAmJiBuKSB7CisgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUKKyAgICAgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGUgaW5wdXRQIGlzIGFsaWduZWQgYW5kIHN0
YXJ0IHRvIGFwcGx5IFNTRS4KKyAgICAgICAgICAgICAgICBmbG9hdCogZW5kUCA9IGlucHV0UCAr
IG4gLSBuICUgNDsKKyAgICAgICAgICAgICAgICBfX20xMjggbUlucHV0OworICAgICAgICAgICAg
ICAgIF9fbTEyOCBtSzE7CisgICAgICAgICAgICAgICAgX19tMTI4IG1LMjsKKyAgICAgICAgICAg
ICAgICBfX20xMjggbXVsMTsKKyAgICAgICAgICAgICAgICBfX20xMjggbXVsMjsKKworICAgICAg
ICAgICAgICAgIF9fbTEyOCBzdW1zMSA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgICAgICAgICAgICAg
ICAgX19tMTI4IHN1bXMyID0gX21tX3NldHplcm9fcHMoKTsKKyAgICAgICAgICAgICAgICBib29s
IGsxQWxpZ25lZCA9ICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGsxKSAmIDB4MEYpOwor
ICAgICAgICAgICAgICAgIGJvb2wgazJBbGlnbmVkID0gIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oazIpICYgMHgwRik7CisKKyNkZWZpbmUgTE9BRF9EQVRBKGwxLCBsMikgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbUlucHV0ID0gX21tX2xvYWRfcHMoaW5w
dXRQKTsgICAgXAorICAgICAgICAgICAgICAgIG1LMSA9IF9tbV8jI2wxIyNfcHMoazEpOyAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBtSzIgPSBfbW1fIyNsMiMjX3BzKGsyKTsKKworI2RlZmlu
ZSBDT05WT0xWRV80X1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBtdWwxID0gX21tX211bF9wcyhtSW5wdXQsIG1LMSk7ICBcCisgICAgICAgICAgICAgICAg
bXVsMiA9IF9tbV9tdWxfcHMobUlucHV0LCBtSzIpOyAgXAorICAgICAgICAgICAgICAgIHN1bXMx
ID0gX21tX2FkZF9wcyhzdW1zMSwgbXVsMSk7IFwKKyAgICAgICAgICAgICAgICBzdW1zMiA9IF9t
bV9hZGRfcHMoc3VtczIsIG11bDIpOyBcCisgICAgICAgICAgICAgICAgaW5wdXRQICs9IDQ7ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGsxICs9IDQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBrMiArPSA0OworCisgICAgICAgICAgICAg
ICAgaWYgKGsxQWxpZ25lZCAmJiBrMkFsaWduZWQpIHsgLy8gYm90aCBhbGlnbmVkCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChpbnB1dFAgPCBlbmRQKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBMT0FEX0RBVEEobG9hZCwgbG9hZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghazFBbGlnbmVkICYmIGsyQWxpZ25lZCkgeyAvLyBvbmx5IGsyIGFsaWduZWQKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIExPQURfREFUQShsb2FkdSwgbG9hZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IENPTlZPTFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChrMUFsaWduZWQgJiYgIWsyQWxpZ25lZCkgeyAvLyBvbmx5IGsxIGFsaWdu
ZWQKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExPQURfREFUQShsb2FkLCBsb2FkdSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENPTlZPTFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsgLy8gYm90aCBub24tYWxpZ25lZAorICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoaW5wdXRQIDwgZW5kUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTE9BRF9E
QVRBKGxvYWR1LCBsb2FkdSkKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFXzRfU0FN
UExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gU3VtbWFyaXplIHRoZSBTU0UgcmVzdWx0cyB0byBzdW0xIGFuZCBzdW0yCisg
ICAgICAgICAgICAgICAgZmxvYXQqIGdyb3VwU3VtUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQq
Pigmc3VtczEpOworICAgICAgICAgICAgICAgIHN1bTEgKz0gZ3JvdXBTdW1QWzBdICsgZ3JvdXBT
dW1QWzFdICsgZ3JvdXBTdW1QWzJdICsgZ3JvdXBTdW1QWzNdOworICAgICAgICAgICAgICAgIGdy
b3VwU3VtUCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPigmc3VtczIpOworICAgICAgICAgICAg
ICAgIHN1bTIgKz0gZ3JvdXBTdW1QWzBdICsgZ3JvdXBTdW1QWzFdICsgZ3JvdXBTdW1QWzJdICsg
Z3JvdXBTdW1QWzNdOworCisgICAgICAgICAgICAgICAgbiAlPSA0OworICAgICAgICAgICAgICAg
IHdoaWxlIChuKSB7CisgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFX09ORV9TQU1QTEUKKyAg
ICAgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IGFkZCBBUk0gTkVPTiBvcHRpbWl6YXRpb25zIGZvciB0aGUgZm9s
bG93aW5nLiBUaGUgc2NhbGFyIGNvZGUtcGF0aCBjYW4gcHJvYmFibHkgYWxzbyBiZSBvcHRpbWl6
ZWQgYmV0dGVyLgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIE9wdGltaXpl
IHNpemUgMzIgYW5kIHNpemUgNjQga2VybmVscyBieSB1bnJvbGxpbmcgdGhlIHdoaWxlIGxvb3Au
CiAgICAgICAgICAgICAgICAgLy8gQSAyMCAtIDMwJSBzcGVlZCBpbXByb3ZlbWVudCB3YXMgbWVh
c3VyZWQgaW4gc29tZSBjYXNlcyBieSB1c2luZyB0aGlzIGFwcHJvYWNoLgpAQCAtMzY1LDYgKzQz
Nyw3IEBAIHZvaWQgU2luY1Jlc2FtcGxlcjo6cHJvY2VzcyhBdWRpb1NvdXJjZVByb3ZpZGVyKiBz
b3VyY2VQcm92aWRlciwgZmxvYXQqIGRlc3RpbmF0CiAgICAgICAgICAgICAgICAgICAgICAgICBD
T05WT0xWRV9PTkVfU0FNUExFCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CisjZW5kaWYKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLy8gTGluZWFybHkgaW50
ZXJwb2xhdGUgdGhlIHR3byAiY29udm9sdXRpb25zIi4K
</data>
<flag name="review"
          id="118003"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="118004"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118320</attachid>
            <date>2011-12-07 20:32:35 -0800</date>
            <delta_ts>2011-12-07 21:23:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>5164</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZmZmM2E3Li45ZjM2Zjg1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTEtMTItMDcgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgSW1wbGVtZW50IHRoZSBTU0Ugb3B0aW1pemF0aW9uIGluIFNpbmNSZXNhbXBsZXI6
OnByb2Nlc3MoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzM3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBIZXJlIGlzIGFib3V0IDcwJSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBvbiB0aGUgaG90IHNw
b3Qgb2Ygc2FtcGxlIGNvbnZvbHZpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9TaW5j
UmVzYW1wbGVyLmNwcDoKKwogMjAxMS0xMi0wNyAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAc2Ft
c3VuZy5jb20+CiAKICAgICAgICAgW0VGTF0gSW50cm9kdWNlIEFzc2VydE1hdGNoaW5nRW51bXMu
Y3BwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vU2luY1Jlc2Ft
cGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNw
cAppbmRleCBhOTQzZGYyLi4wZTRiODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9TaW5jUmVzYW1wbGVyLmNwcApAQCAtMzUsNiArMzUsMTAgQEAKICNpbmNsdWRlICJB
dWRpb0J1cy5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKKyNpZmRlZiBfX1NTRTJf
XworI2luY2x1ZGUgPGVtbWludHJpbi5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiAKIC8vIElucHV0IGJ1ZmZlciBsYXlvdXQsIGRpdmlkaW5nIHRoZSB0b3RhbCBidWZmZXIgaW50
byByZWdpb25zIChyMCAtIHI1KToKQEAgLTI0Niw4ICsyNTAsNiBAQCB2b2lkIFNpbmNSZXNhbXBs
ZXI6OnByb2Nlc3MoQXVkaW9Tb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIsIGZsb2F0KiBk
ZXN0aW5hdAogICAgICAgICAgICAgLy8gR2VuZXJhdGUgYSBzaW5nbGUgb3V0cHV0IHNhbXBsZS4g
CiAgICAgICAgICAgICBpbnQgbiA9IG1fa2VybmVsU2l6ZTsKIAotICAgICAgICAgICAgLy8gRklY
TUU6IGFkZCBTSU1EIG9wdGltaXphdGlvbnMgZm9yIHRoZSBmb2xsb3dpbmcuIFRoZSBzY2FsYXIg
Y29kZS1wYXRoIGNhbiBwcm9iYWJseSBhbHNvIGJlIG9wdGltaXplZCBiZXR0ZXIuCi0KICNkZWZp
bmUgQ09OVk9MVkVfT05FX1NBTVBMRSAgICAgIFwKICAgICAgICAgICAgIGlucHV0ID0gKmlucHV0
UCsrOyAgIFwKICAgICAgICAgICAgIHN1bTEgKz0gaW5wdXQgKiAqazE7IFwKQEAgLTI1Nyw2ICsy
NTksNzYgQEAgdm9pZCBTaW5jUmVzYW1wbGVyOjpwcm9jZXNzKEF1ZGlvU291cmNlUHJvdmlkZXIq
IHNvdXJjZVByb3ZpZGVyLCBmbG9hdCogZGVzdGluYXQKIAogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGZsb2F0IGlucHV0OworCisjaWZkZWYgX19TU0UyX18KKyAgICAgICAgICAgICAg
ICAvLyBJZiB0aGUgc291cmNlUCBhZGRyZXNzIGlzIG5vdCAxNi1ieXRlIGFsaWduZWQsIHRoZSBm
aXJzdCBzZXZlcmFsIGZyYW1lcyAoYXQgbW9zdCB0aHJlZSkgc2hvdWxkIGJlIHByb2Nlc3NlZCBz
ZXBlcmF0ZWx5LgorICAgICAgICAgICAgICAgIHdoaWxlICgocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGlucHV0UCkgJiAweDBGKSAmJiBuKSB7CisgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFX09ORV9TQU1QTEUKKyAgICAgICAgICAgICAgICAgICAgbi0tOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIE5vdyB0aGUgaW5wdXRQIGlzIGFsaWduZWQgYW5kIHN0
YXJ0IHRvIGFwcGx5IFNTRS4KKyAgICAgICAgICAgICAgICBmbG9hdCogZW5kUCA9IGlucHV0UCAr
IG4gLSBuICUgNDsKKyAgICAgICAgICAgICAgICBfX20xMjggbUlucHV0OworICAgICAgICAgICAg
ICAgIF9fbTEyOCBtSzE7CisgICAgICAgICAgICAgICAgX19tMTI4IG1LMjsKKyAgICAgICAgICAg
ICAgICBfX20xMjggbXVsMTsKKyAgICAgICAgICAgICAgICBfX20xMjggbXVsMjsKKworICAgICAg
ICAgICAgICAgIF9fbTEyOCBzdW1zMSA9IF9tbV9zZXR6ZXJvX3BzKCk7CisgICAgICAgICAgICAg
ICAgX19tMTI4IHN1bXMyID0gX21tX3NldHplcm9fcHMoKTsKKyAgICAgICAgICAgICAgICBib29s
IGsxQWxpZ25lZCA9ICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGsxKSAmIDB4MEYpOwor
ICAgICAgICAgICAgICAgIGJvb2wgazJBbGlnbmVkID0gIShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oazIpICYgMHgwRik7CisKKyNkZWZpbmUgTE9BRF9EQVRBKGwxLCBsMikgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgbUlucHV0ID0gX21tX2xvYWRfcHMoaW5w
dXRQKTsgICAgXAorICAgICAgICAgICAgICAgIG1LMSA9IF9tbV8jI2wxIyNfcHMoazEpOyAgICAg
ICAgIFwKKyAgICAgICAgICAgICAgICBtSzIgPSBfbW1fIyNsMiMjX3BzKGsyKTsKKworI2RlZmlu
ZSBDT05WT0xWRV80X1NBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICBtdWwxID0gX21tX211bF9wcyhtSW5wdXQsIG1LMSk7ICBcCisgICAgICAgICAgICAgICAg
bXVsMiA9IF9tbV9tdWxfcHMobUlucHV0LCBtSzIpOyAgXAorICAgICAgICAgICAgICAgIHN1bXMx
ID0gX21tX2FkZF9wcyhzdW1zMSwgbXVsMSk7IFwKKyAgICAgICAgICAgICAgICBzdW1zMiA9IF9t
bV9hZGRfcHMoc3VtczIsIG11bDIpOyBcCisgICAgICAgICAgICAgICAgaW5wdXRQICs9IDQ7ICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGsxICs9IDQ7ICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBrMiArPSA0OworCisgICAgICAgICAgICAg
ICAgaWYgKGsxQWxpZ25lZCAmJiBrMkFsaWduZWQpIHsgLy8gYm90aCBhbGlnbmVkCisgICAgICAg
ICAgICAgICAgICAgIHdoaWxlIChpbnB1dFAgPCBlbmRQKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBMT0FEX0RBVEEobG9hZCwgbG9hZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlZP
TFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl
bHNlIGlmICghazFBbGlnbmVkICYmIGsyQWxpZ25lZCkgeyAvLyBvbmx5IGsyIGFsaWduZWQKKyAg
ICAgICAgICAgICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIExPQURfREFUQShsb2FkdSwgbG9hZCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IENPTlZPTFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChrMUFsaWduZWQgJiYgIWsyQWxpZ25lZCkgeyAvLyBvbmx5IGsxIGFsaWdu
ZWQKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGlucHV0UCA8IGVuZFApIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIExPQURfREFUQShsb2FkLCBsb2FkdSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIENPTlZPTFZFXzRfU0FNUExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsgLy8gYm90aCBub24tYWxpZ25lZAorICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoaW5wdXRQIDwgZW5kUCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTE9BRF9E
QVRBKGxvYWR1LCBsb2FkdSkKKyAgICAgICAgICAgICAgICAgICAgICAgIENPTlZPTFZFXzRfU0FN
UExFUworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgLy8gU3VtbWFyaXplIHRoZSBTU0UgcmVzdWx0cyB0byBzdW0xIGFuZCBzdW0yLgor
ICAgICAgICAgICAgICAgIGZsb2F0KiBncm91cFN1bVAgPSByZWludGVycHJldF9jYXN0PGZsb2F0
Kj4oJnN1bXMxKTsKKyAgICAgICAgICAgICAgICBzdW0xICs9IGdyb3VwU3VtUFswXSArIGdyb3Vw
U3VtUFsxXSArIGdyb3VwU3VtUFsyXSArIGdyb3VwU3VtUFszXTsKKyAgICAgICAgICAgICAgICBn
cm91cFN1bVAgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oJnN1bXMyKTsKKyAgICAgICAgICAg
ICAgICBzdW0yICs9IGdyb3VwU3VtUFswXSArIGdyb3VwU3VtUFsxXSArIGdyb3VwU3VtUFsyXSAr
IGdyb3VwU3VtUFszXTsKKworICAgICAgICAgICAgICAgIG4gJT0gNDsKKyAgICAgICAgICAgICAg
ICB3aGlsZSAobikgeworICAgICAgICAgICAgICAgICAgICBDT05WT0xWRV9PTkVfU0FNUExFCisg
ICAgICAgICAgICAgICAgICAgIG4tLTsKKyAgICAgICAgICAgICAgICB9CisjZWxzZQorICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBhZGQgQVJNIE5FT04gb3B0aW1pemF0aW9ucyBmb3IgdGhlIGZv
bGxvd2luZy4gVGhlIHNjYWxhciBjb2RlLXBhdGggY2FuIHByb2JhYmx5IGFsc28gYmUgb3B0aW1p
emVkIGJldHRlci4KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBPcHRpbWl6
ZSBzaXplIDMyIGFuZCBzaXplIDY0IGtlcm5lbHMgYnkgdW5yb2xsaW5nIHRoZSB3aGlsZSBsb29w
LgogICAgICAgICAgICAgICAgIC8vIEEgMjAgLSAzMCUgc3BlZWQgaW1wcm92ZW1lbnQgd2FzIG1l
YXN1cmVkIGluIHNvbWUgY2FzZXMgYnkgdXNpbmcgdGhpcyBhcHByb2FjaC4KQEAgLTM2NSw2ICs0
MzcsNyBAQCB2b2lkIFNpbmNSZXNhbXBsZXI6OnByb2Nlc3MoQXVkaW9Tb3VyY2VQcm92aWRlciog
c291cmNlUHJvdmlkZXIsIGZsb2F0KiBkZXN0aW5hdAogICAgICAgICAgICAgICAgICAgICAgICAg
Q09OVk9MVkVfT05FX1NBTVBMRQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQorI2VuZGlmCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIExpbmVhcmx5IGlu
dGVycG9sYXRlIHRoZSB0d28gImNvbnZvbHV0aW9ucyIuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>