<?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>75522</bug_id>
          
          <creation_ts>2012-01-03 21:44:29 -0800</creation_ts>
          <short_desc>Enable IPP for FFTFrame</short_desc>
          <delta_ts>2012-02-07 18:52:22 -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>
          
          <blocked>77509</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Xingnan Wang">xingnan.wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>dglazkov</cc>
    
    <cc>james.wei</cc>
    
    <cc>kbr</cc>
    
    <cc>rtoy</cc>
    
    <cc>s.choi</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>529318</commentid>
    <comment_count>0</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-03 21:44:29 -0800</bug_when>
    <thetext>Add FFTFrameIPP as another backend of FFT in web audio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529330</commentid>
    <comment_count>1</comment_count>
      <attachid>121060</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-03 21:56:53 -0800</bug_when>
    <thetext>Created attachment 121060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529334</commentid>
    <comment_count>2</comment_count>
      <attachid>121062</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-03 22:03:35 -0800</bug_when>
    <thetext>Created attachment 121062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529341</commentid>
    <comment_count>3</comment_count>
      <attachid>121062</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-03 22:13:52 -0800</bug_when>
    <thetext>Comment on attachment 121062
Patch

Attachment 121062 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10954796</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529378</commentid>
    <comment_count>4</comment_count>
      <attachid>121075</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-03 23:08:37 -0800</bug_when>
    <thetext>Created attachment 121075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529717</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 13:41:16 -0800</bug_when>
    <thetext>Thanks for the patch!  From what I understand, IPP is among the fastest, so it&apos;s great to have it as an option.  I&apos;ll have a closer look in a little while, but I wanted to ask about testing...

The timing of this patch is very good, since Ray is about to add a new very important layout test which will (indirectly) test if this code is working correctly or not:
https://bugs.webkit.org/show_bug.cgi?id=75126

Have you tested this code in any way?  For example, have you tried running a Web Audio API demo such as:
http://chromium.googlecode.com/svn/trunk/samples/audio/convolution-effects.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529909</commentid>
    <comment_count>6</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 17:49:25 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Thanks for the patch!  From what I understand, IPP is among the fastest, so it&apos;s great to have it as an option.  I&apos;ll have a closer look in a little while, but I wanted to ask about testing...
&gt; 
&gt; The timing of this patch is very good, since Ray is about to add a new very important layout test which will (indirectly) test if this code is working correctly or not:
&gt; https://bugs.webkit.org/show_bug.cgi?id=75126
&gt; 
&gt; Have you tested this code in any way?  For example, have you tried running a Web Audio API demo such as:
&gt; http://chromium.googlecode.com/svn/trunk/samples/audio/convolution-effects.html

Yes, I did some test for FFTFrameIPP.
For the correctness, I tried to run http://chromium.googlecode.com/svn/trunk/samples/audio/convolution-effects.html
but it always failed to load the page (maybe network reason), so wrote a simple test case using ConvolverNode and it was OK.
Also I tried to run the drum machine (http://chromium.googlecode.com/svn/trunk/samples/audio/shiny-drum-machine.html), it works very well.
For the performance, I roughly did a function test in ConvolverNode::process(). 
It boosted about 20% if we used accurate DFT in IPP(ippAlgHintFast).
It boosted about 100% if we used fast DFT in IPP(ippAlgHintAccurate).
All tests in 
Intel(R) Core(TM) i7 CPU 870  @ 2.93GHz 
Ubuntu 11.10</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529929</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-04 18:12:00 -0800</bug_when>
    <thetext>Thanks for running the performance tests.  It would be good to know if we can use the &quot;fast&quot; option and get the maximum performance benefit.

When you have time, can you test the &quot;fast&quot; option with Raymond&apos;s latest layout test.  His patch should be committed soon, but you can grab his test and try it locally on your machine:
https://bugs.webkit.org/show_bug.cgi?id=75126

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>529933</commentid>
    <comment_count>8</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-04 18:18:32 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Thanks for running the performance tests.  It would be good to know if we can use the &quot;fast&quot; option and get the maximum performance benefit.
&gt; 
&gt; When you have time, can you test the &quot;fast&quot; option with Raymond&apos;s latest layout test.  His patch should be committed soon, but you can grab his test and try it locally on your machine:
&gt; https://bugs.webkit.org/show_bug.cgi?id=75126
&gt; 
&gt; Thanks!

That`s OK~</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530903</commentid>
    <comment_count>9</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-05 20:46:06 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Thanks for running the performance tests.  It would be good to know if we can use the &quot;fast&quot; option and get the maximum performance benefit.
&gt; &gt; 
&gt; &gt; When you have time, can you test the &quot;fast&quot; option with Raymond&apos;s latest layout test.  His patch should be committed soon, but you can grab his test and try it locally on your machine:
&gt; &gt; https://bugs.webkit.org/show_bug.cgi?id=75126
&gt; &gt; 
&gt; &gt; Thanks!
&gt; 
&gt; That`s OK~

I tried the convolution layout test and failed with the result:
*******
Tests ConvolverNode processing a mono channel with mono impulse response.

On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.

PASS Initial latency of convolver is silent.
FAIL Triangular portion of convolution is not incorrect.  Max deviation = 2.0867834820236123e-7
FAIL First part of tail of convolution is not sufficiently small: 0.00244140625
PASS Rendered signal after tail of convolution is silent.
FAIL Test signal was not correctly convolved.
PASS successfullyParsed is true

TEST COMPLETE
******

I found the threshold values are experimental, the &quot;Max deviation&quot; and &quot;small&quot; I got are only larger than the values in test script a little. I wonder to know whether such values are tolerable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530909</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-05 21:01:09 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; I tried the convolution layout test and failed with the result:
&gt; *******
&gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; 
&gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; 
&gt; PASS Initial latency of convolver is silent.
&gt; FAIL Triangular portion of convolution is not incorrect.  Max deviation = 2.0867834820236123e-7
&gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625
&gt; PASS Rendered signal after tail of convolution is silent.
&gt; FAIL Test signal was not correctly convolved.
&gt; PASS successfullyParsed is true
&gt; 
&gt; TEST COMPLETE
&gt; ******
&gt; 
&gt; I found the threshold values are experimental, the &quot;Max deviation&quot; and &quot;small&quot; I got are only larger than the values in test script a little. I wonder to know whether such values are tolerable?

I believe this is well within an acceptable tolerance, and the performance improvement is significant.  It would be great to go with the &quot;fast&quot; option.

Ray, can you sanity check this and refine the layout test by re-defining the &quot;Max deviation&quot; and &quot;not sufficiently small&quot; in terms of decibels. I can see that &quot;Max deviation&quot; in terms of dB deviation is very slight.  The &quot;not sufficiently small&quot; can be compared to the &quot;peak&quot; value of the triangle to see how far down &quot;in the noise&quot; we are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>531089</commentid>
    <comment_count>11</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-06 09:02:31 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; 
&gt; &gt; I tried the convolution layout test and failed with the result:
&gt; &gt; *******
&gt; &gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; &gt; 
&gt; &gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; &gt; 
&gt; &gt; PASS Initial latency of convolver is silent.
&gt; &gt; FAIL Triangular portion of convolution is not incorrect.  Max deviation = 2.0867834820236123e-7
&gt; &gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625
&gt; &gt; PASS Rendered signal after tail of convolution is silent.
&gt; &gt; FAIL Test signal was not correctly convolved.
&gt; &gt; PASS successfullyParsed is true
&gt; &gt; 
&gt; &gt; TEST COMPLETE
&gt; &gt; ******
&gt; &gt; 
&gt; &gt; I found the threshold values are experimental, the &quot;Max deviation&quot; and &quot;small&quot; I got are only larger than the values in test script a little. I wonder to know whether such values are tolerable?
&gt; 
&gt; I believe this is well within an acceptable tolerance, and the performance improvement is significant.  It would be great to go with the &quot;fast&quot; option.
&gt; 
&gt; Ray, can you sanity check this and refine the layout test by re-defining the &quot;Max deviation&quot; and &quot;not sufficiently small&quot; in terms of decibels. I can see that &quot;Max deviation&quot; in terms of dB deviation is very slight.  The &quot;not sufficiently small&quot; can be compared to the &quot;peak&quot; value of the triangle to see how far down &quot;in the noise&quot; we are.

I believe the values returned are sufficiently close.  I will modify the current test to compute a &quot;dB&quot; value instead.  I will leave the constants as is.  When the new FFT is landed, the thresholds should be adjusted then so we have a record of what the new FFT did.  (I also need to test this on OSX in case the OSX FFT produces different results.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>532816</commentid>
    <comment_count>12</comment_count>
      <attachid>121794</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-09 22:21:28 -0800</bug_when>
    <thetext>Created attachment 121794
Patch

Update the patch as the convolution layout test updated, new result:
Tests ConvolverNode processing a mono channel with mono impulse response.

On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.

PASS Initial latency of convolver is silent.
PASS Triangular portion of convolution is correct.
FAIL First part of tail of convolution is not sufficiently small: 0.00244140625 dB
FAIL Test signal was not correctly convolved.
PASS successfullyParsed is true

TEST COMPLETE

Also the FFTRrameIPP::multiply() is updated to use zvmul() and zsmul() as bug 74842 fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533193</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-10 10:52:48 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=121794) [details]
&gt; Patch
&gt; 
&gt; Update the patch as the convolution layout test updated, new result:
&gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; 
&gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; 
&gt; PASS Initial latency of convolver is silent.
&gt; PASS Triangular portion of convolution is correct.
&gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625 dB

This is way too large.  This corresponds to a max tail value of about 44100.  (0 dB = 1, relative to max of the triangle.)  The expected value should be less than -146 dB.  Something is messed up.  Perhaps the test is wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533543</commentid>
    <comment_count>14</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-10 17:57:35 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Created an attachment (id=121794) [details] [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; Update the patch as the convolution layout test updated, new result:
&gt; &gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; &gt; 
&gt; &gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; &gt; 
&gt; &gt; PASS Initial latency of convolver is silent.
&gt; &gt; PASS Triangular portion of convolution is correct.
&gt; &gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625 dB
&gt; 
&gt; This is way too large.  This corresponds to a max tail value of about 44100.  (0 dB = 1, relative to max of the triangle.)  The expected value should be less than -146 dB.  Something is messed up.  Perhaps the test is wrong?

I think the &quot;tail1Max&quot; of the updated patch is exactly the same as last patch, with the threshold value 0.002 in the old layout test which should be -53.98 dB ( 20*log10(0.002) ) in dB format. But in your updated layout test the value is down to -146.7 dB,  any reason to change the threshold value?

Also, the error output in your updated test script :
testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1Max + &quot; dB&quot;);
should it be
testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1MaxDecibels+ &quot; dB&quot;);
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533548</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-10 18:10:16 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; Created an attachment (id=121794) [details] [details] [details]
&gt; &gt; &gt; Patch
&gt; &gt; &gt; 
&gt; &gt; &gt; Update the patch as the convolution layout test updated, new result:
&gt; &gt; &gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; &gt; &gt; 
&gt; &gt; &gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; &gt; &gt; 
&gt; &gt; &gt; PASS Initial latency of convolver is silent.
&gt; &gt; &gt; PASS Triangular portion of convolution is correct.
&gt; &gt; &gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625 dB
&gt; &gt; 
&gt; &gt; This is way too large.  This corresponds to a max tail value of about 44100.  (0 dB = 1, relative to max of the triangle.)  The expected value should be less than -146 dB.  Something is messed up.  Perhaps the test is wrong?
&gt; 
&gt; I think the &quot;tail1Max&quot; of the updated patch is exactly the same as last patch, with the threshold value 0.002 in the old layout test which should be -53.98 dB ( 20*log10(0.002) ) in dB format. But in your updated layout test the value is down to -146.7 dB,  any reason to change the threshold value?
&gt; 
&gt; Also, the error output in your updated test script :
&gt; testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1Max + &quot; dB&quot;);
&gt; should it be
&gt; testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1MaxDecibels+ &quot; dB&quot;);
&gt; ?

Yes, it looks like the layout test itself needs to be fixed as you recommend (to report a failure with tail1MaxDecibels).  Once you fix that, then you can find the true error in dB.  It&apos;s not -53.98 dB as you mention because it&apos;s the dB difference computed from the refMax if you see how tail1MaxDecibels is computed.

I recommend you fix the layout test and also adjust the threshold so that your code passes (assuming it&apos;s better than -100 dB or so) and upload a new patch with that fix included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533552</commentid>
    <comment_count>16</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-10 18:20:13 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (In reply to comment #13)
&gt; &gt; &gt; (In reply to comment #12)
&gt; &gt; &gt; &gt; Created an attachment (id=121794) [details] [details] [details] [details]
&gt; &gt; &gt; &gt; Patch
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Update the patch as the convolution layout test updated, new result:
&gt; &gt; &gt; &gt; Tests ConvolverNode processing a mono channel with mono impulse response.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; PASS Initial latency of convolver is silent.
&gt; &gt; &gt; &gt; PASS Triangular portion of convolution is correct.
&gt; &gt; &gt; &gt; FAIL First part of tail of convolution is not sufficiently small: 0.00244140625 dB
&gt; &gt; &gt; 
&gt; &gt; &gt; This is way too large.  This corresponds to a max tail value of about 44100.  (0 dB = 1, relative to max of the triangle.)  The expected value should be less than -146 dB.  Something is messed up.  Perhaps the test is wrong?
&gt; &gt; 
&gt; &gt; I think the &quot;tail1Max&quot; of the updated patch is exactly the same as last patch, with the threshold value 0.002 in the old layout test which should be -53.98 dB ( 20*log10(0.002) ) in dB format. But in your updated layout test the value is down to -146.7 dB,  any reason to change the threshold value?
&gt; &gt; 
&gt; &gt; Also, the error output in your updated test script :
&gt; &gt; testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1Max + &quot; dB&quot;);
&gt; &gt; should it be
&gt; &gt; testFailed(&quot;First part of tail of convolution is not sufficiently small: &quot; + tail1MaxDecibels+ &quot; dB&quot;);
&gt; &gt; ?
&gt; 
&gt; Yes, it looks like the layout test itself needs to be fixed as you recommend (to report a failure with tail1MaxDecibels).  Once you fix that, then you can find the true error in dB.  It&apos;s not -53.98 dB as you mention because it&apos;s the dB difference computed from the refMax if you see how tail1MaxDecibels is computed.
&gt; 
&gt; I recommend you fix the layout test and also adjust the threshold so that your code passes (assuming it&apos;s better than -100 dB or so) and upload a new patch with that fix included.

Got it. I will fix the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533569</commentid>
    <comment_count>17</comment_count>
      <attachid>121959</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-10 19:01:06 -0800</bug_when>
    <thetext>Created attachment 121959
Patch

Modified the threshold1 from -146.7 to -145.0.
Fixed output issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>533934</commentid>
    <comment_count>18</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2012-01-11 08:57:11 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=121959) [details]
&gt; Patch
&gt; 
&gt; Modified the threshold1 from -146.7 to -145.0.
&gt; Fixed output issue.

Thanks for fixing the output issue and updating the threshold.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>534066</commentid>
    <comment_count>19</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-11 11:34:51 -0800</bug_when>
    <thetext>Adam, could you please review the proposed .gyp file changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544709</commentid>
    <comment_count>20</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-28 17:24:19 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; Adam, could you please review the proposed .gyp file changes?

Hi Adam and Roger,
How about the process of .gyp file reviewing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544712</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-28 19:35:58 -0800</bug_when>
    <thetext>Added Tony Chang (in addition to Adam Barth) as potential .gyp / build-related reviewers.

Personally, I&apos;m eager to get this reviewed and landed soon.  I think it will be a great option for high-performance audio rendering, especially on low-end devices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544827</commentid>
    <comment_count>22</comment_count>
      <attachid>121959</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-29 18:41:37 -0800</bug_when>
    <thetext>Comment on attachment 121959
Patch

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

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt; +    # If set to 1, use the system IPP library, else use the thirdparty/ipp.
&gt; +    &apos;use_system_ipp%&apos;: 1,

Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1169
&gt; +        [&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
&gt; +          &apos;conditions&apos;: [
&gt; +              [&apos;use_system_ipp == 1&apos;, {

If possible, I would prefer 1 flag rather than 2 (WTF_USE_WEBAUDIO_IPP and use_system_ipp).

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1171
&gt; +                      &apos;/opt/intel/ipp/include&apos;,

Is this always in the same location?  Does the library come with a pkgconfig file that we can query instead?  See other examples of how we check for system libraries in src/build/linux/system.gyp.

&gt; Source/WebKit/chromium/features.gypi:154
&gt;        [&apos;OS!=&quot;mac&quot;&apos;, {
&gt;          &apos;feature_defines&apos;: [
&gt;            &apos;WTF_USE_WEBAUDIO_FFMPEG=1&apos;,
&gt; +          &apos;WTF_USE_WEBAUDIO_IPP=0&apos;,

Will this be used on mac too?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544830</commentid>
    <comment_count>23</comment_count>
      <attachid>121959</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-29 18:43:05 -0800</bug_when>
    <thetext>Comment on attachment 121959
Patch

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

&gt;&gt; Source/WebKit/chromium/features.gypi:154
&gt;&gt; +          &apos;WTF_USE_WEBAUDIO_IPP=0&apos;,
&gt; 
&gt; Will this be used on mac too?

Err, I mean Windows.  Did you mean to put this in the not mac section?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544921</commentid>
    <comment_count>24</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-30 00:41:50 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 121959 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121959&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt; &gt; +    # If set to 1, use the system IPP library, else use the thirdparty/ipp.
&gt; &gt; +    &apos;use_system_ipp%&apos;: 1,
&gt; 
&gt; Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?
Now I just enable the system ipp, but I think it makes sense to add IPP to third_party in future and &quot;use_system_ipp=0&quot; is for such condition. Also some FIXMEs about it are added.
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1169
&gt; &gt; +        [&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
&gt; &gt; +          &apos;conditions&apos;: [
&gt; &gt; +              [&apos;use_system_ipp == 1&apos;, {
&gt; 
&gt; If possible, I would prefer 1 flag rather than 2 (WTF_USE_WEBAUDIO_IPP and use_system_ipp).
&gt; 
If ipp could be enabled in third_party, the 2 flag are all needed. 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1171
&gt; &gt; +                      &apos;/opt/intel/ipp/include&apos;,
&gt; 
&gt; Is this always in the same location?  Does the library come with a pkgconfig file that we can query instead?  See other examples of how we check for system libraries in src/build/linux/system.gyp.
&gt; 
That`s right, I`ll use pkg-config.
&gt; &gt; Source/WebKit/chromium/features.gypi:154
&gt; &gt;        [&apos;OS!=&quot;mac&quot;&apos;, {
&gt; &gt;          &apos;feature_defines&apos;: [
&gt; &gt;            &apos;WTF_USE_WEBAUDIO_FFMPEG=1&apos;,
&gt; &gt; +          &apos;WTF_USE_WEBAUDIO_IPP=0&apos;,
&gt; 
&gt; Will this be used on mac too?
Now I just enabled IPP in linux and &quot;OS==linux&quot; should be considered.
IPP is not used as default so just removing this line is OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545181</commentid>
    <comment_count>25</comment_count>
      <attachid>121959</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-01-30 10:03:37 -0800</bug_when>
    <thetext>Comment on attachment 121959
Patch

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

&gt;&gt;&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt;&gt;&gt; +    &apos;use_system_ipp%&apos;: 1,
&gt;&gt; 
&gt;&gt; Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?
&gt; 
&gt; Now I just enable the system ipp, but I think it makes sense to add IPP to third_party in future and &quot;use_system_ipp=0&quot; is for such condition. Also some FIXMEs about it are added.

I would remove the use_system_ipp variable from this patch and just assume that if WTF_USE_WEBAUDIO_IPP=1, that we&apos;re using the system copy.  We can add the use_system_ipp variable after we&apos;ve checked in a copy of ipp into third_party.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545193</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-30 10:27:41 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 121959 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121959&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt; &gt;&gt;&gt; +    &apos;use_system_ipp%&apos;: 1,
&gt; &gt;&gt; 
&gt; &gt;&gt; Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?
&gt; &gt; 
&gt; &gt; Now I just enable the system ipp, but I think it makes sense to add IPP to third_party in future and &quot;use_system_ipp=0&quot; is for such condition. Also some FIXMEs about it are added.
&gt; 
&gt; I would remove the use_system_ipp variable from this patch and just assume that if WTF_USE_WEBAUDIO_IPP=1, that we&apos;re using the system copy.  We can add the use_system_ipp variable after we&apos;ve checked in a copy of ipp into third_party.

Sorry to make the review a little more complicated, but I&apos;m not sure if we will be able to check the libraries into third_party, depending on the commercial license Intel provides for this (don&apos;t worry it&apos;s not GPL).  Xingnan, do you know any more details, or if Intel would be willing to open IPP up as a free license for WebKit?  For Chrome, we&apos;d have to keep it in &quot;chrome internal&quot; somewhere, if not.

But (I think) Intel is interested in using this in general chromium (not Chrome-branded), so I don&apos;t know what the right approach is...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545676</commentid>
    <comment_count>27</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-30 18:08:04 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; (From update of attachment 121959 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121959&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt; &gt; &gt;&gt;&gt; +    &apos;use_system_ipp%&apos;: 1,
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?
&gt; &gt; &gt; 
&gt; &gt; &gt; Now I just enable the system ipp, but I think it makes sense to add IPP to third_party in future and &quot;use_system_ipp=0&quot; is for such condition. Also some FIXMEs about it are added.
&gt; &gt; 
&gt; &gt; I would remove the use_system_ipp variable from this patch and just assume that if WTF_USE_WEBAUDIO_IPP=1, that we&apos;re using the system copy.  We can add the use_system_ipp variable after we&apos;ve checked in a copy of ipp into third_party.
&gt; 
&gt; Sorry to make the review a little more complicated, but I&apos;m not sure if we will be able to check the libraries into third_party, depending on the commercial license Intel provides for this (don&apos;t worry it&apos;s not GPL).  Xingnan, do you know any more details, or if Intel would be willing to open IPP up as a free license for WebKit?  For Chrome, we&apos;d have to keep it in &quot;chrome internal&quot; somewhere, if not.
&gt; 
&gt; But (I think) Intel is interested in using this in general chromium (not Chrome-branded), so I don&apos;t know what the right approach is...

Hi Roger,

AFAIK, currently IPP is under commercial license, anyone uses it should buy it. So I don&apos;t think we can check it into third_party and share with community. 

But I think it is meaningful to put the IPP related information in gyp file. 

In this way, any user or company wants to build chromium with IPP can buy IPP and install it or put IPP library under third_party folder(just like MKL) and build chromium and then re-distribute the binary(maybe just like how chrome is build). 

As for free license for WebKit, it should be a business decision, which is out of our scope, we can contact with corresponding guys for this option, but currently I think the answer is no. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545733</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-01-30 19:13:26 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; (In reply to comment #25)
&gt; &gt; &gt; (From update of attachment 121959 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=121959&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt;&gt;&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:51
&gt; &gt; &gt; &gt;&gt;&gt; +    &apos;use_system_ipp%&apos;: 1,
&gt; &gt; &gt; &gt;&gt; 
&gt; &gt; &gt; &gt;&gt; Do you mean for this to be enabled by default?  In what cases would we compile with WTF_USE_WEBAUDIO_IPP=1 and use_system_ipp = 0?
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Now I just enable the system ipp, but I think it makes sense to add IPP to third_party in future and &quot;use_system_ipp=0&quot; is for such condition. Also some FIXMEs about it are added.
&gt; &gt; &gt; 
&gt; &gt; &gt; I would remove the use_system_ipp variable from this patch and just assume that if WTF_USE_WEBAUDIO_IPP=1, that we&apos;re using the system copy.  We can add the use_system_ipp variable after we&apos;ve checked in a copy of ipp into third_party.
&gt; &gt; 
&gt; &gt; Sorry to make the review a little more complicated, but I&apos;m not sure if we will be able to check the libraries into third_party, depending on the commercial license Intel provides for this (don&apos;t worry it&apos;s not GPL).  Xingnan, do you know any more details, or if Intel would be willing to open IPP up as a free license for WebKit?  For Chrome, we&apos;d have to keep it in &quot;chrome internal&quot; somewhere, if not.
&gt; &gt; 
&gt; &gt; But (I think) Intel is interested in using this in general chromium (not Chrome-branded), so I don&apos;t know what the right approach is...
&gt; 
&gt; Hi Roger,
&gt; 
&gt; AFAIK, currently IPP is under commercial license, anyone uses it should buy it. So I don&apos;t think we can check it into third_party and share with community. 
&gt; 
&gt; But I think it is meaningful to put the IPP related information in gyp file. 

Agreed!  I&apos;m not a .gyp expert so hopefully Tony can help us figure out how to abstract this correctly...

&gt; 
&gt; In this way, any user or company wants to build chromium with IPP can buy IPP and install it or put IPP library under third_party folder(just like MKL) and build chromium and then re-distribute the binary(maybe just like how chrome is build). 
&gt; 
&gt; As for free license for WebKit, it should be a business decision, which is out of our scope, we can contact with corresponding guys for this option, but currently I think the answer is no. thanks

That&apos;s understandable - no worries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>546726</commentid>
    <comment_count>29</comment_count>
      <attachid>124867</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-01-31 19:08:30 -0800</bug_when>
    <thetext>Created attachment 124867
Patch

Update the gyp file as comments, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548310</commentid>
    <comment_count>30</comment_count>
      <attachid>124867</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-02 18:09:21 -0800</bug_when>
    <thetext>Comment on attachment 124867
Patch

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

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1357
&gt; +        [&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
&gt; +          &apos;cflags&apos;: [
&gt; +            &apos;&lt;!@(pkg-config --cflags-only-I ipp)&apos;,

Does this need to be here in the webcore_prerequisite targets section?  Since this target doesn&apos;t compile any files, this probably doesn&apos;t do anything.  However, I think if you added a direct_dependent_settings section, the cflags will be used by the other webcore targets.  Which means you wouldn&apos;t need to have the other cflags sections below.  E.g., this could be:

[&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
  &apos;direct_dependent_settings&apos;: {
    &apos;cflags&apos;: [
      &apos;&lt;!@(pkg-config --cflags-only-I ipp)&apos;,
    ],
  },
}],

&gt; Source/WebCore/platform/audio/FFTFrame.h:57
&gt; +#include &quot;ipps.h&quot;

Nit: Should we use &lt;ipps.h&gt; since it&apos;s a system header?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548370</commentid>
    <comment_count>31</comment_count>
      <attachid>125242</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-02 19:32:05 -0800</bug_when>
    <thetext>Created attachment 125242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548373</commentid>
    <comment_count>32</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-02 19:34:56 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 124867 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=124867&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:1357
&gt; &gt; +        [&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
&gt; &gt; +          &apos;cflags&apos;: [
&gt; &gt; +            &apos;&lt;!@(pkg-config --cflags-only-I ipp)&apos;,
&gt; 
&gt; Does this need to be here in the webcore_prerequisite targets section?  Since this target doesn&apos;t compile any files, this probably doesn&apos;t do anything.  However, I think if you added a direct_dependent_settings section, the cflags will be used by the other webcore targets.  Which means you wouldn&apos;t need to have the other cflags sections below.  E.g., this could be:
&gt; 
&gt; [&apos;OS==&quot;linux&quot; and &quot;WTF_USE_WEBAUDIO_IPP=1&quot; in feature_defines&apos;, {
&gt;   &apos;direct_dependent_settings&apos;: {
&gt;     &apos;cflags&apos;: [
&gt;       &apos;&lt;!@(pkg-config --cflags-only-I ipp)&apos;,
&gt;     ],
&gt;   },
&gt; }],
&gt; 
&gt; &gt; Source/WebCore/platform/audio/FFTFrame.h:57
&gt; &gt; +#include &quot;ipps.h&quot;
&gt; 
&gt; Nit: Should we use &lt;ipps.h&gt; since it&apos;s a system header?

Tony, thanks your comments, patch is updated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548857</commentid>
    <comment_count>33</comment_count>
      <attachid>125242</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-03 10:58:55 -0800</bug_when>
    <thetext>Comment on attachment 125242
Patch

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

Just some small nits left. Otherwise, the gyp changes look good to me.

Chris, do the code changes look good to you?

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2001
&gt; +          &apos;all_dependent_settings&apos;: {

I don&apos;t think you need all_dependent_settings here.  I think gyp is smart enough to copy link_settings down to the targets that need it.

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2004
&gt; +            &apos;ldflags&apos;: [
&gt; +              &apos;&lt;!@(pkg-config --libs-only-L ipp)&apos;,
&gt; +            ],

Doesn&apos;t this have to go in link_settings?  That&apos;s what I see for other uses of ldflags.  See Source/WebKit/chromium/build/linux/system.gyp for other examples.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>548922</commentid>
    <comment_count>34</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-03 11:58:56 -0800</bug_when>
    <thetext>Tony, the changes look good in the FFTFrame code.

Xingnan, I assume the convolution layout test is passing when you enable IPP?  Philippe Normand just made some adjustments to the threshold in convolution-testing.js:
http://trac.webkit.org/changeset/106537</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549791</commentid>
    <comment_count>35</comment_count>
      <attachid>125587</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-06 00:38:39 -0800</bug_when>
    <thetext>Created attachment 125587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549793</commentid>
    <comment_count>36</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-06 00:39:33 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; (From update of attachment 125242 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125242&amp;action=review
&gt; 
&gt; Just some small nits left. Otherwise, the gyp changes look good to me.
&gt; 
&gt; Chris, do the code changes look good to you?
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2001
&gt; &gt; +          &apos;all_dependent_settings&apos;: {
&gt; 
&gt; I don&apos;t think you need all_dependent_settings here.  I think gyp is smart enough to copy link_settings down to the targets that need it.
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2004
&gt; &gt; +            &apos;ldflags&apos;: [
&gt; &gt; +              &apos;&lt;!@(pkg-config --libs-only-L ipp)&apos;,
&gt; &gt; +            ],
&gt; 
&gt; Doesn&apos;t this have to go in link_settings?  That&apos;s what I see for other uses of ldflags.  See Source/WebKit/chromium/build/linux/system.gyp for other examples.

Agree, update the patch as your comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549798</commentid>
    <comment_count>37</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-06 00:43:30 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Tony, the changes look good in the FFTFrame code.
&gt; 
&gt; Xingnan, I assume the convolution layout test is passing when you enable IPP?  Philippe Normand just made some adjustments to the threshold in convolution-testing.js:
&gt; http://trac.webkit.org/changeset/106537

Yes Chris, the adjusted threshold value in 106537 is enough for my patch to pass the test. I double-checked it and it`s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550067</commentid>
    <comment_count>38</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2012-02-06 09:37:16 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #34)
&gt; &gt; Tony, the changes look good in the FFTFrame code.
&gt; &gt; 
&gt; &gt; Xingnan, I assume the convolution layout test is passing when you enable IPP?  Philippe Normand just made some adjustments to the threshold in convolution-testing.js:
&gt; &gt; http://trac.webkit.org/changeset/106537
&gt; 
&gt; Yes Chris, the adjusted threshold value in 106537 is enough for my patch to pass the test. I double-checked it and it`s OK.

Great!  Looks good - passing to Tony for final review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550098</commentid>
    <comment_count>39</comment_count>
      <attachid>125587</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-06 10:47:06 -0800</bug_when>
    <thetext>Comment on attachment 125587
Patch

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

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:44
&gt; +const unsigned kMaxFFTPow2Size = 24;

Nit: We normally just use regular variable naming for consts in WebCore.  E.g., maximumFFTPower2Size.

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:85
&gt; +    unsigned nbytes = sizeof(float) * m_FFTSize;

Nit: We try to avoid abbreviations in variable names. Maybe numberOfBytes or byteSize?

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:139
&gt; +    ippsDFTFwd_RToPerm_32f((Ipp32f*)data, complexP, m_DFTSpec, m_buffer);

Nit: reinterpret_cast?

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:147
&gt; +    ippsCplxToReal_32fc((Ipp32fc*)complexP, realP, imagP, m_FFTSize &gt;&gt; 1);

Nit: reinterpret_cast?

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:155
&gt; +    ippsDFTInv_PermToR_32f(complexP, (Ipp32f*)data, m_DFTSpec, m_buffer);

Nit: reinterpret_cast?

&gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:160
&gt; +    ippsMulC_32f_I(scale, (Ipp32f*)data, m_FFTSize);

Nit: reinterpret_cast?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550537</commentid>
    <comment_count>40</comment_count>
      <attachid>125753</attachid>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-06 19:06:31 -0800</bug_when>
    <thetext>Created attachment 125753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550538</commentid>
    <comment_count>41</comment_count>
    <who name="Xingnan Wang">xingnan.wang</who>
    <bug_when>2012-02-06 19:09:09 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 125587 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125587&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:44
&gt; &gt; +const unsigned kMaxFFTPow2Size = 24;
&gt; 
&gt; Nit: We normally just use regular variable naming for consts in WebCore.  E.g., maximumFFTPower2Size.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:85
&gt; &gt; +    unsigned nbytes = sizeof(float) * m_FFTSize;
&gt; 
&gt; Nit: We try to avoid abbreviations in variable names. Maybe numberOfBytes or byteSize?
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:139
&gt; &gt; +    ippsDFTFwd_RToPerm_32f((Ipp32f*)data, complexP, m_DFTSpec, m_buffer);
&gt; 
&gt; Nit: reinterpret_cast?
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:147
&gt; &gt; +    ippsCplxToReal_32fc((Ipp32fc*)complexP, realP, imagP, m_FFTSize &gt;&gt; 1);
&gt; 
&gt; Nit: reinterpret_cast?
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:155
&gt; &gt; +    ippsDFTInv_PermToR_32f(complexP, (Ipp32f*)data, m_DFTSpec, m_buffer);
&gt; 
&gt; Nit: reinterpret_cast?
&gt; 
&gt; &gt; Source/WebCore/platform/audio/ipp/FFTFrameIPP.cpp:160
&gt; &gt; +    ippsMulC_32f_I(scale, (Ipp32f*)data, m_FFTSize);
&gt; 
&gt; Nit: reinterpret_cast?

Thanks Tony, patch is updated as comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551074</commentid>
    <comment_count>42</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-02-07 10:00:05 -0800</bug_when>
    <thetext>Do you want me to commit the patch?  If so, set commit-queue?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551685</commentid>
    <comment_count>43</comment_count>
      <attachid>125753</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 18:52:12 -0800</bug_when>
    <thetext>Comment on attachment 125753
Patch

Clearing flags on attachment: 125753

Committed r107025: &lt;http://trac.webkit.org/changeset/107025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>551686</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-07 18:52:22 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121060</attachid>
            <date>2012-01-03 21:56:53 -0800</date>
            <delta_ts>2012-01-03 22:03:35 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>8059</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjE2YmNjLi40ZjRiYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTItMDEtMDMgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHVi
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpGRlRGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRlRGcmFtZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6
Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6fkZGVEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRG
cmFtZTo6ZG9GRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvSW52ZXJzZUZGVCk6
CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RkZURnJhbWU6OmltYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpnZXRV
cFRvRGF0ZUNvbXBsZXhEYXRhKToKKwogMjAxMi0wMS0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFR3byBudWxsIGNyYXNoZXMgaW4gVHJlZWJ1aWxkZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZTc5Yzc5OC4uZGVmZWZiNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTQ3LDYgKzQ3LDkgQEAK
IAogICAgICdlbmFibGVfd2V4aXRfdGltZV9kZXN0cnVjdG9ycyc6IDEsCiAKKyAgICAjIElmIHNl
dCB0byAxLCB1c2UgdGhlIHN5c3RlbSBJUFAgbGlicmFyeSwgZWxzZSB1c2UgdGhlIHRoaXJkcGFy
dHkvaXBwLgorICAgICd1c2Vfc3lzdGVtX2lwcCUnOiAxLAorCiAgICAgJ3dlYmNvcmVfaW5jbHVk
ZV9kaXJzJzogWwogICAgICAgJy4uLycsCiAgICAgICAnLi4vLi4nLApAQCAtMTE2MCw2ICsxMTYz
LDIyIEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzKysrJzogWycuLi9kb20nXSwKICAgICAg
ICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJ3aW4i
KSBhbmQgIldURl9VU0VfV0VCQVVESU9fRkZUVz0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7Cisg
ICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3RoaXJkX3BhcnR5L2ZmdHcvYXBpJywKKyAgICAgICAgICBdLAorICAgICAgICB9XSwKKyAg
ICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJ3aW4iKSBhbmQgIldURl9VU0VfV0VCQVVESU9f
SVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0aW9ucyc6IFsK
KyAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAg
ICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbnRlbC9p
cHAvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdoZW4gYWRk
ZWQuCisgICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAg
XSwKICAgICB9LAogICAgIHsKQEAgLTEzNjgsNiArMTM4NywxNyBAQAogICAgICAgICAgICAgJ2lu
Y2x1ZGVfZGlycysrJzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAg
ICAgICAgWycoT1M9PSJsaW51eCIgb3IgT1M9PSJ3aW4iKSBhbmQgIldURl9VU0VfV0VCQVVESU9f
SVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0aW9ucyc6IFsK
KyAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAg
ICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbnRlbC9p
cHAvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICB9LCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdoZW4gYWRk
ZWQuCisgICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAg
ICBbJ09TICE9ICJhbmRyb2lkIiBhbmQgIldURl9VU0VfV0VCQVVESU9fRkZNUEVHPTEiIGluIGZl
YXR1cmVfZGVmaW5lcycsIHsKICAgICAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJl
IG9uIHRoZSBpbmNsdWRlIHBhdGggZm9yIG11bHRpcGxlIHN1Yi10YXJnZXRzIG9mIHdlYmNvcmUu
CiAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CkBAIC0xNjk1LDYgKzE3
MjUsMTUgQEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS93aW4vU3lzdGVtSW5m
b1xcLmNwcCQnXSwKICAgICAgICAgICBdLAogICAgICAgICB9XSwKKyAgICAgICAgWycoT1M9PSJs
aW51eCIgb3IgT1M9PSJ3aW4iKSBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1
cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAg
Wyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGly
cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbnRlbC9pcHAvaW5jbHVkZScsCisg
ICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAg
ICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdoZW4gYWRkZWQuCisgICAgICAgICAg
ICAgIH1dLAogICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CiAgICAgICAgICAgJ3NvdXJjZXMv
JzogWwogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2Fy
ZENocm9taXVtTGludXhcXC5jcHAkJ10sCkBAIC0xOTM1LDYgKzE5NzQsMTcgQEAKICAgICAgICAg
ICAgIFsnZXhjbHVkZScsICcvKFdpbmRvd3N8VW5pc2NyaWJlKVteL10qXFwuY3BwJCddCiAgICAg
ICAgICAgXSwKICAgICAgICAgfV0sCisgICAgICAgIFsnKE9TPT0ibGludXgiIG9yIE9TPT0id2lu
IikgYW5kICJXVEZfVVNFX1dFQkFVRElPX0lQUD0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7Cisg
ICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgIFsndXNlX3N5c3RlbV9pcHAg
PT0gMScsIHsKKyAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAg
ICAgICAgICAgICAgJy9vcHQvaW50ZWwvaXBwL2luY2x1ZGUnLAorICAgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IFVz
ZSB0aGlyZHBhcnR5L2lwcCB3aGVuIGFkZGVkLgorICAgICAgICAgICAgICB9XSwKKyAgICAgICAg
ICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7CkBAIC0xOTk0LDYgKzIw
NDQsMjQgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAg
ICAgICAgIH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VT
RV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdhbGxf
ZGVwZW5kZW50X3NldHRpbmdzJzogeworICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAg
ICAgICAgICAgICAgICAgIFsndXNlX3N5c3RlbV9pcHAgPT0gMScsIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAnbGRmbGFncyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ML29wdC9p
bnRlbC9pcHAvbGliL2lhMzInLAorICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFy
dHkvaXBwIHdoZW4gYWRkZWQuCisgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7CisgICAgICAgICAgICAgICAgICAn
bGlicmFyaWVzJzogWworICAgICAgICAgICAgICAgICAgICAgICctbGlwcHMgLWxpcHBjb3JlJywK
KyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAg
ICAgICB9XSwKICAgICAgICAgWydlbmFibGVfc3ZnIT0wJywgewogICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCiAgICAgICAgICAgICAnd2ViY29yZV9zdmcnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4
IDgzMDVmY2UuLjZjMzk5YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyNDMsNiArMzI0Myw3IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vYXVkaW8vbWtsL0ZGVEZyYW1lTUtMLmNwcCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2YvRmlsZVN5c3RlbUNGLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2YvS1VSTENGTmV0
LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFt
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaAppbmRleCBiMjVk
Mjc5Li5hNTM3NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9G
RlRGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgK
QEAgLTUzLDYgKzUzLDEwIEBAIHN0cnVjdCBSREZUQ29udGV4dDsKIAogI2VuZGlmIC8vICFVU0Vf
QUNDRUxFUkFURV9GRlQKIAorI2lmIFVTRShXRUJBVURJT19JUFApCisjaW5jbHVkZSAiaXBwcy5o
IgorI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KQEAgLTE0Niw2ICsxNTAsMTYgQEAgcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9p
bWFnRGF0YTsKICNlbmRpZiAvLyBVU0UoV0VCQVVESU9fRkZNUEVHKQogCisjaWYgVVNFKFdFQkFV
RElPX0lQUCkKKyAgICBJcHA4dSogbV9idWZmZXI7CisgICAgSXBwc0RGVFNwZWNfUl8zMmYqIG1f
REZUU3BlYzsKKworICAgIGZsb2F0KiBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisgICAgQXVk
aW9GbG9hdEFycmF5IG1fY29tcGxleERhdGE7CisgICAgQXVkaW9GbG9hdEFycmF5IG1fcmVhbERh
dGE7CisgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CisjZW5kaWYgLy8gVVNFKFdFQkFV
RElPX0lQUCkKKwogI2VuZGlmIC8vICFVU0VfQUNDRUxFUkFURV9GRlQKIH07CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCmluZGV4IGRmYzUyYTIu
LjBhM2YyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZy
YW1lU3R1Yi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVT
dHViLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIAotI2lm
ICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBF
RykKKyNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYgIVVTRShXRUJBVURJ
T19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIK
IApAQCAtMTAyLDYgKzEwMiw2IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNF
KFdFQkFVRElPX01LTCkKKyNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01L
TCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTJi
NGU0MDMuLjBhNzI2ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDEtMDMgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisKKyAgICAgICAgKiBmZWF0dXJlcy5n
eXBpOgorCiAyMDEyLTAxLTAzICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBbY2hyb21pdW1dIExvY2FsRmlsZVN5c3RlbUNocm9taXVtIG5lZWRzIHNvbWUgdGhy
ZWFkIHNhZmV0eSBmaXhlcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVh
dHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCBl
N2Q5ZmViLi5kYTQyZmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1
cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0x
NTEsNiArMTUxLDcgQEAKICAgICAgIFsnT1MhPSJtYWMiJywgewogICAgICAgICAnZmVhdHVyZV9k
ZWZpbmVzJzogWwogICAgICAgICAgICdXVEZfVVNFX1dFQkFVRElPX0ZGTVBFRz0xJywKKyAgICAg
ICAgICAnV1RGX1VTRV9XRUJBVURJT19JUFA9MCcsCiAgICAgICAgIF0sCiAgICAgICAgICd1c2Vf
c2tpYSUnOiAxLAogICAgICAgfV0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121062</attachid>
            <date>2012-01-03 22:03:35 -0800</date>
            <delta_ts>2012-01-03 23:08:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="121454"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121075</attachid>
            <date>2012-01-03 23:08:37 -0800</date>
            <delta_ts>2012-01-09 22:21:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>14124</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwZjE2YmNjLi40ZjRiYzhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTItMDEtMDMgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHVi
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpGRlRGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRlRGcmFtZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6
Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6fkZGVEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRG
cmFtZTo6ZG9GRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvSW52ZXJzZUZGVCk6
CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RkZURnJhbWU6OmltYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpnZXRV
cFRvRGF0ZUNvbXBsZXhEYXRhKToKKwogMjAxMi0wMS0wMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFR3byBudWxsIGNyYXNoZXMgaW4gVHJlZWJ1aWxkZXIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZTc5Yzc5OC4uYmU0ZTQ4OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTQ3LDYgKzQ3LDkgQEAK
IAogICAgICdlbmFibGVfd2V4aXRfdGltZV9kZXN0cnVjdG9ycyc6IDEsCiAKKyAgICAjIElmIHNl
dCB0byAxLCB1c2UgdGhlIHN5c3RlbSBJUFAgbGlicmFyeSwgZWxzZSB1c2UgdGhlIHRoaXJkcGFy
dHkvaXBwLgorICAgICd1c2Vfc3lzdGVtX2lwcCUnOiAxLAorCiAgICAgJ3dlYmNvcmVfaW5jbHVk
ZV9kaXJzJzogWwogICAgICAgJy4uLycsCiAgICAgICAnLi4vLi4nLApAQCAtMTE2MCw2ICsxMTYz
LDE3IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzKysrJzogWycuLi9kb20nXSwKICAgICAg
ICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9VU0Vf
V0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0
aW9ucyc6IFsKKyAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAg
ICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29w
dC9pbnRlbC9pcHAvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAg
ICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBw
IHdoZW4gYWRkZWQuCisgICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAgICAgIH1d
LAogICAgICAgXSwKICAgICB9LAogICAgIHsKQEAgLTEzNjgsNiArMTM4MiwxNyBAQAogICAgICAg
ICAgICAgJ2luY2x1ZGVfZGlycysrJzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAg
ICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEi
IGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAg
ICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAgICAgJ2lu
Y2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbnRlbC9pcHAvaW5j
bHVkZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICB9LCB7CisgICAgICAg
ICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdoZW4gYWRkZWQuCisg
ICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAgICBbJ09T
ICE9ICJhbmRyb2lkIiBhbmQgIldURl9VU0VfV0VCQVVESU9fRkZNUEVHPTEiIGluIGZlYXR1cmVf
ZGVmaW5lcycsIHsKICAgICAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRvIGJlIG9uIHRo
ZSBpbmNsdWRlIHBhdGggZm9yIG11bHRpcGxlIHN1Yi10YXJnZXRzIG9mIHdlYmNvcmUuCiAgICAg
ICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CkBAIC0xNjk1LDYgKzE3MjAsMTcg
QEAKICAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS93aW4vU3lzdGVtSW5mb1xcLmNw
cCQnXSwKICAgICAgICAgICBdLAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBh
bmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAg
ICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAx
JywgeworICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgICAnL29wdC9pbnRlbC9pcHAvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRo
aXJkcGFydHkvaXBwIHdoZW4gYWRkZWQuCisgICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0s
CisgICAgICAgIH1dLAogICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CiAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWwogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0Ns
aXBib2FyZENocm9taXVtTGludXhcXC5jcHAkJ10sCkBAIC0xOTM1LDYgKzE5NzEsMTcgQEAKICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICcvKFdpbmRvd3N8VW5pc2NyaWJlKVteL10qXFwuY3BwJCdd
CiAgICAgICAgICAgXSwKICAgICAgICAgfV0sCisgICAgICAgIFsnT1M9PSJsaW51eCIgYW5kICJX
VEZfVVNFX1dFQkFVRElPX0lQUD0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CisgICAgICAgICAg
J2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgIFsndXNlX3N5c3RlbV9pcHAgPT0gMScsIHsK
KyAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMnOiBbCisgICAgICAgICAgICAgICAgICAg
ICAgJy9vcHQvaW50ZWwvaXBwL2luY2x1ZGUnLAorICAgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IFVzZSB0aGlyZHBh
cnR5L2lwcCB3aGVuIGFkZGVkLgorICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICBdLAorICAg
ICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7CkBAIC0xOTk0LDYgKzIwNDEsMjQgQEAK
ICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAgICAgICAgIH0s
CiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJ
T19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdhbGxfZGVwZW5kZW50
X3NldHRpbmdzJzogeworICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAg
ICAgICAgIFsndXNlX3N5c3RlbV9pcHAgPT0gMScsIHsKKyAgICAgICAgICAgICAgICAgICAgICAn
bGRmbGFncyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJy1ML29wdC9pbnRlbC9pcHAv
bGliL2lhMzInLAorICAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICB9
LCB7CisgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdo
ZW4gYWRkZWQuCisgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgJ2xpbmtfc2V0dGluZ3MnOiB7CisgICAgICAgICAgICAgICAgICAnbGlicmFyaWVz
JzogWworICAgICAgICAgICAgICAgICAgICAgICctbGlwcHMgLWxpcHBjb3JlJywKKyAgICAgICAg
ICAgICAgICAgIF0sCisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICB9XSwK
ICAgICAgICAgWydlbmFibGVfc3ZnIT0wJywgewogICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBb
CiAgICAgICAgICAgICAnd2ViY29yZV9zdmcnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDgzMDVmY2Uu
LjZjMzk5YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTMyNDMsNiArMzI0Myw3IEBACiAgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZNUEVHLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vYXVkaW8vbWtsL0ZGVEZyYW1lTUtMLmNwcCcsCisgICAgICAgICAgICAncGxhdGZv
cm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2Yv
QmluYXJ5UHJvcGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2YvRmlsZVN5
c3RlbUNGLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2YvS1VSTENGTmV0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaAppbmRleCBiMjVkMjc5Li5hNTM3
NjNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKQEAgLTUzLDYg
KzUzLDEwIEBAIHN0cnVjdCBSREZUQ29udGV4dDsKIAogI2VuZGlmIC8vICFVU0VfQUNDRUxFUkFU
RV9GRlQKIAorI2lmIFVTRShXRUJBVURJT19JUFApCisjaW5jbHVkZSAiaXBwcy5oIgorI2VuZGlm
IC8vIFVTRShXRUJBVURJT19JUFApCisKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTE0
Niw2ICsxNTAsMTYgQEAgcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsK
ICNlbmRpZiAvLyBVU0UoV0VCQVVESU9fRkZNUEVHKQogCisjaWYgVVNFKFdFQkFVRElPX0lQUCkK
KyAgICBJcHA4dSogbV9idWZmZXI7CisgICAgSXBwc0RGVFNwZWNfUl8zMmYqIG1fREZUU3BlYzsK
KworICAgIGZsb2F0KiBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisgICAgQXVkaW9GbG9hdEFy
cmF5IG1fY29tcGxleERhdGE7CisgICAgQXVkaW9GbG9hdEFycmF5IG1fcmVhbERhdGE7CisgICAg
QXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CisjZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkK
KwogI2VuZGlmIC8vICFVU0VfQUNDRUxFUkFURV9GRlQKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCmluZGV4IGRmYzUyYTIuLjBhM2YyNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcApA
QCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIAotI2lmICFPUyhEQVJX
SU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykKKyNpZiAh
T1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcp
ICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIKIApAQCAtMTAy
LDYgKzEwMiw2IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElP
X01LTCkKKyNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYgIVVT
RShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2lwcC9GRlRGcmFtZUlQUC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZjMy
ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEZGVEZyYW1lIGltcGxl
bWVudGF0aW9uIHVzaW5nIEludGVsIElQUCdzIERGVCBhbGdvcml0aG0sCisvLyBzdWl0YWJsZSBm
b3IgdXNlIG9uIExpbnV4LgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VC
X0FVRElPKQorCisjaWYgVVNFKFdFQkFVRElPX0lQUCkKKworI2luY2x1ZGUgIkZGVEZyYW1lLmgi
CisKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIGtNYXhGRlRQb3cyU2l6
ZSA9IDI0OworCisvLyBOb3JtYWwgY29uc3RydWN0b3I6IGFsbG9jYXRlcyBmb3IgYSBnaXZlbiBm
ZnRTaXplLgorRkZURnJhbWU6OkZGVEZyYW1lKHVuc2lnbmVkIGZmdFNpemUpCisgICAgOiBtX0ZG
VFNpemUoZmZ0U2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxvZzIoZmZ0U2l6ZSkpKQorICAgICwgbV9jb21wbGV4RGF0YShmZnRTaXplKQorICAgICwgbV9y
ZWFsRGF0YShmZnRTaXplIC8gMikKKyAgICAsIG1faW1hZ0RhdGEoZmZ0U2l6ZSAvIDIpCit7Cisg
ICAgLy8gV2Ugb25seSBhbGxvdyBwb3dlciBvZiB0d28uCisgICAgQVNTRVJUKDFVTCA8PCBtX2xv
ZzJGRlRTaXplID09IG1fRkZUU2l6ZSk7CisgICAgQVNTRVJUKG1fbG9nMkZGVFNpemUgPD0ga01h
eEZGVFBvdzJTaXplKTsKKworICAgIGlwcHNERlRJbml0QWxsb2NfUl8zMmYoJm1fRkZUU3BlYywg
bV9GRlRTaXplLCBJUFBfRkZUX05PRElWX0JZX0FOWSwgaXBwQWxnSGludEZhc3QpOworICAgIGlu
dCBidWZmZXJTaXplID0gMDsKKyAgICBpcHBzREZUR2V0QnVmU2l6ZV9SXzMyZihtX0ZGVFNwZWMs
ICZidWZmZXJTaXplKTsKKyAgICBtX2J1ZmZlciA9IGlwcHNNYWxsb2NfOHUoYnVmZmVyU2l6ZSk7
Cit9CisKKy8vIENyZWF0ZXMgYSBibGFuay9lbXB0eSBmcmFtZSAoaW50ZXJwb2xhdGUoKSBtdXN0
IGxhdGVyIGJlIGNhbGxlZCkuCitGRlRGcmFtZTo6RkZURnJhbWUoKQorICAgIDogbV9GRlRTaXpl
KDApCisgICAgLCBtX2xvZzJGRlRTaXplKDApCit7Cit9CisKKy8vIENvcHkgY29uc3RydWN0b3Iu
CitGRlRGcmFtZTo6RkZURnJhbWUoY29uc3QgRkZURnJhbWUmIGZyYW1lKQorICAgIDogbV9GRlRT
aXplKGZyYW1lLm1fRkZUU2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoZnJhbWUubV9sb2cyRkZU
U2l6ZSkKKyAgICAsIG1fY29tcGxleERhdGEoZnJhbWUubV9GRlRTaXplKQorICAgICwgbV9yZWFs
RGF0YShmcmFtZS5tX0ZGVFNpemUgLyAyKQorICAgICwgbV9pbWFnRGF0YShmcmFtZS5tX0ZGVFNp
emUgLyAyKQoreworICAgIGlwcHNERlRJbml0QWxsb2NfUl8zMmYoJm1fRkZUU3BlYywgbV9GRlRT
aXplLCBJUFBfRkZUX05PRElWX0JZX0FOWSwgaXBwQWxnSGludEZhc3QpOworICAgIGludCBidWZm
ZXJTaXplID0gMDsKKyAgICBpcHBzREZUR2V0QnVmU2l6ZV9SXzMyZihtX0ZGVFNwZWMsICZidWZm
ZXJTaXplKTsKKyAgICBtX2J1ZmZlciA9IGlwcHNNYWxsb2NfOHUoYnVmZmVyU2l6ZSk7CisKKyAg
ICAvLyBDb3B5L3NldHVwIGZyYW1lIGRhdGEuCisgICAgdW5zaWduZWQgbmJ5dGVzID0gc2l6ZW9m
KGZsb2F0KSAqIG1fRkZUU2l6ZTsKKyAgICBtZW1jcHkocmVhbERhdGEoKSwgZnJhbWUucmVhbERh
dGEoKSwgbmJ5dGVzKTsKKyAgICBtZW1jcHkoaW1hZ0RhdGEoKSwgZnJhbWUuaW1hZ0RhdGEoKSwg
bmJ5dGVzKTsKK30KKwordm9pZCBGRlRGcmFtZTo6aW5pdGlhbGl6ZSgpCit7Cit9CisKK3ZvaWQg
RkZURnJhbWU6OmNsZWFudXAoKQoreworfQorCitGRlRGcmFtZTo6fkZGVEZyYW1lKCkKK3sKKyAg
ICBpcHBzRnJlZShtX2J1ZmZlcik7CisgICAgaXBwc0RGVEZyZWVfUl8zMmYobV9GRlRTcGVjKTsK
K30KKwordm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3QgRkZURnJhbWUmIGZyYW1lKQorewor
ICAgIEZGVEZyYW1lJiBmcmFtZTEgPSAqdGhpczsKKyAgICBGRlRGcmFtZSYgZnJhbWUyID0gY29u
c3RfY2FzdDxGRlRGcmFtZSY+KGZyYW1lKTsKKworICAgIGZsb2F0KiByZWFsUDEgPSBmcmFtZTEu
cmVhbERhdGEoKTsKKyAgICBmbG9hdCogaW1hZ1AxID0gZnJhbWUxLmltYWdEYXRhKCk7CisgICAg
Y29uc3QgZmxvYXQqIHJlYWxQMiA9IGZyYW1lMi5yZWFsRGF0YSgpOworICAgIGNvbnN0IGZsb2F0
KiBpbWFnUDIgPSBmcmFtZTIuaW1hZ0RhdGEoKTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRo
ZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgor
ICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRo
aXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgZmxv
YXQgc2NhbGUgPSAwLjVmOworCisgICAgLy8gTXVsdGlwbHkgdGhlIHBhY2tlZCBEQy9ueXF1aXN0
IGNvbXBvbmVudAorICAgIHJlYWxQMVswXSAqPSBzY2FsZSAqIHJlYWxQMlswXTsKKyAgICBpbWFn
UDFbMF0gKj0gc2NhbGUgKiBpbWFnUDJbMF07CisKKyAgICAvLyBDb21wbGV4IG11bHRpcGxpY2F0
aW9uLiBJZiB0aGlzIGxvb3AgdHVybnMgb3V0IHRvIGJlIGhvdCB0aGVuCisgICAgLy8gd2Ugc2hv
dWxkIHVzZSBTU0Ugb3Igb3RoZXIgaW50cmluc2ljcyB0byBhY2NlbGVyYXRlIGl0LgorICAgIHVu
c2lnbmVkIGhhbGZTaXplID0gZmZ0U2l6ZSgpIC8gMjsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBoYWxmU2l6ZTsgKytpKSB7CisgICAgICAgIGZsb2F0IHJlYWxSZXN1bHQgPSByZWFs
UDFbaV0gKiByZWFsUDJbaV0gLSBpbWFnUDFbaV0gKiBpbWFnUDJbaV07CisgICAgICAgIGZsb2F0
IGltYWdSZXN1bHQgPSByZWFsUDFbaV0gKiBpbWFnUDJbaV0gKyBpbWFnUDFbaV0gKiByZWFsUDJb
aV07CisKKyAgICAgICAgcmVhbFAxW2ldID0gc2NhbGUgKiByZWFsUmVzdWx0OworICAgICAgICBp
bWFnUDFbaV0gPSBzY2FsZSAqIGltYWdSZXN1bHQ7CisgICAgfQorfQorCit2b2lkIEZGVEZyYW1l
Ojpkb0ZGVChmbG9hdCogZGF0YSkKK3sKKyAgICBJcHAzMmYqIGNvbXBsZXhQID0gbV9jb21wbGV4
RGF0YS5kYXRhKCk7CisKKyAgICAvLyBDb21wdXRlIEZvcndhcmQgdHJhbnNmb3JtIHRvIHBlcm0g
Zm9ybWF0LgorICAgIGlwcHNERlRGd2RfUlRvUGVybV8zMmYoKElwcDMyZiopZGF0YSwgY29tcGxl
eFAsIG1fRkZUU3BlYywgbV9idWZmZXIpOworCisgICAgY29uc3QgSXBwMzJmIHNjYWxlID0gMi4w
ZjsKKworICAgIGlwcHNNdWxDXzMyZl9JKHNjYWxlLCBjb21wbGV4UCwgbV9GRlRTaXplKTsKKwor
ICAgIElwcDMyZiogcmVhbFAgPSBtX3JlYWxEYXRhLmRhdGEoKTsKKyAgICBJcHAzMmYqIGltYWdQ
ID0gbV9pbWFnRGF0YS5kYXRhKCk7CisgICAgaXBwc0NwbHhUb1JlYWxfMzJmYygoSXBwMzJmYyop
Y29tcGxleFAsIHJlYWxQLCBpbWFnUCwgbV9GRlRTaXplID4+IDEpOworfQorCit2b2lkIEZGVEZy
YW1lOjpkb0ludmVyc2VGRlQoZmxvYXQqIGRhdGEpCit7CisgICAgSXBwMzJmKiBjb21wbGV4UCA9
IGdldFVwVG9EYXRlQ29tcGxleERhdGEoKTsKKworICAgIC8vIENvbXB1dGUgaW52ZXJzZSB0cmFu
c2Zvcm0uCisgICAgaXBwc0RGVEludl9QZXJtVG9SXzMyZihjb21wbGV4UCwgKElwcDMyZiopZGF0
YSwgbV9GRlRTcGVjLCBtX2J1ZmZlcik7CisKKyAgICAvLyBTY2FsZSBzbyB0aGF0IGEgZm9yd2Fy
ZCB0aGVuIGludmVyc2UgRkZUIHlpZWxkcyBleGFjdGx5IHRoZSBvcmlnaW5hbCBkYXRhLgorICAg
IGNvbnN0IGZsb2F0IHNjYWxlID0gMS4wIC8gKDIgKiBtX0ZGVFNpemUpOworCisgICAgaXBwc011
bENfMzJmX0koc2NhbGUsIChJcHAzMmYqKWRhdGEsIG1fRkZUU2l6ZSk7Cit9CisKK2Zsb2F0KiBG
RlRGcmFtZTo6cmVhbERhdGEoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0
Kj4obV9yZWFsRGF0YS5kYXRhKCkpOworfQorCitmbG9hdCogRkZURnJhbWU6OmltYWdEYXRhKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1faW1hZ0RhdGEuZGF0YSgp
KTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjpnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCkKK3sKKyAg
ICBpbnQgbGVuID0gbV9GRlRTaXplID4+IDE7CisgICAgLy8gTWVyZ2UgdGhlIHJlYWwgYW5kIGlt
YWdpbWFyeSB2ZWN0b3JzIHRvIGNvbXBsZXggdmVjdG9yLgorICAgIElwcDMyZiogcmVhbFAgPSBt
X3JlYWxEYXRhLmRhdGEoKTsKKyAgICBJcHAzMmYqIGltYWdQID0gbV9pbWFnRGF0YS5kYXRhKCk7
CisgICAgSXBwMzJmYyogY29tcGxleFAgPSByZWludGVycHJldF9jYXN0PElwcDMyZmMqPihtX2Nv
bXBsZXhEYXRhLmRhdGEoKSk7CisgICAgaXBwc1JlYWxUb0NwbHhfMzJmKHJlYWxQLCBpbWFnUCwg
Y29tcGxleFAsIGxlbik7CisKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1fY29tcGxl
eERhdGEuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKFdFQkFVRElPX0lQUCkKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCmluZGV4IDEyYjRlNDAzLi5jNDExM2YyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTAzICBYaW5nbmFuIFdhbmcgIDx4
aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEVuYWJsZSBJUFAgZm9yIEZGVEZyYW1l
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUg
RkZURnJhbWUgaW1wbGVtZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQJ3MgREZUIGFsZ29yaXRobS4K
KworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMTItMDEtMDMgIERhdmlkIExldmluICA8
bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gTG9jYWxGaWxlU3lzdGVt
Q2hyb21pdW0gbmVlZHMgc29tZSB0aHJlYWQgc2FmZXR5IGZpeGVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9mZWF0dXJlcy5neXBpCmluZGV4IGU3ZDlmZWIuLmRhNDJmYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL2ZlYXR1cmVzLmd5cGkKQEAgLTE1MSw2ICsxNTEsNyBAQAogICAgICAgWydPUyE9Im1hYyIn
LCB7CiAgICAgICAgICdmZWF0dXJlX2RlZmluZXMnOiBbCiAgICAgICAgICAgJ1dURl9VU0VfV0VC
QVVESU9fRkZNUEVHPTEnLAorICAgICAgICAgICdXVEZfVVNFX1dFQkFVRElPX0lQUD0wJywKICAg
ICAgICAgXSwKICAgICAgICAgJ3VzZV9za2lhJSc6IDEsCiAgICAgICB9XSwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121794</attachid>
            <date>2012-01-09 22:21:28 -0800</date>
            <delta_ts>2012-01-10 19:01:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>13978</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzYjM4YzI3Li44N2M1ZWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTItMDEtMDkgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHVi
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpGRlRGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGRlRGcmFtZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6
Y2xlYW51cCk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6fkZGVEZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRG
cmFtZTo6ZG9GRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvSW52ZXJzZUZGVCk6
CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6cmVhbERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RkZURnJhbWU6OmltYWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpnZXRV
cFRvRGF0ZUNvbXBsZXhEYXRhKToKKwogMjAxMi0wMS0wOSAgUm9iIEJ1aXMgIDxyYnVpc0ByaW0u
Y29tPgogCiAgICAgICAgIFVwc3RyZWFtIGNoYW5nZSB0byBkaXNhYmxlIGlucHV0W2NvbG9yXSBj
c3MgcnVsZXMgZm9yIEJsYWNrQmVycnkgcG9ydApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAppbmRleCA1ZDJiOTVjLi41Yjk5ZDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cC9XZWJDb3JlLmd5cApAQCAtNDcsNiArNDcsOSBAQAogCiAgICAgJ2VuYWJsZV93ZXhpdF90aW1l
X2Rlc3RydWN0b3JzJzogMSwKIAorICAgICMgSWYgc2V0IHRvIDEsIHVzZSB0aGUgc3lzdGVtIElQ
UCBsaWJyYXJ5LCBlbHNlIHVzZSB0aGUgdGhpcmRwYXJ0eS9pcHAuCisgICAgJ3VzZV9zeXN0ZW1f
aXBwJSc6IDEsCisKICAgICAnd2ViY29yZV9pbmNsdWRlX2RpcnMnOiBbCiAgICAgICAnLi4vJywK
ICAgICAgICcuLi8uLicsCkBAIC0xMTYxLDYgKzExNjQsMTcgQEAKICAgICAgICAgICAgICdpbmNs
dWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAgICAgICAgIH0sCiAgICAgICAgIH1dLAorICAg
ICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVy
ZV9kZWZpbmVzJywgeworICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICBb
J3VzZV9zeXN0ZW1faXBwID09IDEnLCB7CisgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJz
JzogWworICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2ludGVsL2lwcC9pbmNsdWRlJywKKyAg
ICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4KKyAgICAgICAgICAg
ICAgfV0sCisgICAgICAgICAgXSwKKyAgICAgICAgfV0sCiAgICAgICBdLAogICAgIH0sCiAgICAg
ewpAQCAtMTM2OSw2ICsxMzgzLDE3IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzKysnOiBb
Jy4uL2RvbSddLAogICAgICAgICAgIH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGlu
dXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgewor
ICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICBbJ3VzZV9zeXN0ZW1faXBw
ID09IDEnLCB7CisgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAg
ICAgICAgICAgICAgICcvb3B0L2ludGVsL2lwcC9pbmNsdWRlJywKKyAgICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBV
c2UgdGhpcmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4KKyAgICAgICAgICAgICAgfV0sCisgICAgICAg
ICAgXSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsnT1MgIT0gImFuZHJvaWQiIGFuZCAiV1RGX1VT
RV9XRUJBVURJT19GRk1QRUc9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgewogICAgICAgICAgICMg
VGhpcyBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgb24gdGhlIGluY2x1ZGUgcGF0aCBmb3IgbXVsdGlw
bGUgc3ViLXRhcmdldHMgb2Ygd2ViY29yZS4KICAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9z
ZXR0aW5ncyc6IHsKQEAgLTE2OTYsNiArMTcyMSwxNyBAQAogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvXFwuY3BwJCddLAogICAgICAgICAgIF0sCiAgICAg
ICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9
MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdjb25kaXRpb25zJzogWworICAg
ICAgICAgICAgICBbJ3VzZV9zeXN0ZW1faXBwID09IDEnLCB7CisgICAgICAgICAgICAgICAgICAn
aW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2ludGVsL2lwcC9p
bmNsdWRlJywKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIH0sIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4K
KyAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgXSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsn
T1M9PSJhbmRyb2lkIicsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBb
J2luY2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eFxcLmNw
cCQnXSwKQEAgLTE5NDUsNiArMTk4MSwxNyBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJy8o
V2luZG93c3xVbmlzY3JpYmUpW14vXSpcXC5jcHAkJ10KICAgICAgICAgICBdLAogICAgICAgICB9
XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGlu
IGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAg
ICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAgICAgJ2luY2x1
ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAnL29wdC9pbnRlbC9pcHAvaW5jbHVk
ZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAg
ICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFydHkvaXBwIHdoZW4gYWRkZWQuCisgICAg
ICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAgXSwKICAgICB9
LAogICAgIHsKQEAgLTIwMDQsNiArMjA1MSwyNCBAQAogICAgICAgICAgICAgJ2luY2x1ZGVfZGly
cysrKyc6IFsnLi4vZG9tJ10sCiAgICAgICAgICAgfSwKICAgICAgICAgfV0sCisgICAgICAgIFsn
T1M9PSJsaW51eCIgYW5kICJXVEZfVVNFX1dFQkFVRElPX0lQUD0xIiBpbiBmZWF0dXJlX2RlZmlu
ZXMnLCB7CisgICAgICAgICAgJ2FsbF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CisgICAgICAgICAg
ICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9
PSAxJywgeworICAgICAgICAgICAgICAgICAgICAgICdsZGZsYWdzJzogWworICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLUwvb3B0L2ludGVsL2lwcC9saWIvaWEzMicsCisgICAgICAgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4KKyAgICAgICAgICAgICAg
ICAgIH1dLAorICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAnbGlua19zZXR0aW5ncyc6
IHsKKyAgICAgICAgICAgICAgICAgICdsaWJyYXJpZXMnOiBbCisgICAgICAgICAgICAgICAgICAg
ICAgJy1saXBwcyAtbGlwcGNvcmUnLAorICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgIH0sCisgICAgICAgIH1dLAogICAgICAgICBbJ2VuYWJsZV9zdmchPTAn
LCB7CiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICd3ZWJjb3JlX3N2
ZycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOGVhNWU2Ny4uNGUzMTYwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtMzI1MSw2ICszMjUxLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9mZm1w
ZWcvRkZURnJhbWVGRk1QRUcuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9tYWMv
RkZURnJhbWVNYWMuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9ta2wvRkZURnJh
bWVNS0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9GaWxlU3lzdGVtQ0YuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9GRlRGcmFtZS5oCmluZGV4IGIyNWQyNzkuLmE1Mzc2M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vRkZURnJhbWUuaApAQCAtNTMsNiArNTMsMTAgQEAgc3RydWN0IFJERlRDb250
ZXh0OwogCiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVSQVRFX0ZGVAogCisjaWYgVVNFKFdFQkFVRElP
X0lQUCkKKyNpbmNsdWRlICJpcHBzLmgiCisjZW5kaWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKKwog
I2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTQ2LDYgKzE1MCwxNiBAQCBwcml2YXRlOgog
ICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdEYXRhOwogI2VuZGlmIC8vIFVTRShXRUJBVURJT19G
Rk1QRUcpCiAKKyNpZiBVU0UoV0VCQVVESU9fSVBQKQorICAgIElwcDh1KiBtX2J1ZmZlcjsKKyAg
ICBJcHBzREZUU3BlY19SXzMyZiogbV9ERlRTcGVjOworCisgICAgZmxvYXQqIGdldFVwVG9EYXRl
Q29tcGxleERhdGEoKTsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9jb21wbGV4RGF0YTsKKyAgICBB
dWRpb0Zsb2F0QXJyYXkgbV9yZWFsRGF0YTsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0
YTsKKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQorCiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVS
QVRFX0ZGVAogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
RkZURnJhbWVTdHViLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1l
U3R1Yi5jcHAKaW5kZXggZGZjNTJhMi4uMGEzZjI1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBF
TkFCTEUoV0VCX0FVRElPKQogCi0jaWYgIU9TKERBUldJTikgJiYgIVVTRShXRUJBVURJT19NS0wp
ICYmICFVU0UoV0VCQVVESU9fRkZNUEVHKQorI2lmICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVE
SU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykgJiYgIVVTRShXRUJBVURJT19JUFApCiAK
ICNpbmNsdWRlICJGRlRGcmFtZS5oIgogCkBAIC0xMDIsNiArMTAyLDYgQEAgZmxvYXQqIEZGVEZy
YW1lOjppbWFnRGF0YSgpIGNvbnN0CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlm
IC8vICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKQorI2VuZGlmIC8vICFPUyhEQVJX
SU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykgJiYgIVVT
RShXRUJBVURJT19JUFApCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKQEAgLTAsMCAr
MSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRkZURnJhbWUgaW1wbGVtZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQ
J3MgREZUIGFsZ29yaXRobSwKKy8vIHN1aXRhYmxlIGZvciB1c2Ugb24gTGludXguCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpZiBVU0UoV0VCQVVE
SU9fSVBQKQorCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworI2luY2x1ZGUgIlZlY3Rvck1hdGgu
aCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3QgdW5zaWduZWQga01heEZGVFBvdzJTaXplID0gMjQ7CisKKy8vIE5vcm1hbCBjb25z
dHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCitGRlRGcmFtZTo6RkZURnJh
bWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQorICAgICwgbV9s
b2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCisgICAgLCBt
X2NvbXBsZXhEYXRhKGZmdFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQorICAg
ICwgbV9pbWFnRGF0YShmZnRTaXplIC8gMikKK3sKKyAgICAvLyBXZSBvbmx5IGFsbG93IHBvd2Vy
IG9mIHR3by4KKyAgICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXplKTsK
KyAgICBBU1NFUlQobV9sb2cyRkZUU2l6ZSA8PSBrTWF4RkZUUG93MlNpemUpOworCisgICAgaXBw
c0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9GRlRfTk9ESVZf
QllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNpemUgPSAwOworICAgIGlw
cHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOworICAgIG1fYnVm
ZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKK30KKworLy8gQ3JlYXRlcyBhIGJsYW5r
L2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0ZSgpIG11c3QgbGF0ZXIgYmUgY2FsbGVkKS4KK0ZGVEZy
YW1lOjpGRlRGcmFtZSgpCisgICAgOiBtX0ZGVFNpemUoMCkKKyAgICAsIG1fbG9nMkZGVFNpemUo
MCkKK3sKK30KKworLy8gQ29weSBjb25zdHJ1Y3Rvci4KK0ZGVEZyYW1lOjpGRlRGcmFtZShjb25z
dCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUoZnJhbWUubV9GRlRTaXplKQorICAg
ICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXplKQorICAgICwgbV9jb21wbGV4RGF0
YShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIp
CisgICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCit7CisgICAgaXBwc0RGVElu
aXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9GRlRfTk9ESVZfQllfQU5Z
LCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNpemUgPSAwOworICAgIGlwcHNERlRH
ZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOworICAgIG1fYnVmZmVyID0g
aXBwc01hbGxvY184dShidWZmZXJTaXplKTsKKworICAgIC8vIENvcHkvc2V0dXAgZnJhbWUgZGF0
YS4KKyAgICB1bnNpZ25lZCBuYnl0ZXMgPSBzaXplb2YoZmxvYXQpICogbV9GRlRTaXplOworICAg
IG1lbWNweShyZWFsRGF0YSgpLCBmcmFtZS5yZWFsRGF0YSgpLCBuYnl0ZXMpOworICAgIG1lbWNw
eShpbWFnRGF0YSgpLCBmcmFtZS5pbWFnRGF0YSgpLCBuYnl0ZXMpOworfQorCit2b2lkIEZGVEZy
YW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6Y2xlYW51cCgpCit7Cit9
CisKK0ZGVEZyYW1lOjp+RkZURnJhbWUoKQoreworICAgIGlwcHNGcmVlKG1fYnVmZmVyKTsKKyAg
ICBpcHBzREZURnJlZV9SXzMyZihtX0RGVFNwZWMpOworfQorCit2b2lkIEZGVEZyYW1lOjptdWx0
aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCit7CisgICAgRkZURnJhbWUmIGZyYW1lMSA9ICp0
aGlzOworICAgIEZGVEZyYW1lJiBmcmFtZTIgPSBjb25zdF9jYXN0PEZGVEZyYW1lJj4oZnJhbWUp
OworCisgICAgZmxvYXQqIHJlYWxQMSA9IGZyYW1lMS5yZWFsRGF0YSgpOworICAgIGZsb2F0KiBp
bWFnUDEgPSBmcmFtZTEuaW1hZ0RhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJh
bWUyLnJlYWxEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0
YSgpOworCisgICAgdW5zaWduZWQgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworICAgIGZsb2F0
IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOworCisgICAg
VmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEs
IGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlx
dWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBp
bWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRo
ZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgor
ICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRo
aXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgZmxv
YXQgc2NhbGUgPSAwLjVmOworCisgICAgVmVjdG9yTWF0aDo6dnNtdWwocmVhbFAxLCAxLCAmc2Nh
bGUsIHJlYWxQMSwgMSwgaGFsZlNpemUpOworICAgIFZlY3Rvck1hdGg6OnZzbXVsKGltYWdQMSwg
MSwgJnNjYWxlLCBpbWFnUDEsIDEsIGhhbGZTaXplKTsKK30KKwordm9pZCBGRlRGcmFtZTo6ZG9G
RlQoZmxvYXQqIGRhdGEpCit7CisgICAgSXBwMzJmKiBjb21wbGV4UCA9IG1fY29tcGxleERhdGEu
ZGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBGb3J3YXJkIHRyYW5zZm9ybSB0byBwZXJtIGZvcm1h
dC4KKyAgICBpcHBzREZURndkX1JUb1Blcm1fMzJmKChJcHAzMmYqKWRhdGEsIGNvbXBsZXhQLCBt
X0RGVFNwZWMsIG1fYnVmZmVyKTsKKworICAgIGNvbnN0IElwcDMyZiBzY2FsZSA9IDIuMGY7CisK
KyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgY29tcGxleFAsIG1fRkZUU2l6ZSk7CisKKyAgICBJ
cHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9IG1f
aW1hZ0RhdGEuZGF0YSgpOworICAgIGlwcHNDcGx4VG9SZWFsXzMyZmMoKElwcDMyZmMqKWNvbXBs
ZXhQLCByZWFsUCwgaW1hZ1AsIG1fRkZUU2l6ZSA+PiAxKTsKK30KKwordm9pZCBGRlRGcmFtZTo6
ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIElwcDMyZiogY29tcGxleFAgPSBnZXRV
cFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisKKyAgICAvLyBDb21wdXRlIGludmVyc2UgdHJhbnNmb3Jt
LgorICAgIGlwcHNERlRJbnZfUGVybVRvUl8zMmYoY29tcGxleFAsIChJcHAzMmYqKWRhdGEsIG1f
REZUU3BlYywgbV9idWZmZXIpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhl
biBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25z
dCBmbG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKworICAgIGlwcHNNdWxDXzMy
Zl9JKHNjYWxlLCAoSXBwMzJmKilkYXRhLCBtX0ZGVFNpemUpOworfQorCitmbG9hdCogRkZURnJh
bWU6OnJlYWxEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1f
cmVhbERhdGEuZGF0YSgpKTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjppbWFnRGF0YSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2ltYWdEYXRhLmRhdGEoKSk7Cit9
CisKK2Zsb2F0KiBGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpCit7CisgICAgaW50
IGxlbiA9IG1fRkZUU2l6ZSA+PiAxOworICAgIC8vIE1lcmdlIHRoZSByZWFsIGFuZCBpbWFnaW1h
cnkgdmVjdG9ycyB0byBjb21wbGV4IHZlY3Rvci4KKyAgICBJcHAzMmYqIHJlYWxQID0gbV9yZWFs
RGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9IG1faW1hZ0RhdGEuZGF0YSgpOworICAg
IElwcDMyZmMqIGNvbXBsZXhQID0gcmVpbnRlcnByZXRfY2FzdDxJcHAzMmZjKj4obV9jb21wbGV4
RGF0YS5kYXRhKCkpOworICAgIGlwcHNSZWFsVG9DcGx4XzMyZihyZWFsUCwgaW1hZ1AsIGNvbXBs
ZXhQLCBsZW4pOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2NvbXBsZXhEYXRh
LmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShX
RUJBVURJT19JUFApCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBmMGU0MjAxLi5jZDg5MTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTA5ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFu
LndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEVuYWJsZSBJUFAgZm9yIEZGVEZyYW1lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NTUyMgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0aGUgRkZURnJh
bWUgaW1wbGVtZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQJ3MgREZUIGFsZ29yaXRobS4KKworICAg
ICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMTItMDEtMDkgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUm9sbCBDaHJvbWl1bSBERVBTIGZyb20gMTE2NDU5IHRv
IDExNjk3OS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lw
aSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA5ZDJlMDYwLi5j
MjM1MzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xNTEsNiArMTUx
LDcgQEAKICAgICAgIFsnT1MhPSJtYWMiJywgewogICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzog
WwogICAgICAgICAgICdXVEZfVVNFX1dFQkFVRElPX0ZGTVBFRz0xJywKKyAgICAgICAgICAnV1RG
X1VTRV9XRUJBVURJT19JUFA9MCcsCiAgICAgICAgIF0sCiAgICAgICAgICd1c2Vfc2tpYSUnOiAx
LAogICAgICAgfV0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>121959</attachid>
            <date>2012-01-10 19:01:06 -0800</date>
            <delta_ts>2012-01-31 19:05:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>15043</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10
ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKaW5kZXggMDFkMjcxNC4uNWY0MjZhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAgLTEyNywxMyAr
MTI3LDEzIEBAIGZ1bmN0aW9uIGNoZWNrVGFpbDEoZGF0YSwgcmVmZXJlbmNlLCBicmVha3BvaW50
KSB7CiAKICAgICAvLyBUaGlzIHRocmVzaG9sZCBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVk
IGJ5IGV4YW1pbmluZyB0aGUKICAgICAvLyB2YWx1ZSBvZiB0YWlsMU1heERlY2liZWxzLgotICAg
IHZhciB0aHJlc2hvbGQxID0gLTE0Ni43OworICAgIHZhciB0aHJlc2hvbGQxID0gLTE0NS4wOwog
CiAgICAgdmFyIHRhaWwxTWF4RGVjaWJlbHMgPSBsaW5lYXJUb0RlY2liZWwodGFpbDFNYXgvcmVm
TWF4KTsKICAgICBpZiAodGFpbDFNYXhEZWNpYmVscyA8PSB0aHJlc2hvbGQxKSB7CiAgICAgICAg
IHRlc3RQYXNzZWQoIkZpcnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNp
ZW50bHkgc21hbGwuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3Qg
cGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIg
KyB0YWlsMU1heCArICIgZEIiKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3QgcGFydCBvZiB0
YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIgKyB0YWlsMU1h
eERlY2liZWxzICsgIiBkQiIpOwogICAgICAgICBpc1plcm8gPSBmYWxzZTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCAyMjk1NzdmLi43NTg4NjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMTItMDEtMTEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisKKyAg
ICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1c2lu
ZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorICAgICAgICBBZGp1c3QgdGhlIHRocmVzaG9s
ZCB2YWx1ZSBmb3IgY29udm9sdXRpb24gbGF5b3V0IHRlc3QgaW4gY29udm9sdXRpb24tdGVzdGlu
Zy5qcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRlRG
cmFtZTo6RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmNsZWFudXApOgorICAgICAgICAoV2ViQ29y
ZTo6RkZURnJhbWU6On5GRlRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVs
dGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvRkZUKToKKyAgICAgICAgKFdl
YkNvcmU6OkZGVEZyYW1lOjpkb0ludmVyc2VGRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJh
bWU6OnJlYWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjppbWFnRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21wbGV4RGF0YSk6CisKIDIw
MTItMDEtMTAgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJlbW92ZSByZWR1bmRhbnQgY29kZSBmcm9tIERPTVdpbmRvd1NRTERhdGFiYXNlLmNwcApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA1ZDJiOTVjLi41Yjk5ZDM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtNDcsNiArNDcsOSBAQAog
CiAgICAgJ2VuYWJsZV93ZXhpdF90aW1lX2Rlc3RydWN0b3JzJzogMSwKIAorICAgICMgSWYgc2V0
IHRvIDEsIHVzZSB0aGUgc3lzdGVtIElQUCBsaWJyYXJ5LCBlbHNlIHVzZSB0aGUgdGhpcmRwYXJ0
eS9pcHAuCisgICAgJ3VzZV9zeXN0ZW1faXBwJSc6IDEsCisKICAgICAnd2ViY29yZV9pbmNsdWRl
X2RpcnMnOiBbCiAgICAgICAnLi4vJywKICAgICAgICcuLi8uLicsCkBAIC0xMTYxLDYgKzExNjQs
MTcgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAgICAg
ICAgIH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9X
RUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdjb25kaXRp
b25zJzogWworICAgICAgICAgICAgICBbJ3VzZV9zeXN0ZW1faXBwID09IDEnLCB7CisgICAgICAg
ICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICcvb3B0
L2ludGVsL2lwcC9pbmNsdWRlJywKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAg
IH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAg
d2hlbiBhZGRlZC4KKyAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgXSwKKyAgICAgICAgfV0s
CiAgICAgICBdLAogICAgIH0sCiAgICAgewpAQCAtMTM2OSw2ICsxMzgzLDE3IEBACiAgICAgICAg
ICAgICAnaW5jbHVkZV9kaXJzKysnOiBbJy4uL2RvbSddLAogICAgICAgICAgIH0sCiAgICAgICAg
IH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIg
aW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAg
ICAgICAgICBbJ3VzZV9zeXN0ZW1faXBwID09IDEnLCB7CisgICAgICAgICAgICAgICAgICAnaW5j
bHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAgICAgICAgICcvb3B0L2ludGVsL2lwcC9pbmNs
dWRlJywKKyAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgIH0sIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4KKyAg
ICAgICAgICAgICAgfV0sCisgICAgICAgICAgXSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsnT1Mg
IT0gImFuZHJvaWQiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19GRk1QRUc9MSIgaW4gZmVhdHVyZV9k
ZWZpbmVzJywgewogICAgICAgICAgICMgVGhpcyBkaXJlY3RvcnkgbmVlZHMgdG8gYmUgb24gdGhl
IGluY2x1ZGUgcGF0aCBmb3IgbXVsdGlwbGUgc3ViLXRhcmdldHMgb2Ygd2ViY29yZS4KICAgICAg
ICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKQEAgLTE2OTYsNiArMTcyMSwxNyBA
QAogICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL3dpbi9TeXN0ZW1JbmZvXFwuY3Bw
JCddLAogICAgICAgICAgIF0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFu
ZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAg
ICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICBbJ3VzZV9zeXN0ZW1faXBwID09IDEn
LCB7CisgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWworICAgICAgICAgICAgICAg
ICAgICAgICcvb3B0L2ludGVsL2lwcC9pbmNsdWRlJywKKyAgICAgICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBVc2UgdGhp
cmRwYXJ0eS9pcHAgd2hlbiBhZGRlZC4KKyAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgXSwK
KyAgICAgICAgfV0sCiAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKICAgICAgICAgICAnc291
cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vY2hyb21pdW0vQ2xp
cGJvYXJkQ2hyb21pdW1MaW51eFxcLmNwcCQnXSwKQEAgLTE5NDUsNiArMTk4MSwxNyBAQAogICAg
ICAgICAgICAgWydleGNsdWRlJywgJy8oV2luZG93c3xVbmlzY3JpYmUpW14vXSpcXC5jcHAkJ10K
ICAgICAgICAgICBdLAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldU
Rl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAn
Y29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgewor
ICAgICAgICAgICAgICAgICAgJ2luY2x1ZGVfZGlycyc6IFsKKyAgICAgICAgICAgICAgICAgICAg
ICAnL29wdC9pbnRlbC9pcHAvaW5jbHVkZScsCisgICAgICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICB9LCB7CisgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogVXNlIHRoaXJkcGFy
dHkvaXBwIHdoZW4gYWRkZWQuCisgICAgICAgICAgICAgIH1dLAorICAgICAgICAgIF0sCisgICAg
ICAgIH1dLAogICAgICAgXSwKICAgICB9LAogICAgIHsKQEAgLTIwMDQsNiArMjA1MSwyNCBAQAog
ICAgICAgICAgICAgJ2luY2x1ZGVfZGlycysrKyc6IFsnLi4vZG9tJ10sCiAgICAgICAgICAgfSwK
ICAgICAgICAgfV0sCisgICAgICAgIFsnT1M9PSJsaW51eCIgYW5kICJXVEZfVVNFX1dFQkFVRElP
X0lQUD0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CisgICAgICAgICAgJ2FsbF9kZXBlbmRlbnRf
c2V0dGluZ3MnOiB7CisgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAg
ICAgICAgWyd1c2Vfc3lzdGVtX2lwcCA9PSAxJywgeworICAgICAgICAgICAgICAgICAgICAgICds
ZGZsYWdzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAnLUwvb3B0L2ludGVsL2lwcC9s
aWIvaWEzMicsCisgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgIH0s
IHsKKyAgICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBVc2UgdGhpcmRwYXJ0eS9pcHAgd2hl
biBhZGRlZC4KKyAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICBdLAorICAgICAg
ICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKKyAgICAgICAgICAgICAgICAgICdsaWJyYXJpZXMn
OiBbCisgICAgICAgICAgICAgICAgICAgICAgJy1saXBwcyAtbGlwcGNvcmUnLAorICAgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisgICAgICAgIH1dLAog
ICAgICAgICBbJ2VuYWJsZV9zdmchPTAnLCB7CiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
ICAgICAgICAgICAgICd3ZWJjb3JlX3N2ZycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGVhODIyNC4u
MzI0N2I3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzI1NCw2ICszMjU0LDcgQEAKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9hdWRpby9ta2wvRkZURnJhbWVNS0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9C
aW5hcnlQcm9wZXJ0eUxpc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9GaWxlU3lz
dGVtQ0YuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oCmluZGV4IGIyNWQyNzkuLmE1Mzc2
M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaApAQCAtNTMsNiAr
NTMsMTAgQEAgc3RydWN0IFJERlRDb250ZXh0OwogCiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVSQVRF
X0ZGVAogCisjaWYgVVNFKFdFQkFVRElPX0lQUCkKKyNpbmNsdWRlICJpcHBzLmgiCisjZW5kaWYg
Ly8gVVNFKFdFQkFVRElPX0lQUCkKKwogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAtMTQ2
LDYgKzE1MCwxNiBAQCBwcml2YXRlOgogICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdEYXRhOwog
I2VuZGlmIC8vIFVTRShXRUJBVURJT19GRk1QRUcpCiAKKyNpZiBVU0UoV0VCQVVESU9fSVBQKQor
ICAgIElwcDh1KiBtX2J1ZmZlcjsKKyAgICBJcHBzREZUU3BlY19SXzMyZiogbV9ERlRTcGVjOwor
CisgICAgZmxvYXQqIGdldFVwVG9EYXRlQ29tcGxleERhdGEoKTsKKyAgICBBdWRpb0Zsb2F0QXJy
YXkgbV9jb21wbGV4RGF0YTsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9yZWFsRGF0YTsKKyAgICBB
dWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsKKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQor
CiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVSQVRFX0ZGVAogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKaW5kZXggZGZjNTJhMi4uMGEzZjI1NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCkBA
IC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCi0jaWYgIU9TKERBUldJ
TikgJiYgIVVTRShXRUJBVURJT19NS0wpICYmICFVU0UoV0VCQVVESU9fRkZNUEVHKQorI2lmICFP
UyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykg
JiYgIVVTRShXRUJBVURJT19JUFApCiAKICNpbmNsdWRlICJGRlRGcmFtZS5oIgogCkBAIC0xMDIs
NiArMTAyLDYgQEAgZmxvYXQqIEZGVEZyYW1lOjppbWFnRGF0YSgpIGNvbnN0CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9f
TUtMKQorI2VuZGlmIC8vICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNF
KFdFQkFVRElPX0ZGTVBFRykgJiYgIVVTRShXRUJBVURJT19JUFApCiAKICNlbmRpZiAvLyBFTkFC
TEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
aXBwL0ZGVEZyYW1lSVBQLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9G
RlRGcmFtZUlQUC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYjU5
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9G
RlRGcmFtZUlQUC5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJbnRlbCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRkZURnJhbWUgaW1wbGVt
ZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQJ3MgREZUIGFsZ29yaXRobSwKKy8vIHN1aXRhYmxlIGZv
ciB1c2Ugb24gTGludXguCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJf
QVVESU8pCisKKyNpZiBVU0UoV0VCQVVESU9fSVBQKQorCisjaW5jbHVkZSAiRkZURnJhbWUuaCIK
KworI2luY2x1ZGUgIlZlY3Rvck1hdGguaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQga01heEZGVFBvdzJTaXpl
ID0gMjQ7CisKKy8vIE5vcm1hbCBjb25zdHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZm
dFNpemUuCitGRlRGcmFtZTo6RkZURnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZU
U2l6ZShmZnRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bG9nMihmZnRTaXplKSkpCisgICAgLCBtX2NvbXBsZXhEYXRhKGZmdFNpemUpCisgICAgLCBtX3Jl
YWxEYXRhKGZmdFNpemUgLyAyKQorICAgICwgbV9pbWFnRGF0YShmZnRTaXplIC8gMikKK3sKKyAg
ICAvLyBXZSBvbmx5IGFsbG93IHBvd2VyIG9mIHR3by4KKyAgICBBU1NFUlQoMVVMIDw8IG1fbG9n
MkZGVFNpemUgPT0gbV9GRlRTaXplKTsKKyAgICBBU1NFUlQobV9sb2cyRkZUU2l6ZSA8PSBrTWF4
RkZUUG93MlNpemUpOworCisgICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBt
X0ZGVFNpemUsIElQUF9GRlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50
IGJ1ZmZlclNpemUgPSAwOworICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywg
JmJ1ZmZlclNpemUpOworICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsK
K30KKworLy8gQ3JlYXRlcyBhIGJsYW5rL2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0ZSgpIG11c3Qg
bGF0ZXIgYmUgY2FsbGVkKS4KK0ZGVEZyYW1lOjpGRlRGcmFtZSgpCisgICAgOiBtX0ZGVFNpemUo
MCkKKyAgICAsIG1fbG9nMkZGVFNpemUoMCkKK3sKK30KKworLy8gQ29weSBjb25zdHJ1Y3Rvci4K
K0ZGVEZyYW1lOjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNp
emUoZnJhbWUubV9GRlRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRT
aXplKQorICAgICwgbV9jb21wbGV4RGF0YShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX3JlYWxE
YXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCisgICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZUU2l6
ZSAvIDIpCit7CisgICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNp
emUsIElQUF9GRlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZl
clNpemUgPSAwOworICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZl
clNpemUpOworICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKKworICAg
IC8vIENvcHkvc2V0dXAgZnJhbWUgZGF0YS4KKyAgICB1bnNpZ25lZCBuYnl0ZXMgPSBzaXplb2Yo
ZmxvYXQpICogbV9GRlRTaXplOworICAgIG1lbWNweShyZWFsRGF0YSgpLCBmcmFtZS5yZWFsRGF0
YSgpLCBuYnl0ZXMpOworICAgIG1lbWNweShpbWFnRGF0YSgpLCBmcmFtZS5pbWFnRGF0YSgpLCBu
Ynl0ZXMpOworfQorCit2b2lkIEZGVEZyYW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBG
RlRGcmFtZTo6Y2xlYW51cCgpCit7Cit9CisKK0ZGVEZyYW1lOjp+RkZURnJhbWUoKQoreworICAg
IGlwcHNGcmVlKG1fYnVmZmVyKTsKKyAgICBpcHBzREZURnJlZV9SXzMyZihtX0RGVFNwZWMpOwor
fQorCit2b2lkIEZGVEZyYW1lOjptdWx0aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCit7Cisg
ICAgRkZURnJhbWUmIGZyYW1lMSA9ICp0aGlzOworICAgIEZGVEZyYW1lJiBmcmFtZTIgPSBjb25z
dF9jYXN0PEZGVEZyYW1lJj4oZnJhbWUpOworCisgICAgZmxvYXQqIHJlYWxQMSA9IGZyYW1lMS5y
ZWFsRGF0YSgpOworICAgIGZsb2F0KiBpbWFnUDEgPSBmcmFtZTEuaW1hZ0RhdGEoKTsKKyAgICBj
b25zdCBmbG9hdCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7CisgICAgY29uc3QgZmxvYXQq
IGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0YSgpOworCisgICAgdW5zaWduZWQgaGFsZlNpemUgPSBm
ZnRTaXplKCkgLyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGlt
YWcwID0gaW1hZ1AxWzBdOworCisgICAgVmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEs
IHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11
bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSBy
ZWFsMCAqIHJlYWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKwor
ICAgIC8vIFNjYWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0
aGUgTWFjLgorICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdh
eSBiYWNrIHRvIGludmVyc2UgRkZULgorICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNj
YWxpbmcgb24gdGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVk
IHRvIGNoYW5nZSB0b28uCisgICAgZmxvYXQgc2NhbGUgPSAwLjVmOworCisgICAgVmVjdG9yTWF0
aDo6dnNtdWwocmVhbFAxLCAxLCAmc2NhbGUsIHJlYWxQMSwgMSwgaGFsZlNpemUpOworICAgIFZl
Y3Rvck1hdGg6OnZzbXVsKGltYWdQMSwgMSwgJnNjYWxlLCBpbWFnUDEsIDEsIGhhbGZTaXplKTsK
K30KKwordm9pZCBGRlRGcmFtZTo6ZG9GRlQoZmxvYXQqIGRhdGEpCit7CisgICAgSXBwMzJmKiBj
b21wbGV4UCA9IG1fY29tcGxleERhdGEuZGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBGb3J3YXJk
IHRyYW5zZm9ybSB0byBwZXJtIGZvcm1hdC4KKyAgICBpcHBzREZURndkX1JUb1Blcm1fMzJmKChJ
cHAzMmYqKWRhdGEsIGNvbXBsZXhQLCBtX0RGVFNwZWMsIG1fYnVmZmVyKTsKKworICAgIGNvbnN0
IElwcDMyZiBzY2FsZSA9IDIuMGY7CisKKyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgY29tcGxl
eFAsIG1fRkZUU2l6ZSk7CisKKyAgICBJcHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7
CisgICAgSXBwMzJmKiBpbWFnUCA9IG1faW1hZ0RhdGEuZGF0YSgpOworICAgIGlwcHNDcGx4VG9S
ZWFsXzMyZmMoKElwcDMyZmMqKWNvbXBsZXhQLCByZWFsUCwgaW1hZ1AsIG1fRkZUU2l6ZSA+PiAx
KTsKK30KKwordm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAg
IElwcDMyZiogY29tcGxleFAgPSBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisKKyAgICAvLyBD
b21wdXRlIGludmVyc2UgdHJhbnNmb3JtLgorICAgIGlwcHNERlRJbnZfUGVybVRvUl8zMmYoY29t
cGxleFAsIChJcHAzMmYqKWRhdGEsIG1fREZUU3BlYywgbV9idWZmZXIpOworCisgICAgLy8gU2Nh
bGUgc28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUg
b3JpZ2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRT
aXplKTsKKworICAgIGlwcHNNdWxDXzMyZl9JKHNjYWxlLCAoSXBwMzJmKilkYXRhLCBtX0ZGVFNp
emUpOworfQorCitmbG9hdCogRkZURnJhbWU6OnJlYWxEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1fcmVhbERhdGEuZGF0YSgpKTsKK30KKworZmxvYXQqIEZG
VEZyYW1lOjppbWFnRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQq
PihtX2ltYWdEYXRhLmRhdGEoKSk7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6Z2V0VXBUb0RhdGVD
b21wbGV4RGF0YSgpCit7CisgICAgaW50IGxlbiA9IG1fRkZUU2l6ZSA+PiAxOworICAgIC8vIE1l
cmdlIHRoZSByZWFsIGFuZCBpbWFnaW1hcnkgdmVjdG9ycyB0byBjb21wbGV4IHZlY3Rvci4KKyAg
ICBJcHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9
IG1faW1hZ0RhdGEuZGF0YSgpOworICAgIElwcDMyZmMqIGNvbXBsZXhQID0gcmVpbnRlcnByZXRf
Y2FzdDxJcHAzMmZjKj4obV9jb21wbGV4RGF0YS5kYXRhKCkpOworICAgIGlwcHNSZWFsVG9DcGx4
XzMyZihyZWFsUCwgaW1hZ1AsIGNvbXBsZXhQLCBsZW4pOworCisgICAgcmV0dXJuIGNvbnN0X2Nh
c3Q8ZmxvYXQqPihtX2NvbXBsZXhEYXRhLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBkOWNiMWQyLi40YmFiZTEw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTAxLTEx
ICBYaW5nbmFuIFdhbmcgIDx4aW5nbmFuLndhbmdAaW50ZWwuY29tPgorCisgICAgICAgIEVuYWJs
ZSBJUFAgZm9yIEZGVEZyYW1lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NTUyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCB0aGUgRkZURnJhbWUgaW1wbGVtZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQ
J3MgREZUIGFsZ29yaXRobS4KKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisKIDIwMTItMDEt
MTAgIERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBVbnJldmlld2VkLCByb2xsIENocm9taXVtIERFUFMgdG8gcjExNzEyMS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA5ZDJlMDYwLi5jMjM1MzAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xNTEsNiArMTUxLDcgQEAKICAgICAgIFsnT1Mh
PSJtYWMiJywgewogICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWwogICAgICAgICAgICdXVEZf
VVNFX1dFQkFVRElPX0ZGTVBFRz0xJywKKyAgICAgICAgICAnV1RGX1VTRV9XRUJBVURJT19JUFA9
MCcsCiAgICAgICAgIF0sCiAgICAgICAgICd1c2Vfc2tpYSUnOiAxLAogICAgICAgfV0sCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124867</attachid>
            <date>2012-01-31 19:08:30 -0800</date>
            <delta_ts>2012-02-02 19:32:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>12741</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmF1ZGlvL3Jlc291cmNlcy9jb252b2x1dGlvbi10
ZXN0aW5nLmpzIGIvTGF5b3V0VGVzdHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRl
c3RpbmcuanMKaW5kZXggMDFkMjcxNC4uNWY0MjZhZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYXVkaW8vcmVzb3VyY2VzL2NvbnZvbHV0aW9uLXRlc3RpbmcuanMKQEAgLTEyNywxMyAr
MTI3LDEzIEBAIGZ1bmN0aW9uIGNoZWNrVGFpbDEoZGF0YSwgcmVmZXJlbmNlLCBicmVha3BvaW50
KSB7CiAKICAgICAvLyBUaGlzIHRocmVzaG9sZCBpcyBleHBlcmltZW50YWxseSBkZXRlcm1pbmVk
IGJ5IGV4YW1pbmluZyB0aGUKICAgICAvLyB2YWx1ZSBvZiB0YWlsMU1heERlY2liZWxzLgotICAg
IHZhciB0aHJlc2hvbGQxID0gLTE0Ni43OworICAgIHZhciB0aHJlc2hvbGQxID0gLTE0NS4wOwog
CiAgICAgdmFyIHRhaWwxTWF4RGVjaWJlbHMgPSBsaW5lYXJUb0RlY2liZWwodGFpbDFNYXgvcmVm
TWF4KTsKICAgICBpZiAodGFpbDFNYXhEZWNpYmVscyA8PSB0aHJlc2hvbGQxKSB7CiAgICAgICAg
IHRlc3RQYXNzZWQoIkZpcnN0IHBhcnQgb2YgdGFpbCBvZiBjb252b2x1dGlvbiBpcyBzdWZmaWNp
ZW50bHkgc21hbGwuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3Qg
cGFydCBvZiB0YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIg
KyB0YWlsMU1heCArICIgZEIiKTsKKyAgICAgICAgdGVzdEZhaWxlZCgiRmlyc3QgcGFydCBvZiB0
YWlsIG9mIGNvbnZvbHV0aW9uIGlzIG5vdCBzdWZmaWNpZW50bHkgc21hbGw6ICIgKyB0YWlsMU1h
eERlY2liZWxzICsgIiBkQiIpOwogICAgICAgICBpc1plcm8gPSBmYWxzZTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA5YTgwN2NhLi4yN2Q1NzdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAK
KzIwMTItMDItMDEgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisKKyAg
ICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1c2lu
ZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorICAgICAgICBBZGp1c3QgdGhlIHRocmVzaG9s
ZCB2YWx1ZSBmb3IgY29udm9sdXRpb24gbGF5b3V0IHRlc3QgaW4gY29udm9sdXRpb24tdGVzdGlu
Zy5qcy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
YXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGRlRG
cmFtZTo6RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmluaXRpYWxpemUp
OgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmNsZWFudXApOgorICAgICAgICAoV2ViQ29y
ZTo6RkZURnJhbWU6On5GRlRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6bXVs
dGlwbHkpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmRvRkZUKToKKyAgICAgICAgKFdl
YkNvcmU6OkZGVEZyYW1lOjpkb0ludmVyc2VGRlQpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJh
bWU6OnJlYWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjppbWFnRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21wbGV4RGF0YSk6CisKIDIw
MTItMDEtMzEgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUHJv
Y2Vzc2luZ0luc3RydWN0aW9uIHNob3VsZCBub3QgYmUgYSBDb250YWluZXJOb2RlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGYzZDdkMjMuLmVmYTkxZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0xMTQ1LDYgKzExNDUsMTEgQEAK
ICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAgICAgICAgIH0s
CiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJ
T19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdjZmxhZ3MnOiBbCisg
ICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1jZmxhZ3Mtb25seS1JIGlwcCknLAorICAgICAg
ICAgIF0sCisgICAgICAgIH1dLAogICAgICAgXSwKICAgICB9LAogICAgIHsKQEAgLTEzNDcsNiAr
MTM1MiwxMSBAQAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycysrJzogWycuLi9kb20nXSwKICAg
ICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9V
U0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY2Zs
YWdzJzogWworICAgICAgICAgICAgJzwhQChwa2ctY29uZmlnIC0tY2ZsYWdzLW9ubHktSSBpcHAp
JywKKyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAgICAgWydPUyAhPSAiYW5kcm9pZCIg
YW5kICJXVEZfVVNFX1dFQkFVRElPX0ZGTVBFRz0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CiAg
ICAgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSBvbiB0aGUgaW5jbHVkZSBwYXRo
IGZvciBtdWx0aXBsZSBzdWItdGFyZ2V0cyBvZiB3ZWJjb3JlLgogICAgICAgICAgICdkaXJlY3Rf
ZGVwZW5kZW50X3NldHRpbmdzJzogewpAQCAtMTY3Nyw2ICsxNjg3LDExIEBACiAgICAgICAgICAg
ICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vd2luL1N5c3RlbUluZm9cXC5jcHAkJ10sCiAgICAgICAg
ICAgXSwKICAgICAgICAgfV0sCisgICAgICAgIFsnT1M9PSJsaW51eCIgYW5kICJXVEZfVVNFX1dF
QkFVRElPX0lQUD0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CisgICAgICAgICAgJ2NmbGFncyc6
IFsKKyAgICAgICAgICAgICc8IUAocGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5LUkgaXBwKScsCisg
ICAgICAgICAgXSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKICAg
ICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW1MaW51eFxcLmNwcCQnXSwKQEAgLTE5MjYsNiArMTk0
MSwxMSBAQAogICAgICAgICAgICAgWydleGNsdWRlJywgJy8oV2luZG93c3xVbmlzY3JpYmUpW14v
XSpcXC5jcHAkJ10KICAgICAgICAgICBdLAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09Imxp
bnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsK
KyAgICAgICAgICAnY2ZsYWdzJzogWworICAgICAgICAgICAgJzwhQChwa2ctY29uZmlnIC0tY2Zs
YWdzLW9ubHktSSBpcHApJywKKyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAg
ICAgfSwKICAgICB7CkBAIC0xOTg1LDYgKzIwMDUsMTggQEAKICAgICAgICAgICAgICdpbmNsdWRl
X2RpcnMrKysnOiBbJy4uL2RvbSddLAogICAgICAgICAgIH0sCiAgICAgICAgIH1dLAorICAgICAg
ICBbJ09TPT0ibGludXgiIGFuZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9k
ZWZpbmVzJywgeworICAgICAgICAgICdhbGxfZGVwZW5kZW50X3NldHRpbmdzJzogeworICAgICAg
ICAgICAgJ2xkZmxhZ3MnOiBbCisgICAgICAgICAgICAgICc8IUAocGtnLWNvbmZpZyAtLWxpYnMt
b25seS1MIGlwcCknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdsaW5rX3NldHRpbmdz
JzogeworICAgICAgICAgICAgICAnbGlicmFyaWVzJzogWworICAgICAgICAgICAgICAgICctbGlw
cHMgLWxpcHBjb3JlJywKKyAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICB9LAorICAgICAgICB9XSwKICAgICAgICAgWydlbmFibGVfc3ZnIT0wJywgewogICAgICAgICAg
ICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAnd2ViY29yZV9zdmcnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IDEwMWM4N2YuLjJhY2RhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI4NzEsNiAr
Mjg3MSw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vZmZtcGVnL0ZGVEZyYW1lRkZN
UEVHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vbWFjL0ZGVEZyYW1lTWFjLmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vbWtsL0ZGVEZyYW1lTUtMLmNwcCcsCisg
ICAgICAgICAgICAncGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2YvQmluYXJ5UHJvcGVydHlMaXN0LmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2YvRmlsZVN5c3RlbUNGLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2Yv
S1VSTENGTmV0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9GRlRGcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaApp
bmRleCAwNDI2MzNjLi42ZWI0OGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9GRlRGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZG
VEZyYW1lLmgKQEAgLTUzLDYgKzUzLDEwIEBAIHN0cnVjdCBSREZUQ29udGV4dDsKIAogI2VuZGlm
IC8vICFVU0VfQUNDRUxFUkFURV9GRlQKIAorI2lmIFVTRShXRUJBVURJT19JUFApCisjaW5jbHVk
ZSAiaXBwcy5oIgorI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KQEAgLTE0Niw2ICsxNTAsMTYgQEAgcHJpdmF0ZToKICAgICBBdWRpb0Zsb2F0
QXJyYXkgbV9pbWFnRGF0YTsKICNlbmRpZiAvLyBVU0UoV0VCQVVESU9fRkZNUEVHKQogCisjaWYg
VVNFKFdFQkFVRElPX0lQUCkKKyAgICBJcHA4dSogbV9idWZmZXI7CisgICAgSXBwc0RGVFNwZWNf
Ul8zMmYqIG1fREZUU3BlYzsKKworICAgIGZsb2F0KiBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7
CisgICAgQXVkaW9GbG9hdEFycmF5IG1fY29tcGxleERhdGE7CisgICAgQXVkaW9GbG9hdEFycmF5
IG1fcmVhbERhdGE7CisgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CisjZW5kaWYgLy8g
VVNFKFdFQkFVRElPX0lQUCkKKwogI2VuZGlmIC8vICFVU0VfQUNDRUxFUkFURV9GRlQKIH07CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCmluZGV4
IGRmYzUyYTIuLjBhM2YyNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
RkZURnJhbWVTdHViLmNwcApAQCAtMjksNyArMjksNyBAQAogCiAjaWYgRU5BQkxFKFdFQl9BVURJ
TykKIAotI2lmICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFV
RElPX0ZGTVBFRykKKyNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYgIVVT
RShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjaW5jbHVkZSAiRkZU
RnJhbWUuaCIKIApAQCAtMTAyLDYgKzEwMiw2IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEo
KSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyAhT1MoREFSV0lO
KSAmJiAhVVNFKFdFQkFVRElPX01LTCkKKyNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdF
QkFVRElPX01LTCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fSVBQ
KQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjk5ZmI1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIEZGVEZyYW1lIGltcGxlbWVudGF0aW9uIHVzaW5nIEludGVsIElQUCdzIERGVCBhbGdvcml0
aG0sCisvLyBzdWl0YWJsZSBmb3IgdXNlIG9uIExpbnV4LgorCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCisjaWYgVVNFKFdFQkFVRElPX0lQUCkKKworI2lu
Y2x1ZGUgIkZGVEZyYW1lLmgiCisKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2ln
bmVkIGtNYXhGRlRQb3cyU2l6ZSA9IDI0OworCisvLyBOb3JtYWwgY29uc3RydWN0b3I6IGFsbG9j
YXRlcyBmb3IgYSBnaXZlbiBmZnRTaXplLgorRkZURnJhbWU6OkZGVEZyYW1lKHVuc2lnbmVkIGZm
dFNpemUpCisgICAgOiBtX0ZGVFNpemUoZmZ0U2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNpemUoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxvZzIoZmZ0U2l6ZSkpKQorICAgICwgbV9jb21wbGV4RGF0YShm
ZnRTaXplKQorICAgICwgbV9yZWFsRGF0YShmZnRTaXplIC8gMikKKyAgICAsIG1faW1hZ0RhdGEo
ZmZ0U2l6ZSAvIDIpCit7CisgICAgLy8gV2Ugb25seSBhbGxvdyBwb3dlciBvZiB0d28uCisgICAg
QVNTRVJUKDFVTCA8PCBtX2xvZzJGRlRTaXplID09IG1fRkZUU2l6ZSk7CisgICAgQVNTRVJUKG1f
bG9nMkZGVFNpemUgPD0ga01heEZGVFBvdzJTaXplKTsKKworICAgIGlwcHNERlRJbml0QWxsb2Nf
Ul8zMmYoJm1fREZUU3BlYywgbV9GRlRTaXplLCBJUFBfRkZUX05PRElWX0JZX0FOWSwgaXBwQWxn
SGludEZhc3QpOworICAgIGludCBidWZmZXJTaXplID0gMDsKKyAgICBpcHBzREZUR2V0QnVmU2l6
ZV9SXzMyZihtX0RGVFNwZWMsICZidWZmZXJTaXplKTsKKyAgICBtX2J1ZmZlciA9IGlwcHNNYWxs
b2NfOHUoYnVmZmVyU2l6ZSk7Cit9CisKKy8vIENyZWF0ZXMgYSBibGFuay9lbXB0eSBmcmFtZSAo
aW50ZXJwb2xhdGUoKSBtdXN0IGxhdGVyIGJlIGNhbGxlZCkuCitGRlRGcmFtZTo6RkZURnJhbWUo
KQorICAgIDogbV9GRlRTaXplKDApCisgICAgLCBtX2xvZzJGRlRTaXplKDApCit7Cit9CisKKy8v
IENvcHkgY29uc3RydWN0b3IuCitGRlRGcmFtZTo6RkZURnJhbWUoY29uc3QgRkZURnJhbWUmIGZy
YW1lKQorICAgIDogbV9GRlRTaXplKGZyYW1lLm1fRkZUU2l6ZSkKKyAgICAsIG1fbG9nMkZGVFNp
emUoZnJhbWUubV9sb2cyRkZUU2l6ZSkKKyAgICAsIG1fY29tcGxleERhdGEoZnJhbWUubV9GRlRT
aXplKQorICAgICwgbV9yZWFsRGF0YShmcmFtZS5tX0ZGVFNpemUgLyAyKQorICAgICwgbV9pbWFn
RGF0YShmcmFtZS5tX0ZGVFNpemUgLyAyKQoreworICAgIGlwcHNERlRJbml0QWxsb2NfUl8zMmYo
Jm1fREZUU3BlYywgbV9GRlRTaXplLCBJUFBfRkZUX05PRElWX0JZX0FOWSwgaXBwQWxnSGludEZh
c3QpOworICAgIGludCBidWZmZXJTaXplID0gMDsKKyAgICBpcHBzREZUR2V0QnVmU2l6ZV9SXzMy
ZihtX0RGVFNwZWMsICZidWZmZXJTaXplKTsKKyAgICBtX2J1ZmZlciA9IGlwcHNNYWxsb2NfOHUo
YnVmZmVyU2l6ZSk7CisKKyAgICAvLyBDb3B5L3NldHVwIGZyYW1lIGRhdGEuCisgICAgdW5zaWdu
ZWQgbmJ5dGVzID0gc2l6ZW9mKGZsb2F0KSAqIG1fRkZUU2l6ZTsKKyAgICBtZW1jcHkocmVhbERh
dGEoKSwgZnJhbWUucmVhbERhdGEoKSwgbmJ5dGVzKTsKKyAgICBtZW1jcHkoaW1hZ0RhdGEoKSwg
ZnJhbWUuaW1hZ0RhdGEoKSwgbmJ5dGVzKTsKK30KKwordm9pZCBGRlRGcmFtZTo6aW5pdGlhbGl6
ZSgpCit7Cit9CisKK3ZvaWQgRkZURnJhbWU6OmNsZWFudXAoKQoreworfQorCitGRlRGcmFtZTo6
fkZGVEZyYW1lKCkKK3sKKyAgICBpcHBzRnJlZShtX2J1ZmZlcik7CisgICAgaXBwc0RGVEZyZWVf
Ul8zMmYobV9ERlRTcGVjKTsKK30KKwordm9pZCBGRlRGcmFtZTo6bXVsdGlwbHkoY29uc3QgRkZU
RnJhbWUmIGZyYW1lKQoreworICAgIEZGVEZyYW1lJiBmcmFtZTEgPSAqdGhpczsKKyAgICBGRlRG
cmFtZSYgZnJhbWUyID0gY29uc3RfY2FzdDxGRlRGcmFtZSY+KGZyYW1lKTsKKworICAgIGZsb2F0
KiByZWFsUDEgPSBmcmFtZTEucmVhbERhdGEoKTsKKyAgICBmbG9hdCogaW1hZ1AxID0gZnJhbWUx
LmltYWdEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIHJlYWxQMiA9IGZyYW1lMi5yZWFsRGF0YSgp
OworICAgIGNvbnN0IGZsb2F0KiBpbWFnUDIgPSBmcmFtZTIuaW1hZ0RhdGEoKTsKKworICAgIHVu
c2lnbmVkIGhhbGZTaXplID0gZmZ0U2l6ZSgpIC8gMjsKKyAgICBmbG9hdCByZWFsMCA9IHJlYWxQ
MVswXTsKKyAgICBmbG9hdCBpbWFnMCA9IGltYWdQMVswXTsKKworICAgIFZlY3Rvck1hdGg6Onp2
bXVsKHJlYWxQMSwgaW1hZ1AxLCByZWFsUDIsIGltYWdQMiwgcmVhbFAxLCBpbWFnUDEsIGhhbGZT
aXplKTsgCisKKyAgICAvLyBNdWx0aXBseSB0aGUgcGFja2VkIERDL255cXVpc3QgY29tcG9uZW50
CisgICAgcmVhbFAxWzBdID0gcmVhbDAgKiByZWFsUDJbMF07CisgICAgaW1hZ1AxWzBdID0gaW1h
ZzAgKiBpbWFnUDJbMF07CisKKyAgICAvLyBTY2FsZSBhY2NvdW50cyB0aGUgcGVjdWxpYXIgc2Nh
bGluZyBvZiB2ZWNMaWIgb24gdGhlIE1hYy4KKyAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHJpZ2h0
IHNjYWxpbmcgYWxsIHRoZSB3YXkgYmFjayB0byBpbnZlcnNlIEZGVC4KKyAgICAvLyBGSVhNRTog
aWYgd2UgY2hhbmdlIHRoZSBzY2FsaW5nIG9uIHRoZSBNYWMgdGhlbiB0aGlzIHNjYWxlCisgICAg
Ly8gZmFjdG9yIHdpbGwgbmVlZCB0byBjaGFuZ2UgdG9vLgorICAgIGZsb2F0IHNjYWxlID0gMC41
ZjsKKworICAgIFZlY3Rvck1hdGg6OnZzbXVsKHJlYWxQMSwgMSwgJnNjYWxlLCByZWFsUDEsIDEs
IGhhbGZTaXplKTsKKyAgICBWZWN0b3JNYXRoOjp2c211bChpbWFnUDEsIDEsICZzY2FsZSwgaW1h
Z1AxLCAxLCBoYWxmU2l6ZSk7Cit9CisKK3ZvaWQgRkZURnJhbWU6OmRvRkZUKGZsb2F0KiBkYXRh
KQoreworICAgIElwcDMyZiogY29tcGxleFAgPSBtX2NvbXBsZXhEYXRhLmRhdGEoKTsKKworICAg
IC8vIENvbXB1dGUgRm9yd2FyZCB0cmFuc2Zvcm0gdG8gcGVybSBmb3JtYXQuCisgICAgaXBwc0RG
VEZ3ZF9SVG9QZXJtXzMyZigoSXBwMzJmKilkYXRhLCBjb21wbGV4UCwgbV9ERlRTcGVjLCBtX2J1
ZmZlcik7CisKKyAgICBjb25zdCBJcHAzMmYgc2NhbGUgPSAyLjBmOworCisgICAgaXBwc011bENf
MzJmX0koc2NhbGUsIGNvbXBsZXhQLCBtX0ZGVFNpemUpOworCisgICAgSXBwMzJmKiByZWFsUCA9
IG1fcmVhbERhdGEuZGF0YSgpOworICAgIElwcDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRhLmRhdGEo
KTsKKyAgICBpcHBzQ3BseFRvUmVhbF8zMmZjKChJcHAzMmZjKiljb21wbGV4UCwgcmVhbFAsIGlt
YWdQLCBtX0ZGVFNpemUgPj4gMSk7Cit9CisKK3ZvaWQgRkZURnJhbWU6OmRvSW52ZXJzZUZGVChm
bG9hdCogZGF0YSkKK3sKKyAgICBJcHAzMmYqIGNvbXBsZXhQID0gZ2V0VXBUb0RhdGVDb21wbGV4
RGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBpbnZlcnNlIHRyYW5zZm9ybS4KKyAgICBpcHBzREZU
SW52X1Blcm1Ub1JfMzJmKGNvbXBsZXhQLCAoSXBwMzJmKilkYXRhLCBtX0RGVFNwZWMsIG1fYnVm
ZmVyKTsKKworICAgIC8vIFNjYWxlIHNvIHRoYXQgYSBmb3J3YXJkIHRoZW4gaW52ZXJzZSBGRlQg
eWllbGRzIGV4YWN0bHkgdGhlIG9yaWdpbmFsIGRhdGEuCisgICAgY29uc3QgZmxvYXQgc2NhbGUg
PSAxLjAgLyAoMiAqIG1fRkZUU2l6ZSk7CisKKyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgKElw
cDMyZiopZGF0YSwgbV9GRlRTaXplKTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX3JlYWxEYXRhLmRhdGEo
KSk7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdF9jYXN0PGZsb2F0Kj4obV9pbWFnRGF0YS5kYXRhKCkpOworfQorCitmbG9hdCogRkZU
RnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERhdGEoKQoreworICAgIGludCBsZW4gPSBtX0ZGVFNp
emUgPj4gMTsKKyAgICAvLyBNZXJnZSB0aGUgcmVhbCBhbmQgaW1hZ2ltYXJ5IHZlY3RvcnMgdG8g
Y29tcGxleCB2ZWN0b3IuCisgICAgSXBwMzJmKiByZWFsUCA9IG1fcmVhbERhdGEuZGF0YSgpOwor
ICAgIElwcDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRhLmRhdGEoKTsKKyAgICBJcHAzMmZjKiBjb21w
bGV4UCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmYyo+KG1fY29tcGxleERhdGEuZGF0YSgpKTsK
KyAgICBpcHBzUmVhbFRvQ3BseF8zMmYocmVhbFAsIGltYWdQLCBjb21wbGV4UCwgbGVuKTsKKwor
ICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0Kj4obV9jb21wbGV4RGF0YS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125242</attachid>
            <date>2012-02-02 19:32:05 -0800</date>
            <delta_ts>2012-02-06 00:38:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>11216</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhNWNmN2M2Li5iNjZmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTItMDItMDIgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgIChGRlRGcmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkZURnJhbWU6OkZGVEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjp+RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RkZU
RnJhbWU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpkb0ZGVCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKToKKyAgICAgICAgKFdlYkNv
cmU6OkZGVEZyYW1lOjpyZWFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6aW1h
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERh
dGEpOgorCiAyMDEyLTAyLTAyICBBbWkgRmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgQXZvaWQgY3Jhc2hpbmcgcmVuZGVyZXIgd2hlbiBHUFUgcHJvY2VzcyBkaWVz
IGJ5IG5vdCBjYWNoaW5nIHRleHR1cmVzIGJldHdlZW4gdmlkZW8gZnJhbWVzLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCBmM2Q3ZDIzLi4wMTFhZDFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAtMTE0NSw2ICsxMTQ1LDExIEBACiAg
ICAgICAgICAgICAnaW5jbHVkZV9kaXJzKysrJzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAog
ICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9f
SVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnY2ZsYWdzJzogWworICAg
ICAgICAgICAgJzwhQChwa2ctY29uZmlnIC0tY2ZsYWdzLW9ubHktSSBpcHApJywKKyAgICAgICAg
ICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7CkBAIC0xMzQ3LDYgKzEz
NTIsMTMgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKyc6IFsnLi4vZG9tJ10sCiAgICAg
ICAgICAgfSwKICAgICAgICAgfV0sCisgICAgICAgIFsnT1M9PSJsaW51eCIgYW5kICJXVEZfVVNF
X1dFQkFVRElPX0lQUD0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CisgICAgICAgICAgJ2RpcmVj
dF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CisgICAgICAgICAgICAnY2ZsYWdzJzogWworICAgICAg
ICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1jZmxhZ3Mtb25seS1JIGlwcCknLAorICAgICAgICAg
ICAgXSwKKyAgICAgICAgICB9LAorICAgICAgICB9XSwKICAgICAgICAgWydPUyAhPSAiYW5kcm9p
ZCIgYW5kICJXVEZfVVNFX1dFQkFVRElPX0ZGTVBFRz0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7
CiAgICAgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBuZWVkcyB0byBiZSBvbiB0aGUgaW5jbHVkZSBw
YXRoIGZvciBtdWx0aXBsZSBzdWItdGFyZ2V0cyBvZiB3ZWJjb3JlLgogICAgICAgICAgICdkaXJl
Y3RfZGVwZW5kZW50X3NldHRpbmdzJzogewpAQCAtMTk4NSw2ICsxOTk3LDE4IEBACiAgICAgICAg
ICAgICAnaW5jbHVkZV9kaXJzKysrJzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAg
ICB9XSwKKyAgICAgICAgWydPUz09ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEi
IGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAgICAnYWxsX2RlcGVuZGVudF9zZXR0aW5n
cyc6IHsKKyAgICAgICAgICAgICdsZGZsYWdzJzogWworICAgICAgICAgICAgICAnPCFAKHBrZy1j
b25maWcgLS1saWJzLW9ubHktTCBpcHApJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICAn
bGlua19zZXR0aW5ncyc6IHsKKyAgICAgICAgICAgICAgJ2xpYnJhcmllcyc6IFsKKyAgICAgICAg
ICAgICAgICAnLWxpcHBzIC1saXBwY29yZScsCisgICAgICAgICAgICAgIF0sCisgICAgICAgICAg
ICB9CisgICAgICAgICAgfSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsnZW5hYmxlX3N2ZyE9MCcs
IHsKICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAgICAgJ3dlYmNvcmVfc3Zn
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxMDFjODdmLi4yYWNkYWYzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
CkBAIC0yODcxLDYgKzI4NzEsNyBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2ZmbXBl
Zy9GRlRGcmFtZUZGTVBFRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL21hYy9G
RlRGcmFtZU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL21rbC9GRlRGcmFt
ZU1LTC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5j
cHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0JpbmFyeVByb3BlcnR5TGlzdC5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0ZpbGVTeXN0ZW1DRi5jcHAnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0ZGVEZyYW1lLmgKaW5kZXggZGIxZDA0Mi4uM2ZiM2E3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9GRlRGcmFtZS5oCkBAIC02MCw2ICs2MCwxMCBAQCBzdHJ1Y3QgUkRGVENvbnRl
eHQ7CiAKICNlbmRpZiAvLyAhVVNFX0FDQ0VMRVJBVEVfRkZUCiAKKyNpZiBVU0UoV0VCQVVESU9f
SVBQKQorI2luY2x1ZGUgPGlwcHMuaD4KKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQorCiAj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNjEsNiArMTY1LDE2IEBAIHByaXZhdGU6CiAg
ICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CiAjZW5kaWYgLy8gVVNFKFdFQkFVRElPX0dT
VFJFQU1FUikKIAorI2lmIFVTRShXRUJBVURJT19JUFApCisgICAgSXBwOHUqIG1fYnVmZmVyOwor
ICAgIElwcHNERlRTcGVjX1JfMzJmKiBtX0RGVFNwZWM7CisKKyAgICBmbG9hdCogZ2V0VXBUb0Rh
dGVDb21wbGV4RGF0YSgpOworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2NvbXBsZXhEYXRhOworICAg
IEF1ZGlvRmxvYXRBcnJheSBtX3JlYWxEYXRhOworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdE
YXRhOworI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKICNlbmRpZiAvLyAhVVNFX0FDQ0VM
RVJBVEVfRkZUCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9GRlRGcmFtZVN0dWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJh
bWVTdHViLmNwcAppbmRleCBhYTI2ZWM2Li4xOWE4MDBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2lm
IEVOQUJMRShXRUJfQVVESU8pCiAKLSNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01L
TCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQor
I2lmICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZG
TVBFRykgJiYgIVVTRShXRUJBVURJT19HU1RSRUFNRVIpICYmICFVU0UoV0VCQVVESU9fSVBQKQog
CiAjaW5jbHVkZSAiRkZURnJhbWUuaCIKIApAQCAtMTAyLDYgKzEwMiw2IEBAIGZsb2F0KiBGRlRG
cmFtZTo6aW1hZ0RhdGEoKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRp
ZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYgIVVTRShXRUJBVURJT19H
U1RSRUFNRVIpCisjZW5kaWYgLy8gIU9TKERBUldJTikgJiYgIVVTRShXRUJBVURJT19NS0wpICYm
ICFVU0UoV0VCQVVESU9fRkZNUEVHKSAmJiAhVVNFKFdFQkFVRElPX0dTVFJFQU1FUikgJiYgIVVT
RShXRUJBVURJT19JUFApCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZyYW1lSVBQLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlmYjU5ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAKQEAgLTAsMCAr
MSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworLy8gRkZURnJhbWUgaW1wbGVtZW50YXRpb24gdXNpbmcgSW50ZWwgSVBQ
J3MgREZUIGFsZ29yaXRobSwKKy8vIHN1aXRhYmxlIGZvciB1c2Ugb24gTGludXguCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisKKyNpZiBVU0UoV0VCQVVE
SU9fSVBQKQorCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworI2luY2x1ZGUgIlZlY3Rvck1hdGgu
aCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3QgdW5zaWduZWQga01heEZGVFBvdzJTaXplID0gMjQ7CisKKy8vIE5vcm1hbCBjb25z
dHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCitGRlRGcmFtZTo6RkZURnJh
bWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShmZnRTaXplKQorICAgICwgbV9s
b2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCisgICAgLCBt
X2NvbXBsZXhEYXRhKGZmdFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQorICAg
ICwgbV9pbWFnRGF0YShmZnRTaXplIC8gMikKK3sKKyAgICAvLyBXZSBvbmx5IGFsbG93IHBvd2Vy
IG9mIHR3by4KKyAgICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXplKTsK
KyAgICBBU1NFUlQobV9sb2cyRkZUU2l6ZSA8PSBrTWF4RkZUUG93MlNpemUpOworCisgICAgaXBw
c0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9GRlRfTk9ESVZf
QllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNpemUgPSAwOworICAgIGlw
cHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOworICAgIG1fYnVm
ZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKK30KKworLy8gQ3JlYXRlcyBhIGJsYW5r
L2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0ZSgpIG11c3QgbGF0ZXIgYmUgY2FsbGVkKS4KK0ZGVEZy
YW1lOjpGRlRGcmFtZSgpCisgICAgOiBtX0ZGVFNpemUoMCkKKyAgICAsIG1fbG9nMkZGVFNpemUo
MCkKK3sKK30KKworLy8gQ29weSBjb25zdHJ1Y3Rvci4KK0ZGVEZyYW1lOjpGRlRGcmFtZShjb25z
dCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUoZnJhbWUubV9GRlRTaXplKQorICAg
ICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXplKQorICAgICwgbV9jb21wbGV4RGF0
YShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIp
CisgICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCit7CisgICAgaXBwc0RGVElu
aXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9GRlRfTk9ESVZfQllfQU5Z
LCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNpemUgPSAwOworICAgIGlwcHNERlRH
ZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOworICAgIG1fYnVmZmVyID0g
aXBwc01hbGxvY184dShidWZmZXJTaXplKTsKKworICAgIC8vIENvcHkvc2V0dXAgZnJhbWUgZGF0
YS4KKyAgICB1bnNpZ25lZCBuYnl0ZXMgPSBzaXplb2YoZmxvYXQpICogbV9GRlRTaXplOworICAg
IG1lbWNweShyZWFsRGF0YSgpLCBmcmFtZS5yZWFsRGF0YSgpLCBuYnl0ZXMpOworICAgIG1lbWNw
eShpbWFnRGF0YSgpLCBmcmFtZS5pbWFnRGF0YSgpLCBuYnl0ZXMpOworfQorCit2b2lkIEZGVEZy
YW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6Y2xlYW51cCgpCit7Cit9
CisKK0ZGVEZyYW1lOjp+RkZURnJhbWUoKQoreworICAgIGlwcHNGcmVlKG1fYnVmZmVyKTsKKyAg
ICBpcHBzREZURnJlZV9SXzMyZihtX0RGVFNwZWMpOworfQorCit2b2lkIEZGVEZyYW1lOjptdWx0
aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCit7CisgICAgRkZURnJhbWUmIGZyYW1lMSA9ICp0
aGlzOworICAgIEZGVEZyYW1lJiBmcmFtZTIgPSBjb25zdF9jYXN0PEZGVEZyYW1lJj4oZnJhbWUp
OworCisgICAgZmxvYXQqIHJlYWxQMSA9IGZyYW1lMS5yZWFsRGF0YSgpOworICAgIGZsb2F0KiBp
bWFnUDEgPSBmcmFtZTEuaW1hZ0RhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogcmVhbFAyID0gZnJh
bWUyLnJlYWxEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIGltYWdQMiA9IGZyYW1lMi5pbWFnRGF0
YSgpOworCisgICAgdW5zaWduZWQgaGFsZlNpemUgPSBmZnRTaXplKCkgLyAyOworICAgIGZsb2F0
IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcwID0gaW1hZ1AxWzBdOworCisgICAg
VmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwgaW1hZ1AyLCByZWFsUDEs
IGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRpcGx5IHRoZSBwYWNrZWQgREMvbnlx
dWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJlYWxQMlswXTsKKyAgICBp
bWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKworICAgIC8vIFNjYWxlIGFjY291bnRzIHRo
ZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgorICAgIC8vIFRoaXMgZW5z
dXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRvIGludmVyc2UgRkZULgor
ICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24gdGhlIE1hYyB0aGVuIHRo
aXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5nZSB0b28uCisgICAgZmxv
YXQgc2NhbGUgPSAwLjVmOworCisgICAgVmVjdG9yTWF0aDo6dnNtdWwocmVhbFAxLCAxLCAmc2Nh
bGUsIHJlYWxQMSwgMSwgaGFsZlNpemUpOworICAgIFZlY3Rvck1hdGg6OnZzbXVsKGltYWdQMSwg
MSwgJnNjYWxlLCBpbWFnUDEsIDEsIGhhbGZTaXplKTsKK30KKwordm9pZCBGRlRGcmFtZTo6ZG9G
RlQoZmxvYXQqIGRhdGEpCit7CisgICAgSXBwMzJmKiBjb21wbGV4UCA9IG1fY29tcGxleERhdGEu
ZGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBGb3J3YXJkIHRyYW5zZm9ybSB0byBwZXJtIGZvcm1h
dC4KKyAgICBpcHBzREZURndkX1JUb1Blcm1fMzJmKChJcHAzMmYqKWRhdGEsIGNvbXBsZXhQLCBt
X0RGVFNwZWMsIG1fYnVmZmVyKTsKKworICAgIGNvbnN0IElwcDMyZiBzY2FsZSA9IDIuMGY7CisK
KyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgY29tcGxleFAsIG1fRkZUU2l6ZSk7CisKKyAgICBJ
cHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9IG1f
aW1hZ0RhdGEuZGF0YSgpOworICAgIGlwcHNDcGx4VG9SZWFsXzMyZmMoKElwcDMyZmMqKWNvbXBs
ZXhQLCByZWFsUCwgaW1hZ1AsIG1fRkZUU2l6ZSA+PiAxKTsKK30KKwordm9pZCBGRlRGcmFtZTo6
ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIElwcDMyZiogY29tcGxleFAgPSBnZXRV
cFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisKKyAgICAvLyBDb21wdXRlIGludmVyc2UgdHJhbnNmb3Jt
LgorICAgIGlwcHNERlRJbnZfUGVybVRvUl8zMmYoY29tcGxleFAsIChJcHAzMmYqKWRhdGEsIG1f
REZUU3BlYywgbV9idWZmZXIpOworCisgICAgLy8gU2NhbGUgc28gdGhhdCBhIGZvcndhcmQgdGhl
biBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3JpZ2luYWwgZGF0YS4KKyAgICBjb25z
dCBmbG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXplKTsKKworICAgIGlwcHNNdWxDXzMy
Zl9JKHNjYWxlLCAoSXBwMzJmKilkYXRhLCBtX0ZGVFNpemUpOworfQorCitmbG9hdCogRkZURnJh
bWU6OnJlYWxEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxmbG9hdCo+KG1f
cmVhbERhdGEuZGF0YSgpKTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjppbWFnRGF0YSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2ltYWdEYXRhLmRhdGEoKSk7Cit9
CisKK2Zsb2F0KiBGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpCit7CisgICAgaW50
IGxlbiA9IG1fRkZUU2l6ZSA+PiAxOworICAgIC8vIE1lcmdlIHRoZSByZWFsIGFuZCBpbWFnaW1h
cnkgdmVjdG9ycyB0byBjb21wbGV4IHZlY3Rvci4KKyAgICBJcHAzMmYqIHJlYWxQID0gbV9yZWFs
RGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9IG1faW1hZ0RhdGEuZGF0YSgpOworICAg
IElwcDMyZmMqIGNvbXBsZXhQID0gcmVpbnRlcnByZXRfY2FzdDxJcHAzMmZjKj4obV9jb21wbGV4
RGF0YS5kYXRhKCkpOworICAgIGlwcHNSZWFsVG9DcGx4XzMyZihyZWFsUCwgaW1hZ1AsIGNvbXBs
ZXhQLCBsZW4pOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX2NvbXBsZXhEYXRh
LmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShX
RUJBVURJT19JUFApCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125587</attachid>
            <date>2012-02-06 00:38:39 -0800</date>
            <delta_ts>2012-02-06 19:06:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>11123</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0N2MzN2IzLi5iOTQyNmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTItMDItMDYgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgIChGRlRGcmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkZURnJhbWU6OkZGVEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjp+RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RkZU
RnJhbWU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpkb0ZGVCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKToKKyAgICAgICAgKFdlYkNv
cmU6OkZGVEZyYW1lOjpyZWFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6aW1h
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERh
dGEpOgorCiAyMDEyLTAyLTA2ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFF0IG1pbmltYWwgY29tcGlsYXRpb24gZml4IGFmdGVy
IHIxMDY3NzcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3Jl
Lmd5cCBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGYzZDdk
MjMuLjUxN2Y5YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0x
MTQ1LDYgKzExNDUsMTEgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2Rv
bSddLAogICAgICAgICAgIH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFu
ZCAiV1RGX1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAg
ICAgICdjZmxhZ3MnOiBbCisgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1jZmxhZ3Mtb25s
eS1JIGlwcCknLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAgXSwKICAgICB9LAog
ICAgIHsKQEAgLTEzNDcsNiArMTM1MiwxMyBAQAogICAgICAgICAgICAgJ2luY2x1ZGVfZGlycysr
JzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09
ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycs
IHsKKyAgICAgICAgICAnZGlyZWN0X2RlcGVuZGVudF9zZXR0aW5ncyc6IHsKKyAgICAgICAgICAg
ICdjZmxhZ3MnOiBbCisgICAgICAgICAgICAgICc8IUAocGtnLWNvbmZpZyAtLWNmbGFncy1vbmx5
LUkgaXBwKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgIH0sCisgICAgICAgIH1dLAogICAg
ICAgICBbJ09TICE9ICJhbmRyb2lkIiBhbmQgIldURl9VU0VfV0VCQVVESU9fRkZNUEVHPTEiIGlu
IGZlYXR1cmVfZGVmaW5lcycsIHsKICAgICAgICAgICAjIFRoaXMgZGlyZWN0b3J5IG5lZWRzIHRv
IGJlIG9uIHRoZSBpbmNsdWRlIHBhdGggZm9yIG11bHRpcGxlIHN1Yi10YXJnZXRzIG9mIHdlYmNv
cmUuCiAgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7CkBAIC0xOTg1LDYg
KzE5OTcsMTYgQEAKICAgICAgICAgICAgICdpbmNsdWRlX2RpcnMrKysnOiBbJy4uL2RvbSddLAog
ICAgICAgICAgIH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0ibGludXgiIGFuZCAiV1RG
X1VTRV9XRUJBVURJT19JUFA9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICds
aW5rX3NldHRpbmdzJzogeworICAgICAgICAgICAgJ2xkZmxhZ3MnOiBbCisgICAgICAgICAgICAg
ICc8IUAocGtnLWNvbmZpZyAtLWxpYnMtb25seS1MIGlwcCknLAorICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICdsaWJyYXJpZXMnOiBbCisgICAgICAgICAgICAgICctbGlwcHMgLWxpcHBjb3Jl
JywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgfSwKKyAgICAgICAgfV0sCiAgICAgICAgIFsn
ZW5hYmxlX3N2ZyE9MCcsIHsKICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwogICAgICAgICAg
ICAgJ3dlYmNvcmVfc3ZnJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBkNWJiN2Q3Li40ZTMzODBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0yODY5LDYgKzI4NjksNyBAQAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2F1ZGlvL2ZmbXBlZy9GRlRGcmFtZUZGTVBFRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2F1ZGlvL21hYy9GRlRGcmFtZU1hYy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2F1
ZGlvL21rbC9GRlRGcmFtZU1LTC5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2F1ZGlvL2lw
cC9GRlRGcmFtZUlQUC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0JpbmFyeVByb3Bl
cnR5TGlzdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0ZpbGVTeXN0ZW1DRi5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL0tVUkxDRk5ldC5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmgKaW5kZXggZGIxZDA0Mi4uM2ZiM2E3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oCkBAIC02MCw2ICs2MCwxMCBAQCBz
dHJ1Y3QgUkRGVENvbnRleHQ7CiAKICNlbmRpZiAvLyAhVVNFX0FDQ0VMRVJBVEVfRkZUCiAKKyNp
ZiBVU0UoV0VCQVVESU9fSVBQKQorI2luY2x1ZGUgPGlwcHMuaD4KKyNlbmRpZiAvLyBVU0UoV0VC
QVVESU9fSVBQKQorCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC0xNjEsNiArMTY1LDE2
IEBAIHByaXZhdGU6CiAgICAgQXVkaW9GbG9hdEFycmF5IG1faW1hZ0RhdGE7CiAjZW5kaWYgLy8g
VVNFKFdFQkFVRElPX0dTVFJFQU1FUikKIAorI2lmIFVTRShXRUJBVURJT19JUFApCisgICAgSXBw
OHUqIG1fYnVmZmVyOworICAgIElwcHNERlRTcGVjX1JfMzJmKiBtX0RGVFNwZWM7CisKKyAgICBm
bG9hdCogZ2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpOworICAgIEF1ZGlvRmxvYXRBcnJheSBtX2Nv
bXBsZXhEYXRhOworICAgIEF1ZGlvRmxvYXRBcnJheSBtX3JlYWxEYXRhOworICAgIEF1ZGlvRmxv
YXRBcnJheSBtX2ltYWdEYXRhOworI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKICNlbmRp
ZiAvLyAhVVNFX0FDQ0VMRVJBVEVfRkZUCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcAppbmRleCBhYTI2ZWM2Li4xOWE4MDBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKQEAgLTI5LDcg
KzI5LDcgQEAKIAogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAKLSNpZiAhT1MoREFSV0lOKSAmJiAh
VVNFKFdFQkFVRElPX01LTCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVE
SU9fR1NUUkVBTUVSKQorI2lmICFPUyhEQVJXSU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAh
VVNFKFdFQkFVRElPX0ZGTVBFRykgJiYgIVVTRShXRUJBVURJT19HU1RSRUFNRVIpICYmICFVU0Uo
V0VCQVVESU9fSVBQKQogCiAjaW5jbHVkZSAiRkZURnJhbWUuaCIKIApAQCAtMTAyLDYgKzEwMiw2
IEBAIGZsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFVRElPX01LTCkgJiYg
IVVTRShXRUJBVURJT19HU1RSRUFNRVIpCisjZW5kaWYgLy8gIU9TKERBUldJTikgJiYgIVVTRShX
RUJBVURJT19NS0wpICYmICFVU0UoV0VCQVVESU9fRkZNUEVHKSAmJiAhVVNFKFdFQkFVRElPX0dT
VFJFQU1FUikgJiYgIVVTRShXRUJBVURJT19JUFApCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaXBwL0ZGVEZy
YW1lSVBQLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQ
UC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhZTBlYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2lwcC9GRlRGcmFtZUlQ
UC5jcHAKQEAgLTAsMCArMSwxODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRkZURnJhbWUgaW1wbGVtZW50YXRpb24g
dXNpbmcgSW50ZWwgSVBQJ3MgREZUIGFsZ29yaXRobSwKKy8vIHN1aXRhYmxlIGZvciB1c2Ugb24g
TGludXguCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisK
KyNpZiBVU0UoV0VCQVVESU9fSVBQKQorCisjaW5jbHVkZSAiRkZURnJhbWUuaCIKKworI2luY2x1
ZGUgIlZlY3Rvck1hdGguaCIKKworI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY29uc3QgdW5zaWduZWQga01heEZGVFBvdzJTaXplID0gMjQ7CisK
Ky8vIE5vcm1hbCBjb25zdHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBhIGdpdmVuIGZmdFNpemUuCitG
RlRGcmFtZTo6RkZURnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAgICA6IG1fRkZUU2l6ZShmZnRT
aXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obG9nMihmZnRT
aXplKSkpCisgICAgLCBtX2NvbXBsZXhEYXRhKGZmdFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZm
dFNpemUgLyAyKQorICAgICwgbV9pbWFnRGF0YShmZnRTaXplIC8gMikKK3sKKyAgICAvLyBXZSBv
bmx5IGFsbG93IHBvd2VyIG9mIHR3by4KKyAgICBBU1NFUlQoMVVMIDw8IG1fbG9nMkZGVFNpemUg
PT0gbV9GRlRTaXplKTsKKyAgICBBU1NFUlQobV9sb2cyRkZUU2l6ZSA8PSBrTWF4RkZUUG93MlNp
emUpOworCisgICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUs
IElQUF9GRlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNp
emUgPSAwOworICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNp
emUpOworICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKK30KKworLy8g
Q3JlYXRlcyBhIGJsYW5rL2VtcHR5IGZyYW1lIChpbnRlcnBvbGF0ZSgpIG11c3QgbGF0ZXIgYmUg
Y2FsbGVkKS4KK0ZGVEZyYW1lOjpGRlRGcmFtZSgpCisgICAgOiBtX0ZGVFNpemUoMCkKKyAgICAs
IG1fbG9nMkZGVFNpemUoMCkKK3sKK30KKworLy8gQ29weSBjb25zdHJ1Y3Rvci4KK0ZGVEZyYW1l
OjpGRlRGcmFtZShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCisgICAgOiBtX0ZGVFNpemUoZnJhbWUu
bV9GRlRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShmcmFtZS5tX2xvZzJGRlRTaXplKQorICAg
ICwgbV9jb21wbGV4RGF0YShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX3JlYWxEYXRhKGZyYW1l
Lm1fRkZUU2l6ZSAvIDIpCisgICAgLCBtX2ltYWdEYXRhKGZyYW1lLm1fRkZUU2l6ZSAvIDIpCit7
CisgICAgaXBwc0RGVEluaXRBbGxvY19SXzMyZigmbV9ERlRTcGVjLCBtX0ZGVFNpemUsIElQUF9G
RlRfTk9ESVZfQllfQU5ZLCBpcHBBbGdIaW50RmFzdCk7CisgICAgaW50IGJ1ZmZlclNpemUgPSAw
OworICAgIGlwcHNERlRHZXRCdWZTaXplX1JfMzJmKG1fREZUU3BlYywgJmJ1ZmZlclNpemUpOwor
ICAgIG1fYnVmZmVyID0gaXBwc01hbGxvY184dShidWZmZXJTaXplKTsKKworICAgIC8vIENvcHkv
c2V0dXAgZnJhbWUgZGF0YS4KKyAgICB1bnNpZ25lZCBuYnl0ZXMgPSBzaXplb2YoZmxvYXQpICog
bV9GRlRTaXplOworICAgIG1lbWNweShyZWFsRGF0YSgpLCBmcmFtZS5yZWFsRGF0YSgpLCBuYnl0
ZXMpOworICAgIG1lbWNweShpbWFnRGF0YSgpLCBmcmFtZS5pbWFnRGF0YSgpLCBuYnl0ZXMpOwor
fQorCit2b2lkIEZGVEZyYW1lOjppbml0aWFsaXplKCkKK3sKK30KKwordm9pZCBGRlRGcmFtZTo6
Y2xlYW51cCgpCit7Cit9CisKK0ZGVEZyYW1lOjp+RkZURnJhbWUoKQoreworICAgIGlwcHNGcmVl
KG1fYnVmZmVyKTsKKyAgICBpcHBzREZURnJlZV9SXzMyZihtX0RGVFNwZWMpOworfQorCit2b2lk
IEZGVEZyYW1lOjptdWx0aXBseShjb25zdCBGRlRGcmFtZSYgZnJhbWUpCit7CisgICAgRkZURnJh
bWUmIGZyYW1lMSA9ICp0aGlzOworICAgIEZGVEZyYW1lJiBmcmFtZTIgPSBjb25zdF9jYXN0PEZG
VEZyYW1lJj4oZnJhbWUpOworCisgICAgZmxvYXQqIHJlYWxQMSA9IGZyYW1lMS5yZWFsRGF0YSgp
OworICAgIGZsb2F0KiBpbWFnUDEgPSBmcmFtZTEuaW1hZ0RhdGEoKTsKKyAgICBjb25zdCBmbG9h
dCogcmVhbFAyID0gZnJhbWUyLnJlYWxEYXRhKCk7CisgICAgY29uc3QgZmxvYXQqIGltYWdQMiA9
IGZyYW1lMi5pbWFnRGF0YSgpOworCisgICAgdW5zaWduZWQgaGFsZlNpemUgPSBmZnRTaXplKCkg
LyAyOworICAgIGZsb2F0IHJlYWwwID0gcmVhbFAxWzBdOworICAgIGZsb2F0IGltYWcwID0gaW1h
Z1AxWzBdOworCisgICAgVmVjdG9yTWF0aDo6enZtdWwocmVhbFAxLCBpbWFnUDEsIHJlYWxQMiwg
aW1hZ1AyLCByZWFsUDEsIGltYWdQMSwgaGFsZlNpemUpOyAKKworICAgIC8vIE11bHRpcGx5IHRo
ZSBwYWNrZWQgREMvbnlxdWlzdCBjb21wb25lbnQKKyAgICByZWFsUDFbMF0gPSByZWFsMCAqIHJl
YWxQMlswXTsKKyAgICBpbWFnUDFbMF0gPSBpbWFnMCAqIGltYWdQMlswXTsKKworICAgIC8vIFNj
YWxlIGFjY291bnRzIHRoZSBwZWN1bGlhciBzY2FsaW5nIG9mIHZlY0xpYiBvbiB0aGUgTWFjLgor
ICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgcmlnaHQgc2NhbGluZyBhbGwgdGhlIHdheSBiYWNrIHRv
IGludmVyc2UgRkZULgorICAgIC8vIEZJWE1FOiBpZiB3ZSBjaGFuZ2UgdGhlIHNjYWxpbmcgb24g
dGhlIE1hYyB0aGVuIHRoaXMgc2NhbGUKKyAgICAvLyBmYWN0b3Igd2lsbCBuZWVkIHRvIGNoYW5n
ZSB0b28uCisgICAgZmxvYXQgc2NhbGUgPSAwLjVmOworCisgICAgVmVjdG9yTWF0aDo6dnNtdWwo
cmVhbFAxLCAxLCAmc2NhbGUsIHJlYWxQMSwgMSwgaGFsZlNpemUpOworICAgIFZlY3Rvck1hdGg6
OnZzbXVsKGltYWdQMSwgMSwgJnNjYWxlLCBpbWFnUDEsIDEsIGhhbGZTaXplKTsKK30KKwordm9p
ZCBGRlRGcmFtZTo6ZG9GRlQoY29uc3QgZmxvYXQqIGRhdGEpCit7CisgICAgSXBwMzJmKiBjb21w
bGV4UCA9IG1fY29tcGxleERhdGEuZGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBGb3J3YXJkIHRy
YW5zZm9ybSB0byBwZXJtIGZvcm1hdC4KKyAgICBpcHBzREZURndkX1JUb1Blcm1fMzJmKChJcHAz
MmYqKWRhdGEsIGNvbXBsZXhQLCBtX0RGVFNwZWMsIG1fYnVmZmVyKTsKKworICAgIGNvbnN0IElw
cDMyZiBzY2FsZSA9IDIuMGY7CisKKyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgY29tcGxleFAs
IG1fRkZUU2l6ZSk7CisKKyAgICBJcHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7Cisg
ICAgSXBwMzJmKiBpbWFnUCA9IG1faW1hZ0RhdGEuZGF0YSgpOworICAgIGlwcHNDcGx4VG9SZWFs
XzMyZmMoKElwcDMyZmMqKWNvbXBsZXhQLCByZWFsUCwgaW1hZ1AsIG1fRkZUU2l6ZSA+PiAxKTsK
K30KKwordm9pZCBGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKGZsb2F0KiBkYXRhKQoreworICAgIElw
cDMyZiogY29tcGxleFAgPSBnZXRVcFRvRGF0ZUNvbXBsZXhEYXRhKCk7CisKKyAgICAvLyBDb21w
dXRlIGludmVyc2UgdHJhbnNmb3JtLgorICAgIGlwcHNERlRJbnZfUGVybVRvUl8zMmYoY29tcGxl
eFAsIChJcHAzMmYqKWRhdGEsIG1fREZUU3BlYywgbV9idWZmZXIpOworCisgICAgLy8gU2NhbGUg
c28gdGhhdCBhIGZvcndhcmQgdGhlbiBpbnZlcnNlIEZGVCB5aWVsZHMgZXhhY3RseSB0aGUgb3Jp
Z2luYWwgZGF0YS4KKyAgICBjb25zdCBmbG9hdCBzY2FsZSA9IDEuMCAvICgyICogbV9GRlRTaXpl
KTsKKworICAgIGlwcHNNdWxDXzMyZl9JKHNjYWxlLCAoSXBwMzJmKilkYXRhLCBtX0ZGVFNpemUp
OworfQorCitmbG9hdCogRkZURnJhbWU6OnJlYWxEYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxmbG9hdCo+KG1fcmVhbERhdGEuZGF0YSgpKTsKK30KKworZmxvYXQqIEZGVEZy
YW1lOjppbWFnRGF0YSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPiht
X2ltYWdEYXRhLmRhdGEoKSk7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6Z2V0VXBUb0RhdGVDb21w
bGV4RGF0YSgpCit7CisgICAgaW50IGxlbiA9IG1fRkZUU2l6ZSA+PiAxOworICAgIC8vIE1lcmdl
IHRoZSByZWFsIGFuZCBpbWFnaW1hcnkgdmVjdG9ycyB0byBjb21wbGV4IHZlY3Rvci4KKyAgICBJ
cHAzMmYqIHJlYWxQID0gbV9yZWFsRGF0YS5kYXRhKCk7CisgICAgSXBwMzJmKiBpbWFnUCA9IG1f
aW1hZ0RhdGEuZGF0YSgpOworICAgIElwcDMyZmMqIGNvbXBsZXhQID0gcmVpbnRlcnByZXRfY2Fz
dDxJcHAzMmZjKj4obV9jb21wbGV4RGF0YS5kYXRhKCkpOworICAgIGlwcHNSZWFsVG9DcGx4XzMy
ZihyZWFsUCwgaW1hZ1AsIGNvbXBsZXhQLCBsZW4pOworCisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
ZmxvYXQqPihtX2NvbXBsZXhEYXRhLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShXRUJBVURJT19JUFApCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQo=
</data>
<flag name="review"
          id="127119"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125753</attachid>
            <date>2012-02-06 19:06:31 -0800</date>
            <delta_ts>2012-02-07 18:52:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch</filename>
            <type>text/plain</type>
            <size>11259</size>
            <attacher name="Xingnan Wang">xingnan.wang</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1N2IzYzc5Li42NjFhZDJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAg
QEAKKzIwMTItMDItMDYgIFhpbmduYW4gV2FuZyAgPHhpbmduYW4ud2FuZ0BpbnRlbC5jb20+CisK
KyAgICAgICAgRW5hYmxlIElQUCBmb3IgRkZURnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc1NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHRoZSBGRlRGcmFtZSBpbXBsZW1lbnRhdGlvbiB1
c2luZyBJbnRlbCBJUFAncyBERlQgYWxnb3JpdGhtLgorCisgICAgICAgICogV2ViQ29yZS5neXAv
V2ViQ29yZS5neXA6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3Jt
L2F1ZGlvL0ZGVEZyYW1lLmg6CisgICAgICAgIChGRlRGcmFtZSk6CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9pcHAv
RkZURnJhbWVJUFAuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6RkZURnJhbWU6OkZGVEZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpp
bml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpjbGVhbnVwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZGVEZyYW1lOjp+RkZURnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6RkZU
RnJhbWU6Om11bHRpcGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZGVEZyYW1lOjpkb0ZGVCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6ZG9JbnZlcnNlRkZUKToKKyAgICAgICAgKFdlYkNv
cmU6OkZGVEZyYW1lOjpyZWFsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGRlRGcmFtZTo6aW1h
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RkZURnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERh
dGEpOgorCiAyMDEyLTAyLTA2ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW2Nocm9taXVtXSBjYW52YXMgZGVtbyBpcyBzbG93IGR1ZSB0byB1bm5lY2Vz
c2FyeSByZXNvdXJjZSBjbGVhbnVwcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXAvV2ViQ29yZS5neXAgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAppbmRleCBmM2Q3ZDIzLi41MTdmOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cC9XZWJDb3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cApAQCAtMTE0NSw2ICsxMTQ1LDExIEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJz
KysrJzogWycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydP
Uz09ImxpbnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5l
cycsIHsKKyAgICAgICAgICAnY2ZsYWdzJzogWworICAgICAgICAgICAgJzwhQChwa2ctY29uZmln
IC0tY2ZsYWdzLW9ubHktSSBpcHApJywKKyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAg
IF0sCiAgICAgfSwKICAgICB7CkBAIC0xMzQ3LDYgKzEzNTIsMTMgQEAKICAgICAgICAgICAgICdp
bmNsdWRlX2RpcnMrKyc6IFsnLi4vZG9tJ10sCiAgICAgICAgICAgfSwKICAgICAgICAgfV0sCisg
ICAgICAgIFsnT1M9PSJsaW51eCIgYW5kICJXVEZfVVNFX1dFQkFVRElPX0lQUD0xIiBpbiBmZWF0
dXJlX2RlZmluZXMnLCB7CisgICAgICAgICAgJ2RpcmVjdF9kZXBlbmRlbnRfc2V0dGluZ3MnOiB7
CisgICAgICAgICAgICAnY2ZsYWdzJzogWworICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcg
LS1jZmxhZ3Mtb25seS1JIGlwcCknLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICB9LAorICAg
ICAgICB9XSwKICAgICAgICAgWydPUyAhPSAiYW5kcm9pZCIgYW5kICJXVEZfVVNFX1dFQkFVRElP
X0ZGTVBFRz0xIiBpbiBmZWF0dXJlX2RlZmluZXMnLCB7CiAgICAgICAgICAgIyBUaGlzIGRpcmVj
dG9yeSBuZWVkcyB0byBiZSBvbiB0aGUgaW5jbHVkZSBwYXRoIGZvciBtdWx0aXBsZSBzdWItdGFy
Z2V0cyBvZiB3ZWJjb3JlLgogICAgICAgICAgICdkaXJlY3RfZGVwZW5kZW50X3NldHRpbmdzJzog
ewpAQCAtMTk4NSw2ICsxOTk3LDE2IEBACiAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzKysrJzog
WycuLi9kb20nXSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09Imxp
bnV4IiBhbmQgIldURl9VU0VfV0VCQVVESU9fSVBQPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsK
KyAgICAgICAgICAnbGlua19zZXR0aW5ncyc6IHsKKyAgICAgICAgICAgICdsZGZsYWdzJzogWwor
ICAgICAgICAgICAgICAnPCFAKHBrZy1jb25maWcgLS1saWJzLW9ubHktTCBpcHApJywKKyAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAnbGlicmFyaWVzJzogWworICAgICAgICAgICAgICAnLWxp
cHBzIC1saXBwY29yZScsCisgICAgICAgICAgICBdLAorICAgICAgICAgIH0sCisgICAgICAgIH1d
LAogICAgICAgICBbJ2VuYWJsZV9zdmchPTAnLCB7CiAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6
IFsKICAgICAgICAgICAgICd3ZWJjb3JlX3N2ZycsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMTk1OWRk
Zi4uN2QyMTU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMjg3MCw2ICsyODcwLDcgQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9hdWRpby9mZm1wZWcvRkZURnJhbWVGRk1QRUcuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9hdWRpby9tYWMvRkZURnJhbWVNYWMuY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9hdWRpby9ta2wvRkZURnJhbWVNS0wuY3BwJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9hdWRpby9pcHAvRkZURnJhbWVJUFAuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
Zi9CaW5hcnlQcm9wZXJ0eUxpc3QuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9GaWxl
U3lzdGVtQ0YuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jZi9LVVJMQ0ZOZXQuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZS5oCmluZGV4IGRiMWQwNDIuLjNm
YjNhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWUuaApAQCAtNjAs
NiArNjAsMTAgQEAgc3RydWN0IFJERlRDb250ZXh0OwogCiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVS
QVRFX0ZGVAogCisjaWYgVVNFKFdFQkFVRElPX0lQUCkKKyNpbmNsdWRlIDxpcHBzLmg+CisjZW5k
aWYgLy8gVVNFKFdFQkFVRElPX0lQUCkKKwogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgpAQCAt
MTYxLDYgKzE2NSwxNiBAQCBwcml2YXRlOgogICAgIEF1ZGlvRmxvYXRBcnJheSBtX2ltYWdEYXRh
OwogI2VuZGlmIC8vIFVTRShXRUJBVURJT19HU1RSRUFNRVIpCiAKKyNpZiBVU0UoV0VCQVVESU9f
SVBQKQorICAgIElwcDh1KiBtX2J1ZmZlcjsKKyAgICBJcHBzREZUU3BlY19SXzMyZiogbV9ERlRT
cGVjOworCisgICAgZmxvYXQqIGdldFVwVG9EYXRlQ29tcGxleERhdGEoKTsKKyAgICBBdWRpb0Zs
b2F0QXJyYXkgbV9jb21wbGV4RGF0YTsKKyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9yZWFsRGF0YTsK
KyAgICBBdWRpb0Zsb2F0QXJyYXkgbV9pbWFnRGF0YTsKKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9f
SVBQKQorCiAjZW5kaWYgLy8gIVVTRV9BQ0NFTEVSQVRFX0ZGVAogfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVTdHViLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0ZGVEZyYW1lU3R1Yi5jcHAKaW5kZXggYWEyNmVjNi4uMTlh
ODAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vRkZURnJhbWVT
dHViLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9GRlRGcmFtZVN0dWIu
Y3BwCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCi0jaWYgIU9T
KERBUldJTikgJiYgIVVTRShXRUJBVURJT19NS0wpICYmICFVU0UoV0VCQVVESU9fRkZNUEVHKSAm
JiAhVVNFKFdFQkFVRElPX0dTVFJFQU1FUikKKyNpZiAhT1MoREFSV0lOKSAmJiAhVVNFKFdFQkFV
RElPX01LTCkgJiYgIVVTRShXRUJBVURJT19GRk1QRUcpICYmICFVU0UoV0VCQVVESU9fR1NUUkVB
TUVSKSAmJiAhVVNFKFdFQkFVRElPX0lQUCkKIAogI2luY2x1ZGUgIkZGVEZyYW1lLmgiCiAKQEAg
LTEwMiw2ICsxMDIsNiBAQCBmbG9hdCogRkZURnJhbWU6OmltYWdEYXRhKCkgY29uc3QKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gIU9TKERBUldJTikgJiYgIVVTRShXRUJB
VURJT19NS0wpICYmICFVU0UoV0VCQVVESU9fR1NUUkVBTUVSKQorI2VuZGlmIC8vICFPUyhEQVJX
SU4pICYmICFVU0UoV0VCQVVESU9fTUtMKSAmJiAhVVNFKFdFQkFVRElPX0ZGTVBFRykgJiYgIVVT
RShXRUJBVURJT19HU1RSRUFNRVIpICYmICFVU0UoV0VCQVVESU9fSVBQKQogCiAjZW5kaWYgLy8g
RU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lwcC9GRlRGcmFtZUlQUC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
cHAvRkZURnJhbWVJUFAuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0
NzA1NzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9p
cHAvRkZURnJhbWVJUFAuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEZGVEZyYW1lIGlt
cGxlbWVudGF0aW9uIHVzaW5nIEludGVsIElQUCdzIERGVCBhbGdvcml0aG0sCisvLyBzdWl0YWJs
ZSBmb3IgdXNlIG9uIExpbnV4LgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCisjaWYgVVNFKFdFQkFVRElPX0lQUCkKKworI2luY2x1ZGUgIkZGVEZyYW1l
LmgiCisKKyNpbmNsdWRlICJWZWN0b3JNYXRoLmgiCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NvbnN0IHVuc2lnbmVkIG1heGltdW1GRlRQ
b3dlcjJTaXplID0gMjQ7CisKKy8vIE5vcm1hbCBjb25zdHJ1Y3RvcjogYWxsb2NhdGVzIGZvciBh
IGdpdmVuIGZmdFNpemUuCitGRlRGcmFtZTo6RkZURnJhbWUodW5zaWduZWQgZmZ0U2l6ZSkKKyAg
ICA6IG1fRkZUU2l6ZShmZnRTaXplKQorICAgICwgbV9sb2cyRkZUU2l6ZShzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obG9nMihmZnRTaXplKSkpCisgICAgLCBtX2NvbXBsZXhEYXRhKGZmdFNpemUpCisg
ICAgLCBtX3JlYWxEYXRhKGZmdFNpemUgLyAyKQorICAgICwgbV9pbWFnRGF0YShmZnRTaXplIC8g
MikKK3sKKyAgICAvLyBXZSBvbmx5IGFsbG93IHBvd2VyIG9mIHR3by4KKyAgICBBU1NFUlQoMVVM
IDw8IG1fbG9nMkZGVFNpemUgPT0gbV9GRlRTaXplKTsKKyAgICBBU1NFUlQobV9sb2cyRkZUU2l6
ZSA8PSBtYXhpbXVtRkZUUG93ZXIyU2l6ZSk7CisKKyAgICBpcHBzREZUSW5pdEFsbG9jX1JfMzJm
KCZtX0RGVFNwZWMsIG1fRkZUU2l6ZSwgSVBQX0ZGVF9OT0RJVl9CWV9BTlksIGlwcEFsZ0hpbnRG
YXN0KTsKKyAgICBpbnQgYnVmZmVyU2l6ZSA9IDA7CisgICAgaXBwc0RGVEdldEJ1ZlNpemVfUl8z
MmYobV9ERlRTcGVjLCAmYnVmZmVyU2l6ZSk7CisgICAgbV9idWZmZXIgPSBpcHBzTWFsbG9jXzh1
KGJ1ZmZlclNpemUpOworfQorCisvLyBDcmVhdGVzIGEgYmxhbmsvZW1wdHkgZnJhbWUgKGludGVy
cG9sYXRlKCkgbXVzdCBsYXRlciBiZSBjYWxsZWQpLgorRkZURnJhbWU6OkZGVEZyYW1lKCkKKyAg
ICA6IG1fRkZUU2l6ZSgwKQorICAgICwgbV9sb2cyRkZUU2l6ZSgwKQoreworfQorCisvLyBDb3B5
IGNvbnN0cnVjdG9yLgorRkZURnJhbWU6OkZGVEZyYW1lKGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkK
KyAgICA6IG1fRkZUU2l6ZShmcmFtZS5tX0ZGVFNpemUpCisgICAgLCBtX2xvZzJGRlRTaXplKGZy
YW1lLm1fbG9nMkZGVFNpemUpCisgICAgLCBtX2NvbXBsZXhEYXRhKGZyYW1lLm1fRkZUU2l6ZSkK
KyAgICAsIG1fcmVhbERhdGEoZnJhbWUubV9GRlRTaXplIC8gMikKKyAgICAsIG1faW1hZ0RhdGEo
ZnJhbWUubV9GRlRTaXplIC8gMikKK3sKKyAgICBpcHBzREZUSW5pdEFsbG9jX1JfMzJmKCZtX0RG
VFNwZWMsIG1fRkZUU2l6ZSwgSVBQX0ZGVF9OT0RJVl9CWV9BTlksIGlwcEFsZ0hpbnRGYXN0KTsK
KyAgICBpbnQgYnVmZmVyU2l6ZSA9IDA7CisgICAgaXBwc0RGVEdldEJ1ZlNpemVfUl8zMmYobV9E
RlRTcGVjLCAmYnVmZmVyU2l6ZSk7CisgICAgbV9idWZmZXIgPSBpcHBzTWFsbG9jXzh1KGJ1ZmZl
clNpemUpOworCisgICAgLy8gQ29weS9zZXR1cCBmcmFtZSBkYXRhLgorICAgIHVuc2lnbmVkIG51
bWJlck9mQnl0ZXMgPSBzaXplb2YoZmxvYXQpICogbV9GRlRTaXplOworICAgIG1lbWNweShyZWFs
RGF0YSgpLCBmcmFtZS5yZWFsRGF0YSgpLCBudW1iZXJPZkJ5dGVzKTsKKyAgICBtZW1jcHkoaW1h
Z0RhdGEoKSwgZnJhbWUuaW1hZ0RhdGEoKSwgbnVtYmVyT2ZCeXRlcyk7Cit9CisKK3ZvaWQgRkZU
RnJhbWU6OmluaXRpYWxpemUoKQoreworfQorCit2b2lkIEZGVEZyYW1lOjpjbGVhbnVwKCkKK3sK
K30KKworRkZURnJhbWU6On5GRlRGcmFtZSgpCit7CisgICAgaXBwc0ZyZWUobV9idWZmZXIpOwor
ICAgIGlwcHNERlRGcmVlX1JfMzJmKG1fREZUU3BlYyk7Cit9CisKK3ZvaWQgRkZURnJhbWU6Om11
bHRpcGx5KGNvbnN0IEZGVEZyYW1lJiBmcmFtZSkKK3sKKyAgICBGRlRGcmFtZSYgZnJhbWUxID0g
KnRoaXM7CisgICAgRkZURnJhbWUmIGZyYW1lMiA9IGNvbnN0X2Nhc3Q8RkZURnJhbWUmPihmcmFt
ZSk7CisKKyAgICBmbG9hdCogcmVhbFAxID0gZnJhbWUxLnJlYWxEYXRhKCk7CisgICAgZmxvYXQq
IGltYWdQMSA9IGZyYW1lMS5pbWFnRGF0YSgpOworICAgIGNvbnN0IGZsb2F0KiByZWFsUDIgPSBm
cmFtZTIucmVhbERhdGEoKTsKKyAgICBjb25zdCBmbG9hdCogaW1hZ1AyID0gZnJhbWUyLmltYWdE
YXRhKCk7CisKKyAgICB1bnNpZ25lZCBoYWxmU2l6ZSA9IGZmdFNpemUoKSAvIDI7CisgICAgZmxv
YXQgcmVhbDAgPSByZWFsUDFbMF07CisgICAgZmxvYXQgaW1hZzAgPSBpbWFnUDFbMF07CisKKyAg
ICBWZWN0b3JNYXRoOjp6dm11bChyZWFsUDEsIGltYWdQMSwgcmVhbFAyLCBpbWFnUDIsIHJlYWxQ
MSwgaW1hZ1AxLCBoYWxmU2l6ZSk7IAorCisgICAgLy8gTXVsdGlwbHkgdGhlIHBhY2tlZCBEQy9u
eXF1aXN0IGNvbXBvbmVudAorICAgIHJlYWxQMVswXSA9IHJlYWwwICogcmVhbFAyWzBdOworICAg
IGltYWdQMVswXSA9IGltYWcwICogaW1hZ1AyWzBdOworCisgICAgLy8gU2NhbGUgYWNjb3VudHMg
dGhlIHBlY3VsaWFyIHNjYWxpbmcgb2YgdmVjTGliIG9uIHRoZSBNYWMuCisgICAgLy8gVGhpcyBl
bnN1cmVzIHRoZSByaWdodCBzY2FsaW5nIGFsbCB0aGUgd2F5IGJhY2sgdG8gaW52ZXJzZSBGRlQu
CisgICAgLy8gRklYTUU6IGlmIHdlIGNoYW5nZSB0aGUgc2NhbGluZyBvbiB0aGUgTWFjIHRoZW4g
dGhpcyBzY2FsZQorICAgIC8vIGZhY3RvciB3aWxsIG5lZWQgdG8gY2hhbmdlIHRvby4KKyAgICBm
bG9hdCBzY2FsZSA9IDAuNWY7CisKKyAgICBWZWN0b3JNYXRoOjp2c211bChyZWFsUDEsIDEsICZz
Y2FsZSwgcmVhbFAxLCAxLCBoYWxmU2l6ZSk7CisgICAgVmVjdG9yTWF0aDo6dnNtdWwoaW1hZ1Ax
LCAxLCAmc2NhbGUsIGltYWdQMSwgMSwgaGFsZlNpemUpOworfQorCit2b2lkIEZGVEZyYW1lOjpk
b0ZGVChjb25zdCBmbG9hdCogZGF0YSkKK3sKKyAgICBJcHAzMmYqIGNvbXBsZXhQID0gbV9jb21w
bGV4RGF0YS5kYXRhKCk7CisKKyAgICAvLyBDb21wdXRlIEZvcndhcmQgdHJhbnNmb3JtIHRvIHBl
cm0gZm9ybWF0LgorICAgIGlwcHNERlRGd2RfUlRvUGVybV8zMmYocmVpbnRlcnByZXRfY2FzdDxJ
cHAzMmYqPihjb25zdF9jYXN0PGZsb2F0Kj4oZGF0YSkpLCBjb21wbGV4UCwgbV9ERlRTcGVjLCBt
X2J1ZmZlcik7CisKKyAgICBjb25zdCBJcHAzMmYgc2NhbGUgPSAyLjBmOworCisgICAgaXBwc011
bENfMzJmX0koc2NhbGUsIGNvbXBsZXhQLCBtX0ZGVFNpemUpOworCisgICAgSXBwMzJmKiByZWFs
UCA9IG1fcmVhbERhdGEuZGF0YSgpOworICAgIElwcDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRhLmRh
dGEoKTsKKyAgICBpcHBzQ3BseFRvUmVhbF8zMmZjKHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmYyo+
KGNvbXBsZXhQKSwgcmVhbFAsIGltYWdQLCBtX0ZGVFNpemUgPj4gMSk7Cit9CisKK3ZvaWQgRkZU
RnJhbWU6OmRvSW52ZXJzZUZGVChmbG9hdCogZGF0YSkKK3sKKyAgICBJcHAzMmYqIGNvbXBsZXhQ
ID0gZ2V0VXBUb0RhdGVDb21wbGV4RGF0YSgpOworCisgICAgLy8gQ29tcHV0ZSBpbnZlcnNlIHRy
YW5zZm9ybS4KKyAgICBpcHBzREZUSW52X1Blcm1Ub1JfMzJmKGNvbXBsZXhQLCByZWludGVycHJl
dF9jYXN0PElwcDMyZio+KGRhdGEpLCBtX0RGVFNwZWMsIG1fYnVmZmVyKTsKKworICAgIC8vIFNj
YWxlIHNvIHRoYXQgYSBmb3J3YXJkIHRoZW4gaW52ZXJzZSBGRlQgeWllbGRzIGV4YWN0bHkgdGhl
IG9yaWdpbmFsIGRhdGEuCisgICAgY29uc3QgZmxvYXQgc2NhbGUgPSAxLjAgLyAoMiAqIG1fRkZU
U2l6ZSk7CisKKyAgICBpcHBzTXVsQ18zMmZfSShzY2FsZSwgcmVpbnRlcnByZXRfY2FzdDxJcHAz
MmYqPihkYXRhKSwgbV9GRlRTaXplKTsKK30KKworZmxvYXQqIEZGVEZyYW1lOjpyZWFsRGF0YSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8ZmxvYXQqPihtX3JlYWxEYXRhLmRhdGEo
KSk7Cit9CisKK2Zsb2F0KiBGRlRGcmFtZTo6aW1hZ0RhdGEoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdF9jYXN0PGZsb2F0Kj4obV9pbWFnRGF0YS5kYXRhKCkpOworfQorCitmbG9hdCogRkZU
RnJhbWU6OmdldFVwVG9EYXRlQ29tcGxleERhdGEoKQoreworICAgIGludCBsZW4gPSBtX0ZGVFNp
emUgPj4gMTsKKyAgICAvLyBNZXJnZSB0aGUgcmVhbCBhbmQgaW1hZ2ltYXJ5IHZlY3RvcnMgdG8g
Y29tcGxleCB2ZWN0b3IuCisgICAgSXBwMzJmKiByZWFsUCA9IG1fcmVhbERhdGEuZGF0YSgpOwor
ICAgIElwcDMyZiogaW1hZ1AgPSBtX2ltYWdEYXRhLmRhdGEoKTsKKyAgICBJcHAzMmZjKiBjb21w
bGV4UCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SXBwMzJmYyo+KG1fY29tcGxleERhdGEuZGF0YSgpKTsK
KyAgICBpcHBzUmVhbFRvQ3BseF8zMmYocmVhbFAsIGltYWdQLCBjb21wbGV4UCwgbGVuKTsKKwor
ICAgIHJldHVybiBjb25zdF9jYXN0PGZsb2F0Kj4obV9jb21wbGV4RGF0YS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoV0VCQVVESU9fSVBQKQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
</data>

          </attachment>
      

    </bug>

</bugzilla>