<?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>74054</bug_id>
          
          <creation_ts>2011-12-07 21:33:53 -0800</creation_ts>
          <short_desc>fast path to accelerate processing in AudioBus::processWithGainFromMonoStereo</short_desc>
          <delta_ts>2011-12-14 22:14:35 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Wei James (wistoch)">james.wei</reporter>
          <assigned_to name="Wei James (wistoch)">james.wei</assigned_to>
          <cc>crogers</cc>
    
    <cc>james.wei</cc>
    
    <cc>kbr</cc>
    
    <cc>rtoy</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>517170</commentid>
    <comment_count>0</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-07 21:33:53 -0800</bug_when>
    <thetext>fast path to accelerate processing in AudioBus::processWithGainFromMonoStereo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517174</commentid>
    <comment_count>1</comment_count>
      <attachid>118326</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-07 21:40:04 -0800</bug_when>
    <thetext>Created attachment 118326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517772</commentid>
    <comment_count>2</comment_count>
      <attachid>118326</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-08 14:06:21 -0800</bug_when>
    <thetext>Comment on attachment 118326
Patch

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

Just a few minor questions;  the code changes look good.

&gt; Source/WebCore/ChangeLog:3
&gt; +        fast path to accelerate processing in AudioBus::processWithGainFromMonoStereo

Any idea on how much faster this runs with these changes?

&gt; Source/WebCore/platform/audio/AudioBus.cpp:250
&gt; +    bool needDezipper = fabs(totalDesiredGain-gain) &gt; 0.001f;

How did you come up with 0.001?  If you just picked this &quot;at random&quot;, please add a comment saying something like .001 seems small enough, but may need tweaking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517826</commentid>
    <comment_count>3</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-08 14:58:15 -0800</bug_when>
    <thetext>A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.

With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.

Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:

N = min(nConv, framesToProcess);
for (k = 0; k &lt; N; ++k) {
   &lt;loop with dezippering&gt;
}

for (k &lt; framesToProcess; ++k) {
   &lt;loop without dezippering&gt;
}

Assuming I did the math correctly, 

nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
      = log(eps)/log(1-DezipperRate) 
         - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)

where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518010</commentid>
    <comment_count>4</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-08 18:23:08 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.
&gt; 
&gt; With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.
&gt; 
&gt; Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:
&gt; 
&gt; N = min(nConv, framesToProcess);
&gt; for (k = 0; k &lt; N; ++k) {
&gt;    &lt;loop with dezippering&gt;
&gt; }
&gt; 
&gt; for (k &lt; framesToProcess; ++k) {
&gt;    &lt;loop without dezippering&gt;
&gt; }
&gt; 
&gt; Assuming I did the math correctly, 
&gt; 
&gt; nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
&gt;       = log(eps)/log(1-DezipperRate) 
&gt;          - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)
&gt; 
&gt; where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.

Raymond, thanks for the review. I think your optimization solution is more graceful. I want to try it and test the performance to decide whether or not to use it. 

for the performance improvement of my changes, on my Ubuntu 32 bit/Core i7 dev machine, it will get about 2.5~2.9x speed up in different code pathes(sumToBus as true or false, stereo or not etc).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518052</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-08 19:45:22 -0800</bug_when>
    <thetext>(In reply to comment #3)

I&apos;d recommend not going so far as doing this optimization.  This code is very soon going to get a lot more complicated when we
add upmixing paths for 5.1, etc., so I&apos;d prefer to avoid this extra complexity.

&gt; A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.
&gt; With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.
&gt; Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:
&gt; N = min(nConv, framesToProcess);
&gt; for (k = 0; k &lt; N; ++k) {
&gt;    &lt;loop with dezippering&gt;
&gt; }
&gt; for (k &lt; framesToProcess; ++k) {
&gt;    &lt;loop without dezippering&gt;
&gt; }
&gt; Assuming I did the math correctly, 
&gt; nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
&gt;       = log(eps)/log(1-DezipperRate) 
&gt;          - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)
&gt; where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518059</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-08 19:57:31 -0800</bug_when>
    <thetext>It would be nice to be able to use our friends vsmul() and vadd() in VectorMath.h when the gain has converged on the target.  At the very least it would be good to be able to avoid the clamping of denormals in the inner loop there.  We can consider a strategy where gain is forced to zero if it ever turns out to be less than say -200dB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>518286</commentid>
    <comment_count>7</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-09 08:51:13 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; 
&gt; I&apos;d recommend not going so far as doing this optimization.  This code is very soon going to get a lot more complicated when we
&gt; add upmixing paths for 5.1, etc., so I&apos;d prefer to avoid this extra complexity.

Uh, ok.  I don&apos;t see that this adds any additional code except for the simple computation of nConv.  There will be two loops in any case.  Unless you&apos;re saying that we should not include the proposed patch at all.

&gt; 
&gt; &gt; A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.
&gt; &gt; With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.
&gt; &gt; Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:
&gt; &gt; N = min(nConv, framesToProcess);
&gt; &gt; for (k = 0; k &lt; N; ++k) {
&gt; &gt;    &lt;loop with dezippering&gt;
&gt; &gt; }
&gt; &gt; for (k &lt; framesToProcess; ++k) {
&gt; &gt;    &lt;loop without dezippering&gt;
&gt; &gt; }
&gt; &gt; Assuming I did the math correctly, 
&gt; &gt; nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
&gt; &gt;       = log(eps)/log(1-DezipperRate) 
&gt; &gt;          - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)
&gt; &gt; where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519105</commentid>
    <comment_count>8</comment_count>
      <attachid>118767</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 03:35:28 -0800</bug_when>
    <thetext>Created attachment 118767
Patch updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519112</commentid>
    <comment_count>9</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 03:44:37 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.
&gt; 
&gt; With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.
&gt; 
&gt; Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:
&gt; 
&gt; N = min(nConv, framesToProcess);
&gt; for (k = 0; k &lt; N; ++k) {
&gt;    &lt;loop with dezippering&gt;
&gt; }
&gt; 
&gt; for (k &lt; framesToProcess; ++k) {
&gt;    &lt;loop without dezippering&gt;
&gt; }
&gt; 
&gt; Assuming I did the math correctly, 
&gt; 
&gt; nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
&gt;       = log(eps)/log(1-DezipperRate) 
&gt;          - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)
&gt; 
&gt; where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.

Raymond, I updated the patch to apply your solution. 

The test showed that it will get 75% performance gain at most (when nConv == 0). For nConv = framesToProcess (all frames need de-zippering), it will not impact the overall performance. 

In the previous comment, I said 2.x performance boost, I checked the test code and found the memory cache impact the test result. So I made some change to avoid memory cache in my test and it also shows the same result. 

BTW, in current implementation, the epsilon is a pre-defined value. Should it be a pre-defined value or a percentage of the difference between gain and targetGain? If it is the latter, no log needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519114</commentid>
    <comment_count>10</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 03:50:27 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; It would be nice to be able to use our friends vsmul() and vadd() in VectorMath.h when the gain has converged on the target.  At the very least it would be good to be able to avoid the clamping of denormals in the inner loop there.  We can consider a strategy where gain is forced to zero if it ever turns out to be less than say -200dB

yes, it can be optimized with SSE as said in the FIXME. 

I saw four FIXMEs in this function and want to do it step by step. This patch mainly focus on the fast path for converged gain. 

Will focus on SSE optimization later. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519121</commentid>
    <comment_count>11</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 03:56:08 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; 
&gt; I&apos;d recommend not going so far as doing this optimization.  This code is very soon going to get a lot more complicated when we
&gt; add upmixing paths for 5.1, etc., so I&apos;d prefer to avoid this extra complexity.
&gt; 
&gt; &gt; A side note on a different optimization.  It&apos;s not necessary to implement this instead of the proposed patch.
&gt; &gt; With the current patch, we still do (slightly) extra work if needDezipper is true.  During the loop, we may get close enough to the target that we don&apos;t need to dezipper anymore.
&gt; &gt; Since the dezippering is just an exponential filter, we can figure exactly how many steps will be needed to get with epsilon of the target value.  So compute this value, nConv, and have two loops:
&gt; &gt; N = min(nConv, framesToProcess);
&gt; &gt; for (k = 0; k &lt; N; ++k) {
&gt; &gt;    &lt;loop with dezippering&gt;
&gt; &gt; }
&gt; &gt; for (k &lt; framesToProcess; ++k) {
&gt; &gt;    &lt;loop without dezippering&gt;
&gt; &gt; }
&gt; &gt; Assuming I did the math correctly, 
&gt; &gt; nConv = log(eps/abs(g0 - totalDesiredGain))/log(1 - DezipperRate)
&gt; &gt;       = log(eps)/log(1-DezipperRate) 
&gt; &gt;          - log(abs(g0-totalDesiredGain))/log(1-DezipperRate)
&gt; &gt; where g0 is the starting gain value at the beginning of the routine.  All of the logs are constants except for log(abs(g0-totalDesiredGain)), so the computation of nConv is not too bad.  log, however, is not cheap, so it&apos;s hard to tell if we would get a net win or not since the processing in the loops is fairly simple.  A quick and dirty log approximation might be good enough.

with some MACROs to avoid code duplication, I think the new patch with Raymond&apos;s solution makes the code clearer and readable. It will be easier to add more pathes with this solution. please help to review. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519126</commentid>
    <comment_count>12</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 04:02:45 -0800</bug_when>
    <thetext>BTW, I met an error when using webkit-patch to upload patch. It seems that I have no permission to change the bug owner to me, so it exits without the patch uploaded. 

could anyone assign this bug to me so I can use webkit-patch to upload patch later? thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519303</commentid>
    <comment_count>13</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-12 10:20:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; BTW, I met an error when using webkit-patch to upload patch. It seems that I have no permission to change the bug owner to me, so it exits without the patch uploaded. 
&gt; 
&gt; could anyone assign this bug to me so I can use webkit-patch to upload patch later? thanks

Seems like this might be a bug in webkit-patch upload.  It seems to me that I could upload patches even though I did not have permission to change the bug ownership.  In any case, webkit-patch should have printed some instructions on how to get permission; you basically have to ask someone via email or irc to get permission.  

I&apos;ve assigned the bug to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519338</commentid>
    <comment_count>14</comment_count>
      <attachid>118767</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-12 10:46:53 -0800</bug_when>
    <thetext>Comment on attachment 118767
Patch updated

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

Comments below.  I think it would be fine if you change epsilon to mean that abs(1-gain/totalDesiredGain)) &lt; epsilon.  There&apos;s a problem here, though if totalDesiredGain = 0.  Need to solve that in some way.

&gt; Source/WebCore/ChangeLog:9
&gt; +        It can get about 75% perfromance gain at most when all frames don&apos;t need

&quot;perfromance&quot; -&gt; &quot;performance&quot;.

75% is pretty impressive!

&gt; Source/WebCore/platform/audio/AudioBus.cpp:263
&gt; +    const float epsilon = 0.001f; // 0.001 seems small enough, but may need tweaking.

Need better description of epsilon.  Something like

If the gain is within epsilon of totalDesiredGain, we can skip dezippering.  This value may need tweaking.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:264
&gt; +    int nConv = framesToProcess; // From which frame we can skip de-zippering. 

I would change &quot;we can skip de-zippering&quot; to &quot;we can skip de-zippering because we are now close enough to the target gain.&quot;

&gt; Source/WebCore/platform/audio/AudioBus.cpp:271
&gt; +        nConv = 1378.094 + log(gainDiff) / 0.0050125;

This seems not right.  If someone changes DezipperRate, the constants here will be wrong.  I do not know, but I&apos;m pretty sure most compilers are smart enough to constant-fold everything.

Also, did you check the math?  A comment on where the formula comes from will be useful to future maintainers.  Something like

dezippering is an exponential filter:  g(n+1) = (G - g(n))*DezipperRate, where G = totalDesiredGain and g(0) = lastMixGain.  This can be solved analytically to give g(n) = &lt;correct expression&gt;.  

We can skip dezippering if g(n) is within epsilon of G.  This happens when n = &lt;formula above&gt;.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:279
&gt; +// Slowly change gain to desired gain.

Although I tend to use macros a fair amount for things like this, in this case, it seems that these macros hurt readability.  At the very least it would help to move them outside the function because this big mass of macros makes it hard to see where the real code is.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:336
&gt; +            for (; k &lt; framesToProcess; k++)  \

Safer to do

for (...) {
  OP
}

in case OP ever becomes more than one expression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519872</commentid>
    <comment_count>15</comment_count>
      <attachid>118767</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-12 22:20:01 -0800</bug_when>
    <thetext>Comment on attachment 118767
Patch updated

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

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:263
&gt;&gt; +    const float epsilon = 0.001f; // 0.001 seems small enough, but may need tweaking.
&gt; 
&gt; Need better description of epsilon.  Something like
&gt; 
&gt; If the gain is within epsilon of totalDesiredGain, we can skip dezippering.  This value may need tweaking.

got it. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:271
&gt;&gt; +        nConv = 1378.094 + log(gainDiff) / 0.0050125;
&gt; 
&gt; This seems not right.  If someone changes DezipperRate, the constants here will be wrong.  I do not know, but I&apos;m pretty sure most compilers are smart enough to constant-fold everything.
&gt; 
&gt; Also, did you check the math?  A comment on where the formula comes from will be useful to future maintainers.  Something like
&gt; 
&gt; dezippering is an exponential filter:  g(n+1) = (G - g(n))*DezipperRate, where G = totalDesiredGain and g(0) = lastMixGain.  This can be solved analytically to give g(n) = &lt;correct expression&gt;.  
&gt; 
&gt; We can skip dezippering if g(n) is within epsilon of G.  This happens when n = &lt;formula above&gt;.

I have double checked the math and it is correct. I will add the comment on it.

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:279
&gt;&gt; +// Slowly change gain to desired gain.
&gt; 
&gt; Although I tend to use macros a fair amount for things like this, in this case, it seems that these macros hurt readability.  At the very least it would help to move them outside the function because this big mass of macros makes it hard to see where the real code is.

I will try to make the code more readable. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:336
&gt;&gt; +            for (; k &lt; framesToProcess; k++)  \
&gt; 
&gt; Safer to do
&gt; 
&gt; for (...) {
&gt;   OP
&gt; }
&gt; 
&gt; in case OP ever becomes more than one expression.

I have add {} in the code but the check-webkit-style reports it is incorrect because it took OP as one line statement for for loop. 
I also think adding {} more reasonable. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519913</commentid>
    <comment_count>16</comment_count>
      <attachid>118966</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 00:24:23 -0800</bug_when>
    <thetext>Created attachment 118966
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519920</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 00:28:59 -0800</bug_when>
    <thetext>Attachment 118966 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/audio/AudioBus.cpp:249:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519948</commentid>
    <comment_count>18</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 01:21:12 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 118767 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=118767&amp;action=review
&gt; 
&gt; Comments below.  I think it would be fine if you change epsilon to mean that abs(1-gain/totalDesiredGain)) &lt; epsilon.  There&apos;s a problem here, though if totalDesiredGain = 0.  Need to solve that in some way.
&gt; 

Raymond, I found it will add more complexity to consider epsilon in this way(we will need to consider two situations: one is the absolute difference(for the starting gain is already close to the target gain) and the second one is the relative difference) so I still use the original epsilon. 

also I changed the the positions to hold MACRO to make it more readable. could you help to review it? thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520170</commentid>
    <comment_count>19</comment_count>
      <attachid>118966</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-13 10:40:51 -0800</bug_when>
    <thetext>Comment on attachment 118966
Patch

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

James, this looks really good.  I like how your macros work, and think it will scale well when we add additional upmixing for quad, 5.1, etc.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:287
&gt; +        nConv = 0;

I&apos;m not very fond of the name &quot;nConv&quot;

How about &quot;framesToConverge&quot;?

&gt; Source/WebCore/platform/audio/AudioBus.cpp:290
&gt; +        // De-zippering is an exponential filter: g(n+1) = g(n) + (g - g(n))*DezipperRate, where g = totalDesiredGain. 

I&apos;m a bit afraid about this codepath.  I think we should defer it to a subsequent patch. We don&apos;t have proper layout testing yet to verify this, and I&apos;d rather keep the changes smaller and more manageable.
So, I&apos;d recommend taking out this else branch.  It seems like the rest of your code works fine without it.

in any case, samples are processed usually in batches of 128 at a time, so this path will only save us less than 128 samples of converging which isn&apos;t nearly as much as the rest of this change is giving us.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:313
&gt;              }

Can we move this macro and the following ones to the same area as PROCESS_WITH_GAIN macro (after line 249)

So the macro definitions are defined separately and outside of this function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520476</commentid>
    <comment_count>20</comment_count>
      <attachid>118966</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 16:39:17 -0800</bug_when>
    <thetext>Comment on attachment 118966
Patch

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

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:287
&gt;&gt; +        nConv = 0;
&gt; 
&gt; I&apos;m not very fond of the name &quot;nConv&quot;
&gt; 
&gt; How about &quot;framesToConverge&quot;?

got it. I will change it. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:290
&gt;&gt; +        // De-zippering is an exponential filter: g(n+1) = g(n) + (g - g(n))*DezipperRate, where g = totalDesiredGain. 
&gt; 
&gt; I&apos;m a bit afraid about this codepath.  I think we should defer it to a subsequent patch. We don&apos;t have proper layout testing yet to verify this, and I&apos;d rather keep the changes smaller and more manageable.
&gt; So, I&apos;d recommend taking out this else branch.  It seems like the rest of your code works fine without it.
&gt; 
&gt; in any case, samples are processed usually in batches of 128 at a time, so this path will only save us less than 128 samples of converging which isn&apos;t nearly as much as the rest of this change is giving us.

for the case of DezipperRate = 0.005 and epsilon = 0.001, it will skip de-zippering after 918 frames. 
so I agree with you that if usually we process 128 frames at a time, it will not enter into this code path. 

I will remove it for further improvement. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:313
&gt;&gt;              }
&gt; 
&gt; Can we move this macro and the following ones to the same area as PROCESS_WITH_GAIN macro (after line 249)
&gt; 
&gt; So the macro definitions are defined separately and outside of this function

got it. I will do it. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520521</commentid>
    <comment_count>21</comment_count>
      <attachid>119119</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 17:28:36 -0800</bug_when>
    <thetext>Created attachment 119119
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520523</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 17:30:10 -0800</bug_when>
    <thetext>Attachment 119119 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/audio/AudioBus.cpp:249:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520527</commentid>
    <comment_count>23</comment_count>
      <attachid>119119</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-13 17:41:49 -0800</bug_when>
    <thetext>Comment on attachment 119119
Patch

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

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:249
&gt;&gt; +            }
&gt; 
&gt; One line control clauses should not use braces.  [whitespace/braces] [4]

This needs to be fixed.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:337
&gt; +    int framesToConverge = (gainDiff &lt; epsilon) ? 0 : framesToProcess; 

I don&apos;t think framesToConverge has the right meaning anymore.  Maybe framesToDezipper?  If you change it here, don&apos;t forget to change it in the macro above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520534</commentid>
    <comment_count>24</comment_count>
      <attachid>119121</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 17:51:15 -0800</bug_when>
    <thetext>Created attachment 119121
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520538</commentid>
    <comment_count>25</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 17:53:30 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 119119 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119119&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:249
&gt; &gt;&gt; +            }
&gt; &gt; 
&gt; &gt; One line control clauses should not use braces.  [whitespace/braces] [4]
&gt; 
&gt; This needs to be fixed.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioBus.cpp:337
&gt; &gt; +    int framesToConverge = (gainDiff &lt; epsilon) ? 0 : framesToProcess; 
&gt; 
&gt; I don&apos;t think framesToConverge has the right meaning anymore.  Maybe framesToDezipper?  If you change it here, don&apos;t forget to change it in the macro above.

agree. I changed it to framesToDezipper. 

and also I added an empty MACRO to avoid webkit style check. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520542</commentid>
    <comment_count>26</comment_count>
      <attachid>119119</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-13 17:57:57 -0800</bug_when>
    <thetext>Comment on attachment 119119
Patch

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

&gt; Source/WebCore/platform/audio/AudioBus.cpp:236
&gt; +                gain += (totalDesiredGain - gain) * DezipperRate; \

Not sure about the indentation here.  You should check other macro definitions in WebKit and see if we should use four-space indent.

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:337
&gt;&gt; +    int framesToConverge = (gainDiff &lt; epsilon) ? 0 : framesToProcess; 
&gt; 
&gt; I don&apos;t think framesToConverge has the right meaning anymore.  Maybe framesToDezipper?  If you change it here, don&apos;t forget to change it in the macro above.

Seems the same to me - either way is fine.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:361
&gt; +            PROCESS_WITH_GAIN(STEREO_NO_SUM)

I wouldn&apos;t bother implementing this now, but maybe add FIXME here (same applies to other cases below)

// FIXME: if (framesToConverge == 0) and DenormalDisabler::flushDenormalFloatToZero() is a NOP (gcc vs. Visual Studio)
// then we can further optimize using vsmul()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520559</commentid>
    <comment_count>27</comment_count>
      <attachid>119119</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 18:11:52 -0800</bug_when>
    <thetext>Comment on attachment 119119
Patch

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

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:236
&gt;&gt; +                gain += (totalDesiredGain - gain) * DezipperRate; \
&gt; 
&gt; Not sure about the indentation here.  You should check other macro definitions in WebKit and see if we should use four-space indent.

I checked html/parser/HTMLTokenizer.cpp and it uses four-space indent, I will change my patch to follow it. thanks for your guiding.

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:361
&gt;&gt; +            PROCESS_WITH_GAIN(STEREO_NO_SUM)
&gt; 
&gt; I wouldn&apos;t bother implementing this now, but maybe add FIXME here (same applies to other cases below)
&gt; 
&gt; // FIXME: if (framesToConverge == 0) and DenormalDisabler::flushDenormalFloatToZero() is a NOP (gcc vs. Visual Studio)
&gt; // then we can further optimize using vsmul()

ok. I will add it. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520564</commentid>
    <comment_count>28</comment_count>
      <attachid>119129</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 18:19:47 -0800</bug_when>
    <thetext>Created attachment 119129
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520593</commentid>
    <comment_count>29</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-13 18:49:58 -0800</bug_when>
    <thetext>patch updated according to your comments. could you help to review? thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521000</commentid>
    <comment_count>30</comment_count>
      <attachid>119129</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-14 09:36:08 -0800</bug_when>
    <thetext>Comment on attachment 119129
Patch

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

Just one small nit that you don&apos;t have to fix.  Otherwise, looks good.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:243
&gt; +#define SKIP_DEZIPPER  

Not sure I like this dummy #define to fix style issue.  Might be better to just remove this and the braces from PROCESS_WITH_GAIN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521022</commentid>
    <comment_count>31</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-14 10:09:50 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 119129 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119129&amp;action=review
&gt; 
&gt; Just one small nit that you don&apos;t have to fix.  Otherwise, looks good.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/AudioBus.cpp:243
&gt; &gt; +#define SKIP_DEZIPPER  
&gt; 
&gt; Not sure I like this dummy #define to fix style issue.  Might be better to just remove this and the braces from PROCESS_WITH_GAIN.

I&apos;m not sure he can just remove the braces.  The commit queue needs to pass style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521050</commentid>
    <comment_count>32</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-12-14 10:35:12 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 119129 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=119129&amp;action=review
&gt; &gt; 
&gt; &gt; Just one small nit that you don&apos;t have to fix.  Otherwise, looks good.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/audio/AudioBus.cpp:243
&gt; &gt; &gt; +#define SKIP_DEZIPPER  
&gt; &gt; 
&gt; &gt; Not sure I like this dummy #define to fix style issue.  Might be better to just remove this and the braces from PROCESS_WITH_GAIN.
&gt; 
&gt; I&apos;m not sure he can just remove the braces.  The commit queue needs to pass style

In the second patch, there were no braces around OP, and the style bot said it was ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521178</commentid>
    <comment_count>33</comment_count>
      <attachid>119129</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-14 12:24:10 -0800</bug_when>
    <thetext>Comment on attachment 119129
Patch

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

&gt; Source/WebCore/platform/audio/AudioBus.cpp:246
&gt; +    for (k = 0; k &lt; framesToDezipper; k++) { \

nit: WebKit style is ++k and not k++

please fix here and related places

&gt; Source/WebCore/platform/audio/AudioBus.cpp:256
&gt; +// Stereo with summing

nit: WebKit style is to add comments only where they&apos;re instructive and avoid obvious comments, but in this case the comment is a bit redundant with the macro name which itself is quite clear.

please remove comment here and in similar redundant places

&gt; Source/WebCore/platform/audio/AudioBus.cpp:337
&gt; +    // This value may need tweaking.

nit: may want to prefix this comment with FIXME:

// FIXME: this value may need tweaking.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:341
&gt; +    // From which frame we can skip de-zippering because we are now close enough to the target gain.

This comment seems a little funny.  I would word this as:

// Number of frames to de-zipper before we are close enough to the target gain.

&gt; Source/WebCore/platform/audio/AudioBus.cpp:361
&gt; +        if ((this == &amp;sourceBus) &amp;&amp; (*lastMixGain == targetGain) &amp;&amp; (targetGain == 1.0))

I think the extra layer of parentheses are not necessary

&gt; Source/WebCore/platform/audio/AudioBus.cpp:366
&gt; +            // FIXME: if (framesToDezipper == 0) and DenormalDisabler::flushDenormalFloatToZero() is a NOP (gcc vs. Visual Studio) 

thanks for adding the comment.  But now I see it looks a bit funny duplicated three times.

I&apos;d recommend moving this comment to just above line 364 and have it apply to all three cases, and change the wording slightly:

// then we can further optimize the PROCESS_WITH_GAIN codepaths below using vsmul().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521455</commentid>
    <comment_count>34</comment_count>
      <attachid>119129</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-14 16:40:50 -0800</bug_when>
    <thetext>Comment on attachment 119129
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:243
&gt;&gt;&gt;&gt; +#define SKIP_DEZIPPER  
&gt;&gt;&gt; 
&gt;&gt;&gt; Not sure I like this dummy #define to fix style issue.  Might be better to just remove this and the braces from PROCESS_WITH_GAIN.
&gt;&gt; 
&gt;&gt; I&apos;m not sure he can just remove the braces.  The commit queue needs to pass style
&gt; 
&gt; In the second patch, there were no braces around OP, and the style bot said it was ok.

ok. I will remove both the macro and braces. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:246
&gt;&gt; +    for (k = 0; k &lt; framesToDezipper; k++) { \
&gt; 
&gt; nit: WebKit style is ++k and not k++
&gt; 
&gt; please fix here and related places

got it. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:256
&gt;&gt; +// Stereo with summing
&gt; 
&gt; nit: WebKit style is to add comments only where they&apos;re instructive and avoid obvious comments, but in this case the comment is a bit redundant with the macro name which itself is quite clear.
&gt; 
&gt; please remove comment here and in similar redundant places

I will remove them. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:337
&gt;&gt; +    // This value may need tweaking.
&gt; 
&gt; nit: may want to prefix this comment with FIXME:
&gt; 
&gt; // FIXME: this value may need tweaking.

will do so. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:341
&gt;&gt; +    // From which frame we can skip de-zippering because we are now close enough to the target gain.
&gt; 
&gt; This comment seems a little funny.  I would word this as:
&gt; 
&gt; // Number of frames to de-zipper before we are close enough to the target gain.

thanks for your revise. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:361
&gt;&gt; +        if ((this == &amp;sourceBus) &amp;&amp; (*lastMixGain == targetGain) &amp;&amp; (targetGain == 1.0))
&gt; 
&gt; I think the extra layer of parentheses are not necessary

got it. thanks

&gt;&gt; Source/WebCore/platform/audio/AudioBus.cpp:366
&gt;&gt; +            // FIXME: if (framesToDezipper == 0) and DenormalDisabler::flushDenormalFloatToZero() is a NOP (gcc vs. Visual Studio) 
&gt; 
&gt; thanks for adding the comment.  But now I see it looks a bit funny duplicated three times.
&gt; 
&gt; I&apos;d recommend moving this comment to just above line 364 and have it apply to all three cases, and change the wording slightly:
&gt; 
&gt; // then we can further optimize the PROCESS_WITH_GAIN codepaths below using vsmul().

will follow your instruction. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521494</commentid>
    <comment_count>35</comment_count>
      <attachid>119341</attachid>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-14 17:10:00 -0800</bug_when>
    <thetext>Created attachment 119341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521526</commentid>
    <comment_count>36</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-12-14 17:38:48 -0800</bug_when>
    <thetext>Looks good.  James, thanks for doing this!  It&apos;s a good optimization and also helps cleanup the code for other mixing paths...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521529</commentid>
    <comment_count>37</comment_count>
      <attachid>119341</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-12-14 17:40:55 -0800</bug_when>
    <thetext>Comment on attachment 119341
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521533</commentid>
    <comment_count>38</comment_count>
    <who name="Wei James (wistoch)">james.wei</who>
    <bug_when>2011-12-14 17:51:24 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Looks good.  James, thanks for doing this!  It&apos;s a good optimization and also helps cleanup the code for other mixing paths...

Roger, Raymond, thanks a lot for your help to refine this patch. I really learned a lot from this process. thanks 

Ken, thanks a lot for your support too. thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521656</commentid>
    <comment_count>39</comment_count>
      <attachid>119341</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 22:14:29 -0800</bug_when>
    <thetext>Comment on attachment 119341
Patch

Clearing flags on attachment: 119341

Committed r102888: &lt;http://trac.webkit.org/changeset/102888&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>521657</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-14 22:14:35 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118326</attachid>
            <date>2011-12-07 21:40:04 -0800</date>
            <delta_ts>2011-12-12 01:57:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111208134042.patch</filename>
            <type>text/plain</type>
            <size>11567</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTEyLTA3ICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9CdXM6OnByb2Nl
c3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0wNyAgTm9lbCBHb3Jkb24gIDxu
b2VsLmdvcmRvbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViUEltYWdlRGVjb2RlciBzaG91bGQg
bm90IGRvIGEgZnVsbCBpbWFnZSBkZWNvZGUgaWYgcHJvZ3Jlc3NpdmUgZGVjb2RpbmcgaXMgYWN0
aXZlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCShy
ZXZpc2lvbiAxMDIzMTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw5ICsyMzcsNiBAQCB2b2lkIEF1ZGlvQnVzOjpw
cm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0CiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xv
d2x5IGNoYW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGll
dmVkIHRoZSB0YXJnZXQgZ2Fpbi4KIAogICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSB0aGlzIG1ldGhv
ZCAoU1NFLCBldGMuKQotICAgIC8vIEZJWE1FOiBOZWVkIGZhc3QgcGF0aCBoZXJlIHdoZW4gZ2Fp
biBoYXMgY29udmVyZ2VkIG9uIHRhcmdldEdhaW4uIEluIHRoaXMgY2FzZSwgZGUtemlwcGVyaW5n
IGlzIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgLy8gRklYTUU6IE5lZWQgZmFzdCBwYXRoIHdoZW4g
dGhpcz09c291cmNlQnVzICYmIGxhc3RNaXhHYWluPT10YXJnZXRHYWluPT0xLjAgJiYgc3VtVG9C
dXM9PWZhbHNlICh0aGlzIGlzIGEgTk9QKQotCiAgICAgLy8gRklYTUU6IHRhcmdldEdhaW4gYW5k
IGxhc3RNaXhHYWluIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGZsb2F0cyBpbnN0ZWFkIG9mIGRvdWJs
ZXMuCiAgICAgCiAgICAgLy8gVGFrZSBtYXN0ZXIgYnVzIGdhaW4gaW50byBhY2NvdW50IGFzIHdl
bGwgYXMgdGhlIHRhcmdldEdhaW4uCkBAIC0yNDksNiArMjQ2LDEwIEBAIHZvaWQgQXVkaW9CdXM6
OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3QKICAgICBmbG9hdCBnYWluID0gc3RhdGljX2Nhc3Q8
ZmxvYXQ+KG1faXNGaXJzdFRpbWUgPyB0b3RhbERlc2lyZWRHYWluIDogKmxhc3RNaXhHYWluKTsK
ICAgICBtX2lzRmlyc3RUaW1lID0gZmFsc2U7CiAKKyAgICAvLyBJZiB0aGUgZ2FpbiBoYXMgY29u
dmVyZ2VkIG9uIHRhcmdldEdhaW4sIGRlLXppcHBlcmluZyBpcyBubyBsb25nZXIgbmVlZGVkCisg
ICAgYm9vbCBuZWVkRGV6aXBwZXIgPSBmYWJzKHRvdGFsRGVzaXJlZEdhaW4tZ2FpbikgPiAwLjAw
MWY7CisgICAgZ2FpbiA9IG5lZWREZXppcHBlciA/IGdhaW4gOiB0b3RhbERlc2lyZWRHYWluOwor
CiAgICAgaW50IG51bWJlck9mU291cmNlQ2hhbm5lbHMgPSBzb3VyY2VCdXMubnVtYmVyT2ZDaGFu
bmVscygpOwogICAgIGludCBudW1iZXJPZkRlc3RpbmF0aW9uQ2hhbm5lbHMgPSBudW1iZXJPZkNo
YW5uZWxzKCk7CiAKQEAgLTI2Niw3NyArMjY3LDEzMiBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNz
V2l0aEdhaW5Gcm9tTW9ub1N0CiAgICAgICAgIC8vIFN1bSB0byBvdXIgYnVzCiAgICAgICAgIGlm
IChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewogICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAg
ICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9h
dCBzdW1MID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0
aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3Vt
UiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRp
b25SICsgZ2FpbiAqICpzb3VyY2VSKyspOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwr
KyA9IHN1bUw7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKLQotICAg
ICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAg
ICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJS
YXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAgICAgICAgICBpZiAobmVlZERlemlwcGVyKSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7CisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsKKyAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpzb3VyY2VSKyspOworICAgICAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOworICAgICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25SKysgPSBzdW1SOworICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hh
bmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgorICAgICAgICAgICAgICAgICAgICBnYWluICs9ICh0
b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7CisgICAgICAgICAgICAgICAg
ICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fp
bik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVz
dGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOworICAgICAgICAgICAgICAgICAgICBmbG9h
dCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0
aW5hdGlvblIgKyBnYWluICogKnNvdXJjZVIrKyk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IHN1bUw7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IHN1bVI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKGRlc3RpbmF0aW9uUikgewogICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gKG1peCBl
cXVhbGx5IGludG8gTCBhbmQgUikKICAgICAgICAgICAgIC8vIEZJWE1FOiBSZWFsbHkgd2Ugc2hv
dWxkIGFwcGx5IGFuIGVxdWFsLXBvd2VyIHNjYWxpbmcgZmFjdG9yIGhlcmUsIHNpbmNlIHdlJ3Jl
IGVmZmVjdGl2ZWx5IHBhbm5pbmcgY2VudGVyLi4uCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVz
VG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZWQgPSBnYWluICogKnNv
dXJjZUwrKzsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBzY2FsZWQpOwotICAgICAg
ICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIHNjYWxlZCk7Ci0KLSAgICAgICAgICAgICAgICAqZGVz
dGluYXRpb25MKysgPSBzdW1MOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN1
bVI7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBn
YWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAq
IERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgaWYgKG5lZWREZXpp
cHBlcikgeworICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgeworICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZWQgPSBnYWluICogKnNvdXJjZUwrKzsKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgc2NhbGVkKTsKKyAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
bygqZGVzdGluYXRpb25SICsgc2NhbGVkKTsKKworICAgICAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25MKysgPSBzdW1MOworICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBz
dW1SOworCisgICAgICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNp
cmVkIGdhaW4uCisgICAgICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4g
LSBnYWluKSAqIERlemlwcGVyUmF0ZTsKKyAgICAgICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9y
bWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MtLSkgeworICAgICAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZWQgPSBnYWlu
ICogKnNvdXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFs
RGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgc2NhbGVk
KTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgc2NhbGVkKTsKKworICAgICAg
ICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOworICAgICAgICAgICAgICAgICAg
ICAqZGVzdGluYXRpb25SKysgPSBzdW1SOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIHdo
aWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsg
Z2FpbiAqICpzb3VyY2VMKyspOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1
bTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdh
aW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICog
RGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpm
bHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAgICAgICAgICBpZiAobmVlZERlemlw
cGVyKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOworICAgICAg
ICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW07CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KKyAgICAgICAgICAgICAg
ICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwor
ICAgICAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOworICAgICAgICAg
ICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW07CisgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUHJvY2VzcyBk
aXJlY3RseSAod2l0aG91dCBzdW1taW5nKSB0byBvdXIgYnVzCisgICAgICAgIC8vIElmIGl0IGlz
IGZyb20gdGhlIHNhbWUgYnVzIGFuZCBubyBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVy
bgorICAgICAgICBpZiAoKHRoaXMgPT0gJnNvdXJjZUJ1cykgJiYgKCpsYXN0TWl4R2FpbiA9PSB0
YXJnZXRHYWluKSAmJiAodGFyZ2V0R2FpbiA9PSAxLjApKQorICAgICAgICAgICAgcmV0dXJuOwor
CiAgICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewogICAgICAgICAgICAgLy8g
U3RlcmVvCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAg
ICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAgICBmbG9h
dCBzYW1wbGVSID0gKnNvdXJjZVIrKzsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBs
ZUwpOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAg
ICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAg
ICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0
VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgaWYgKG5lZWREZXppcHBlcikgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgeworICAgICAgICAgICAgICAgICAgICBm
bG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2Ft
cGxlUiA9ICpzb3VyY2VSKys7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxl
TCk7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJs
ZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KKyAgICAg
ICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBw
ZXJSYXRlOworICAgICAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1
c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7
CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNlTCsrOworICAgICAg
ICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVSID0gKnNvdXJjZVIrKzsKKyAgICAgICAgICAgICAg
ICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZs
b2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4g
KiBzYW1wbGVSKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7CiAgICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAo
bWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3
ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ug
d2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChm
cmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpzb3Vy
Y2VMKys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxl
cjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOwotICAgICAgICAgICAg
ICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9h
dFRvWmVybyhnYWluICogc2FtcGxlKTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFu
Z2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxE
ZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4g
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAg
ICAgICAgICBpZiAobmVlZERlemlwcGVyKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFJl
YWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwg
c2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KKyAgICAgICAgICAgICAg
ICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQg
c2FtcGxlID0gKnNvdXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsr
ID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1w
bGUpOworICAgICAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2Fi
bGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KKyAgICAg
ICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBw
ZXJSYXRlOworICAgICAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1
c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7
CisgICAgICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpzb3VyY2VMKys7CisgICAgICAg
ICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVu
b3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsKKyAgICAgICAgICAgICAgICAgICAgKmRl
c3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KGdhaW4gKiBzYW1wbGUpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNl
TCsrOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAg
ICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAg
ICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0
VG9aZXJvKGdhaW4pOworICAgICAgICAgICAgaWYgKG5lZWREZXppcHBlcikgeworICAgICAgICAg
ICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgeworICAgICAgICAgICAgICAgICAgICBm
bG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKKyAgICAgICAgICAgICAgICAgICAgKmRlc3RpbmF0
aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4g
KiBzYW1wbGVMKTsKKworICAgICAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4g
dG8gZGVzaXJlZCBnYWluLgorICAgICAgICAgICAgICAgICAgICBnYWluICs9ICh0b3RhbERlc2ly
ZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7CisgICAgICAgICAgICAgICAgICAgIGdhaW4g
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGls
ZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxl
TCA9ICpzb3VyY2VMKys7CisgICAgICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118767</attachid>
            <date>2011-12-12 03:35:28 -0800</date>
            <delta_ts>2011-12-13 00:24:08 -0800</delta_ts>
            <desc>Patch updated</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>9253</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTEyICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmcm9tYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xMiAgTm9l
bCBHb3Jkb24gIDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViUEltYWdlRGVj
b2RlcjogSW5jcmVhc2UgaW1hZ2Uvd2VicCBkZWNvZGluZyBwZXJmb3JtYW5jZSAxMC0yMCUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAJKHJldmlzaW9u
IDEwMjU2MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvQnVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjM3LDkgKzIzNyw2IEBACiAgICAgLy8gc28gd2UgImRlLXppcHBl
ciIgYnkgc2xvd2x5IGNoYW5naW5nIHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdl
J3ZlIGFjaGlldmVkIHRoZSB0YXJnZXQgZ2Fpbi4KIAogICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSB0
aGlzIG1ldGhvZCAoU1NFLCBldGMuKQotICAgIC8vIEZJWE1FOiBOZWVkIGZhc3QgcGF0aCBoZXJl
IHdoZW4gZ2FpbiBoYXMgY29udmVyZ2VkIG9uIHRhcmdldEdhaW4uIEluIHRoaXMgY2FzZSwgZGUt
emlwcGVyaW5nIGlzIG5vIGxvbmdlciBuZWVkZWQuCi0gICAgLy8gRklYTUU6IE5lZWQgZmFzdCBw
YXRoIHdoZW4gdGhpcz09c291cmNlQnVzICYmIGxhc3RNaXhHYWluPT10YXJnZXRHYWluPT0xLjAg
JiYgc3VtVG9CdXM9PWZhbHNlICh0aGlzIGlzIGEgTk9QKQotCiAgICAgLy8gRklYTUU6IHRhcmdl
dEdhaW4gYW5kIGxhc3RNaXhHYWluIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGZsb2F0cyBpbnN0ZWFk
IG9mIGRvdWJsZXMuCiAgICAgCiAgICAgLy8gVGFrZSBtYXN0ZXIgYnVzIGdhaW4gaW50byBhY2Nv
dW50IGFzIHdlbGwgYXMgdGhlIHRhcmdldEdhaW4uCkBAIC0yNjIsODIgKzI1OSwxMTAgQEAKICAg
ICBjb25zdCBmbG9hdCBEZXppcHBlclJhdGUgPSAwLjAwNWY7CiAgICAgaW50IGZyYW1lc1RvUHJv
Y2VzcyA9IGxlbmd0aCgpOwogCi0gICAgaWYgKHN1bVRvQnVzKSB7Ci0gICAgICAgIC8vIFN1bSB0
byBvdXIgYnVzCi0gICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewotICAgICAg
ICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5v
cm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpzb3VyY2VSKyspOwotICAgICAgICAg
ICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUisrID0gc3VtUjsKKyAgICBmbG9hdCBnYWluRGlmZiA9IGZhYnModG90YWxEZXNpcmVkR2Fp
biAtIGdhaW4pOworICAgIGNvbnN0IGZsb2F0IGVwc2lsb24gPSAwLjAwMWY7IC8vIDAuMDAxIHNl
ZW1zIHNtYWxsIGVub3VnaCwgYnV0IG1heSBuZWVkIHR3ZWFraW5nLgorICAgIGludCBuQ29udiA9
IGZyYW1lc1RvUHJvY2VzczsgLy8gRnJvbSB3aGljaCBmcmFtZSB3ZSBjYW4gc2tpcCBkZS16aXBw
ZXJpbmcuIAorICAgIGlmIChnYWluRGlmZiA8IGVwc2lsb24pIHsKKyAgICAgICAgbkNvbnYgPSAw
OworICAgICAgICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBuQ29udiA9IGxvZyhlcHMpL2xvZygxLURlemlwcGVyUmF0ZSkgLSBsb2coYWJzKGdhaW4g
LSB0b3RhbERlc2lyZWRHYWluKSkvbG9nKDEtRGV6aXBwZXJSYXRlKQorICAgICAgICAvLyAgICAg
ICA9IDEzNzguMDk0IC0gbG9nKGdhaW5EaWZmKS8oLTAuMDA1MDEyNSkKKyAgICAgICAgbkNvbnYg
PSAxMzc4LjA5NCArIGxvZyhnYWluRGlmZikgLyAwLjAwNTAxMjU7CisgICAgICAgIGlmIChuQ29u
diA8IDApIAorICAgICAgICAgICAgbkNvbnYgPSAwOworICAgICAgICBpZiAobkNvbnYgPiBmcmFt
ZXNUb1Byb2Nlc3MpIAorICAgICAgICAgICAgbkNvbnYgPSBmcmFtZXNUb1Byb2Nlc3M7CisgICAg
fQorICAgIGludCBrID0gMDsKIAotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2Fp
biB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVk
R2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOworLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRl
c2lyZWQgZ2Fpbi4KKyNkZWZpbmUgR0FJTl9ERVpJUFBFUiBcCisgICAgICAgICAgICAgICAgZ2Fp
biArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOyBcCiAgICAgICAg
ICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
byhnYWluKTsKKworI2RlZmluZSBTVEVSRU9fU1VNIFwKKyAgICAgICAgICAgIHsgXAorICAgICAg
ICAgICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsgXAorICAgICAgICAg
ICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsgXAorICAgICAgICAgICAg
ICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRp
b25SKysgPSBzdW1SOyBcCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoZGVzdGlu
YXRpb25SKSB7Ci0gICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50
byBMIGFuZCBSKQotICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkg
YW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZl
bHkgcGFubmluZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3Mt
LSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxlZCA9IGdhaW4gKiAqc291cmNlTCsrOwot
ICAgICAgICAgICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIHNjYWxlZCk7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygq
ZGVzdGluYXRpb25SICsgc2NhbGVkKTsKIAotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwr
KyA9IHN1bUw7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKKy8vIE1v
bm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCisvLyBGSVhNRTogUmVhbGx5
IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBzaW5j
ZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgorI2RlZmluZSBNT05PMlNURVJF
T19TVU0gXAorICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVkID0g
Z2FpbiAqICpzb3VyY2VMKys7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBzY2Fs
ZWQpOyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgc2NhbGVkKTsgXAorICAgICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKKyAgICAgICAgICAgICAgICAqZGVz
dGluYXRpb25SKysgPSBzdW1SOyBcCisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAv
LyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdh
aW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAg
ICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KGdhaW4pOworI2RlZmluZSBNT05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1pl
cm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsgXAorICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IHN1bTsgXAogICAgICAgICAgICAgfQorCisjZGVmaW5lIFNURVJF
T19OT19TVU0gXAorICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxl
TCA9ICpzb3VyY2VMKys7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVSID0gKnNvdXJj
ZVIrKzsgXAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJs
ZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7IFwKKyAgICAgICAg
ICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOyBcCisgICAgICAgICAgICB9CisKKyNkZWZpbmUg
TU9OTzJTVEVSRU9fTk9fU1VNIFwKKyAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIGZs
b2F0IHNhbXBsZSA9ICpzb3VyY2VMKys7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25M
KysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNh
bXBsZSk7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2Fi
bGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKKyAgICAgICAg
ICAgIH0KKworI2RlZmluZSBNT05PX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAg
ICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAgICAgICAgICpk
ZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
byhnYWluICogc2FtcGxlTCk7IFwKKyAgICAgICAgICAgIH0KKworI2RlZmluZSBQUk9DRVNTX1dJ
VEhfR0FJTihPUCkgXAorICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG5Db252OyBrKyspIHsg
XAorICAgICAgICAgICAgICAgIE9QIFwKKyAgICAgICAgICAgICAgICBHQUlOX0RFWklQUEVSIFwK
KyAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgZ2FpbiA9IHRvdGFsRGVzaXJlZEdhaW47IFwK
KyAgICAgICAgICAgIGZvciAoOyBrIDwgZnJhbWVzVG9Qcm9jZXNzOyBrKyspICBcCisgICAgICAg
ICAgICAgICAgT1AgXAorICAgICAgICAgCisgICAgaWYgKHN1bVRvQnVzKSB7CisgICAgICAgIC8v
IFN1bSB0byBvdXIgYnVzCisgICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewor
ICAgICAgICAgICAgLy8gU3RlcmVvCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVS
RU9fU1VNKQorICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uUikgeworICAgICAgICAgICAg
Ly8gTW9ubyAtPiBzdGVyZW8gCisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNU
RVJFT19TVU0pCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBNb25vCi0gICAgICAg
ICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBz
dW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0
aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25M
KysgPSBzdW07Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVz
aXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBn
YWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNh
Ymxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19TVU0pCiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICAvLyBQcm9jZXNzIGRpcmVjdGx5ICh3aXRob3V0IHN1bW1pbmcpIHRvIG91
ciBidXMKKyAgICAgICAgLy8gSWYgaXQgaXMgZnJvbSB0aGUgc2FtZSBidXMgYW5kIG5vIG5lZWQg
dG8gY2hhbmdlIGdhaW4sIGp1c3QgcmV0dXJuCisgICAgICAgIGlmICgodGhpcyA9PSAmc291cmNl
QnVzKSAmJiAoKmxhc3RNaXhHYWluID09IHRhcmdldEdhaW4pICYmICh0YXJnZXRHYWluID09IDEu
MCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYgKHNvdXJjZVIgJiYgZGVzdGlu
YXRpb25SKSB7CiAgICAgICAgICAgICAvLyBTdGVyZW8KLSAgICAgICAgICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNl
TCsrOwotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVIgPSAqc291cmNlUisrOwotICAgICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0
aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4g
KiBzYW1wbGVSKTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBk
ZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAt
IGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERp
c2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVSRU9fTk9fU1VNKQogICAgICAgICB9IGVs
c2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gKG1p
eCBlcXVhbGx5IGludG8gTCBhbmQgUikKLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZWFsbHkgd2Ug
c2hvdWxkIGFwcGx5IGFuIGVxdWFsLXBvd2VyIHNjYWxpbmcgZmFjdG9yIGhlcmUsIHNpbmNlIHdl
J3JlIGVmZmVjdGl2ZWx5IHBhbm5pbmcgY2VudGVyLi4uCi0gICAgICAgICAgICB3aGlsZSAoZnJh
bWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGUgPSAqc291cmNl
TCsrOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsKLSAgICAgICAgICAgICAg
ICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2FpbiAqIHNhbXBsZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdl
IGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVz
aXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0g
RGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gCisgICAgICAgICAgICBQUk9D
RVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0pCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBNb25vCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKLSAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwpOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5IGNo
YW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0b3Rh
bERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAgZ2Fp
biA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk9fTk9fU1VNKQog
ICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118966</attachid>
            <date>2011-12-13 00:24:23 -0800</date>
            <delta_ts>2011-12-13 17:31:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111213162503.patch</filename>
            <type>text/plain</type>
            <size>9746</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTEzICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmb3JtYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xMiAgRGFu
aWVsIEJhdGVzICA8ZGJhdGVzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjEwMjY1Ni4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1
ZGlvQnVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb0J1cy5jcHAJKHJldmlzaW9uIDEwMjY1NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0F1ZGlvQnVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxLDE1ICsyMzEsMjkgQEAg
dm9pZCBBdWRpb0J1czo6c3VtRnJvbShjb25zdCBBdWRpb0J1cyAmcwogICAgIH0KIH0KIAorLy8g
U2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KKyNkZWZpbmUgR0FJTl9ERVpJUFBF
UiBcCisgICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICog
RGV6aXBwZXJSYXRlOyBcCisgICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKKworLy8gRGUtemlwcGVyIGZvciB0aGUg
Zmlyc3QgbkNvbnYgZnJhbWVzIGFuZCBza2lwIGRlLXppcHBlcmluZyBmb3IgdGhlIHJlbWFpbmlu
ZyBmcmFtZXMKKy8vIGJlY2F1c2UgdGhlIGdhaW4gaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJn
ZXQgZ2Fpbi4KKyNkZWZpbmUgUFJPQ0VTU19XSVRIX0dBSU4oT1ApIFwKKyAgICAgICAgICAgIGZv
ciAoayA9IDA7IGsgPCBuQ29udjsgaysrKSB7IFwKKyAgICAgICAgICAgICAgICBPUCBcCisgICAg
ICAgICAgICAgICAgR0FJTl9ERVpJUFBFUiBcCisgICAgICAgICAgICB9IFwKKyAgICAgICAgICAg
IGdhaW4gPSB0b3RhbERlc2lyZWRHYWluOyBcCisgICAgICAgICAgICBmb3IgKDsgayA8IGZyYW1l
c1RvUHJvY2VzczsgaysrKSAgeyBcCisgICAgICAgICAgICAgICAgT1AgXAorICAgICAgICAgICAg
fQorCiB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJlbyhjb25zdCBB
dWRpb0J1cyAmc291cmNlQnVzLCBkb3VibGUqIGxhc3RNaXhHYWluLCBkb3VibGUgdGFyZ2V0R2Fp
biwgYm9vbCBzdW1Ub0J1cykKIHsKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN1ZGRlbmx5IGNo
YW5nZSB0aGUgZ2FpbiBmcm9tIG1peGluZyBvbmUgdGltZSBzbGljZSB0byB0aGUgbmV4dCwKICAg
ICAvLyBzbyB3ZSAiZGUtemlwcGVyIiBieSBzbG93bHkgY2hhbmdpbmcgdGhlIGdhaW4gZWFjaCBz
YW1wbGUtZnJhbWUgdW50aWwgd2UndmUgYWNoaWV2ZWQgdGhlIHRhcmdldCBnYWluLgogCiAgICAg
Ly8gRklYTUU6IG9wdGltaXplIHRoaXMgbWV0aG9kIChTU0UsIGV0Yy4pCi0gICAgLy8gRklYTUU6
IE5lZWQgZmFzdCBwYXRoIGhlcmUgd2hlbiBnYWluIGhhcyBjb252ZXJnZWQgb24gdGFyZ2V0R2Fp
bi4gSW4gdGhpcyBjYXNlLCBkZS16aXBwZXJpbmcgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KLSAgICAv
LyBGSVhNRTogTmVlZCBmYXN0IHBhdGggd2hlbiB0aGlzPT1zb3VyY2VCdXMgJiYgbGFzdE1peEdh
aW49PXRhcmdldEdhaW49PTEuMCAmJiBzdW1Ub0J1cz09ZmFsc2UgKHRoaXMgaXMgYSBOT1ApCi0K
ICAgICAvLyBGSVhNRTogdGFyZ2V0R2FpbiBhbmQgbGFzdE1peEdhaW4gc2hvdWxkIGJlIGNoYW5n
ZWQgdG8gZmxvYXRzIGluc3RlYWQgb2YgZG91Ymxlcy4KICAgICAKICAgICAvLyBUYWtlIG1hc3Rl
ciBidXMgZ2FpbiBpbnRvIGFjY291bnQgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0R2Fpbi4KQEAgLTI2
Miw4MiArMjc2LDk3IEBAIHZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3QK
ICAgICBjb25zdCBmbG9hdCBEZXppcHBlclJhdGUgPSAwLjAwNWY7CiAgICAgaW50IGZyYW1lc1Rv
UHJvY2VzcyA9IGxlbmd0aCgpOwogCisgICAgLy8gSWYgdGhlIGdhaW4gaXMgd2l0aGluIGVwc2ls
b24gb2YgdG90YWxEZXNpcmVkR2Fpbiwgd2UgY2FuIHNraXAgZGV6aXBwZXJpbmcuIAorICAgIC8v
IFRoaXMgdmFsdWUgbWF5IG5lZWQgdHdlYWtpbmcuCisgICAgY29uc3QgZmxvYXQgZXBzaWxvbiA9
IDAuMDAxZjsgCisgICAgZmxvYXQgZ2FpbkRpZmYgPSBmYWJzKHRvdGFsRGVzaXJlZEdhaW4gLSBn
YWluKTsKKworICAgIC8vIEZyb20gd2hpY2ggZnJhbWUgd2UgY2FuIHNraXAgZGUtemlwcGVyaW5n
IGJlY2F1c2Ugd2UgYXJlIG5vdyBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBnYWluLgorICAg
IGludCBuQ29udiA9IGZyYW1lc1RvUHJvY2VzczsgCisgICAgaWYgKGdhaW5EaWZmIDwgZXBzaWxv
bikgeworICAgICAgICBuQ29udiA9IDA7CisgICAgICAgIGdhaW4gPSB0b3RhbERlc2lyZWRHYWlu
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIERlLXppcHBlcmluZyBpcyBhbiBleHBvbmVudGlh
bCBmaWx0ZXI6IGcobisxKSA9IGcobikgKyAoZyAtIGcobikpKkRlemlwcGVyUmF0ZSwgd2hlcmUg
ZyA9IHRvdGFsRGVzaXJlZEdhaW4uIAorICAgICAgICAvLyBUaGlzIGNhbiBiZSBzb2x2ZWQgYW5h
bHl0aWNhbGx5IHRvIGdpdmUgCisgICAgICAgIC8vIGcobikgPSBnICsgKGcoMCkgLSBnKSooMSAt
IERlemlwcGVyUmF0ZSlebgorICAgICAgICAvLyBXZSBjYW4gc2tpcCBkZXppcHBlcmluZyBpZiBn
KG4pIGlzIHdpdGhpbiBlcHNpbG9uIG9mIGcuIFRoaXMgaGFwcGVucyB3aGVuIAorICAgICAgICAv
LyBuID0gbG9nKGVwc2lsb24pIC8gbG9nKDEgLSBEZXppcHBlclJhdGUpIC0gbG9nKGFicyhnKDAp
IC0gZykpIC8gbG9nKDEgLSBEZXppcHBlclJhdGUpCisgICAgICAgIG5Db252ID0gbG9nKGVwc2ls
b24pIC8gbG9nKDEgLSBEZXppcHBlclJhdGUpIC0gbG9nKGdhaW5EaWZmKSAvIGxvZygxIC0gRGV6
aXBwZXJSYXRlKTsKKyAgICAgICAgaWYgKG5Db252IDwgMCkgCisgICAgICAgICAgICBuQ29udiA9
IDA7CisgICAgICAgIGlmIChuQ29udiA+IGZyYW1lc1RvUHJvY2VzcykgCisgICAgICAgICAgICBu
Q29udiA9IGZyYW1lc1RvUHJvY2VzczsKKyAgICB9CisgICAgaW50IGsgPSAwOworCiAgICAgaWYg
KHN1bVRvQnVzKSB7CiAgICAgICAgIC8vIFN1bSB0byBvdXIgYnVzCiAgICAgICAgIGlmIChzb3Vy
Y2VSICYmIGRlc3RpbmF0aW9uUikgewogICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAg
ICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1M
ID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlv
bkwgKyBnYWluICogKnNvdXJjZUwrKyk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsg
Z2FpbiAqICpzb3VyY2VSKyspOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1
bUw7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKLQotICAgICAgICAg
ICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAg
ICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwot
ICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2Fpbik7CisjZGVmaW5lIFNURVJFT19TVU0gXAorICAgICAgICAgICAgeyBcCisg
ICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCisgICAg
ICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpzb3VyY2VSKyspOyBcCisgICAgICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAorICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvblIrKyA9IHN1bVI7IFwKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1Nf
V0lUSF9HQUlOKFNURVJFT19TVU0pCiAgICAgICAgIH0gZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7
CiAgICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBS
KQogICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwt
cG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmlu
ZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAg
ICAgICAgICAgICAgIGZsb2F0IHNjYWxlZCA9IGdhaW4gKiAqc291cmNlTCsrOwotICAgICAgICAg
ICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oKmRlc3RpbmF0aW9uTCArIHNjYWxlZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3Vt
UiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRp
b25SICsgc2NhbGVkKTsKLQotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7
Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKLQotICAgICAgICAgICAg
ICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAg
ICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAg
ICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2Fpbik7CisjZGVmaW5lIE1PTk8yU1RFUkVPX1NVTSBcCisgICAgICAgICAgICB7IFwK
KyAgICAgICAgICAgICAgICBmbG9hdCBzY2FsZWQgPSBnYWluICogKnNvdXJjZUwrKzsgXAorICAg
ICAgICAgICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIHNjYWxlZCk7IFwKKyAgICAgICAgICAgICAgICBm
bG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpk
ZXN0aW5hdGlvblIgKyBzY2FsZWQpOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsr
ID0gc3VtTDsgXAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN1bVI7IFwKICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk8yU1RFUkVPX1NV
TSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIHdo
aWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsg
Z2FpbiAqICpzb3VyY2VMKyspOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1
bTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdh
aW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICog
RGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpm
bHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisjZGVmaW5lIE1PTk9fU1VNIFwKKyAgICAg
ICAgICAgIHsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtOyBcCiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX1NVTSkKICAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFByb2Nlc3MgZGlyZWN0bHkgKHdpdGhvdXQgc3Vt
bWluZykgdG8gb3VyIGJ1cworICAgICAgICAvLyBJZiBpdCBpcyBmcm9tIHRoZSBzYW1lIGJ1cyBh
bmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCByZXR1cm4KKyAgICAgICAgaWYgKCh0aGlz
ID09ICZzb3VyY2VCdXMpICYmICgqbGFzdE1peEdhaW4gPT0gdGFyZ2V0R2FpbikgJiYgKHRhcmdl
dEdhaW4gPT0gMS4wKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoc291cmNl
UiAmJiBkZXN0aW5hdGlvblIpIHsKICAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAg
d2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxl
TCA9ICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VS
Kys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsKLSAgICAgICAgICAgICAg
ICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRU
b1plcm8oZ2FpbiAqIHNhbXBsZVIpOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5n
ZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0b3RhbERl
c2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAgZ2FpbiA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKKyNkZWZp
bmUgU1RFUkVPX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICBmbG9h
dCBzYW1wbGVMID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVIg
PSAqc291cmNlUisrOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAor
ICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNo
RGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7IFwKICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKFNURVJFT19OT19TVU0pCiAgICAgICAgIH0gZWxz
ZSBpZiAoZGVzdGluYXRpb25SKSB7CiAgICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAobWl4
IGVxdWFsbHkgaW50byBMIGFuZCBSKQogICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3ZSBz
aG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2Un
cmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChmcmFt
ZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpzb3VyY2VM
Kys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOwotICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybyhnYWluICogc2FtcGxlKTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2Ug
Z2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNp
cmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBE
ZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisjZGVmaW5l
IE1PTk8yU1RFUkVPX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICBm
bG9hdCBzYW1wbGUgPSAqc291cmNlTCsrOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9u
TCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBz
YW1wbGUpOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNh
Ymxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOyBcCiAgICAgICAg
ICAgICB9CisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0p
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBNb25vCi0gICAgICAgICAgICB3aGls
ZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVMID0g
KnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERp
c2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwpOwotCi0gICAg
ICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAg
ICAgICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJh
dGU7Ci0gICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybyhnYWluKTsKKyNkZWZpbmUgTU9OT19OT19TVU0gXAorICAgICAgICAgICAg
eyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKKyAgICAg
ICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwpOyBcCiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBQUk9DRVNTX1dJVEhfR0FJTihNT05PX05PX1NVTSkKICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119119</attachid>
            <date>2011-12-13 17:28:36 -0800</date>
            <delta_ts>2011-12-13 18:11:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111214092916.patch</filename>
            <type>text/plain</type>
            <size>9687</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE0ICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmb3JtYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xMyAgUmFm
YWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlv
bk9ic2VydmVyc10gQXZvaWQgYWxsb2NhdGlvbnMgaWYgbm8gb2JzZXJ2ZXJzIGFyZSBwcmVzZW50
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCShyZXZp
c2lvbiAxMDI3MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxNSArMjMxLDgxIEBAIHZvaWQgQXVkaW9CdXM6OnN1
bUZyb20oY29uc3QgQXVkaW9CdXMgJnMKICAgICB9CiB9CiAKKy8vIFNsb3dseSBjaGFuZ2UgZ2Fp
biB0byBkZXNpcmVkIGdhaW4uCisjZGVmaW5lIEdBSU5fREVaSVBQRVIgXAorICAgICAgICAgICAg
ICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsgXAor
ICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2Fpbik7CisKKy8vIERlLXppcHBlciBmb3IgdGhlIGZpcnN0IGZyYW1lc1RvQ29u
dmVyZ2UgZnJhbWVzIGFuZCBza2lwIGRlLXppcHBlcmluZyBmb3IgdGhlIHJlbWFpbmluZyBmcmFt
ZXMKKy8vIGJlY2F1c2UgdGhlIGdhaW4gaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJnZXQgZ2Fp
bi4KKyNkZWZpbmUgUFJPQ0VTU19XSVRIX0dBSU4oT1ApIFwKKyAgICAgICAgICAgIGZvciAoayA9
IDA7IGsgPCBmcmFtZXNUb0NvbnZlcmdlOyBrKyspIHsgXAorICAgICAgICAgICAgICAgIE9QIFwK
KyAgICAgICAgICAgICAgICBHQUlOX0RFWklQUEVSIFwKKyAgICAgICAgICAgIH0gXAorICAgICAg
ICAgICAgZ2FpbiA9IHRvdGFsRGVzaXJlZEdhaW47IFwKKyAgICAgICAgICAgIGZvciAoOyBrIDwg
ZnJhbWVzVG9Qcm9jZXNzOyBrKyspICB7IFwKKyAgICAgICAgICAgICAgICBPUCBcCisgICAgICAg
ICAgICB9CisKKy8vIFN0ZXJlbyB3aXRoIHN1bW1pbmcKKyNkZWZpbmUgU1RFUkVPX1NVTSBcCisg
ICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNh
Ymxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNv
dXJjZUwrKyk7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxl
cjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBnYWluICogKnNvdXJj
ZVIrKyk7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCisgICAg
ICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsgXAorICAgICAgICAgICAgfQorCisv
LyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQorLy8gRklYTUU6IFJl
YWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwg
c2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KKyNkZWZpbmUgTU9OTzJT
VEVSRU9fU1VNIFwKKyAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHNjYWxl
ZCA9IGdhaW4gKiAqc291cmNlTCsrOyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsg
c2NhbGVkKTsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVy
OjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIHNjYWxlZCk7IFwKKyAg
ICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCisgICAgICAgICAgICAgICAg
KmRlc3RpbmF0aW9uUisrID0gc3VtUjsgXAorICAgICAgICAgICAgfQorCisvLyBNb25vIHdpdGgg
c3VtbWluZworI2RlZmluZSBNT05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1pl
cm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsgXAorICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IHN1bTsgXAorICAgICAgICAgICAgfQorCisvLyBTdGVyZW8gd2l0
aG91dCBzdW1taW5nCisjZGVmaW5lIFNURVJFT19OT19TVU0gXAorICAgICAgICAgICAgeyBcCisg
ICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzYW1wbGVSID0gKnNvdXJjZVIrKzsgXAorICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhn
YWluICogc2FtcGxlTCk7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5v
cm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOyBc
CisgICAgICAgICAgICB9CisKKy8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwg
YW5kIFIpCisvLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBz
Y2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRl
ci4uLgorI2RlZmluZSBNT05PMlNURVJFT19OT19TVU0gXAorICAgICAgICAgICAgeyBcCisgICAg
ICAgICAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybyhnYWluICogc2FtcGxlKTsgXAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxl
KTsgXAorICAgICAgICAgICAgfQorCisvLyBNb25vIHdpdGhvdXQgc3VtbWluZworI2RlZmluZSBN
T05PX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzYW1w
bGVMID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7
IFwKKyAgICAgICAgICAgIH0KKwogdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1v
bm9TdGVyZW8oY29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZG91YmxlKiBsYXN0TWl4R2Fpbiwg
ZG91YmxlIHRhcmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgd2Fu
dCB0byBzdWRkZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcgb25lIHRpbWUgc2xpY2Ug
dG8gdGhlIG5leHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xvd2x5IGNoYW5naW5n
IHRoZSBnYWluIGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGlldmVkIHRoZSB0YXJn
ZXQgZ2Fpbi4KIAogICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSB0aGlzIG1ldGhvZCAoU1NFLCBldGMu
KQotICAgIC8vIEZJWE1FOiBOZWVkIGZhc3QgcGF0aCBoZXJlIHdoZW4gZ2FpbiBoYXMgY29udmVy
Z2VkIG9uIHRhcmdldEdhaW4uIEluIHRoaXMgY2FzZSwgZGUtemlwcGVyaW5nIGlzIG5vIGxvbmdl
ciBuZWVkZWQuCi0gICAgLy8gRklYTUU6IE5lZWQgZmFzdCBwYXRoIHdoZW4gdGhpcz09c291cmNl
QnVzICYmIGxhc3RNaXhHYWluPT10YXJnZXRHYWluPT0xLjAgJiYgc3VtVG9CdXM9PWZhbHNlICh0
aGlzIGlzIGEgTk9QKQotCiAgICAgLy8gRklYTUU6IHRhcmdldEdhaW4gYW5kIGxhc3RNaXhHYWlu
IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGZsb2F0cyBpbnN0ZWFkIG9mIGRvdWJsZXMuCiAgICAgCiAg
ICAgLy8gVGFrZSBtYXN0ZXIgYnVzIGdhaW4gaW50byBhY2NvdW50IGFzIHdlbGwgYXMgdGhlIHRh
cmdldEdhaW4uCkBAIC0yNjIsODIgKzMyOCw0MyBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0
aEdhaW5Gcm9tTW9ub1N0CiAgICAgY29uc3QgZmxvYXQgRGV6aXBwZXJSYXRlID0gMC4wMDVmOwog
ICAgIGludCBmcmFtZXNUb1Byb2Nlc3MgPSBsZW5ndGgoKTsKIAorICAgIC8vIElmIHRoZSBnYWlu
IGlzIHdpdGhpbiBlcHNpbG9uIG9mIHRvdGFsRGVzaXJlZEdhaW4sIHdlIGNhbiBza2lwIGRlemlw
cGVyaW5nLiAKKyAgICAvLyBUaGlzIHZhbHVlIG1heSBuZWVkIHR3ZWFraW5nLgorICAgIGNvbnN0
IGZsb2F0IGVwc2lsb24gPSAwLjAwMWY7IAorICAgIGZsb2F0IGdhaW5EaWZmID0gZmFicyh0b3Rh
bERlc2lyZWRHYWluIC0gZ2Fpbik7CisKKyAgICAvLyBGcm9tIHdoaWNoIGZyYW1lIHdlIGNhbiBz
a2lwIGRlLXppcHBlcmluZyBiZWNhdXNlIHdlIGFyZSBub3cgY2xvc2UgZW5vdWdoIHRvIHRoZSB0
YXJnZXQgZ2Fpbi4KKyAgICBpbnQgZnJhbWVzVG9Db252ZXJnZSA9IChnYWluRGlmZiA8IGVwc2ls
b24pID8gMCA6IGZyYW1lc1RvUHJvY2VzczsgCisKKyAgICBpbnQgayA9IDA7CisKICAgICBpZiAo
c3VtVG9CdXMpIHsKICAgICAgICAgLy8gU3VtIHRvIG91ciBidXMKICAgICAgICAgaWYgKHNvdXJj
ZVIgJiYgZGVzdGluYXRpb25SKSB7CiAgICAgICAgICAgICAvLyBTdGVyZW8KLSAgICAgICAgICAg
IHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHN1bUwg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9u
TCArIGdhaW4gKiAqc291cmNlTCsrKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1SID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBn
YWluICogKnNvdXJjZVIrKyk7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3Vt
TDsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOwotCi0gICAgICAgICAg
ICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAg
ICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0g
ICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9h
dFRvWmVybyhnYWluKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9H
QUlOKFNURVJFT19TVU0pCiAgICAgICAgIH0gZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7Ci0gICAg
ICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotICAg
ICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIg
c2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50
ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAg
ICAgICAgIGZsb2F0IHNjYWxlZCA9IGdhaW4gKiAqc291cmNlTCsrOwotICAgICAgICAgICAgICAg
IGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8o
KmRlc3RpbmF0aW9uTCArIHNjYWxlZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsg
c2NhbGVkKTsKLQotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7Ci0gICAg
ICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKLQotICAgICAgICAgICAgICAgIC8v
IFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2Fp
biArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAg
ICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8o
Z2Fpbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAKKyAg
ICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk8yU1RFUkVPX1NVTSkKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1By
b2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bTsKLQotICAgICAgICAg
ICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAg
ICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwot
ICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2Fpbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBQUk9DRVNTX1dJVEhf
R0FJTihNT05PX1NVTSkKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFByb2Nl
c3MgZGlyZWN0bHkgKHdpdGhvdXQgc3VtbWluZykgdG8gb3VyIGJ1cworICAgICAgICAvLyBJZiBp
dCBpcyBmcm9tIHRoZSBzYW1lIGJ1cyBhbmQgbm8gbmVlZCB0byBjaGFuZ2UgZ2FpbiwganVzdCBy
ZXR1cm4KKyAgICAgICAgaWYgKCh0aGlzID09ICZzb3VyY2VCdXMpICYmICgqbGFzdE1peEdhaW4g
PT0gdGFyZ2V0R2FpbikgJiYgKHRhcmdldEdhaW4gPT0gMS4wKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKwogICAgICAgICBpZiAoc291cmNlUiAmJiBkZXN0aW5hdGlvblIpIHsKICAgICAgICAgICAg
IC8vIFN0ZXJlbwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9u
TCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBz
YW1wbGVMKTsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2Fi
bGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOwotCi0gICAgICAg
ICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAg
ICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7
Ci0gICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybyhnYWluKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lU
SF9HQUlOKFNURVJFT19OT19TVU0pCiAgICAgICAgIH0gZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7
Ci0gICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBS
KQotICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwt
cG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmlu
ZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAg
ICAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAg
KmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9a
ZXJvKGdhaW4gKiBzYW1wbGUpOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERl
bm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsK
LQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4u
Ci0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6
aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAv
LyBNb25vIC0+IHN0ZXJlbyAKKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk8yU1RF
UkVPX05PX1NVTSkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAg
ICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0
IHNhbXBsZUwgPSAqc291cmNlTCsrOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9
IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxl
TCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBn
YWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAq
IERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19OT19TVU0pCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119121</attachid>
            <date>2011-12-13 17:51:15 -0800</date>
            <delta_ts>2011-12-13 18:19:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111214095155.patch</filename>
            <type>text/plain</type>
            <size>9794</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE0ICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmb3JtYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xMyAgUmFm
YWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlv
bk9ic2VydmVyc10gQXZvaWQgYWxsb2NhdGlvbnMgaWYgbm8gb2JzZXJ2ZXJzIGFyZSBwcmVzZW50
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCShyZXZp
c2lvbiAxMDI3MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxNSArMjMxLDg2IEBAIHZvaWQgQXVkaW9CdXM6OnN1
bUZyb20oY29uc3QgQXVkaW9CdXMgJnMKICAgICB9CiB9CiAKKy8vIFNsb3dseSBjaGFuZ2UgZ2Fp
biB0byBkZXNpcmVkIGdhaW4uCisjZGVmaW5lIEdBSU5fREVaSVBQRVIgXAorICAgICAgICAgICAg
ICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsgXAor
ICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oZ2Fpbik7CisKKy8vIERlLXppcHBlciBmb3IgdGhlIGZpcnN0IGZyYW1lc1RvRGV6
aXBwZXIgZnJhbWVzIGFuZCBza2lwIGRlLXppcHBlcmluZyBmb3IgdGhlIHJlbWFpbmluZyBmcmFt
ZXMKKy8vIGJlY2F1c2UgdGhlIGdhaW4gaXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJnZXQgZ2Fp
bi4KKworLy8gTWFjcm8gdG8gZml4IHdlYmtpdCBzdHlsZSBjaGVja2luZyBpc3N1ZQorI2RlZmlu
ZSBTS0lQX0RFWklQUEVSICAKKworI2RlZmluZSBQUk9DRVNTX1dJVEhfR0FJTihPUCkgXAorICAg
ICAgICAgICAgZm9yIChrID0gMDsgayA8IGZyYW1lc1RvRGV6aXBwZXI7IGsrKykgeyBcCisgICAg
ICAgICAgICAgICAgT1AgXAorICAgICAgICAgICAgICAgIEdBSU5fREVaSVBQRVIgXAorICAgICAg
ICAgICAgfSBcCisgICAgICAgICAgICBnYWluID0gdG90YWxEZXNpcmVkR2FpbjsgXAorICAgICAg
ICAgICAgZm9yICg7IGsgPCBmcmFtZXNUb1Byb2Nlc3M7IGsrKykgIHsgXAorICAgICAgICAgICAg
ICAgIE9QIFwKKyAgICAgICAgICAgICAgICBTS0lQX0RFWklQUEVSIFwKKyAgICAgICAgICAgIH0K
KworLy8gU3RlcmVvIHdpdGggc3VtbWluZworI2RlZmluZSBTVEVSRU9fU1VNIFwKKyAgICAgICAg
ICAgIHsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpm
bHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsr
KTsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsg
XAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKKyAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOyBcCisgICAgICAgICAgICB9CisKKy8vIE1vbm8g
LT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCisvLyBGSVhNRTogUmVhbGx5IHdl
IHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3
ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgorI2RlZmluZSBNT05PMlNURVJFT19T
VU0gXAorICAgICAgICAgICAgeyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVkID0gZ2Fp
biAqICpzb3VyY2VMKys7IFwKKyAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBzY2FsZWQp
OyBcCisgICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNo
RGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgc2NhbGVkKTsgXAorICAgICAgICAg
ICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKKyAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25SKysgPSBzdW1SOyBcCisgICAgICAgICAgICB9CisKKy8vIE1vbm8gd2l0aCBzdW1taW5n
CisjZGVmaW5lIE1PTk9fU1VNIFwKKyAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIGZs
b2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVz
dGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCisgICAgICAgICAgICAgICAgKmRlc3Rp
bmF0aW9uTCsrID0gc3VtOyBcCisgICAgICAgICAgICB9CisKKy8vIFN0ZXJlbyB3aXRob3V0IHN1
bW1pbmcKKyNkZWZpbmUgU1RFUkVPX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAg
ICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAgICAgICAgIGZs
b2F0IHNhbXBsZVIgPSAqc291cmNlUisrOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9u
TCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBz
YW1wbGVMKTsgXAorICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlz
YWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7IFwKKyAgICAg
ICAgICAgIH0KKworLy8gTW9ubyAtPiBzdGVyZW8gKG1peCBlcXVhbGx5IGludG8gTCBhbmQgUikK
Ky8vIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIGFwcGx5IGFuIGVxdWFsLXBvd2VyIHNjYWxpbmcg
ZmFjdG9yIGhlcmUsIHNpbmNlIHdlJ3JlIGVmZmVjdGl2ZWx5IHBhbm5pbmcgY2VudGVyLi4uCisj
ZGVmaW5lIE1PTk8yU1RFUkVPX05PX1NVTSBcCisgICAgICAgICAgICB7IFwKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzYW1wbGUgPSAqc291cmNlTCsrOyBcCisgICAgICAgICAgICAgICAgKmRlc3Rp
bmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdh
aW4gKiBzYW1wbGUpOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOyBcCisg
ICAgICAgICAgICB9CisKKy8vIE1vbm8gd2l0aG91dCBzdW1taW5nCisjZGVmaW5lIE1PTk9fTk9f
U1VNIFwKKyAgICAgICAgICAgIHsgXAorICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUwgPSAq
c291cmNlTCsrOyBcCisgICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAorICAg
ICAgICAgICAgfQorCiB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9tTW9ub1N0ZXJl
byhjb25zdCBBdWRpb0J1cyAmc291cmNlQnVzLCBkb3VibGUqIGxhc3RNaXhHYWluLCBkb3VibGUg
dGFyZ2V0R2FpbiwgYm9vbCBzdW1Ub0J1cykKIHsKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHN1
ZGRlbmx5IGNoYW5nZSB0aGUgZ2FpbiBmcm9tIG1peGluZyBvbmUgdGltZSBzbGljZSB0byB0aGUg
bmV4dCwKICAgICAvLyBzbyB3ZSAiZGUtemlwcGVyIiBieSBzbG93bHkgY2hhbmdpbmcgdGhlIGdh
aW4gZWFjaCBzYW1wbGUtZnJhbWUgdW50aWwgd2UndmUgYWNoaWV2ZWQgdGhlIHRhcmdldCBnYWlu
LgogCiAgICAgLy8gRklYTUU6IG9wdGltaXplIHRoaXMgbWV0aG9kIChTU0UsIGV0Yy4pCi0gICAg
Ly8gRklYTUU6IE5lZWQgZmFzdCBwYXRoIGhlcmUgd2hlbiBnYWluIGhhcyBjb252ZXJnZWQgb24g
dGFyZ2V0R2Fpbi4gSW4gdGhpcyBjYXNlLCBkZS16aXBwZXJpbmcgaXMgbm8gbG9uZ2VyIG5lZWRl
ZC4KLSAgICAvLyBGSVhNRTogTmVlZCBmYXN0IHBhdGggd2hlbiB0aGlzPT1zb3VyY2VCdXMgJiYg
bGFzdE1peEdhaW49PXRhcmdldEdhaW49PTEuMCAmJiBzdW1Ub0J1cz09ZmFsc2UgKHRoaXMgaXMg
YSBOT1ApCi0KICAgICAvLyBGSVhNRTogdGFyZ2V0R2FpbiBhbmQgbGFzdE1peEdhaW4gc2hvdWxk
IGJlIGNoYW5nZWQgdG8gZmxvYXRzIGluc3RlYWQgb2YgZG91Ymxlcy4KICAgICAKICAgICAvLyBU
YWtlIG1hc3RlciBidXMgZ2FpbiBpbnRvIGFjY291bnQgYXMgd2VsbCBhcyB0aGUgdGFyZ2V0R2Fp
bi4KQEAgLTI2Miw4MiArMzMzLDQzIEBAIHZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZy
b21Nb25vU3QKICAgICBjb25zdCBmbG9hdCBEZXppcHBlclJhdGUgPSAwLjAwNWY7CiAgICAgaW50
IGZyYW1lc1RvUHJvY2VzcyA9IGxlbmd0aCgpOwogCisgICAgLy8gSWYgdGhlIGdhaW4gaXMgd2l0
aGluIGVwc2lsb24gb2YgdG90YWxEZXNpcmVkR2Fpbiwgd2UgY2FuIHNraXAgZGV6aXBwZXJpbmcu
IAorICAgIC8vIFRoaXMgdmFsdWUgbWF5IG5lZWQgdHdlYWtpbmcuCisgICAgY29uc3QgZmxvYXQg
ZXBzaWxvbiA9IDAuMDAxZjsgCisgICAgZmxvYXQgZ2FpbkRpZmYgPSBmYWJzKHRvdGFsRGVzaXJl
ZEdhaW4gLSBnYWluKTsKKworICAgIC8vIEZyb20gd2hpY2ggZnJhbWUgd2UgY2FuIHNraXAgZGUt
emlwcGVyaW5nIGJlY2F1c2Ugd2UgYXJlIG5vdyBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBn
YWluLgorICAgIGludCBmcmFtZXNUb0RlemlwcGVyID0gKGdhaW5EaWZmIDwgZXBzaWxvbikgPyAw
IDogZnJhbWVzVG9Qcm9jZXNzOyAKKworICAgIGludCBrID0gMDsKKwogICAgIGlmIChzdW1Ub0J1
cykgewogICAgICAgICAvLyBTdW0gdG8gb3VyIGJ1cwogICAgICAgICBpZiAoc291cmNlUiAmJiBk
ZXN0aW5hdGlvblIpIHsKICAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgd2hpbGUg
KGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9y
bWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2Fp
biAqICpzb3VyY2VMKyspOwotICAgICAgICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERp
c2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAq
c291cmNlUisrKTsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOwotICAg
ICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IHN1bVI7Ci0KLSAgICAgICAgICAgICAgICAv
LyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdh
aW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAg
ICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJv
KGdhaW4pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oU1RF
UkVPX1NVTSkKICAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAg
IC8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCi0gICAgICAgICAg
ICAvLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5n
IGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgot
ICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgc2NhbGVkID0gZ2FpbiAqICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgZmxvYXQg
c3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGlu
YXRpb25MICsgc2NhbGVkKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBzY2FsZWQp
OwotCi0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtTDsKLSAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5
IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0
b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAg
Z2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAorICAgICAgICAg
ICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fU1VNKQogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgLy8gTW9ubwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0t
KSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hE
ZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7Ci0g
ICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtOwotCi0gICAgICAgICAgICAgICAg
Ly8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBn
YWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAg
ICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVy
byhnYWluKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1P
Tk9fU1VNKQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUHJvY2VzcyBkaXJl
Y3RseSAod2l0aG91dCBzdW1taW5nKSB0byBvdXIgYnVzCisgICAgICAgIC8vIElmIGl0IGlzIGZy
b20gdGhlIHNhbWUgYnVzIGFuZCBubyBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVybgor
ICAgICAgICBpZiAoKHRoaXMgPT0gJnNvdXJjZUJ1cykgJiYgKCpsYXN0TWl4R2FpbiA9PSB0YXJn
ZXRHYWluKSAmJiAodGFyZ2V0R2FpbiA9PSAxLjApKQorICAgICAgICAgICAgcmV0dXJuOworCiAg
ICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9uUikgewogICAgICAgICAgICAgLy8gU3Rl
cmVvCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAgICBmbG9hdCBz
YW1wbGVSID0gKnNvdXJjZVIrKzsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBE
ZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwp
OwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlUik7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAg
IGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAg
ICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9a
ZXJvKGdhaW4pOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4o
U1RFUkVPX05PX1NVTSkKICAgICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAg
ICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCi0gICAg
ICAgICAgICAvLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBz
Y2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRl
ci4uLgotICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAg
ICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fp
biAqIHNhbXBsZSk7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxE
aXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOwotCi0gICAg
ICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAg
ICAgICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJh
dGU7Ci0gICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybyhnYWluKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIE1vbm8g
LT4gc3RlcmVvIAorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OTzJTVEVSRU9fTk9f
U1VNKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gTW9ubwotICAgICAgICAgICAg
d2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxl
TCA9ICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsKLQot
ICAgICAgICAgICAgICAgIC8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0g
ICAgICAgICAgICAgICAgZ2FpbiArPSAodG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBw
ZXJSYXRlOwotICAgICAgICAgICAgICAgIGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERl
bm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBQUk9D
RVNTX1dJVEhfR0FJTihNT05PX05PX1NVTSkKICAgICAgICAgfQogICAgIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119129</attachid>
            <date>2011-12-13 18:19:47 -0800</date>
            <delta_ts>2011-12-14 17:04:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111214102027.patch</filename>
            <type>text/plain</type>
            <size>10018</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjcyMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE0ICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmb3JtYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xMyAgUmFm
YWVsIFdlaW5zdGVpbiAgPHJhZmFlbHdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtNdXRhdGlv
bk9ic2VydmVyc10gQXZvaWQgYWxsb2NhdGlvbnMgaWYgbm8gb2JzZXJ2ZXJzIGFyZSBwcmVzZW50
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCShyZXZp
c2lvbiAxMDI3MjEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMSwxNSArMjMxLDg2IEBAIHZvaWQgQXVkaW9CdXM6OnN1
bUZyb20oY29uc3QgQXVkaW9CdXMgJnMKICAgICB9CiB9CiAKKy8vIFNsb3dseSBjaGFuZ2UgZ2Fp
biB0byBkZXNpcmVkIGdhaW4uCisjZGVmaW5lIEdBSU5fREVaSVBQRVIgXAorICAgIGdhaW4gKz0g
KHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsgXAorICAgIGdhaW4gPSBE
ZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisKKy8vIERl
LXppcHBlciBmb3IgdGhlIGZpcnN0IGZyYW1lc1RvRGV6aXBwZXIgZnJhbWVzIGFuZCBza2lwIGRl
LXppcHBlcmluZyBmb3IgdGhlIHJlbWFpbmluZyBmcmFtZXMKKy8vIGJlY2F1c2UgdGhlIGdhaW4g
aXMgY2xvc2UgZW5vdWdoIHRvIHRoZSB0YXJnZXQgZ2Fpbi4KKworLy8gTWFjcm8gdG8gZml4IHdl
YmtpdCBzdHlsZSBjaGVja2luZyBpc3N1ZQorI2RlZmluZSBTS0lQX0RFWklQUEVSICAKKworI2Rl
ZmluZSBQUk9DRVNTX1dJVEhfR0FJTihPUCkgXAorICAgIGZvciAoayA9IDA7IGsgPCBmcmFtZXNU
b0RlemlwcGVyOyBrKyspIHsgXAorICAgICAgICBPUCBcCisgICAgICAgIEdBSU5fREVaSVBQRVIg
XAorICAgIH0gXAorICAgIGdhaW4gPSB0b3RhbERlc2lyZWRHYWluOyBcCisgICAgZm9yICg7IGsg
PCBmcmFtZXNUb1Byb2Nlc3M7IGsrKykgIHsgXAorICAgICAgICBPUCBcCisgICAgICAgIFNLSVBf
REVaSVBQRVIgXAorICAgIH0KKworLy8gU3RlcmVvIHdpdGggc3VtbWluZworI2RlZmluZSBTVEVS
RU9fU1VNIFwKKyAgICB7IFwKKyAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOyBcCisgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsgXAorICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOyBcCisgICAgICAgICpkZXN0aW5hdGlvblIrKyA9
IHN1bVI7IFwKKyAgICB9CisKKy8vIE1vbm8gLT4gc3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwg
YW5kIFIpCisvLyBGSVhNRTogUmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBz
Y2FsaW5nIGZhY3RvciBoZXJlLCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRl
ci4uLgorI2RlZmluZSBNT05PMlNURVJFT19TVU0gXAorICAgIHsgXAorICAgICAgICBmbG9hdCBz
Y2FsZWQgPSBnYWluICogKnNvdXJjZUwrKzsgXAorICAgICAgICBmbG9hdCBzdW1MID0gRGVub3Jt
YWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBzY2Fs
ZWQpOyBcCisgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9y
bWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIHNjYWxlZCk7IFwKKyAgICAgICAgKmRlc3Rp
bmF0aW9uTCsrID0gc3VtTDsgXAorICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOyBcCisg
ICAgfQorCisvLyBNb25vIHdpdGggc3VtbWluZworI2RlZmluZSBNT05PX1NVTSBcCisgICAgeyBc
CisgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9h
dFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCisgICAgICAgICpk
ZXN0aW5hdGlvbkwrKyA9IHN1bTsgXAorICAgIH0KKworLy8gU3RlcmVvIHdpdGhvdXQgc3VtbWlu
ZworI2RlZmluZSBTVEVSRU9fTk9fU1VNIFwKKyAgICB7IFwKKyAgICAgICAgZmxvYXQgc2FtcGxl
TCA9ICpzb3VyY2VMKys7IFwKKyAgICAgICAgZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7IFwK
KyAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsgXAorICAgICAgICAqZGVzdGluYXRpb25SKysg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBs
ZVIpOyBcCisgICAgfQorCisvLyBNb25vIC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFu
ZCBSKQorLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2Nh
bGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIu
Li4KKyNkZWZpbmUgTU9OTzJTVEVSRU9fTk9fU1VNIFwKKyAgICB7IFwKKyAgICAgICAgZmxvYXQg
c2FtcGxlID0gKnNvdXJjZUwrKzsgXAorICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1h
bERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKKyAg
ICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZs
b2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOyBcCisgICAgfQorCisvLyBNb25vIHdpdGhvdXQgc3Vt
bWluZworI2RlZmluZSBNT05PX05PX1NVTSBcCisgICAgeyBcCisgICAgICAgIGZsb2F0IHNhbXBs
ZUwgPSAqc291cmNlTCsrOyBcCisgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlz
YWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7IFwKKyAgICB9
CisKIHZvaWQgQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKGNvbnN0IEF1
ZGlvQnVzICZzb3VyY2VCdXMsIGRvdWJsZSogbGFzdE1peEdhaW4sIGRvdWJsZSB0YXJnZXRHYWlu
LCBib29sIHN1bVRvQnVzKQogewogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gc3VkZGVubHkgY2hh
bmdlIHRoZSBnYWluIGZyb20gbWl4aW5nIG9uZSB0aW1lIHNsaWNlIHRvIHRoZSBuZXh0LAogICAg
IC8vIHNvIHdlICJkZS16aXBwZXIiIGJ5IHNsb3dseSBjaGFuZ2luZyB0aGUgZ2FpbiBlYWNoIHNh
bXBsZS1mcmFtZSB1bnRpbCB3ZSd2ZSBhY2hpZXZlZCB0aGUgdGFyZ2V0IGdhaW4uCiAKICAgICAv
LyBGSVhNRTogb3B0aW1pemUgdGhpcyBtZXRob2QgKFNTRSwgZXRjLikKLSAgICAvLyBGSVhNRTog
TmVlZCBmYXN0IHBhdGggaGVyZSB3aGVuIGdhaW4gaGFzIGNvbnZlcmdlZCBvbiB0YXJnZXRHYWlu
LiBJbiB0aGlzIGNhc2UsIGRlLXppcHBlcmluZyBpcyBubyBsb25nZXIgbmVlZGVkLgotICAgIC8v
IEZJWE1FOiBOZWVkIGZhc3QgcGF0aCB3aGVuIHRoaXM9PXNvdXJjZUJ1cyAmJiBsYXN0TWl4R2Fp
bj09dGFyZ2V0R2Fpbj09MS4wICYmIHN1bVRvQnVzPT1mYWxzZSAodGhpcyBpcyBhIE5PUCkKLQog
ICAgIC8vIEZJWE1FOiB0YXJnZXRHYWluIGFuZCBsYXN0TWl4R2FpbiBzaG91bGQgYmUgY2hhbmdl
ZCB0byBmbG9hdHMgaW5zdGVhZCBvZiBkb3VibGVzLgogICAgIAogICAgIC8vIFRha2UgbWFzdGVy
IGJ1cyBnYWluIGludG8gYWNjb3VudCBhcyB3ZWxsIGFzIHRoZSB0YXJnZXRHYWluLgpAQCAtMjYy
LDgyICszMzMsNDkgQEAgdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdAog
ICAgIGNvbnN0IGZsb2F0IERlemlwcGVyUmF0ZSA9IDAuMDA1ZjsKICAgICBpbnQgZnJhbWVzVG9Q
cm9jZXNzID0gbGVuZ3RoKCk7CiAKKyAgICAvLyBJZiB0aGUgZ2FpbiBpcyB3aXRoaW4gZXBzaWxv
biBvZiB0b3RhbERlc2lyZWRHYWluLCB3ZSBjYW4gc2tpcCBkZXppcHBlcmluZy4gCisgICAgLy8g
VGhpcyB2YWx1ZSBtYXkgbmVlZCB0d2Vha2luZy4KKyAgICBjb25zdCBmbG9hdCBlcHNpbG9uID0g
MC4wMDFmOyAKKyAgICBmbG9hdCBnYWluRGlmZiA9IGZhYnModG90YWxEZXNpcmVkR2FpbiAtIGdh
aW4pOworCisgICAgLy8gRnJvbSB3aGljaCBmcmFtZSB3ZSBjYW4gc2tpcCBkZS16aXBwZXJpbmcg
YmVjYXVzZSB3ZSBhcmUgbm93IGNsb3NlIGVub3VnaCB0byB0aGUgdGFyZ2V0IGdhaW4uCisgICAg
aW50IGZyYW1lc1RvRGV6aXBwZXIgPSAoZ2FpbkRpZmYgPCBlcHNpbG9uKSA/IDAgOiBmcmFtZXNU
b1Byb2Nlc3M7IAorCisgICAgaW50IGsgPSAwOworCiAgICAgaWYgKHN1bVRvQnVzKSB7CiAgICAg
ICAgIC8vIFN1bSB0byBvdXIgYnVzCiAgICAgICAgIGlmIChzb3VyY2VSICYmIGRlc3RpbmF0aW9u
UikgewogICAgICAgICAgICAgLy8gU3RlcmVvCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Q
cm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVub3JtYWxEaXNhYmxl
cjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJj
ZUwrKyk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtUiA9IERlbm9ybWFsRGlzYWJsZXI6OmZs
dXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25SICsgZ2FpbiAqICpzb3VyY2VSKysp
OwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7Ci0gICAgICAgICAgICAg
ICAgKmRlc3RpbmF0aW9uUisrID0gc3VtUjsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBj
aGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90
YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdh
aW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBQUk9DRVNTX1dJVEhfR0FJTihTVEVSRU9fU1VNKQog
ICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9uUikgewotICAgICAgICAgICAgLy8gTW9ubyAt
PiBzdGVyZW8gKG1peCBlcXVhbGx5IGludG8gTCBhbmQgUikKLSAgICAgICAgICAgIC8vIEZJWE1F
OiBSZWFsbHkgd2Ugc2hvdWxkIGFwcGx5IGFuIGVxdWFsLXBvd2VyIHNjYWxpbmcgZmFjdG9yIGhl
cmUsIHNpbmNlIHdlJ3JlIGVmZmVjdGl2ZWx5IHBhbm5pbmcgY2VudGVyLi4uCi0gICAgICAgICAg
ICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzY2Fs
ZWQgPSBnYWluICogKnNvdXJjZUwrKzsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1MID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBz
Y2FsZWQpOwotICAgICAgICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpm
bHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIHNjYWxlZCk7Ci0KLSAgICAg
ICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOwotICAgICAgICAgICAgICAgICpkZXN0
aW5hdGlvblIrKyA9IHN1bVI7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdh
aW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJl
ZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAgICAgICAg
ICAgfQorICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gCisgICAgICAgICAgICBQUk9DRVNT
X1dJVEhfR0FJTihNT05PMlNURVJFT19TVU0pCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBNb25vCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsKLSAgICAg
ICAgICAgICAgICBmbG9hdCBzdW0gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxv
YXRUb1plcm8oKmRlc3RpbmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsKLSAgICAgICAgICAg
ICAgICAqZGVzdGluYXRpb25MKysgPSBzdW07Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkg
Y2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRv
dGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBn
YWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19TVU0pCiAg
ICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvLyBQcm9jZXNzIGRpcmVjdGx5ICh3aXRo
b3V0IHN1bW1pbmcpIHRvIG91ciBidXMKKyAgICAgICAgLy8gSWYgaXQgaXMgZnJvbSB0aGUgc2Ft
ZSBidXMgYW5kIG5vIG5lZWQgdG8gY2hhbmdlIGdhaW4sIGp1c3QgcmV0dXJuCisgICAgICAgIGlm
ICgodGhpcyA9PSAmc291cmNlQnVzKSAmJiAoKmxhc3RNaXhHYWluID09IHRhcmdldEdhaW4pICYm
ICh0YXJnZXRHYWluID09IDEuMCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgaWYg
KHNvdXJjZVIgJiYgZGVzdGluYXRpb25SKSB7CiAgICAgICAgICAgICAvLyBTdGVyZW8KLSAgICAg
ICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0
IHNhbXBsZUwgPSAqc291cmNlTCsrOwotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZVIgPSAq
c291cmNlUisrOwotICAgICAgICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlz
YWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7Ci0gICAgICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uUisrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1h
bEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVSKTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3ds
eSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAo
dG90YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAg
IGdhaW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7
Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBGSVhNRTogaWYgKGZyYW1lc1RvRGV6aXBw
ZXIgPT0gMCkgYW5kIERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygp
IGlzIGEgTk9QIChnY2MgdnMuIFZpc3VhbCBTdHVkaW8pIAorICAgICAgICAgICAgLy8gdGhlbiB3
ZSBjYW4gZnVydGhlciBvcHRpbWl6ZSB1c2luZyB2c211bCgpCisgICAgICAgICAgICBQUk9DRVNT
X1dJVEhfR0FJTihTVEVSRU9fTk9fU1VNKQogICAgICAgICB9IGVsc2UgaWYgKGRlc3RpbmF0aW9u
UikgewotICAgICAgICAgICAgLy8gTW9ubyAtPiBzdGVyZW8gKG1peCBlcXVhbGx5IGludG8gTCBh
bmQgUikKLSAgICAgICAgICAgIC8vIEZJWE1FOiBSZWFsbHkgd2Ugc2hvdWxkIGFwcGx5IGFuIGVx
dWFsLXBvd2VyIHNjYWxpbmcgZmFjdG9yIGhlcmUsIHNpbmNlIHdlJ3JlIGVmZmVjdGl2ZWx5IHBh
bm5pbmcgY2VudGVyLi4uCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0pIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGUgPSAqc291cmNlTCsrOwotICAgICAgICAgICAg
ICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9h
dFRvWmVybyhnYWluICogc2FtcGxlKTsKLSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25SKysg
PSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBs
ZSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBn
YWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAq
IERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6
Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAgICAgICAgICAgfQorICAgICAgICAg
ICAgLy8gTW9ubyAtPiBzdGVyZW8gCisgICAgICAgICAgICAvLyBGSVhNRTogaWYgKGZyYW1lc1Rv
RGV6aXBwZXIgPT0gMCkgYW5kIERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybygpIGlzIGEgTk9QIChnY2MgdnMuIFZpc3VhbCBTdHVkaW8pIAorICAgICAgICAgICAgLy8g
dGhlbiB3ZSBjYW4gZnVydGhlciBvcHRpbWl6ZSB1c2luZyB2c211bCgpCisgICAgICAgICAgICBQ
Uk9DRVNTX1dJVEhfR0FJTihNT05PMlNURVJFT19OT19TVU0pCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBNb25vCi0gICAgICAgICAgICB3aGlsZSAoZnJhbWVzVG9Qcm9jZXNzLS0p
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBzYW1wbGVMID0gKnNvdXJjZUwrKzsKLSAgICAgICAg
ICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZUwpOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5
IGNoYW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0
b3RhbERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAg
Z2FpbiA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIEZJWE1FOiBpZiAoZnJhbWVzVG9EZXppcHBl
ciA9PSAwKSBhbmQgRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCkg
aXMgYSBOT1AgKGdjYyB2cy4gVmlzdWFsIFN0dWRpbykgCisgICAgICAgICAgICAvLyB0aGVuIHdl
IGNhbiBmdXJ0aGVyIG9wdGltaXplIHVzaW5nIHZzbXVsKCkKKyAgICAgICAgICAgIFBST0NFU1Nf
V0lUSF9HQUlOKE1PTk9fTk9fU1VNKQogICAgICAgICB9CiAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>119341</attachid>
            <date>2011-12-14 17:10:00 -0800</date>
            <delta_ts>2011-12-14 22:14:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-74054-20111215091040.patch</filename>
            <type>text/plain</type>
            <size>9429</size>
            <attacher name="Wei James (wistoch)">james.wei</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMjg0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEyLTE0ICBXZWkgSmFt
ZXMgIDxqYW1lcy53ZWlAaW50ZWwuY29tPgorCisgICAgICAgIGZhc3QgcGF0aCB0byBhY2NlbGVy
YXRlIHByb2Nlc3NpbmcgaW4gQXVkaW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVv
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NDA1NAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIGRl
LXppcHBlcmluZyB3aGVuIHRoZSBnYWluIGhhcyBjb252ZXJnZWQgb24gdGhlIHRhcmdldEdhaW4u
IAorICAgICAgICBJdCBjYW4gZ2V0IGFib3V0IDc1JSBwZXJmb3JtYW5jZSBnYWluIGF0IG1vc3Qg
d2hlbiBhbGwgZnJhbWVzIGRvbid0IG5lZWQKKyAgICAgICAgZGUtemlwcGVyaW5nLgorCisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9CdXM6OnByb2Nlc3NXaXRoR2FpbkZyb21Nb25vU3RlcmVvKToKKwogMjAxMS0xMi0xNCAgSGFq
aW1lIE1vcnJpdGEgIDxtb3JyaXRhQGNocm9taXVtLm9yZz4KIAogICAgICAgICBKU19JTkxJTkUg
YW5kIFdURl9JTkxJTkUgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9CdXMuY3BwCShyZXZpc2lvbiAxMDI4NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0J1cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzMSwxNSArMjMxLDc2IEBAIHZvaWQgQXVkaW9CdXM6OnN1bUZyb20oY29uc3Qg
QXVkaW9CdXMgJnMKICAgICB9CiB9CiAKKy8vIFNsb3dseSBjaGFuZ2UgZ2FpbiB0byBkZXNpcmVk
IGdhaW4uCisjZGVmaW5lIEdBSU5fREVaSVBQRVIgXAorICAgIGdhaW4gKz0gKHRvdGFsRGVzaXJl
ZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsgXAorICAgIGdhaW4gPSBEZW5vcm1hbERpc2Fi
bGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7CisKKy8vIERlLXppcHBlciBmb3Ig
dGhlIGZpcnN0IGZyYW1lc1RvRGV6aXBwZXIgZnJhbWVzIGFuZCBza2lwIGRlLXppcHBlcmluZyBm
b3IgdGhlIHJlbWFpbmluZyBmcmFtZXMKKy8vIGJlY2F1c2UgdGhlIGdhaW4gaXMgY2xvc2UgZW5v
dWdoIHRvIHRoZSB0YXJnZXQgZ2Fpbi4KKyNkZWZpbmUgUFJPQ0VTU19XSVRIX0dBSU4oT1ApIFwK
KyAgICBmb3IgKGsgPSAwOyBrIDwgZnJhbWVzVG9EZXppcHBlcjsgKytrKSB7IFwKKyAgICAgICAg
T1AgXAorICAgICAgICBHQUlOX0RFWklQUEVSIFwKKyAgICB9IFwKKyAgICBnYWluID0gdG90YWxE
ZXNpcmVkR2FpbjsgXAorICAgIGZvciAoOyBrIDwgZnJhbWVzVG9Qcm9jZXNzOyArK2spICBcCisg
ICAgICAgIE9QCisKKyNkZWZpbmUgU1RFUkVPX1NVTSBcCisgICAgeyBcCisgICAgICAgIGZsb2F0
IHN1bUwgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3Rp
bmF0aW9uTCArIGdhaW4gKiAqc291cmNlTCsrKTsgXAorICAgICAgICBmbG9hdCBzdW1SID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBn
YWluICogKnNvdXJjZVIrKyk7IFwKKyAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtTDsgXAor
ICAgICAgICAqZGVzdGluYXRpb25SKysgPSBzdW1SOyBcCisgICAgfQorCisvLyBNb25vIC0+IHN0
ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQorLy8gRklYTUU6IFJlYWxseSB3ZSBzaG91
bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ugd2UncmUg
ZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KKyNkZWZpbmUgTU9OTzJTVEVSRU9fU1VNIFwK
KyAgICB7IFwKKyAgICAgICAgZmxvYXQgc2NhbGVkID0gZ2FpbiAqICpzb3VyY2VMKys7IFwKKyAg
ICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRv
WmVybygqZGVzdGluYXRpb25MICsgc2NhbGVkKTsgXAorICAgICAgICBmbG9hdCBzdW1SID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBz
Y2FsZWQpOyBcCisgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IHN1bUw7IFwKKyAgICAgICAgKmRl
c3RpbmF0aW9uUisrID0gc3VtUjsgXAorICAgIH0KKworI2RlZmluZSBNT05PX1NVTSBcCisgICAg
eyBcCisgICAgICAgIGZsb2F0IHN1bSA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VMKyspOyBcCisgICAgICAg
ICpkZXN0aW5hdGlvbkwrKyA9IHN1bTsgXAorICAgIH0KKworI2RlZmluZSBTVEVSRU9fTk9fU1VN
IFwKKyAgICB7IFwKKyAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKKyAgICAg
ICAgZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7IFwKKyAgICAgICAgKmRlc3RpbmF0aW9uTCsr
ID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1w
bGVMKTsgXAorICAgICAgICAqZGVzdGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZVIpOyBcCisgICAgfQorCisvLyBNb25v
IC0+IHN0ZXJlbyAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQorLy8gRklYTUU6IFJlYWxseSB3
ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2luY2Ug
d2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KKyNkZWZpbmUgTU9OTzJTVEVSRU9f
Tk9fU1VNIFwKKyAgICB7IFwKKyAgICAgICAgZmxvYXQgc2FtcGxlID0gKnNvdXJjZUwrKzsgXAor
ICAgICAgICAqZGVzdGluYXRpb25MKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFs
RmxvYXRUb1plcm8oZ2FpbiAqIHNhbXBsZSk7IFwKKyAgICAgICAgKmRlc3RpbmF0aW9uUisrID0g
RGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUp
OyBcCisgICAgfQorCisjZGVmaW5lIE1PTk9fTk9fU1VNIFwKKyAgICB7IFwKKyAgICAgICAgZmxv
YXQgc2FtcGxlTCA9ICpzb3VyY2VMKys7IFwKKyAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVu
b3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsg
XAorICAgIH0KKwogdm9pZCBBdWRpb0J1czo6cHJvY2Vzc1dpdGhHYWluRnJvbU1vbm9TdGVyZW8o
Y29uc3QgQXVkaW9CdXMgJnNvdXJjZUJ1cywgZG91YmxlKiBsYXN0TWl4R2FpbiwgZG91YmxlIHRh
cmdldEdhaW4sIGJvb2wgc3VtVG9CdXMpCiB7CiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzdWRk
ZW5seSBjaGFuZ2UgdGhlIGdhaW4gZnJvbSBtaXhpbmcgb25lIHRpbWUgc2xpY2UgdG8gdGhlIG5l
eHQsCiAgICAgLy8gc28gd2UgImRlLXppcHBlciIgYnkgc2xvd2x5IGNoYW5naW5nIHRoZSBnYWlu
IGVhY2ggc2FtcGxlLWZyYW1lIHVudGlsIHdlJ3ZlIGFjaGlldmVkIHRoZSB0YXJnZXQgZ2Fpbi4K
IAogICAgIC8vIEZJWE1FOiBvcHRpbWl6ZSB0aGlzIG1ldGhvZCAoU1NFLCBldGMuKQotICAgIC8v
IEZJWE1FOiBOZWVkIGZhc3QgcGF0aCBoZXJlIHdoZW4gZ2FpbiBoYXMgY29udmVyZ2VkIG9uIHRh
cmdldEdhaW4uIEluIHRoaXMgY2FzZSwgZGUtemlwcGVyaW5nIGlzIG5vIGxvbmdlciBuZWVkZWQu
Ci0gICAgLy8gRklYTUU6IE5lZWQgZmFzdCBwYXRoIHdoZW4gdGhpcz09c291cmNlQnVzICYmIGxh
c3RNaXhHYWluPT10YXJnZXRHYWluPT0xLjAgJiYgc3VtVG9CdXM9PWZhbHNlICh0aGlzIGlzIGEg
Tk9QKQotCiAgICAgLy8gRklYTUU6IHRhcmdldEdhaW4gYW5kIGxhc3RNaXhHYWluIHNob3VsZCBi
ZSBjaGFuZ2VkIHRvIGZsb2F0cyBpbnN0ZWFkIG9mIGRvdWJsZXMuCiAgICAgCiAgICAgLy8gVGFr
ZSBtYXN0ZXIgYnVzIGdhaW4gaW50byBhY2NvdW50IGFzIHdlbGwgYXMgdGhlIHRhcmdldEdhaW4u
CkBAIC0yNjIsODIgKzMyMyw0NSBAQCB2b2lkIEF1ZGlvQnVzOjpwcm9jZXNzV2l0aEdhaW5Gcm9t
TW9ub1N0CiAgICAgY29uc3QgZmxvYXQgRGV6aXBwZXJSYXRlID0gMC4wMDVmOwogICAgIGludCBm
cmFtZXNUb1Byb2Nlc3MgPSBsZW5ndGgoKTsKIAorICAgIC8vIElmIHRoZSBnYWluIGlzIHdpdGhp
biBlcHNpbG9uIG9mIHRvdGFsRGVzaXJlZEdhaW4sIHdlIGNhbiBza2lwIGRlemlwcGVyaW5nLiAK
KyAgICAvLyBGSVhNRTogdGhpcyB2YWx1ZSBtYXkgbmVlZCB0d2Vha2luZy4KKyAgICBjb25zdCBm
bG9hdCBlcHNpbG9uID0gMC4wMDFmOyAKKyAgICBmbG9hdCBnYWluRGlmZiA9IGZhYnModG90YWxE
ZXNpcmVkR2FpbiAtIGdhaW4pOworCisgICAgLy8gTnVtYmVyIG9mIGZyYW1lcyB0byBkZS16aXBw
ZXIgYmVmb3JlIHdlIGFyZSBjbG9zZSBlbm91Z2ggdG8gdGhlIHRhcmdldCBnYWluLgorICAgIGlu
dCBmcmFtZXNUb0RlemlwcGVyID0gKGdhaW5EaWZmIDwgZXBzaWxvbikgPyAwIDogZnJhbWVzVG9Q
cm9jZXNzOyAKKworICAgIGludCBrID0gMDsKKwogICAgIGlmIChzdW1Ub0J1cykgewogICAgICAg
ICAvLyBTdW0gdG8gb3VyIGJ1cwogICAgICAgICBpZiAoc291cmNlUiAmJiBkZXN0aW5hdGlvblIp
IHsKICAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJv
Y2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9ybWFsRGlzYWJsZXI6
OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgZ2FpbiAqICpzb3VyY2VM
KyspOwotICAgICAgICAgICAgICAgIGZsb2F0IHN1bVIgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVz
aERlbm9ybWFsRmxvYXRUb1plcm8oKmRlc3RpbmF0aW9uUiArIGdhaW4gKiAqc291cmNlUisrKTsK
LSAgICAgICAgICAgICAgICAqZGVzdGluYXRpb25MKysgPSBzdW1MOwotICAgICAgICAgICAgICAg
ICpkZXN0aW5hdGlvblIrKyA9IHN1bVI7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93bHkgY2hh
bmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0gKHRvdGFs
RGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAgICBnYWlu
ID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4pOwotICAg
ICAgICAgICAgfQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oU1RFUkVPX1NVTSkKICAg
ICAgICAgfSBlbHNlIGlmIChkZXN0aW5hdGlvblIpIHsKLSAgICAgICAgICAgIC8vIE1vbm8gLT4g
c3RlcmVvIChtaXggZXF1YWxseSBpbnRvIEwgYW5kIFIpCi0gICAgICAgICAgICAvLyBGSVhNRTog
UmVhbGx5IHdlIHNob3VsZCBhcHBseSBhbiBlcXVhbC1wb3dlciBzY2FsaW5nIGZhY3RvciBoZXJl
LCBzaW5jZSB3ZSdyZSBlZmZlY3RpdmVseSBwYW5uaW5nIGNlbnRlci4uLgotICAgICAgICAgICAg
d2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2NhbGVk
ID0gZ2FpbiAqICpzb3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3VtTCA9IERlbm9y
bWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybygqZGVzdGluYXRpb25MICsgc2Nh
bGVkKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdW1SID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1
c2hEZW5vcm1hbEZsb2F0VG9aZXJvKCpkZXN0aW5hdGlvblIgKyBzY2FsZWQpOwotCi0gICAgICAg
ICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtTDsKLSAgICAgICAgICAgICAgICAqZGVzdGlu
YXRpb25SKysgPSBzdW1SOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWlu
IHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRH
YWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9y
bWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIC8vIE1vbm8gLT4gc3RlcmVvIAorICAgICAgICAgICAgUFJPQ0VTU19X
SVRIX0dBSU4oTU9OTzJTVEVSRU9fU1VNKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gTW9ubwotICAgICAgICAgICAgd2hpbGUgKGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgc3VtID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0
VG9aZXJvKCpkZXN0aW5hdGlvbkwgKyBnYWluICogKnNvdXJjZUwrKyk7Ci0gICAgICAgICAgICAg
ICAgKmRlc3RpbmF0aW9uTCsrID0gc3VtOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5IGNo
YW5nZSBnYWluIHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0b3Rh
bERlc2lyZWRHYWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAgZ2Fp
biA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKLSAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKE1PTk9fU1VNKQogICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gUHJvY2VzcyBkaXJlY3RseSAod2l0aG91
dCBzdW1taW5nKSB0byBvdXIgYnVzCisgICAgICAgIC8vIElmIGl0IGlzIGZyb20gdGhlIHNhbWUg
YnVzIGFuZCBubyBuZWVkIHRvIGNoYW5nZSBnYWluLCBqdXN0IHJldHVybgorICAgICAgICBpZiAo
dGhpcyA9PSAmc291cmNlQnVzICYmICpsYXN0TWl4R2FpbiA9PSB0YXJnZXRHYWluICYmIHRhcmdl
dEdhaW4gPT0gMS4wKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEZJWE1FOiBp
ZiAoZnJhbWVzVG9EZXppcHBlciA9PSAwKSBhbmQgRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5v
cm1hbEZsb2F0VG9aZXJvKCkgaXMgYSBOT1AgKGdjYyB2cy4gVmlzdWFsIFN0dWRpbykgCisgICAg
ICAgIC8vIHRoZW4gd2UgY2FuIGZ1cnRoZXIgb3B0aW1pemUgdGhlIFBST0NFU1NfV0lUSF9HQUlO
IGNvZGVwYXRocyBiZWxvdyB1c2luZyB2c211bCgpLgogICAgICAgICBpZiAoc291cmNlUiAmJiBk
ZXN0aW5hdGlvblIpIHsKICAgICAgICAgICAgIC8vIFN0ZXJlbwotICAgICAgICAgICAgd2hpbGUg
KGZyYW1lc1RvUHJvY2Vzcy0tKSB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlTCA9ICpz
b3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc2FtcGxlUiA9ICpzb3VyY2VSKys7Ci0g
ICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hE
ZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGVMKTsKLSAgICAgICAgICAgICAgICAqZGVz
dGluYXRpb25SKysgPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8o
Z2FpbiAqIHNhbXBsZVIpOwotCi0gICAgICAgICAgICAgICAgLy8gU2xvd2x5IGNoYW5nZSBnYWlu
IHRvIGRlc2lyZWQgZ2Fpbi4KLSAgICAgICAgICAgICAgICBnYWluICs9ICh0b3RhbERlc2lyZWRH
YWluIC0gZ2FpbikgKiBEZXppcHBlclJhdGU7Ci0gICAgICAgICAgICAgICAgZ2FpbiA9IERlbm9y
bWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxGbG9hdFRvWmVybyhnYWluKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFBST0NFU1NfV0lUSF9HQUlOKFNURVJFT19OT19TVU0pCiAgICAgICAg
IH0gZWxzZSBpZiAoZGVzdGluYXRpb25SKSB7Ci0gICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJl
byAobWl4IGVxdWFsbHkgaW50byBMIGFuZCBSKQotICAgICAgICAgICAgLy8gRklYTUU6IFJlYWxs
eSB3ZSBzaG91bGQgYXBwbHkgYW4gZXF1YWwtcG93ZXIgc2NhbGluZyBmYWN0b3IgaGVyZSwgc2lu
Y2Ugd2UncmUgZWZmZWN0aXZlbHkgcGFubmluZyBjZW50ZXIuLi4KLSAgICAgICAgICAgIHdoaWxl
IChmcmFtZXNUb1Byb2Nlc3MtLSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZSA9ICpz
b3VyY2VMKys7Ci0gICAgICAgICAgICAgICAgKmRlc3RpbmF0aW9uTCsrID0gRGVub3JtYWxEaXNh
Ymxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4gKiBzYW1wbGUpOwotICAgICAgICAg
ICAgICAgICpkZXN0aW5hdGlvblIrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3JtYWxG
bG9hdFRvWmVybyhnYWluICogc2FtcGxlKTsKLQotICAgICAgICAgICAgICAgIC8vIFNsb3dseSBj
aGFuZ2UgZ2FpbiB0byBkZXNpcmVkIGdhaW4uCi0gICAgICAgICAgICAgICAgZ2FpbiArPSAodG90
YWxEZXNpcmVkR2FpbiAtIGdhaW4pICogRGV6aXBwZXJSYXRlOwotICAgICAgICAgICAgICAgIGdh
aW4gPSBEZW5vcm1hbERpc2FibGVyOjpmbHVzaERlbm9ybWFsRmxvYXRUb1plcm8oZ2Fpbik7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBNb25vIC0+IHN0ZXJlbyAKKyAgICAgICAgICAg
IFBST0NFU1NfV0lUSF9HQUlOKE1PTk8yU1RFUkVPX05PX1NVTSkKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIE1vbm8KLSAgICAgICAgICAgIHdoaWxlIChmcmFtZXNUb1Byb2Nlc3Mt
LSkgewotICAgICAgICAgICAgICAgIGZsb2F0IHNhbXBsZUwgPSAqc291cmNlTCsrOwotICAgICAg
ICAgICAgICAgICpkZXN0aW5hdGlvbkwrKyA9IERlbm9ybWFsRGlzYWJsZXI6OmZsdXNoRGVub3Jt
YWxGbG9hdFRvWmVybyhnYWluICogc2FtcGxlTCk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTbG93
bHkgY2hhbmdlIGdhaW4gdG8gZGVzaXJlZCBnYWluLgotICAgICAgICAgICAgICAgIGdhaW4gKz0g
KHRvdGFsRGVzaXJlZEdhaW4gLSBnYWluKSAqIERlemlwcGVyUmF0ZTsKLSAgICAgICAgICAgICAg
ICBnYWluID0gRGVub3JtYWxEaXNhYmxlcjo6Zmx1c2hEZW5vcm1hbEZsb2F0VG9aZXJvKGdhaW4p
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUFJPQ0VTU19XSVRIX0dBSU4oTU9OT19OT19T
VU0pCiAgICAgICAgIH0KICAgICB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>