<?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>71055</bug_id>
          
          <creation_ts>2011-10-27 12:50:27 -0700</creation_ts>
          <short_desc>Add methods to compute magnitude and phase response for biquads</short_desc>
          <delta_ts>2022-02-28 00:05:38 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Raymond Toy">rtoy</reporter>
          <assigned_to name="Raymond Toy">rtoy</assigned_to>
          <cc>abarth</cc>
    
    <cc>crogers</cc>
    
    <cc>kbr</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>491836</commentid>
    <comment_count>0</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-10-27 12:50:27 -0700</bug_when>
    <thetext>Add methods to compute magnitude and phase response for biquads</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491844</commentid>
    <comment_count>1</comment_count>
      <attachid>112734</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-10-27 12:57:47 -0700</bug_when>
    <thetext>Created attachment 112734
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491849</commentid>
    <comment_count>2</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-10-27 13:01:13 -0700</bug_when>
    <thetext>Add methods to compute the magnitude and phase response of a biquad filter.

If you apply the patch, you can test out the results at

http://www.corp.google.com/~rtoy/mag-phase.html

This produces a plot of the magnitude and phase response for any of the possible biquad filters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494228</commentid>
    <comment_count>3</comment_count>
      <attachid>113242</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-01 15:43:22 -0700</bug_when>
    <thetext>Created attachment 113242
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>494238</commentid>
    <comment_count>4</comment_count>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-01 15:48:59 -0700</bug_when>
    <thetext>We are changing the API in this patch.  The previous version with magnitude and phase functions at one frequency has problems if the filter is changing.  Each call to magnitude() and phase() will get the response for a *different* filter.

The API is changed to getFrequencyResponse which takes an array of frequencies where the response is desired.  The magnitude and phase at these frequencies is returned.  This makes the result a consistent snapshot of the filter response.  

Also, if the filter is changing via dezippering, the snapshot is taken at the final values of the filter, not at the intermediate dezippered value.  This might need further consideration?  Perhaps we really do want the intermediate response?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495756</commentid>
    <comment_count>5</comment_count>
      <attachid>113242</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-03 13:32:59 -0700</bug_when>
    <thetext>Comment on attachment 113242
Patch

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

&gt; Source/WebCore/platform/audio/Biquad.cpp:395
&gt; +

To speed things up, the computation should not do complex division with z.  It should multiply by 1/z = exp(-j*pi*freq).

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:115
&gt; +        frequency[k] = frequencyHz[k] / nyquist;

Maybe add comment that we don&apos;t need to worry if the user passes in frequencies that are negative or above Nyquist?  (This ought to be handled correctly when computing the response from computing exp(j*pi*f).)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495801</commentid>
    <comment_count>6</comment_count>
      <attachid>113242</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-03 14:52:38 -0700</bug_when>
    <thetext>Comment on attachment 113242
Patch

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

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:127
&gt; +    maybeUpdateCoefficients(biquad, true);

This doesn&apos;t quite work.  If we&apos;re asked to compute the response of a filter again, without changing the filter, the coefficients are not dirty and biquad is not initialized to the desired filter.  We need to be able to force the coefficients to be updated in this case.  Maybe add a forceUpdate parameter to maybeUpdateCoefficients to force the update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495843</commentid>
    <comment_count>7</comment_count>
      <attachid>113242</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-11-03 16:06:34 -0700</bug_when>
    <thetext>Comment on attachment 113242
Patch

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

Ray, thanks for doing the work for this patch.  It looks pretty good, but I have a nice simplification that we should use.  Please see rest of comments for details.

&gt; Source/WebCore/platform/audio/AudioDSPKernel.h:64
&gt; +

Please remove getFrequencyResponse() from the abstract base class AudioDSPKernel.  It&apos;s not needed there, and doesn&apos;t really make sense generally.

&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:127
&gt; +

Please remove getFrequencyResponse() from the abstract base class AudioDSPKernel.  It&apos;s not needed there, and doesn&apos;t really make sense generally.

&gt; Source/WebCore/platform/audio/Biquad.cpp:382
&gt; +    // frequency from -0.5 to 0.5.

normalized frequency should be from 0 -&gt; 1

Please change comment

&gt; Source/WebCore/platform/audio/Biquad.cpp:400
&gt; +    // atomically copy all of the coefficients.

This WARNING should no longer be needed if you make the other changes I suggest below.  For future reference, we would use a &quot;FIXME&quot; here instead of &quot;WARNING&quot;

Please remove warning comment.

&gt; Source/WebCore/platform/audio/Biquad.cpp:410
&gt; +        Complex top = b0 + (b1 + b2 / z) / z;

nit: I&apos;d change the name of &quot;top&quot; to &quot;numerator&quot; and &quot;bottom&quot; to &quot;denominator&quot;

&gt; Source/WebCore/platform/audio/Biquad.h:75
&gt; +    // The phase response is on radians.

&quot;on&quot; -&gt; &quot;in&quot;

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:32
&gt; +#include &lt;vector&gt;

WebKit style is to not use std::vector, but instead a special Vector class.

please include as follows:
#include &lt;wtf/Vector.h&gt;

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:36
&gt; +void BiquadDSPKernel::maybeUpdateCoefficients(Biquad&amp; biquad, bool finalValue)

I&apos;d highly recommend changing the name &quot;maybeUpdateCoefficients&quot; -&gt; &quot;updateCoefficientsIfNecessary&quot;

I have a way for simplifying the logic in BiquadProcessor (in comments below) so that you&apos;ll no longer need the first &quot;Biquad&amp; biquad&quot; parameter.
Please remove this first parameter and use m_biquad (as it was before)

Please change the name of &quot;finalValue&quot; to &quot;useSmoothing&quot;  (and then its bool value will be the opposite), since I think &quot;useSmoothing&quot; is more descriptive

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:109
&gt; +{

You&apos;ll need to ASSERT that the three pointer values are not NULL and return early if any of them are:

bool isGood = nFrequencies &gt; 0 &amp;&amp; frequencyHz &amp;&amp; magResponse &amp;&amp; phaseResponse;
ASSERT(isGood);
if (!isGood)
    return;

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:110
&gt; +    std::vector&lt;float&gt; frequency(nFrequencies);

Because of WebKit style, this will have to change to:

Vector&lt;float&gt;

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:113
&gt; +

Please add comment describing that you&apos;re taking frequencies in Hertz and normalizing them to the range 0 -&gt; 1  (corresponding to 0 -&gt; nyquist)

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:115
&gt;&gt; +        frequency[k] = frequencyHz[k] / nyquist;
&gt; 
&gt; Maybe add comment that we don&apos;t need to worry if the user passes in frequencies that are negative or above Nyquist?  (This ought to be handled correctly when computing the response from computing exp(j*pi*f).)

You can add the comment if you like - seems fine also without that comment.

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:117
&gt; +    maybeUpdateCoefficients(m_biquad, false);

This line should is unnecessary and should be removed

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:125
&gt; +    Biquad biquad;

There&apos;s a simplification for BiquadProcessor (see comments below) which will make this temporary Biquad object unnecessary - please remove.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:127
&gt;&gt; +    maybeUpdateCoefficients(biquad, true);
&gt; 
&gt; This doesn&apos;t quite work.  If we&apos;re asked to compute the response of a filter again, without changing the filter, the coefficients are not dirty and biquad is not initialized to the desired filter.  We need to be able to force the coefficients to be updated in this case.  Maybe add a forceUpdate parameter to maybeUpdateCoefficients to force the update.

Using the simplification in BiquadProcessor, this should simply be:

updateCoefficientsIfNecessary(false);    // false means no smoothing - just get the actual parameter value

&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:57
&gt; +    void maybeUpdateCoefficients(Biquad&amp;, bool finalValue);

Please see name change and other comments in the .cpp file

&gt; Source/WebCore/webaudio/BiquadFilterNode.cpp:60
&gt; +{

You&apos;ll need to do sanity checking here and return early if things are bad:

if (!frequencyHz || !magResponse || !phaseResponse)
    return;

&gt; Source/WebCore/webaudio/BiquadFilterNode.cpp:63
&gt; +    

probably worth checking that (n &gt; 0) and return early if not

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:96
&gt; +    // parameters are not changing.

These comment changes look to be unnecessary.  WebKit style is to not separate lines like this, but to have longer lines (unlike chromium style)

Please revert unrelated comment changes

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:104
&gt; +        // for subsequent changes.

Please revert unrelated comment changes.

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:113
&gt; +        // dirty.

Please revert unrelated comment changes.

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:151
&gt; +        initialize();

Checking for initialization will no longer be necessary with simplification below.

Please remove comment and check

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:153
&gt; +    checkForDirtyCoefficients();

checkForDirtyCoefficients() should not be called here because it can interfere with audio thread processing (and is not necessary with simplification below since &quot;responseKernel&quot; will now
directly get the *actual* parameter value and not worry about smoothing at all)

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:165
&gt; +        }

A simplification is to replace lines 155 - 165 with the following:


// Compute the frequency response on a separate temporary kernel to avoid interfering with the processing running in the audio thread on the main kernels.
OwnPtr&lt;BiquadDSPKernel&gt; responseKernel = adoptPtr(new BiquadDSPKernel(this));

responseKernel-&gt;getFrequencyResponse(nFrequencies, frequencyHz, magResponse, phaseResponse);



This simplification goes hand-in-hand with my other comments in the BiquadDSPKernel files

&gt; Source/WebCore/webaudio/BiquadProcessor.h:65
&gt; +    virtual void getFrequencyResponse(int nFrequencies, float* frequencyHz,

method should not be virtual

&gt; Source/WebCore/webaudio/BiquadProcessor.h:66
&gt; +                                      float* magResponse, float* phaseResponse);

strange line breaking - I&apos;d recommend either putting all arguments on the same line (preferred) or split each argument onto a separate line

&gt; Source/WebCore/webaudio/BiquadProcessor.h:68
&gt; +    virtual void checkForDirtyCoefficients();

method should not be virtual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495847</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-11-03 16:14:55 -0700</bug_when>
    <thetext>Sorry, one last detail I got slightly wrong.  I think you&apos;ll need to add an extra param to updateCoefficientsIfNecessary():

BiquadDSPKernel::updateCoefficientsIfNecessary(bool useSmoothing, bool forceUpdate);

The &quot;forceUpdate&quot; param would be set to &quot;true&quot; inside BiquadDSPKernel::getFrequencyResponse()

(but would be &quot;false&quot; otherwise)

Hopefully the param name makes sense and you see where I&apos;m headed...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495930</commentid>
    <comment_count>9</comment_count>
      <attachid>113591</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-03 17:36:13 -0700</bug_when>
    <thetext>Created attachment 113591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495935</commentid>
    <comment_count>10</comment_count>
      <attachid>113242</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-03 17:38:44 -0700</bug_when>
    <thetext>Comment on attachment 113242
Patch

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

&gt;&gt; Source/WebCore/platform/audio/AudioDSPKernel.h:64
&gt;&gt; +
&gt; 
&gt; Please remove getFrequencyResponse() from the abstract base class AudioDSPKernel.  It&apos;s not needed there, and doesn&apos;t really make sense generally.

Done.

&gt;&gt; Source/WebCore/platform/audio/AudioDSPKernelProcessor.cpp:127
&gt;&gt; +
&gt; 
&gt; Please remove getFrequencyResponse() from the abstract base class AudioDSPKernel.  It&apos;s not needed there, and doesn&apos;t really make sense generally.

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:382
&gt;&gt; +    // frequency from -0.5 to 0.5.
&gt; 
&gt; normalized frequency should be from 0 -&gt; 1
&gt; 
&gt; Please change comment

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:395
&gt;&gt; +
&gt; 
&gt; To speed things up, the computation should not do complex division with z.  It should multiply by 1/z = exp(-j*pi*freq).

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:400
&gt;&gt; +    // atomically copy all of the coefficients.
&gt; 
&gt; This WARNING should no longer be needed if you make the other changes I suggest below.  For future reference, we would use a &quot;FIXME&quot; here instead of &quot;WARNING&quot;
&gt; 
&gt; Please remove warning comment.

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.h:75
&gt;&gt; +    // The phase response is on radians.
&gt; 
&gt; &quot;on&quot; -&gt; &quot;in&quot;

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:32
&gt;&gt; +#include &lt;vector&gt;
&gt; 
&gt; WebKit style is to not use std::vector, but instead a special Vector class.
&gt; 
&gt; please include as follows:
&gt; #include &lt;wtf/Vector.h&gt;

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:36
&gt;&gt; +void BiquadDSPKernel::maybeUpdateCoefficients(Biquad&amp; biquad, bool finalValue)
&gt; 
&gt; I&apos;d highly recommend changing the name &quot;maybeUpdateCoefficients&quot; -&gt; &quot;updateCoefficientsIfNecessary&quot;
&gt; 
&gt; I have a way for simplifying the logic in BiquadProcessor (in comments below) so that you&apos;ll no longer need the first &quot;Biquad&amp; biquad&quot; parameter.
&gt; Please remove this first parameter and use m_biquad (as it was before)
&gt; 
&gt; Please change the name of &quot;finalValue&quot; to &quot;useSmoothing&quot;  (and then its bool value will be the opposite), since I think &quot;useSmoothing&quot; is more descriptive

Done.  maybeUpdateCoefficients is less typing. :-)

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:109
&gt;&gt; +{
&gt; 
&gt; You&apos;ll need to ASSERT that the three pointer values are not NULL and return early if any of them are:
&gt; 
&gt; bool isGood = nFrequencies &gt; 0 &amp;&amp; frequencyHz &amp;&amp; magResponse &amp;&amp; phaseResponse;
&gt; ASSERT(isGood);
&gt; if (!isGood)
&gt;     return;

Done.   But should this be done at a higher layer?  By the time we&apos;re here, we don&apos;t even know if there is enough space in magResponse and phaseResponse to hold all nFrequencies values.  Or even if frequencyHz has nFrequencies values.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:110
&gt;&gt; +    std::vector&lt;float&gt; frequency(nFrequencies);
&gt; 
&gt; Because of WebKit style, this will have to change to:
&gt; 
&gt; Vector&lt;float&gt;

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:113
&gt;&gt; +
&gt; 
&gt; Please add comment describing that you&apos;re taking frequencies in Hertz and normalizing them to the range 0 -&gt; 1  (corresponding to 0 -&gt; nyquist)

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:125
&gt;&gt; +    Biquad biquad;
&gt; 
&gt; There&apos;s a simplification for BiquadProcessor (see comments below) which will make this temporary Biquad object unnecessary - please remove.

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:57
&gt;&gt; +    void maybeUpdateCoefficients(Biquad&amp;, bool finalValue);
&gt; 
&gt; Please see name change and other comments in the .cpp file

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadFilterNode.cpp:60
&gt;&gt; +{
&gt; 
&gt; You&apos;ll need to do sanity checking here and return early if things are bad:
&gt; 
&gt; if (!frequencyHz || !magResponse || !phaseResponse)
&gt;     return;

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:96
&gt;&gt; +    // parameters are not changing.
&gt; 
&gt; These comment changes look to be unnecessary.  WebKit style is to not separate lines like this, but to have longer lines (unlike chromium style)
&gt; 
&gt; Please revert unrelated comment changes

Done.  If I hadn&apos;t made a new function, I would have left them alone.  There&apos;s a reason why newspapers are printed in columns instead of 12-15 inch lines. :-)

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:104
&gt;&gt; +        // for subsequent changes.
&gt; 
&gt; Please revert unrelated comment changes.

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:151
&gt;&gt; +        initialize();
&gt; 
&gt; Checking for initialization will no longer be necessary with simplification below.
&gt; 
&gt; Please remove comment and check

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:153
&gt;&gt; +    checkForDirtyCoefficients();
&gt; 
&gt; checkForDirtyCoefficients() should not be called here because it can interfere with audio thread processing (and is not necessary with simplification below since &quot;responseKernel&quot; will now
&gt; directly get the *actual* parameter value and not worry about smoothing at all)

Removed.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:165
&gt;&gt; +        }
&gt; 
&gt; A simplification is to replace lines 155 - 165 with the following:
&gt; 
&gt; 
&gt; // Compute the frequency response on a separate temporary kernel to avoid interfering with the processing running in the audio thread on the main kernels.
&gt; OwnPtr&lt;BiquadDSPKernel&gt; responseKernel = adoptPtr(new BiquadDSPKernel(this));
&gt; 
&gt; responseKernel-&gt;getFrequencyResponse(nFrequencies, frequencyHz, magResponse, phaseResponse);
&gt; 
&gt; 
&gt; 
&gt; This simplification goes hand-in-hand with my other comments in the BiquadDSPKernel files

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.h:65
&gt;&gt; +    virtual void getFrequencyResponse(int nFrequencies, float* frequencyHz,
&gt; 
&gt; method should not be virtual

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.h:68
&gt;&gt; +    virtual void checkForDirtyCoefficients();
&gt; 
&gt; method should not be virtual

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>495993</commentid>
    <comment_count>11</comment_count>
      <attachid>113591</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-11-03 18:59:35 -0700</bug_when>
    <thetext>Comment on attachment 113591
Patch

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

Looking good - just some nit comments at this point.  I&apos;m assuming you&apos;ve rebuilt and verified that the latest changes still work?

If you&apos;ve verified it still works, then looks good after nits are addressed -- passing over to Ken for final review...

&gt; Source/WebCore/platform/audio/Biquad.cpp:387
&gt; +    // Y(z) = (b0 + b1*z^(-1) + b2*z^(-2))/(1 + a1*z^(-1) + a2*z^(-2))

nit: I think H(z) is more correct here than Y(z) since we&apos;re talking about the system response

&gt; Source/WebCore/platform/audio/Biquad.cpp:398
&gt; +    // from underneath us.

This comment is a little outdated since the member variables will no longer change (since this is now a separate temporary Biquad object).

Instead, I would just say that we&apos;re making local copies as an optimization

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:109
&gt; +{

small nit: Maybe best to be consistent and either put all params on same line or on all separate lines

&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:130
&gt; +    m_biquad.getFrequencyResponse(nFrequencies, &amp;frequency[0], magResponse, phaseResponse);

nit: the 2nd argument is better as &quot;frequency.data()&quot;

&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:52
&gt; +                                      float* magResponse, float* phaseResponse);

nit: Since this method is similar in several classes, we should be consistent in the formatting of the arguments (pick one single way and go with that)

&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:57
&gt; +    void updateCoefficientsIfNecessary(bool useSmoothing, bool forceUpdate);

Probably good to add a comment here describing the parameters in a little more detail.  For example, saying that the actual
audio rendering smooths (de-zippers) the parameter changes to avoid sudden changes/glitches, while the coefficients need
to be updated immediately to exact values when asking for the frequency response curve.

&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:141
&gt; +                                           float* phaseResponse)

nit: be consistent in formatting with other versions of this method</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496023</commentid>
    <comment_count>12</comment_count>
      <attachid>113591</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-03 20:35:20 -0700</bug_when>
    <thetext>Comment on attachment 113591
Patch

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

Code looks good to me overall. r- for const issues.

&gt; Source/WebCore/platform/audio/Biquad.h:77
&gt; +                              float* frequency,

Because frequency is only an input it should be const float*. This will improve understandability of the code. This change is needed in a few places.

&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:51
&gt; +    virtual void getFrequencyResponse(int nFrequencies, float* frequencyHz,

frequencyHz should be const float* per comment in Biquad.h. Also, does this really need to be virtual?

&gt; Source/WebCore/webaudio/BiquadProcessor.h:65
&gt; +    void getFrequencyResponse(int nFrequencies, float* frequencyHz, float* magResponse, float* phaseResponse);

frequencyHz should be const float*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496222</commentid>
    <comment_count>13</comment_count>
      <attachid>113591</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-04 09:22:54 -0700</bug_when>
    <thetext>Comment on attachment 113591
Patch

Changes made.  Update patch will be uploaded right away.

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

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:387
&gt;&gt; +    // Y(z) = (b0 + b1*z^(-1) + b2*z^(-2))/(1 + a1*z^(-1) + a2*z^(-2))
&gt; 
&gt; nit: I think H(z) is more correct here than Y(z) since we&apos;re talking about the system response

Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.cpp:398
&gt;&gt; +    // from underneath us.
&gt; 
&gt; This comment is a little outdated since the member variables will no longer change (since this is now a separate temporary Biquad object).
&gt; 
&gt; Instead, I would just say that we&apos;re making local copies as an optimization

I meant to remove that but forgot.  Done.

&gt;&gt; Source/WebCore/platform/audio/Biquad.h:77
&gt;&gt; +                              float* frequency,
&gt; 
&gt; Because frequency is only an input it should be const float*. This will improve understandability of the code. This change is needed in a few places.

Agreed.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:109
&gt;&gt; +{
&gt; 
&gt; small nit: Maybe best to be consistent and either put all params on same line or on all separate lines

I separated them this way because 2 are inputs and 2 are outputs.  Putting them in separate lines, everywhere.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.cpp:130
&gt;&gt; +    m_biquad.getFrequencyResponse(nFrequencies, &amp;frequency[0], magResponse, phaseResponse);
&gt; 
&gt; nit: the 2nd argument is better as &quot;frequency.data()&quot;

Done.  (Original std::vector version had this, but Mac OS X didn&apos;t support that.)

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:51
&gt;&gt; +    virtual void getFrequencyResponse(int nFrequencies, float* frequencyHz,
&gt; 
&gt; frequencyHz should be const float* per comment in Biquad.h. Also, does this really need to be virtual?

Changed to const float*.

Probably doesn&apos;t need to be virtual.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:52
&gt;&gt; +                                      float* magResponse, float* phaseResponse);
&gt; 
&gt; nit: Since this method is similar in several classes, we should be consistent in the formatting of the arguments (pick one single way and go with that)

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadDSPKernel.h:57
&gt;&gt; +    void updateCoefficientsIfNecessary(bool useSmoothing, bool forceUpdate);
&gt; 
&gt; Probably good to add a comment here describing the parameters in a little more detail.  For example, saying that the actual
&gt; audio rendering smooths (de-zippers) the parameter changes to avoid sudden changes/glitches, while the coefficients need
&gt; to be updated immediately to exact values when asking for the frequency response curve.

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.cpp:141
&gt;&gt; +                                           float* phaseResponse)
&gt; 
&gt; nit: be consistent in formatting with other versions of this method

Done.

&gt;&gt; Source/WebCore/webaudio/BiquadProcessor.h:65
&gt;&gt; +    void getFrequencyResponse(int nFrequencies, float* frequencyHz, float* magResponse, float* phaseResponse);
&gt; 
&gt; frequencyHz should be const float*.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496223</commentid>
    <comment_count>14</comment_count>
      <attachid>113665</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-04 09:28:00 -0700</bug_when>
    <thetext>Created attachment 113665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496287</commentid>
    <comment_count>15</comment_count>
      <attachid>113665</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-11-04 10:42:48 -0700</bug_when>
    <thetext>Comment on attachment 113665
Patch

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

&gt; Source/WebCore/webaudio/BiquadFilterNode.h:63
&gt; +    virtual void getFrequencyResponse(const Float32Array* frequencyHz,

&apos;virtual&apos; not needed here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496292</commentid>
    <comment_count>16</comment_count>
      <attachid>113665</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-04 10:48:37 -0700</bug_when>
    <thetext>Comment on attachment 113665
Patch

Looks good to me modulo Chris&apos;s point about an unnecessary virtual. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496458</commentid>
    <comment_count>17</comment_count>
      <attachid>113710</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-04 14:11:37 -0700</bug_when>
    <thetext>Created attachment 113710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496460</commentid>
    <comment_count>18</comment_count>
      <attachid>113665</attachid>
    <who name="Raymond Toy">rtoy</who>
    <bug_when>2011-11-04 14:13:30 -0700</bug_when>
    <thetext>Comment on attachment 113665
Patch

Last comment fixed as requested.

Thanks for your time for the review!


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

&gt;&gt; Source/WebCore/webaudio/BiquadFilterNode.h:63
&gt;&gt; +    virtual void getFrequencyResponse(const Float32Array* frequencyHz,
&gt; 
&gt; &apos;virtual&apos; not needed here

Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496536</commentid>
    <comment_count>19</comment_count>
      <attachid>113710</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-11-04 16:22:25 -0700</bug_when>
    <thetext>Comment on attachment 113710
Patch

Looks fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496587</commentid>
    <comment_count>20</comment_count>
      <attachid>113710</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 17:34:41 -0700</bug_when>
    <thetext>Comment on attachment 113710
Patch

Clearing flags on attachment: 113710

Committed r99337: &lt;http://trac.webkit.org/changeset/99337&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>496588</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-04 17:34:46 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112734</attachid>
            <date>2011-10-27 12:57:47 -0700</date>
            <delta_ts>2011-11-01 15:43:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71055-20111027125746.patch</filename>
            <type>text/plain</type>
            <size>16092</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1ODEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjMGQyYTI3NTQ4OTQyZWRh
NWM2NzMzZjA2OWEzYzNlOTBhNDkxY2MxLi45MzQyYTEzMzY2MzRhNDAxNDhkZDliMzU5OGRjZDk4
M2ViM2RiNTRlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTkgQEAKKzIwMTEtMTAtMjcgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIGNvbXB1
dGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBmb3IgYmlxdWFkcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVk
aW9EU1BLZXJuZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsOjptYWduaXR1
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EU1BLZXJuZWw6OnBoYXNlKToKKyAgICAgICAg
RGVmaW5lIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgbWFnbml0dWRlIGFuZCBwaGFzZSAocmV0
dXJuaW5nCisgICAgICAgIDApLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OmNvbXBsZXhGaWx0ZXJSZXNwb25zZSk6CisgICAg
ICAgIE1haW4gcm91dGluZSB0byBjb21wdXRlIHRoZSAoY29tcGxleCkgZmlsdGVyIHJlc3BvbnNl
IGF0IGEgZ2l2ZW4KKyAgICAgICAgZnJlcXVlbmN5LgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFk
OjptYWduaXR1ZGUpOgorICAgICAgICBDb21wdXRlIHRoZSBtYWduaXR1ZGUgZnJvbSBjb21wbGV4
RmlsdGVyUmVzcG9uc2UuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWQ6OnBoYXNlKToKKyAgICAg
ICAgQ29tcHV0ZSB0aGUgcGhhc2UgZnJvbSBjb21wbGV4RmlsdGVyUmVzcG9uc2UuCisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmg6CisgICAgICAgIERlY2xhcmUgbmV3IGZ1bmN0aW9u
cy4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkRFNQS2VybmVsOjptYXliZVVwZGF0ZUNvZWZmaWNpZW50cyk6CisgICAgICAg
IFJlZmFjdG9yZWQgY29tbW9uIGNvZGUgdG8gbWF5YmVVcGRhdGVDb2VmZmljaWVudHMuCisgICAg
ICAgIChXZWJDb3JlOjpCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICBVc2UgbWF5
YmVVcGRhdGVDb2VmZmljaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BLZXJuZWw6
Om1hZ25pdHVkZSk6CisgICAgICAgIENvbXB1dGVzIG1hZ25pdHVkZSByZXNwb25zZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5lbDo6cGhhc2UpOgorICAgICAgICBDb21wdXRlcyBw
aGFzZSByZXNwb25zZS4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaDoKKyAg
ICAgICAgRGVjbGFyZSBuZXcgZnVuY3Rpb25zLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZp
bHRlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6bWFnbml0
dWRlKToKKyAgICAgICAgQ29tcHV0ZXMgbWFnbml0dWRlIHJlc3BvbnNlLgorICAgICAgICAoV2Vi
Q29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6cGhhc2UpOgorICAgICAgICBDb21wdXRlcyBwaGFzZSBy
ZXNwb25zZS4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmg6CisgICAgICAg
IERlY2xhcmUgbmV3IGZ1bmN0aW9ucy4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJO
b2RlLmlkbDoKKyAgICAgICAgRGVmaW5lIG5ldyBKYXZhc2NyaXB0IGZ1bmN0aW9ucyB0byBpbnRl
cmZhY2UgdG8gQysrCisgICAgICAgIGltcGxlbWVudGF0aW9uLiAKKyAgICAgICAgKiB3ZWJhdWRp
by9CaXF1YWRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29y
OjpjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKToKKyAgICAgICAgRmFjdG9yZWQgb3V0IGNvbW1v
biBjb2RlCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MpOgorICAg
ICAgICBVc2UgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkJp
cXVhZFByb2Nlc3Nvcjo6bWFnbml0dWRlKToKKyAgICAgICAgQ29tcHV0ZXMgbWFnbml0dWRlIHJl
c3BvbnNlLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkUHJvY2Vzc29yOjpwaGFzZSk6CisgICAg
ICAgIENvbXB1dGVzIHBoYXNlIHJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5oOgorICAgICAgICBEZWNsYXJlIG5ldyBmdW5jdGlvbnMuCisKIDIwMTEtMTAtMjcg
IERhbmllbCBDaGVuZyAgPGRjaGVuZ0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQ2xlYW4gdXAg
TWljcm9EYXRhSXRlbVZhbHVlIHRvIHVzZSBjb25zdCBTdHJpbmcmIGluc3RlYWQgb2YgU3RyaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5l
bC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRl
eCBmMzNjOWVkZTRkM2MwYTEzNjM2MzJlNWMwODRlZDBlYmRhYjUyMmMwLi45OGMzZWVhMzI4MDQ4
ZTgzOTg5N2JjNTNmMjNjZDE3NjVmNGZiMWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsLmgKQEAgLTU3LDYgKzU3LDEzIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGlu
YXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKSA9IDA7CiAKKyAgICAvLyBNYWduaXR1ZGUgb2YgdGhlIGZpbHRlciByZXNwb25zZSBhdCBh
IGdpdmVuIGZyZXF1ZW5jeSAoaW4gSHopLgorICAgIHZpcnR1YWwgZG91YmxlIG1hZ25pdHVkZShk
b3VibGUgZnJlcXVlbmN5SHopIHsgcmV0dXJuIDAuMDsgfQorCisgICAgLy8gUGhhc2UgKGluIHJh
ZGlhbnMpIG9mIHRoZSBmaWx0ZXIgcmVzcG9uc2UgYXQgYSBnaXZlbiBmcmVxdWVuY3kKKyAgICAv
LyAoaW4gSHopLgorICAgIHZpcnR1YWwgZG91YmxlIHBoYXNlKGRvdWJsZSBmcmVxdWVuY3lIeikg
eyByZXR1cm4gMC4wOyB9CisgICAgCiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2FtcGxlUmF0ZTsgfQogICAgIGRvdWJsZSBueXF1aXN0KCkgY29uc3QgeyByZXR1cm4g
MC41ICogc2FtcGxlUmF0ZSgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL0JpcXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1
YWQuY3BwCmluZGV4IDM1NjgxMDI3NWY2MzhhNjg5MDQzNjY4NGIwMmZlOGNjZjQwNTJhN2MuLjEy
YWY5ZWNkZTdmMzQ5ZTAwNGViOTI2Y2M3N2U0MzM3ZjA0YjNlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtMzc1LDYgKzM3NSw0MyBAQCB2b2lkIEJpcXVh
ZDo6c2V0QWxscGFzc1BvbGUoY29uc3QgQ29tcGxleCAmcG9sZSkKICAgICBzZXRaZXJvUG9sZVBh
aXJzKHplcm8sIHBvbGUpOwogfQogCitDb21wbGV4IEJpcXVhZDo6Y29tcGxleEZpbHRlclJlc3Bv
bnNlKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgLy8gRXZhbHVhdGUgdGhlIFotdHJhbnNmb3Jt
IG9mIHRoZSBmaWx0ZXIgYXQgZ2l2ZW4gbm9ybWFsaXplZAorICAgIC8vIGZyZXF1ZW5jeSBmcm9t
IC0wLjUgdG8gMC41LgorICAgIC8vCisgICAgLy8gVGhlIHotdHJhbnNmb3JtIG9mIHRoZSBmaWx0
ZXIgaXMKKyAgICAvLworICAgIC8vIFkoeikgPSAoYjAgKyBiMSp6XigtMSkgKyBiMip6XigtMikp
LygxICsgYTEqel4oLTEpICsgYTIqel4oLTIpKQorICAgIC8vCisgICAgLy8gRXZhbHVhdGUgYXMK
KyAgICAvLworICAgIC8vIGIwICsgKGIxICsgYjIveikvegorICAgIC8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tCisgICAgLy8gMSArIChhMSArIGEyL3opL3oKKyAgICAvLworICAgIC8vIHdpdGggeiA9
IGV4cChqKnBpKmZyZXF1ZW5jeSkuCisKKyAgICBkb3VibGUgb21lZ2EgPSBNX1BJKmZyZXF1ZW5j
eTsKKyAgICBDb21wbGV4IHogPSBDb21wbGV4KGNvcyhvbWVnYSksIHNpbihvbWVnYSkpOworICAg
IENvbXBsZXggdG9wID0gbV9iMCArIChtX2IxICsgbV9iMiAvIHopIC8gejsKKyAgICBDb21wbGV4
IGJvdHRvbSA9IENvbXBsZXgoMSwgMCkgKyAobV9hMSArIG1fYTIgLyB6KSAvIHo7CisKKyAgICBy
ZXR1cm4gdG9wIC8gYm90dG9tOworfQorCitkb3VibGUgQmlxdWFkOjptYWduaXR1ZGUoZG91Ymxl
IGZyZXF1ZW5jeSkKK3sKKyAgICByZXR1cm4gc3RkOjphYnMoQmlxdWFkOjpjb21wbGV4RmlsdGVy
UmVzcG9uc2UoZnJlcXVlbmN5KSk7Cit9CisKK2RvdWJsZSBCaXF1YWQ6OnBoYXNlKGRvdWJsZSBm
cmVxdWVuY3kpCit7CisgICAgQ29tcGxleCB6ID0gQmlxdWFkOjpjb21wbGV4RmlsdGVyUmVzcG9u
c2UoZnJlcXVlbmN5KTsKKyAgICAKKyAgICByZXR1cm4gYXRhbjIoaW1hZyh6KSwgcmVhbCh6KSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oCmluZGV4IDNmY2U3ZGI5N2Q3
NDAzY2UwMTQ0MmI4NWU2OTRjYWRkYjgwMGVkZjAuLjUyOGU2YzljY2MyZTEwOWZkMzdmM2NjN2Ez
MDI3MTFmOTg0ODliNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L0JpcXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5oCkBA
IC03MCwxMCArNzAsMjAgQEAgcHVibGljOgogICAgIC8vIFJlc2V0cyBmaWx0ZXIgc3RhdGUKICAg
ICB2b2lkIHJlc2V0KCk7CiAKKyAgICAvLyBNYWduaXR1ZGUgb2YgZmlsdGVyIHJlc3BvbnNlIGF0
IGEgZ2l2ZW4gbm9ybWFsaXplZCBmcmVxdWVuY3kuCisgICAgZG91YmxlIG1hZ25pdHVkZShkb3Vi
bGUgZnJlcXVlbmN5KTsKKworICAgIC8vIFBoYXNlIChpbiByYWRpYW5zKSBvZiBmaWx0ZXIgcmVz
cG9uc2UgYXQgYSBnaXZlbiBub3JtYWxpemVkCisgICAgLy8gZnJlcXVlbmN5LgorICAgIGRvdWJs
ZSBwaGFzZShkb3VibGUgZnJlcXVlbmN5KTsKKyAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRO
b3JtYWxpemVkQ29lZmZpY2llbnRzKGRvdWJsZSBiMCwgZG91YmxlIGIxLCBkb3VibGUgYjIsIGRv
dWJsZSBhMCwgZG91YmxlIGExLCBkb3VibGUgYTIpOwotCi0gICAgLy8gRmlsdGVyIGNvZWZmaWNp
ZW50cworICAgIENvbXBsZXggY29tcGxleEZpbHRlclJlc3BvbnNlKGRvdWJsZSBmcmVxdWVuY3kp
OworICAgIAorICAgIC8vIEZpbHRlciBjb2VmZmljaWVudHMuIFRoZSBmaWx0ZXIgaXMgZGVmaW5l
ZCBhcworICAgIC8vCisgICAgLy8geVtuXSArIG1fYTEqeVtuLTFdICsgbV9hMip5W24tMl0gPSBt
X2IwKnhbbl0gKyBtX2IxKnhbbi0xXSArIG1fYjIqeFtuLTJdLgogICAgIGRvdWJsZSBtX2IwOwog
ICAgIGRvdWJsZSBtX2IxOwogICAgIGRvdWJsZSBtX2IyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKaW5kZXggYTIyMDRiNDFhOTJlZmZjOGY0OGI3YWU0N2Rm
MWNhNmQzYmUxZDdlMS4uNTIwNzY4OTZiMWIyZWQ5NGViMjI0OWVjZTVkNmQ4Y2JjZGZjMjMzZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCkBAIC0zMiwx
MyArMzIsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgQmlxdWFkRFNQS2VybmVs
Ojpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90
IGZyYW1lc1RvUHJvY2VzcykKK3ZvaWQgQmlxdWFkRFNQS2VybmVsOjptYXliZVVwZGF0ZUNvZWZm
aWNpZW50cygpCiB7Ci0gICAgQVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5hdGlvbiAmJiBiaXF1YWRQ
cm9jZXNzb3IoKSk7Ci0gICAgCi0gICAgLy8gUmVjb21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMg
aWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGhhdmUgY2hhbmdlZC4KLSAgICAvLyBGSVhNRTogYXMg
YW4gb3B0aW1pemF0aW9uLCBpbXBsZW1lbnQgYSB3YXkgdGhhdCBhIEJpcXVhZCBvYmplY3QgY2Fu
IHNpbXBseSBjb3B5IGl0cyBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRzIGZyb20gYW5vdGhl
ciBCaXF1YWQgb2JqZWN0LgotICAgIC8vIFRoZW4gcmUtZmFjdG9yIHRoaXMgY29kZSB0byBvbmx5
IHJ1biBmb3IgdGhlIGZpcnN0IEJpcXVhZERTUEtlcm5lbCBvZiBlYWNoIEJpcXVhZFByb2Nlc3Nv
ci4KICAgICBpZiAoYmlxdWFkUHJvY2Vzc29yKCktPmZpbHRlckNvZWZmaWNpZW50c0RpcnR5KCkp
IHsKICAgICAgICAgZG91YmxlIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIx
KCktPnNtb290aGVkVmFsdWUoKTsKICAgICAgICAgZG91YmxlIHZhbHVlMiA9IGJpcXVhZFByb2Nl
c3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKQEAgLTgzLDEwICs3OCwzOSBA
QCB2b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9h
dCogZGVzdGluYXRpb24sIHNpemVfdCBmcgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9Cit9CisKK3ZvaWQgQmlxdWFkRFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBz
b3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3sKKyAg
ICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYmIGJpcXVhZFByb2Nlc3NvcigpKTsKKyAg
ICAKKyAgICAvLyBSZWNvbXB1dGUgZmlsdGVyIGNvZWZmaWNpZW50cyBpZiBhbnkgb2YgdGhlIHBh
cmFtZXRlcnMgaGF2ZSBjaGFuZ2VkLgorICAgIC8vIEZJWE1FOiBhcyBhbiBvcHRpbWl6YXRpb24s
IGltcGxlbWVudCBhIHdheSB0aGF0IGEgQmlxdWFkIG9iamVjdCBjYW4gc2ltcGx5IGNvcHkgaXRz
IGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMgZnJvbSBhbm90aGVyIEJpcXVhZCBvYmplY3Qu
CisgICAgLy8gVGhlbiByZS1mYWN0b3IgdGhpcyBjb2RlIHRvIG9ubHkgcnVuIGZvciB0aGUgZmly
c3QgQmlxdWFkRFNQS2VybmVsIG9mIGVhY2ggQmlxdWFkUHJvY2Vzc29yLgorCisgICAgbWF5YmVV
cGRhdGVDb2VmZmljaWVudHMoKTsKIAogICAgIG1fYmlxdWFkLnByb2Nlc3Moc291cmNlLCBkZXN0
aW5hdGlvbiwgZnJhbWVzVG9Qcm9jZXNzKTsKIH0KIAorZG91YmxlIEJpcXVhZERTUEtlcm5lbDo6
bWFnbml0dWRlKGRvdWJsZSBmcmVxdWVuY3lIeikKK3sKKyAgICBtYXliZVVwZGF0ZUNvZWZmaWNp
ZW50cygpOworCisgICAgZG91YmxlIG5vcm1hbGl6ZWRGcmVxdWVuY3kgPSBmcmVxdWVuY3lIeiAv
IHRoaXMtPm55cXVpc3QoKTsKKworICAgIHJldHVybiBtX2JpcXVhZC5tYWduaXR1ZGUobm9ybWFs
aXplZEZyZXF1ZW5jeSk7Cit9CisKK2RvdWJsZSBCaXF1YWREU1BLZXJuZWw6OnBoYXNlKGRvdWJs
ZSBmcmVxdWVuY3lIeikKK3sKKyAgICBtYXliZVVwZGF0ZUNvZWZmaWNpZW50cygpOworCisgICAg
ZG91YmxlIG5vcm1hbGl6ZWRGcmVxdWVuY3kgPSBmcmVxdWVuY3lIeiAvIHRoaXMtPm55cXVpc3Qo
KTsKKworICAgIHJldHVybiBtX2JpcXVhZC5waGFzZShub3JtYWxpemVkRnJlcXVlbmN5KTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgKaW5kZXggNDdkMGYzNDM5
ZmZmM2NhNzQ5Y2VmZjYxNWExZjg3NjRkYjZmODVkZi4uOGMyOTMxODE5OGIxOThkYTJmMzRmYzE5
NzVmNTJlOTQwZWM5Mjk3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkRFNQS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2Vy
bmVsLmgKQEAgLTQ1LDEwICs0NSwxOSBAQCBwdWJsaWM6CiAgICAgLy8gQXVkaW9EU1BLZXJuZWwK
ICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVz
dCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkgeyBt
X2JpcXVhZC5yZXNldCgpOyB9CisKKyAgICAvLyBNYWduaXR1ZGUgb2YgdGhlIGZpbHRlciByZXNw
b25zZSBhdCBhIGdpdmVuIGZyZXF1ZW5jeSAoaW4gSHopLgorICAgIHZpcnR1YWwgZG91YmxlIG1h
Z25pdHVkZShkb3VibGUgZnJlcXVlbmN5SHopOworCisgICAgLy8gUGhhc2UgKGluIHJhZGlhbnMp
IG9mIHRoZSBmaWx0ZXIgcmVzcG9uc2UgYXQgYSBnaXZlbiBmcmVxdWVuY3kKKyAgICAvLyAoaW4g
SHopLgorICAgIHZpcnR1YWwgZG91YmxlIHBoYXNlKGRvdWJsZSBmcmVxdWVuY3lIeik7CiAgICAg
CiBwcm90ZWN0ZWQ6CiAgICAgQmlxdWFkIG1fYmlxdWFkOwogICAgIEJpcXVhZFByb2Nlc3Nvciog
YmlxdWFkUHJvY2Vzc29yKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yKj4o
cHJvY2Vzc29yKCkpOyB9CisKKyAgICB2b2lkIG1heWJlVXBkYXRlQ29lZmZpY2llbnRzKCk7CiB9
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuY3BwCmluZGV4IGYxNmQ4ZTVmOTZkNzU3YmY5NWQ1NzI0MmI2ZTJkYjk1
Y2U2MWNmMGEuLmI4YjBjMmNkYTk1YzU4YjM4NDQ4YzNkMmIzOTE0YWI0NjM4ZjQ2OTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCkBAIC01Myw2ICs1
MywxNiBAQCB2b2lkIEJpcXVhZEZpbHRlck5vZGU6OnNldFR5cGUodW5zaWduZWQgc2hvcnQgdHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgYmlxdWFkUHJvY2Vzc29yKCktPnNldFR5cGUoc3Rh
dGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yOjpGaWx0ZXJUeXBlPih0eXBlKSk7CiB9CiAKK2RvdWJs
ZSBCaXF1YWRGaWx0ZXJOb2RlOjptYWduaXR1ZGUoZG91YmxlIGZyZXF1ZW5jeUh6KQoreworICAg
IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+bWFnbml0dWRlKGZyZXF1ZW5jeUh6KTsKK30KKwor
ZG91YmxlIEJpcXVhZEZpbHRlck5vZGU6OnBoYXNlKGRvdWJsZSBmcmVxdWVuY3lIeikKK3sKKyAg
ICByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBoYXNlKGZyZXF1ZW5jeUh6KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAppbmRleCA2ODNiMmEzOWQ0NzRm
ODNlZWNkNmI1NjUyYzQyMWVlNjgwYjU3NzkzLi5mYzkyMWY0MDlhYzNlYjJjYWM1OTVjMGU4YTE5
YWZhZjg3YjUyZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRG
aWx0ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9k
ZS5oCkBAIC01Nyw2ICs1NywxMyBAQCBwdWJsaWM6CiAgICAgQXVkaW9QYXJhbSogZnJlcXVlbmN5
KCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQogICAgIEF1ZGlv
UGFyYW0qIHEoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpOyB9CiAg
ICAgQXVkaW9QYXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0
ZXIzKCk7IH0KKworICAgIC8vIE1hZ25pdHVkZSBvZiB0aGUgZmlsdGVyIHJlc3BvbnNlIGF0IGEg
Z2l2ZW4gZnJlcXVlbmN5IChpbiBIeikuCisgICAgZG91YmxlIG1hZ25pdHVkZShkb3VibGUgZnJl
cXVlbmN5SHopOworCisgICAgLy8gUGhhc2UgKGluIHJhZGlhbnMpIG9mIHRoZSBmaWx0ZXIgcmVz
cG9uc2UgYXQgYSBnaXZlbiBmcmVxdWVuY3kKKyAgICAvLyAoaW4gSHopLgorICAgIGRvdWJsZSBw
aGFzZShkb3VibGUgZnJlcXVlbmN5SHopOwogICAgIAogcHJpdmF0ZToKICAgICBCaXF1YWRGaWx0
ZXJOb2RlKEF1ZGlvQ29udGV4dCosIGZsb2F0IHNhbXBsZVJhdGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAppbmRleCA1ODYxYjg4OWNjZjU3MjViYzJk
OGRkOTRhYzJlNDk4ZWY4MjZkZTZkLi4yOGY3YWZjNzNiMDE4NGYxZThhMDk1MDY4MzY5YjEzMjk0
NGZmZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJO
b2RlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlk
bApAQCAtNDMsNSArNDMsOCBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICByZWFkb25seSBhdHRy
aWJ1dGUgQXVkaW9QYXJhbSBmcmVxdWVuY3k7IC8vIGluIEhlcnR6CiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIFE7IC8vIFF1YWxpdHkgZmFjdG9yCiAgICAgICAgIHJlYWRv
bmx5IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGdhaW47IC8vIGluIERlY2liZWxzCisKKyAgICAgICAg
ZmxvYXQgbWFnbml0dWRlKGluIGZsb2F0IGZyZXF1ZW5jeSk7IC8vIGZyZXF1ZW5jeSBpbiBIei4K
KyAgICAgICAgZmxvYXQgcGhhc2UoaW4gZmxvYXQgZnJlcXVlbmN5KTsgLy8gZnJlcXVlbmN5IGlu
IEh6LgogICAgIH07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29y
LmNwcAppbmRleCAxOTI3NTVhNWI4ZWY5OTM1ZmFiYzY0MjkwZTc2NDFkNmUyNTg4OTc4Li5lNjMx
ZDhmNzJhZTZkZTU1ZDQzY2Y4NDA0MDhlMDA1NGVlNTgzYTEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKQEAgLTkwLDMzICs5MCw0NCBAQCBQYXNzT3du
UHRyPEF1ZGlvRFNQS2VybmVsPiBCaXF1YWRQcm9jZXNzb3I6OmNyZWF0ZUtlcm5lbCgpCiAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBCaXF1YWREU1BLZXJuZWwodGhpcykpOwogfQogCi12b2lkIEJp
cXVhZFByb2Nlc3Nvcjo6cHJvY2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGlu
YXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6Y2hl
Y2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpCiB7Ci0gICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsK
LSAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCi0gICAgLy8gRGVhbCB3aXRoIHNtb290aGluZyAvIGRlLXppcHBlcmluZy4gIFN0YXJ0
IG91dCBhc3N1bWluZyBmaWx0ZXIgcGFyYW1ldGVycyBhcmUgbm90IGNoYW5naW5nLgotICAgIC8v
IFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlm
IHRoZXkgbmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVu
dHMuCisgICAgLy8gRGVhbCB3aXRoIHNtb290aGluZyAvIGRlLXppcHBlcmluZy4gU3RhcnQgb3V0
IGFzc3VtaW5nIGZpbHRlcgorICAgIC8vIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KKwor
ICAgIC8vIFRoZSBCaXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8g
c2VlIGlmIHRoZXkKKyAgICAvLyBuZWVkIHRvIHJlLWNvbXB1dGUgdGhlaXIgaW50ZXJuYWwgZmls
dGVyIGNvZWZmaWNpZW50cy4KICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0gZmFsc2U7
CiAgICAgCiAgICAgaWYgKG1faGFzSnVzdFJlc2V0KSB7Ci0gICAgICAgIC8vIFNuYXAgdG8gZXhh
Y3QgdmFsdWVzIGZpcnN0IHRpbWUgYWZ0ZXIgcmVzZXQsIHRoZW4gc21vb3RoIGZvciBzdWJzZXF1
ZW50IGNoYW5nZXMuCisgICAgICAgIC8vIFNuYXAgdG8gZXhhY3QgdmFsdWVzIGZpcnN0IHRpbWUg
YWZ0ZXIgcmVzZXQsIHRoZW4gc21vb3RoCisgICAgICAgIC8vIGZvciBzdWJzZXF1ZW50IGNoYW5n
ZXMuCiAgICAgICAgIG1fcGFyYW1ldGVyMS0+cmVzZXRTbW9vdGhlZFZhbHVlKCk7CiAgICAgICAg
IG1fcGFyYW1ldGVyMi0+cmVzZXRTbW9vdGhlZFZhbHVlKCk7CiAgICAgICAgIG1fcGFyYW1ldGVy
My0+cmVzZXRTbW9vdGhlZFZhbHVlKCk7CiAgICAgICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGly
dHkgPSB0cnVlOwogICAgICAgICBtX2hhc0p1c3RSZXNldCA9IGZhbHNlOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIC8vIFNtb290aCBhbGwgb2YgdGhlIGZpbHRlciBwYXJhbWV0ZXJzLiAgSWYgdGhl
eSBoYXZlbid0IHlldCBjb252ZXJnZWQgdG8gdGhlaXIgdGFyZ2V0IHZhbHVlIHRoZW4gbWFyayBj
b2VmZmljaWVudHMgYXMgZGlydHkuCisgICAgICAgIC8vIFNtb290aCBhbGwgb2YgdGhlIGZpbHRl
ciBwYXJhbWV0ZXJzLiBJZiB0aGV5IGhhdmVuJ3QgeWV0CisgICAgICAgIC8vIGNvbnZlcmdlZCB0
byB0aGVpciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNvZWZmaWNpZW50cyBhcworICAgICAgICAv
LyBkaXJ0eS4KICAgICAgICAgYm9vbCBpc1N0YWJsZTEgPSBtX3BhcmFtZXRlcjEtPnNtb290aCgp
OwogICAgICAgICBib29sIGlzU3RhYmxlMiA9IG1fcGFyYW1ldGVyMi0+c21vb3RoKCk7CiAgICAg
ICAgIGJvb2wgaXNTdGFibGUzID0gbV9wYXJhbWV0ZXIzLT5zbW9vdGgoKTsKICAgICAgICAgaWYg
KCEoaXNTdGFibGUxICYmIGlzU3RhYmxlMiAmJiBpc1N0YWJsZTMpKQogICAgICAgICAgICAgbV9m
aWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IHRydWU7CiAgICAgfQorfQorCit2b2lkIEJpcXVhZFBy
b2Nlc3Nvcjo6cHJvY2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24s
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsK
KyAgICAgICAgZGVzdGluYXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAg
ICAgICAgCisgICAgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgICAgICAgICAgCiAg
ICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiBvdXIgaW5wdXQsIHByb2Nlc3MgdXNpbmcgdGhlIGNv
cnJlc3BvbmRpbmcgQmlxdWFkRFNQS2VybmVsIGludG8gdGhlIG91dHB1dCBjaGFubmVsLgogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCiAgICAgICAg
IG1fa2VybmVsc1tpXS0+cHJvY2Vzcyhzb3VyY2UtPmNoYW5uZWwoaSktPmRhdGEoKSwgZGVzdGlu
YXRpb24tPmNoYW5uZWwoaSktPmRhdGEoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTEzMCw2ICsx
NDEsNDQgQEAgdm9pZCBCaXF1YWRQcm9jZXNzb3I6OnNldFR5cGUoRmlsdGVyVHlwZSB0eXBlKQog
ICAgIH0KIH0KIAorZG91YmxlIEJpcXVhZFByb2Nlc3Nvcjo6bWFnbml0dWRlKGRvdWJsZSBmcmVx
dWVuY3lIeikKK3sKKyAgICAvLyBNYWtlIHN1cmUgdGhpbmdzIGFyZSBpbml0aWFsaXplZCBiZWZv
cmUgd2UgdHJ5IHRvIGNvbXB1dGUgdGhlCisgICAgLy8gbWFnbml0dWRlLgorICAgIGlmICghaXNJ
bml0aWFsaXplZCgpKQorICAgICAgICBpbml0aWFsaXplKCk7CisgICAgCisgICAgY2hlY2tGb3JE
aXJ0eUNvZWZmaWNpZW50cygpOworICAgIAorICAgIC8vIEVhY2ggYmlxdWFkIGlzIHN1cHBvc2Vk
IHRvIGJlIHRoZSBzYW1lICg/KSBzbyBqdXN0IGdyYWIgdGhlCisgICAgLy8gbWFnbml0dWRlIGZy
b20gdGhlIGZpcnN0LgorICAgIGRvdWJsZSB2YWx1ZSA9IDAuMDsKKyAgICAKKyAgICBpZiAobV9r
ZXJuZWxzLnNpemUoKSkgCisgICAgICAgIHZhbHVlID0gbV9rZXJuZWxzWzBdLT5tYWduaXR1ZGUo
ZnJlcXVlbmN5SHopOworCisgICAgcmV0dXJuIHZhbHVlOworfQorCitkb3VibGUgQmlxdWFkUHJv
Y2Vzc29yOjpwaGFzZShkb3VibGUgZnJlcXVlbmN5SHopCit7CisgICAgLy8gTWFrZSBzdXJlIHRo
aW5ncyBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHdlIHRyeSB0byBjb21wdXRlIHRoZQorICAgIC8v
IG1hZ25pdHVkZS4KKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgaW5pdGlhbGl6
ZSgpOworCisgICAgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgIAorICAgIC8vIEVh
Y2ggYmlxdWFkIGlzIHN1cHBvc2VkIHRvIGJlIHRoZSBzYW1lICg/KSBzbyBqdXN0IGdyYWIgdGhl
CisgICAgLy8gbWFnbml0dWRlIGZyb20gdGhlIGZpcnN0LgorICAgIGRvdWJsZSB2YWx1ZSA9IDAu
MDsKKworICAgIGlmIChtX2tlcm5lbHMuc2l6ZSgpKSAKKyAgICAgICAgdmFsdWUgPSBtX2tlcm5l
bHNbMF0tPnBoYXNlKGZyZXF1ZW5jeUh6KTsKKworICAgIHJldHVybiB2YWx1ZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oIGIvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgKaW5kZXggMTZlZjQwNWRlMmM0NDU3
ZjNhMTRjZGRjNTExNWMzOWMxNzUwNWM5Zi4uNWI1Y2M4YzRjMTFlMTczZWRjZDU1ODE1ZGU2YmQ5
ZTY2YTNjMzVjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJv
Y2Vzc29yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmgK
QEAgLTYwLDYgKzYwLDE1IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdmlydHVhbCB2b2lkIHBy
b2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKTsKIAorICAgIC8vIE1hZ25pdHVkZSBvZiB0aGUgZmlsdGVyIHJlc3BvbnNl
IGF0IGEgZ2l2ZW4gZnJlcXVlbmN5IChpbiBIeikuCisgICAgdmlydHVhbCBkb3VibGUgbWFnbml0
dWRlKGRvdWJsZSBmcmVxdWVuY3lIeik7CisKKyAgICAvLyBQaGFzZSAoaW4gcmFkaWFucykgb2Yg
dGhlIGZpbHRlciByZXNwb25zZSBhdCBhIGdpdmVuIGZyZXF1ZW5jeQorICAgIC8vIChpbiBIeiku
CisgICAgdmlydHVhbCBkb3VibGUgcGhhc2UoZG91YmxlIGZyZXF1ZW5jeUh6KTsKKworICAgIHZp
cnR1YWwgdm9pZCBjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKCk7CisgICAgCiAgICAgYm9vbCBm
aWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZmlsdGVyQ29lZmZpY2ll
bnRzRGlydHk7IH0KIAogICAgIEF1ZGlvUGFyYW0qIHBhcmFtZXRlcjEoKSB7IHJldHVybiBtX3Bh
cmFtZXRlcjEuZ2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113242</attachid>
            <date>2011-11-01 15:43:22 -0700</date>
            <delta_ts>2011-11-03 17:38:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71055-20111101154321.patch</filename>
            <type>text/plain</type>
            <size>20972</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg5NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWE2ZGEwOTg4ODk0ZDI3
NzZjZGNiNzU1Yjg4MTMwYmJhMTU4YTA3Li5lOTYxMzc2NDhmNmRhNThjNjk4ZWJkMTQ2OWUyZmM2
ZTJmYjMwOWY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTEtMTEtMDEgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgIEFkZCBtZXRob2RzIHRvIGNvbXB1
dGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBmb3IgYmlxdWFkcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzEwNTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVk
aW9EU1BLZXJuZWwuaDoKKyAgICAgICAgRGVjbGFyZSBnZXRGcmVxdWVuY3lSZXNwb25zZQorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQS2VybmVsUHJvY2Vzc29yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRFNQS2VybmVsOjpnZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAg
ICAgIERlZmF1bHQgaW1wbGVtZW50YXRpb24gdGhhdCBqdXN0IHJldHVybnMgMC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIENvbXB1dGVzIHRoZSBtYWduaXR1ZGUgYW5k
IHBoYXNlIChyYWRpYW5zKSByZXNwb25zZSBmb3IgdGhlIGdpdmVuCisgICAgICAgIGJpcXVhZCBh
dCB0aGUgc3BlY2lmaWVkIHNldCBvZiAobm9ybWFsaXplZCkgZnJlcXVlbmNpZXMuCisgICAgICAg
ICogcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmg6CisgICAgICAgIERlY2xhcmUgZ2V0RnJlcXVlbmN5
UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5lbDo6bWF5YmVVcGRhdGVDb2VmZmljaWVudHMpOgor
ICAgICAgICBGYWN0b3Igb3V0IHRoZSBjb2RlIHRoYXQgdXBkYXRlcyBmaWx0ZXIgY29lZmZpY2ll
bnRzLiAgQWxsb3cgdGhlCisgICAgICAgIHVwZGF0ZSB0byBoYXBwZW4gdG8gdGhlIHNwZWNpZmll
ZCBiaXF1YWQgb2JqZWN0LiAgQWxzbyBhbGxvdyB1c2luZworICAgICAgICB0aGUgZmluYWwgdmFs
dWUgb2YgdGhlIGNvZWZmaWNpZW50cyBpbnN0ZWFkIG9mIHRoZSBzbW9vdGhlZAorICAgICAgICB2
YWx1ZS4gCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3MpOgorICAg
ICAgICBVc2UgbWF5YmVVcGRhdGVDb2VmZmljaWVudHMgdG8gdXBkYXRlIHRoZSBjdXJyZW50IGJp
cXVhZC4KKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZERTUEtlcm5lbDo6Z2V0RnJlcXVlbmN5UmVz
cG9uc2UpOgorICAgICAgICBJbXBsbWVudGF0aW9uIG9mIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgor
ICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oOgorICAgICAgICBEZWNsYXJlIGdl
dEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRmlsdGVyTm9kZTo6Z2V0RnJlcXVlbmN5UmVz
cG9uc2UpOgorICAgICAgICBJbXBsZW1lbnRhdGlvbiBvZiBnZXRGcmVxdWVuY3lSZXNwb25zZQor
ICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaDoKKyAgICAgICAgRGVjbGFyZSBn
ZXRGcmVxdWVuY3lSZXNwb25zZS4KKyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmlkbDoKKyAgICAgICAgRGVmaW5lIGludGVyZmFjZSB0byBnZXRGcmVxdWVuY3lSZXNwb25zZS4K
KyAgICAgICAgKiB3ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QmlxdWFkUHJvY2Vzc29yOjpjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKToKKyAgICAgICAg
RmFjdG9yIG91dCBjb21tb24gY29kZSBmb3IgY2hlY2tpbmcgZm9yIGRpcnR5IGNvZWZmaWNpZW50
cy4KKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZFByb2Nlc3Nvcjo6cHJvY2Vzcyk6CisgICAgICAg
IFVzZSBjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFk
UHJvY2Vzc29yOjpnZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxlbWVudGF0aW9u
IG9mIGdldEZyZXF1ZW5jeVJlc3BvbnNlCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkUHJvY2Vz
c29yLmg6CisgICAgICAgIERlY2xhcmUgZ2V0RnJlcXVlbmN5UmVzcG9uc2UuCisKIDIwMTEtMTEt
MDEgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIENTU1J1bGU6
IERldmlydHVhbGl6ZSBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb0RTUEtlcm5lbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vQXVkaW9EU1BLZXJuZWwuaAppbmRleCBmMzNjOWVkZTRkM2MwYTEz
NjM2MzJlNWMwODRlZDBlYmRhYjUyMmMwLi5iMWVlNWY1MjRmMGZkNWE2Y2RiNmI4Yjc4ZDVlZDU0
OGI3ZTI0MGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRp
b0RTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQ
S2VybmVsLmgKQEAgLTU3LDYgKzU3LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHJv
Y2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcmVzZXQoKSA9IDA7CiAKKyAgICAv
LyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0
aGUgZ2l2ZW4KKyAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJl
c3BvbnNlIGlzIGluIHJhZGlhbnMuCisgICAgdmlydHVhbCB2b2lkIGdldEZyZXF1ZW5jeVJlc3Bv
bnNlKGludCBuRnJlcXVlbmNpZXMsIGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLCBmbG9hdCogcGhhc2VS
ZXNwb25zZSk7CisKICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1w
bGVSYXRlOyB9CiAgICAgZG91YmxlIG55cXVpc3QoKSBjb25zdCB7IHJldHVybiAwLjUgKiBzYW1w
bGVSYXRlKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
QXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9EU1BLZXJuZWxQcm9jZXNzb3IuY3BwCmluZGV4IGNmNGQyZDM1MTc1YTUzODkzZTE1
Y2VmNTAzZjBiZjllMzZhMGFjODMuLjFlZjc5OWFhODI2MmViYzAyOTkwMDgxM2RmMjYwMzI4NzUw
MWIyZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvRFNQ
S2VybmVsUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9B
dWRpb0RTUEtlcm5lbFByb2Nlc3Nvci5jcHAKQEAgLTExNSw2ICsxMTUsMTYgQEAgdm9pZCBBdWRp
b0RTUEtlcm5lbFByb2Nlc3Nvcjo6c2V0TnVtYmVyT2ZDaGFubmVscyh1bnNpZ25lZCBudW1iZXJP
ZkNoYW5uZWxzKQogICAgICAgICBtX251bWJlck9mQ2hhbm5lbHMgPSBudW1iZXJPZkNoYW5uZWxz
OwogfQogCit2b2lkIEF1ZGlvRFNQS2VybmVsOjpnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbiwg
ZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLCBmbG9hdCogcGhhc2VSZXNwb25zZSkKK3sKKyAgICAv
LyBKdXN0IHNldCByZXNwb25zZSB0byAwLgorICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbjsgKytr
KSB7CisgICAgICAgIG1hZ1Jlc3BvbnNlW2tdID0gMC4wOworICAgICAgICBwaGFzZVJlc3BvbnNl
W2tdID0gMC4wOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL0JpcXVhZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQu
Y3BwCmluZGV4IDM1NjgxMDI3NWY2MzhhNjg5MDQzNjY4NGIwMmZlOGNjZjQwNTJhN2MuLmE4N2Zi
ZDY2YTQ1N2FlMzZmYjA3ZjY2YTg2MGMyN2FlYmZjYWUxN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQmlxdWFkLmNwcApAQCAtMzc1LDYgKzM3NSw0NiBAQCB2b2lkIEJpcXVhZDo6
c2V0QWxscGFzc1BvbGUoY29uc3QgQ29tcGxleCAmcG9sZSkKICAgICBzZXRaZXJvUG9sZVBhaXJz
KHplcm8sIHBvbGUpOwogfQogCit2b2lkIEJpcXVhZDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50
IG5GcmVxdWVuY2llcywgZmxvYXQqIGZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQorewor
ICAgIC8vIEV2YWx1YXRlIHRoZSBaLXRyYW5zZm9ybSBvZiB0aGUgZmlsdGVyIGF0IGdpdmVuIG5v
cm1hbGl6ZWQKKyAgICAvLyBmcmVxdWVuY3kgZnJvbSAtMC41IHRvIDAuNS4KKyAgICAvLworICAg
IC8vIFRoZSB6LXRyYW5zZm9ybSBvZiB0aGUgZmlsdGVyIGlzCisgICAgLy8KKyAgICAvLyBZKHop
ID0gKGIwICsgYjEqel4oLTEpICsgYjIqel4oLTIpKS8oMSArIGExKnpeKC0xKSArIGEyKnpeKC0y
KSkKKyAgICAvLworICAgIC8vIEV2YWx1YXRlIGFzCisgICAgLy8KKyAgICAvLyBiMCArIChiMSAr
IGIyL3opL3oKKyAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIDEgKyAoYTEgKyBh
Mi96KS96CisgICAgLy8KKyAgICAvLyB3aXRoIHogPSBleHAoaipwaSpmcmVxdWVuY3kpLgorCisg
ICAgLy8gR3JhYiB0aGUgZmlsdGVyIGNvZWZmaWNpZW50cyB0byBsb2NhbHMgc28gdGhleSBjYW4n
dCBjaGFuZ2UKKyAgICAvLyBmcm9tIHVuZGVybmVhdGggdXMuCisgICAgLy8KKyAgICAvLyBXQVJO
SU5HOiBUaGVyZSdzIGEgcG9zc2libGUgcmFjZSBjb25kaXRpb24gaGVyZSBzaW5jZSB3ZSBkb24n
dAorICAgIC8vIGF0b21pY2FsbHkgY29weSBhbGwgb2YgdGhlIGNvZWZmaWNpZW50cy4KKyAgICBk
b3VibGUgYjAgPSBtX2IwOworICAgIGRvdWJsZSBiMSA9IG1fYjE7CisgICAgZG91YmxlIGIyID0g
bV9iMjsKKyAgICBkb3VibGUgYTEgPSBtX2ExOworICAgIGRvdWJsZSBhMiA9IG1fYTI7CisgICAg
CisgICAgZm9yIChpbnQgayA9IDA7IGsgPCBuRnJlcXVlbmNpZXM7ICsraykgeworICAgICAgICBk
b3VibGUgb21lZ2EgPSBwaURvdWJsZSAqIGZyZXF1ZW5jeVtrXTsKKyAgICAgICAgQ29tcGxleCB6
ID0gQ29tcGxleChjb3Mob21lZ2EpLCBzaW4ob21lZ2EpKTsKKyAgICAgICAgQ29tcGxleCB0b3Ag
PSBiMCArIChiMSArIGIyIC8geikgLyB6OworICAgICAgICBDb21wbGV4IGJvdHRvbSA9IENvbXBs
ZXgoMSwgMCkgKyAoYTEgKyBhMiAvIHopIC8gejsKKyAgICAgICAgQ29tcGxleCByZXNwb25zZSA9
IHRvcCAvIGJvdHRvbTsKKyAgICAgICAgbWFnUmVzcG9uc2Vba10gPSBzdGF0aWNfY2FzdDxmbG9h
dD4oYWJzKHJlc3BvbnNlKSk7CisgICAgICAgIHBoYXNlUmVzcG9uc2Vba10gPSBzdGF0aWNfY2Fz
dDxmbG9hdD4oYXRhbjIoaW1hZyhyZXNwb25zZSksIHJlYWwocmVzcG9uc2UpKSk7CisgICAgfQor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElP
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAppbmRleCAzZmNlN2RiOTdkNzQw
M2NlMDE0NDJiODVlNjk0Y2FkZGI4MDBlZGYwLi5hMDVlMzBmYjliODU4ODRiMTUzZjVjOWNhYTIy
NTVkMDIwYWU0NTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9C
aXF1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaApAQCAt
NzAsMTAgKzcwLDE5IEBAIHB1YmxpYzoKICAgICAvLyBSZXNldHMgZmlsdGVyIHN0YXRlCiAgICAg
dm9pZCByZXNldCgpOwogCisgICAgLy8gRmlsdGVyIHJlc3BvbnNlIGF0IGEgc2V0IG9mIG4gZnJl
cXVlbmNpZXMuIFRoZSBtYWduaXR1ZGUgYW5kCisgICAgLy8gcGhhc2UgcmVzcG9uc2UgYXJlIHJl
dHVybmVkIGluIG1hZ1Jlc3BvbnNlIGFuZCBwaGFzZVJlc3BvbnNlLgorICAgIC8vIFRoZSBwaGFz
ZSByZXNwb25zZSBpcyBvbiByYWRpYW5zLgorICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2Uo
aW50IG5GcmVxdWVuY2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBm
cmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9u
c2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSk7
CiBwcml2YXRlOgogICAgIHZvaWQgc2V0Tm9ybWFsaXplZENvZWZmaWNpZW50cyhkb3VibGUgYjAs
IGRvdWJsZSBiMSwgZG91YmxlIGIyLCBkb3VibGUgYTAsIGRvdWJsZSBhMSwgZG91YmxlIGEyKTsK
LQotICAgIC8vIEZpbHRlciBjb2VmZmljaWVudHMKKyAgICAKKyAgICAvLyBGaWx0ZXIgY29lZmZp
Y2llbnRzLiBUaGUgZmlsdGVyIGlzIGRlZmluZWQgYXMKKyAgICAvLworICAgIC8vIHlbbl0gKyBt
X2ExKnlbbi0xXSArIG1fYTIqeVtuLTJdID0gbV9iMCp4W25dICsgbV9iMSp4W24tMV0gKyBtX2Iy
Knhbbi0yXS4KICAgICBkb3VibGUgbV9iMDsKICAgICBkb3VibGUgbV9iMTsKICAgICBkb3VibGUg
bV9iMjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5l
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCmluZGV4
IGEyMjA0YjQxYTkyZWZmYzhmNDhiN2FlNDdkZjFjYTZkM2JlMWQ3ZTEuLjE5ZjcxZTg2YzViZGY3
ZjcwNjIzOTdkNjUzMTY4ODdmNTY3ODhmN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkRFNQS2VybmVsLmNwcApAQCAtMjksMjEgKzI5LDI3IEBACiAjaW5jbHVkZSAiQmlxdWFk
RFNQS2VybmVsLmgiCiAKICNpbmNsdWRlICJCaXF1YWRQcm9jZXNzb3IuaCIKKyNpbmNsdWRlIDx2
ZWN0b3I+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdm9pZCBCaXF1YWREU1BLZXJuZWw6OnBy
b2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJh
bWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1YWREU1BLZXJuZWw6Om1heWJlVXBkYXRlQ29lZmZpY2ll
bnRzKEJpcXVhZCYgYmlxdWFkLCBib29sIGZpbmFsVmFsdWUpCiB7Ci0gICAgQVNTRVJUKHNvdXJj
ZSAmJiBkZXN0aW5hdGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7Ci0gICAgCi0gICAgLy8gUmVj
b21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBwYXJhbWV0ZXJzIGhhdmUg
Y2hhbmdlZC4KLSAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCBpbXBsZW1lbnQgYSB3
YXkgdGhhdCBhIEJpcXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0cyBpbnRlcm5hbCBmaWx0
ZXIgY29lZmZpY2llbnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0LgotICAgIC8vIFRoZW4g
cmUtZmFjdG9yIHRoaXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZpcnN0IEJpcXVhZERTUEtl
cm5lbCBvZiBlYWNoIEJpcXVhZFByb2Nlc3Nvci4KICAgICBpZiAoYmlxdWFkUHJvY2Vzc29yKCkt
PmZpbHRlckNvZWZmaWNpZW50c0RpcnR5KCkpIHsKLSAgICAgICAgZG91YmxlIHZhbHVlMSA9IGJp
cXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUoKTsKLSAgICAgICAg
ZG91YmxlIHZhbHVlMiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVk
VmFsdWUoKTsKLSAgICAgICAgZG91YmxlIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMygpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgIGRvdWJsZSB2YWx1ZTE7CisgICAgICAg
IGRvdWJsZSB2YWx1ZTI7CisgICAgICAgIGRvdWJsZSBnYWluOwogICAgICAgICAKKyAgICAgICAg
aWYgKGZpbmFsVmFsdWUpIHsKKyAgICAgICAgICAgIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3Nvcigp
LT5wYXJhbWV0ZXIxKCktPnZhbHVlKCk7CisgICAgICAgICAgICB2YWx1ZTIgPSBiaXF1YWRQcm9j
ZXNzb3IoKS0+cGFyYW1ldGVyMigpLT52YWx1ZSgpOworICAgICAgICAgICAgZ2FpbiA9IGJpcXVh
ZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCktPnZhbHVlKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT5zbW9v
dGhlZFZhbHVlKCk7CisgICAgICAgICAgICB2YWx1ZTIgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFy
YW1ldGVyMigpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgICAgICBnYWluID0gYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c21vb3RoZWRWYWx1ZSgpOworICAgICAgICB9CisKICAg
ICAgICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4g
MS4KICAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7CiAgICAgICAgIGRv
dWJsZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFsdWUxIC8gbnlxdWlzdDsKQEAgLTUxLDQyICs1
Nyw3OCBAQCB2b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcgogICAgICAgICAvLyBDb25maWd1cmUgdGhl
IGJpcXVhZCB3aXRoIHRoZSBuZXcgZmlsdGVyIHBhcmFtZXRlcnMgZm9yIHRoZSBhcHByb3ByaWF0
ZSB0eXBlIG9mIGZpbHRlci4KICAgICAgICAgc3dpdGNoIChiaXF1YWRQcm9jZXNzb3IoKS0+dHlw
ZSgpKSB7CiAgICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpMb3dQYXNzOgotICAgICAgICAg
ICAgbV9iaXF1YWQuc2V0TG93cGFzc1BhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2YWx1ZTIp
OworICAgICAgICAgICAgYmlxdWFkLnNldExvd3Bhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5j
eSwgdmFsdWUyKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQmlxdWFkUHJv
Y2Vzc29yOjpIaWdoUGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEhpZ2hwYXNzUGFyYW1z
KG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CisgICAgICAgICAgICBiaXF1YWQuc2V0SGln
aHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogCiAgICAgICAgIGNhc2UgQmlxdWFkUHJvY2Vzc29yOjpCYW5kUGFzczoKLSAgICAgICAg
ICAgIG1fYmlxdWFkLnNldEJhbmRwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVl
Mik7CisgICAgICAgICAgICBiaXF1YWQuc2V0QmFuZHBhc3NQYXJhbXMobm9ybWFsaXplZEZyZXF1
ZW5jeSwgdmFsdWUyKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQmlxdWFk
UHJvY2Vzc29yOjpMb3dTaGVsZjoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldExvd1NoZWxmUGFy
YW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIGdhaW4pOworICAgICAgICAgICAgYmlxdWFkLnNldExv
d1NoZWxmUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIGdhaW4pOwogICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgY2FzZSBCaXF1YWRQcm9jZXNzb3I6OkhpZ2hTaGVsZjoKLSAgICAgICAg
ICAgIG1fYmlxdWFkLnNldEhpZ2hTaGVsZlBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCBnYWlu
KTsKKyAgICAgICAgICAgIGJpcXVhZC5zZXRIaWdoU2hlbGZQYXJhbXMobm9ybWFsaXplZEZyZXF1
ZW5jeSwgZ2Fpbik7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJpcXVhZFBy
b2Nlc3Nvcjo6UGVha2luZzoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldFBlYWtpbmdQYXJhbXMo
bm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyLCBnYWluKTsKKyAgICAgICAgICAgIGJpcXVhZC5z
ZXRQZWFraW5nUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMiwgZ2Fpbik7CiAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJpcXVhZFByb2Nlc3Nvcjo6Tm90Y2g6Ci0g
ICAgICAgICAgICBtX2JpcXVhZC5zZXROb3RjaFBhcmFtcyhub3JtYWxpemVkRnJlcXVlbmN5LCB2
YWx1ZTIpOworICAgICAgICAgICAgYmlxdWFkLnNldE5vdGNoUGFyYW1zKG5vcm1hbGl6ZWRGcmVx
dWVuY3ksIHZhbHVlMik7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIEJpcXVh
ZFByb2Nlc3Nvcjo6QWxscGFzczoKLSAgICAgICAgICAgIG1fYmlxdWFkLnNldEFsbHBhc3NQYXJh
bXMobm9ybWFsaXplZEZyZXF1ZW5jeSwgdmFsdWUyKTsKKyAgICAgICAgICAgIGJpcXVhZC5zZXRB
bGxwYXNzUGFyYW1zKG5vcm1hbGl6ZWRGcmVxdWVuY3ksIHZhbHVlMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KK30KKwordm9pZCBCaXF1YWREU1BLZXJuZWw6OnByb2Nl
c3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVz
VG9Qcm9jZXNzKQoreworICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24gJiYgYmlxdWFk
UHJvY2Vzc29yKCkpOworICAgIAorICAgIC8vIFJlY29tcHV0ZSBmaWx0ZXIgY29lZmZpY2llbnRz
IGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuCisgICAgLy8gRklYTUU6IGFz
IGFuIG9wdGltaXphdGlvbiwgaW1wbGVtZW50IGEgd2F5IHRoYXQgYSBCaXF1YWQgb2JqZWN0IGNh
biBzaW1wbHkgY29weSBpdHMgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50cyBmcm9tIGFub3Ro
ZXIgQmlxdWFkIG9iamVjdC4KKyAgICAvLyBUaGVuIHJlLWZhY3RvciB0aGlzIGNvZGUgdG8gb25s
eSBydW4gZm9yIHRoZSBmaXJzdCBCaXF1YWREU1BLZXJuZWwgb2YgZWFjaCBCaXF1YWRQcm9jZXNz
b3IuCisKKyAgICBtYXliZVVwZGF0ZUNvZWZmaWNpZW50cyhtX2JpcXVhZCwgZmFsc2UpOwogCiAg
ICAgbV9iaXF1YWQucHJvY2Vzcyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3Mp
OwogfQogCit2b2lkIEJpcXVhZERTUEtlcm5lbDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5G
cmVxdWVuY2llcywgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwgZmxvYXQqIHBoYXNlUmVzcG9u
c2UpCit7CisgICAgc3RkOjp2ZWN0b3I8ZmxvYXQ+IGZyZXF1ZW5jeShuRnJlcXVlbmNpZXMpOwor
CisgICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7CisKKyAgICBmb3IgKGludCBr
ID0gMDsgayA8IG5GcmVxdWVuY2llczsgKytrKQorICAgICAgICBmcmVxdWVuY3lba10gPSBmcmVx
dWVuY3lIeltrXSAvIG55cXVpc3Q7CisKKyAgICBtYXliZVVwZGF0ZUNvZWZmaWNpZW50cyhtX2Jp
cXVhZCwgZmFsc2UpOworCisgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIGZpbmFsIHZhbHVlcyBv
ZiB0aGUgY29lZmZpY2llbnRzIGFuZCBjb21wdXRlCisgICAgLy8gdGhlIHJlc3BvbnNlIGZyb20g
dGhhdCBpbnN0ZWFkIG9mIHNvbWUgaW50ZXJtZWRpYXRlIHNtb290aGVkCisgICAgLy8gc2V0LiBU
aGUgY29lZmZpY2llbnRzIHVwZGF0ZSBhIG5ldyBiaXF1YWQgdG8gbGVhdmUgdGhlCisgICAgLy8g
b3JpZ2luYWwgdW5jaGFuZ2VkIHNvIHdlIGRvbid0IG1lc3MgdXAgdGhlIGF1ZGlvIHByb2Nlc3Np
bmcgaW4KKyAgICAvLyBhbnkgd2F5LgorCisgICAgQmlxdWFkIGJpcXVhZDsKKyAgICAKKyAgICBt
YXliZVVwZGF0ZUNvZWZmaWNpZW50cyhiaXF1YWQsIHRydWUpOworCisgICAgYmlxdWFkLmdldEZy
ZXF1ZW5jeVJlc3BvbnNlKG5GcmVxdWVuY2llcywgJmZyZXF1ZW5jeVswXSwgbWFnUmVzcG9uc2Us
IHBoYXNlUmVzcG9uc2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkRFNQS2VybmVsLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJu
ZWwuaAppbmRleCA0N2QwZjM0MzlmZmYzY2E3NDljZWZmNjE1YTFmODc2NGRiNmY4NWRmLi44NjAw
NWFkM2JjOWFhYTFlNTU2NDVmYzJhMTVlMzMxMTU5Y2RjZTY5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaApAQCAtNDUsMTAgKzQ1LDE2IEBAIHB1YmxpYzoKICAg
ICAvLyBBdWRpb0RTUEtlcm5lbAogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKGNvbnN0IGZsb2F0
KiBzb3VyY2UsIGZsb2F0KiBkZXN0LCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoKSB7IG1fYmlxdWFkLnJlc2V0KCk7IH0KLSAgICAKKworICAgIC8vIEdl
dCB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRoZSBn
aXZlbgorICAgIC8vIHNldCBvZiBmcmVxdWVuY2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVzcG9u
c2UgaXMgaW4gcmFkaWFucy4KKyAgICB2aXJ0dWFsIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2Uo
aW50IG5GcmVxdWVuY2llcywgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsIGZsb2F0KiBwaGFzZVJlc3Bv
bnNlKTsKIHByb3RlY3RlZDoKICAgICBCaXF1YWQgbV9iaXF1YWQ7CiAgICAgQmlxdWFkUHJvY2Vz
c29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNz
b3IqPihwcm9jZXNzb3IoKSk7IH0KKworICAgIHZvaWQgbWF5YmVVcGRhdGVDb2VmZmljaWVudHMo
QmlxdWFkJiwgYm9vbCBmaW5hbFZhbHVlKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAKaW5kZXggZjE2
ZDhlNWY5NmQ3NTdiZjk1ZDU3MjQyYjZlMmRiOTVjZTYxY2YwYS4uZjhlYzhlZDFjMDNjMmJjMGIw
ZmUwODY0MGFiNzZjMmEwOGI4YmYzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHAKQEAgLTUzLDYgKzUzLDIwIEBAIHZvaWQgQmlxdWFkRmlsdGVyTm9k
ZTo6c2V0VHlwZSh1bnNpZ25lZCBzaG9ydCB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICBi
aXF1YWRQcm9jZXNzb3IoKS0+c2V0VHlwZShzdGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3I6OkZp
bHRlclR5cGU+KHR5cGUpKTsKIH0KIAorCit2b2lkIEJpcXVhZEZpbHRlck5vZGU6OmdldEZyZXF1
ZW5jeVJlc3BvbnNlKEZsb2F0MzJBcnJheSogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSogbWFnUmVzcG9uc2UsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJBcnJheSog
cGhhc2VSZXNwb25zZSkKK3sKKyAgICBpbnQgbiA9IHN0ZDo6bWluKGZyZXF1ZW5jeUh6LT5sZW5n
dGgoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWluKG1hZ1Jlc3BvbnNlLT5sZW5ndGgo
KSwgcGhhc2VSZXNwb25zZS0+bGVuZ3RoKCkpKTsKKyAgICAKKyAgICBiaXF1YWRQcm9jZXNzb3Io
KS0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnJlcXVlbmN5SHotPmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWFnUmVzcG9uc2UtPmRhdGEoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2VSZXNwb25zZS0+ZGF0YSgpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAppbmRleCA2ODNi
MmEzOWQ0NzRmODNlZWNkNmI1NjUyYzQyMWVlNjgwYjU3NzkzLi5lYjUyY2I3NWE4NjY0YmNmNDQ2
NWRlNTlkZmM2M2NmNjdmZWNjNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFk
RmlsdGVyTm9kZS5oCkBAIC01Nyw3ICs1NywxMiBAQCBwdWJsaWM6CiAgICAgQXVkaW9QYXJhbSog
ZnJlcXVlbmN5KCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQog
ICAgIEF1ZGlvUGFyYW0qIHEoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MigpOyB9CiAgICAgQXVkaW9QYXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3Nvcigp
LT5wYXJhbWV0ZXIzKCk7IH0KLSAgICAKKworICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBw
aGFzZSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgorICAgIC8vIHNldCBvZiBm
cmVxdWVuY2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoRmxvYXQzMkFycmF5KiBmcmVxdWVu
Y3lIeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5
KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv
YXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKTsKIHByaXZhdGU6CiAgICAgQmlxdWFkRmlsdGVyTm9k
ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAppbmRleCA1ODYxYjg4OWNjZjU3MjViYzJkOGRk
OTRhYzJlNDk4ZWY4MjZkZTZkLi44NGUwMTVhYTMzODE1MDU0MTdiMTUwMTY1MzM0NGMzZTg3Y2Y2
MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbApA
QCAtNDMsNSArNDMsOSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXVkaW9QYXJhbSBmcmVxdWVuY3k7IC8vIGluIEhlcnR6CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBdWRpb1BhcmFtIFE7IC8vIFF1YWxpdHkgZmFjdG9yCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGdhaW47IC8vIGluIERlY2liZWxzCisKKyAgICAgICAgdm9p
ZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbiBGbG9hdDMyQXJyYXkgZnJlcXVlbmN5SHosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRmxvYXQzMkFycmF5IG1hZ1Jlc3BvbnNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBwaGFz
ZVJlc3BvbnNlKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5jcHAKaW5kZXggMTkyNzU1YTViOGVmOTkzNWZhYmM2NDI5MGU3NjQxZDZlMjU4ODk3
OC4uMjdiZWJiODhhMmRhYWRkMDNjZWZmOTUzY2NjNjc2YzA1ZWNkZjgyMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCkBAIC05MCwzMyArOTAsNDQgQEAg
UGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwo
KQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKIH0KIAot
dm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1YWRQcm9jZXNz
b3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKQogewotICAgIGlmICghaXNJbml0aWFsaXpl
ZCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgICAgIAotICAgIC8vIERlYWwgd2l0aCBzbW9vdGhpbmcgLyBkZS16aXBwZXJpbmcu
ICBTdGFydCBvdXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4K
LSAgICAvLyBUaGUgQmlxdWFkRFNQS2VybmVsIG9iamVjdHMgcmVseSBvbiB0aGlzIHZhbHVlIHRv
IHNlZSBpZiB0aGV5IG5lZWQgdG8gcmUtY29tcHV0ZSB0aGVpciBpbnRlcm5hbCBmaWx0ZXIgY29l
ZmZpY2llbnRzLgorICAgIC8vIERlYWwgd2l0aCBzbW9vdGhpbmcgLyBkZS16aXBwZXJpbmcuIFN0
YXJ0IG91dCBhc3N1bWluZyBmaWx0ZXIKKyAgICAvLyBwYXJhbWV0ZXJzIGFyZSBub3QgY2hhbmdp
bmcuCisKKyAgICAvLyBUaGUgQmlxdWFkRFNQS2VybmVsIG9iamVjdHMgcmVseSBvbiB0aGlzIHZh
bHVlIHRvIHNlZSBpZiB0aGV5CisgICAgLy8gbmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVy
bmFsIGZpbHRlciBjb2VmZmljaWVudHMuCiAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9
IGZhbHNlOwogICAgIAogICAgIGlmIChtX2hhc0p1c3RSZXNldCkgewotICAgICAgICAvLyBTbmFw
IHRvIGV4YWN0IHZhbHVlcyBmaXJzdCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290aCBmb3Ig
c3Vic2VxdWVudCBjaGFuZ2VzLgorICAgICAgICAvLyBTbmFwIHRvIGV4YWN0IHZhbHVlcyBmaXJz
dCB0aW1lIGFmdGVyIHJlc2V0LCB0aGVuIHNtb290aAorICAgICAgICAvLyBmb3Igc3Vic2VxdWVu
dCBjaGFuZ2VzLgogICAgICAgICBtX3BhcmFtZXRlcjEtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwog
ICAgICAgICBtX3BhcmFtZXRlcjItPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwogICAgICAgICBtX3Bh
cmFtZXRlcjMtPnJlc2V0U21vb3RoZWRWYWx1ZSgpOwogICAgICAgICBtX2ZpbHRlckNvZWZmaWNp
ZW50c0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgbV9oYXNKdXN0UmVzZXQgPSBmYWxzZTsKICAgICB9
IGVsc2UgewotICAgICAgICAvLyBTbW9vdGggYWxsIG9mIHRoZSBmaWx0ZXIgcGFyYW1ldGVycy4g
IElmIHRoZXkgaGF2ZW4ndCB5ZXQgY29udmVyZ2VkIHRvIHRoZWlyIHRhcmdldCB2YWx1ZSB0aGVu
IG1hcmsgY29lZmZpY2llbnRzIGFzIGRpcnR5LgorICAgICAgICAvLyBTbW9vdGggYWxsIG9mIHRo
ZSBmaWx0ZXIgcGFyYW1ldGVycy4gSWYgdGhleSBoYXZlbid0IHlldAorICAgICAgICAvLyBjb252
ZXJnZWQgdG8gdGhlaXIgdGFyZ2V0IHZhbHVlIHRoZW4gbWFyayBjb2VmZmljaWVudHMgYXMKKyAg
ICAgICAgLy8gZGlydHkuCiAgICAgICAgIGJvb2wgaXNTdGFibGUxID0gbV9wYXJhbWV0ZXIxLT5z
bW9vdGgoKTsKICAgICAgICAgYm9vbCBpc1N0YWJsZTIgPSBtX3BhcmFtZXRlcjItPnNtb290aCgp
OwogICAgICAgICBib29sIGlzU3RhYmxlMyA9IG1fcGFyYW1ldGVyMy0+c21vb3RoKCk7CiAgICAg
ICAgIGlmICghKGlzU3RhYmxlMSAmJiBpc1N0YWJsZTIgJiYgaXNTdGFibGUzKSkKICAgICAgICAg
ICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSB0cnVlOwogICAgIH0KK30KKwordm9pZCBC
aXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3Rp
bmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQoreworICAgIGlmICghaXNJbml0aWFsaXpl
ZCgpKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAgICAgICAgIAorICAgIGNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKTsKKyAgICAgICAg
ICAgIAogICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2Ygb3VyIGlucHV0LCBwcm9jZXNzIHVzaW5n
IHRoZSBjb3JyZXNwb25kaW5nIEJpcXVhZERTUEtlcm5lbCBpbnRvIHRoZSBvdXRwdXQgY2hhbm5l
bC4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9rZXJuZWxzLnNpemUoKTsgKytpKQog
ICAgICAgICBtX2tlcm5lbHNbaV0tPnByb2Nlc3Moc291cmNlLT5jaGFubmVsKGkpLT5kYXRhKCks
IGRlc3RpbmF0aW9uLT5jaGFubmVsKGkpLT5kYXRhKCksIGZyYW1lc1RvUHJvY2Vzcyk7CkBAIC0x
MzAsNiArMTQxLDMwIEBAIHZvaWQgQmlxdWFkUHJvY2Vzc29yOjpzZXRUeXBlKEZpbHRlclR5cGUg
dHlwZSkKICAgICB9CiB9CiAKK3ZvaWQgQmlxdWFkUHJvY2Vzc29yOjpnZXRGcmVxdWVuY3lSZXNw
b25zZShpbnQgbkZyZXF1ZW5jaWVzLCBmbG9hdCogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNl
KQoreworICAgIC8vIE1ha2Ugc3VyZSB0aGluZ3MgYXJlIGluaXRpYWxpemVkIGJlZm9yZSB3ZSB0
cnkgdG8gY29tcHV0ZSB0aGUKKyAgICAvLyBtYWduaXR1ZGUuCisgICAgaWYgKCFpc0luaXRpYWxp
emVkKCkpCisgICAgICAgIGluaXRpYWxpemUoKTsKKyAgICAKKyAgICBjaGVja0ZvckRpcnR5Q29l
ZmZpY2llbnRzKCk7CisKKyAgICAvLyBFYWNoIGJpcXVhZCBpcyBzdXBwb3NlZCB0byBiZSB0aGUg
c2FtZSAoPykgc28ganVzdCBncmFiIHRoZQorICAgIC8vIG1hZ25pdHVkZSBmcm9tIHRoZSBmaXJz
dC4KKyAgICAKKyAgICBpZiAobV9rZXJuZWxzLnNpemUoKSkgCisgICAgICAgIG1fa2VybmVsc1sw
XS0+Z2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3lIeiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdSZXNwb25zZSwgcGhhc2VS
ZXNwb25zZSk7CisgICAgZWxzZQorICAgICAgICBmb3IgKGludCBrID0gMDsgayA8IG5GcmVxdWVu
Y2llczsgKytrKSB7CisgICAgICAgICAgICBtYWdSZXNwb25zZVtrXSA9IDAuMGY7CisgICAgICAg
ICAgICBwaGFzZVJlc3BvbnNlW2tdID0gMC4wZjsKKyAgICAgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmggYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAppbmRleCAxNmVmNDA1ZGUyYzQ0NTdmM2ExNGNk
ZGM1MTE1YzM5YzE3NTA1YzlmLi5lZTgwZjI1MTM2MTk5YzFlZTNlNTFiYTc4YzY3N2JjMzVjNzVh
YzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaApAQCAtNjAs
NiArNjAsMTMgQEAgcHVibGljOgogICAgICAgICAKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2VzcyhB
dWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1By
b2Nlc3MpOwogCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNlIG9m
IHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0IG9mIGZyZXF1ZW5jaWVzIChpbiBI
eikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgorICAgIHZpcnR1YWwgdm9pZCBn
ZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLCBmbG9hdCogZnJlcXVlbmN5SHos
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25z
ZSwgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOworCisgICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yRGly
dHlDb2VmZmljaWVudHMoKTsKKyAgICAKICAgICBib29sIGZpbHRlckNvZWZmaWNpZW50c0RpcnR5
KCkgY29uc3QgeyByZXR1cm4gbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eTsgfQogCiAgICAgQXVk
aW9QYXJhbSogcGFyYW1ldGVyMSgpIHsgcmV0dXJuIG1fcGFyYW1ldGVyMS5nZXQoKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113591</attachid>
            <date>2011-11-03 17:36:13 -0700</date>
            <delta_ts>2011-11-04 09:27:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71055-20111103173612.patch</filename>
            <type>text/plain</type>
            <size>16777</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg5NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWE2ZGEwOTg4ODk0ZDI3
NzZjZGNiNzU1Yjg4MTMwYmJhMTU4YTA3Li41NDM2ZGM4OTFiYjM4MGQ3MjAzM2RkOWI2Y2JhYzky
ZjQ4ZjM5OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMTEtMDMgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgQWRkIG1ldGhvZHMgdG8gY29tcHV0
ZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNlIGZvciBiaXF1YWRzCisgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDU1CisKKyAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgor
ICAgICAgICBDb21wdXRlcyB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSAocmFkaWFucykgcmVzcG9u
c2UgZm9yIHRoZSBnaXZlbgorICAgICAgICBiaXF1YWQgYXQgdGhlIHNwZWNpZmllZCBzZXQgb2Yg
KG5vcm1hbGl6ZWQpIGZyZXF1ZW5jaWVzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdl
YmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BL
ZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0aGF0IHVwZGF0ZXMgZmlsdGVyIGNvZWZmaWNpZW50cy4gIEFsbG93IHRoZQor
ICAgICAgICBjYWxsZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBzbW9vdGhlZCB2YWx1ZXMgYXJl
IHVzZWQgb3Igbm90IGFuZAorICAgICAgICB3aGV0aGVyIHdlIGRvIHRoZSB1cGRhdGUgZXZlbiBp
ZiB0aGUgY29lZmZpY2llbnRzIGFyZSBub3QgZGlydHkuCisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICBVc2UgdXBkYXRlQ29lZmZpY2llbnRzSWZO
ZWNlc3NhcnkgdG8gdXBkYXRlLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRFNQS2VybmVsOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxtZW50YXRpb24gb2YgZ2V0RnJlcXVl
bmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6CisgICAg
ICAgIERlY2xhcmUgZ2V0RnJlcXVlbmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2RlOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGdldEZyZXF1
ZW5jeVJlc3BvbnNlCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oOgorICAg
ICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsOgorICAgICAgICBEZWZpbmUgaW50ZXJmYWNlIHRvIGdldEZyZXF1
ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVu
dHMpOgorICAgICAgICBGYWN0b3Igb3V0IGNvZGUgZm9yIGNoZWNraW5nIGZvciBkaXJ0eSBjb2Vm
ZmljaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MpOgor
ICAgICAgICBVc2UgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OkJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgorICAgICAgICBJbXBsZW1l
bnRhdGlvbiBvZiBnZXRGcmVxdWVuY3lSZXNwb25zZQorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorCiAy
MDExLTExLTAxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
U1NSdWxlOiBEZXZpcnR1YWxpemUgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggMzU2ODEwMjc1ZjYzOGE2ODkwNDM2
Njg0YjAyZmU4Y2NmNDA1MmE3Yy4uMDQ4ZDAwYTllOTY3NzMyNzM5Y2NhOTRiMGI1ODhiZjBhMGY3
OWQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCkBAIC0zNzUs
NiArMzc1LDQ1IEBAIHZvaWQgQmlxdWFkOjpzZXRBbGxwYXNzUG9sZShjb25zdCBDb21wbGV4ICZw
b2xlKQogICAgIHNldFplcm9Qb2xlUGFpcnMoemVybywgcG9sZSk7CiB9CiAKK3ZvaWQgQmlxdWFk
OjpnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLCBmbG9hdCogZnJlcXVlbmN5
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwg
ZmxvYXQqIHBoYXNlUmVzcG9uc2UpCit7CisgICAgLy8gRXZhbHVhdGUgdGhlIFotdHJhbnNmb3Jt
IG9mIHRoZSBmaWx0ZXIgYXQgZ2l2ZW4gbm9ybWFsaXplZAorICAgIC8vIGZyZXF1ZW5jeSBmcm9t
IDAgdG8gMS4gICgxIGNvcnJlc3BvbmRzIHRvIHRoZSBOeXF1aXN0CisgICAgLy8gZnJlcXVlbmN5
LikKKyAgICAvLworICAgIC8vIFRoZSB6LXRyYW5zZm9ybSBvZiB0aGUgZmlsdGVyIGlzCisgICAg
Ly8KKyAgICAvLyBZKHopID0gKGIwICsgYjEqel4oLTEpICsgYjIqel4oLTIpKS8oMSArIGExKnpe
KC0xKSArIGEyKnpeKC0yKSkKKyAgICAvLworICAgIC8vIEV2YWx1YXRlIGFzCisgICAgLy8KKyAg
ICAvLyBiMCArIChiMSArIGIyKnoxKSp6MQorICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgLy8gMSArIChhMSArIGEyKnoxKSp6MQorICAgIC8vCisgICAgLy8gd2l0aCB6MSA9IDEveiBh
bmQgeiA9IGV4cChqKnBpKmZyZXF1ZW5jeSkuIEhlbmNlIHoxID0gZXhwKC1qKnBpKmZyZXF1ZW5j
eSkKKworICAgIC8vIEdyYWIgdGhlIGZpbHRlciBjb2VmZmljaWVudHMgdG8gbG9jYWxzIHNvIHRo
ZXkgY2FuJ3QgY2hhbmdlCisgICAgLy8gZnJvbSB1bmRlcm5lYXRoIHVzLgorICAgIC8vCisgICAg
ZG91YmxlIGIwID0gbV9iMDsKKyAgICBkb3VibGUgYjEgPSBtX2IxOworICAgIGRvdWJsZSBiMiA9
IG1fYjI7CisgICAgZG91YmxlIGExID0gbV9hMTsKKyAgICBkb3VibGUgYTIgPSBtX2EyOworICAg
IAorICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbkZyZXF1ZW5jaWVzOyArK2spIHsKKyAgICAgICAg
ZG91YmxlIG9tZWdhID0gLXBpRG91YmxlICogZnJlcXVlbmN5W2tdOworICAgICAgICBDb21wbGV4
IHogPSBDb21wbGV4KGNvcyhvbWVnYSksIHNpbihvbWVnYSkpOworICAgICAgICBDb21wbGV4IG51
bWVyYXRvciA9IGIwICsgKGIxICsgYjIgKiB6KSAqIHo7CisgICAgICAgIENvbXBsZXggZGVub21p
bmF0b3IgPSBDb21wbGV4KDEsIDApICsgKGExICsgYTIgKiB6KSAqIHo7CisgICAgICAgIENvbXBs
ZXggcmVzcG9uc2UgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKKyAgICAgICAgbWFnUmVzcG9u
c2Vba10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYWJzKHJlc3BvbnNlKSk7CisgICAgICAgIHBoYXNl
UmVzcG9uc2Vba10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRhbjIoaW1hZyhyZXNwb25zZSksIHJl
YWwocmVzcG9uc2UpKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNl
bmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vQmlxdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1
YWQuaAppbmRleCAzZmNlN2RiOTdkNzQwM2NlMDE0NDJiODVlNjk0Y2FkZGI4MDBlZGYwLi42MjYz
YWNlYjI5OWY3ZTE4MDY4NjgzN2FjMzk2N2MyYWEwMTE1N2NjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9CaXF1YWQuaApAQCAtNzAsMTAgKzcwLDE5IEBAIHB1YmxpYzoKICAgICAvLyBS
ZXNldHMgZmlsdGVyIHN0YXRlCiAgICAgdm9pZCByZXNldCgpOwogCisgICAgLy8gRmlsdGVyIHJl
c3BvbnNlIGF0IGEgc2V0IG9mIG4gZnJlcXVlbmNpZXMuIFRoZSBtYWduaXR1ZGUgYW5kCisgICAg
Ly8gcGhhc2UgcmVzcG9uc2UgYXJlIHJldHVybmVkIGluIG1hZ1Jlc3BvbnNlIGFuZCBwaGFzZVJl
c3BvbnNlLgorICAgIC8vIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgorICAgIHZv
aWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0KiBmcmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogcGhhc2VSZXNwb25zZSk7CiBwcml2YXRlOgogICAgIHZvaWQgc2V0Tm9ybWFsaXpl
ZENvZWZmaWNpZW50cyhkb3VibGUgYjAsIGRvdWJsZSBiMSwgZG91YmxlIGIyLCBkb3VibGUgYTAs
IGRvdWJsZSBhMSwgZG91YmxlIGEyKTsKLQotICAgIC8vIEZpbHRlciBjb2VmZmljaWVudHMKKyAg
ICAKKyAgICAvLyBGaWx0ZXIgY29lZmZpY2llbnRzLiBUaGUgZmlsdGVyIGlzIGRlZmluZWQgYXMK
KyAgICAvLworICAgIC8vIHlbbl0gKyBtX2ExKnlbbi0xXSArIG1fYTIqeVtuLTJdID0gbV9iMCp4
W25dICsgbV9iMSp4W24tMV0gKyBtX2IyKnhbbi0yXS4KICAgICBkb3VibGUgbV9iMDsKICAgICBk
b3VibGUgbV9iMTsKICAgICBkb3VibGUgbV9iMjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9C
aXF1YWREU1BLZXJuZWwuY3BwCmluZGV4IGEyMjA0YjQxYTkyZWZmYzhmNDhiN2FlNDdkZjFjYTZk
M2JlMWQ3ZTEuLjg1OTY2ZWRkODE3YjUwYzk3NzAyYWNkMWE5NDEyY2FmN2U3ZWNiOWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcApAQCAtMjksMjEgKzI5
LDI3IEBACiAjaW5jbHVkZSAiQmlxdWFkRFNQS2VybmVsLmgiCiAKICNpbmNsdWRlICJCaXF1YWRQ
cm9jZXNzb3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdm9pZCBCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwg
ZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1YWRE
U1BLZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3RoaW5n
LCBib29sIGZvcmNlVXBkYXRlKQogewotICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRpb24g
JiYgYmlxdWFkUHJvY2Vzc29yKCkpOwotICAgIAotICAgIC8vIFJlY29tcHV0ZSBmaWx0ZXIgY29l
ZmZpY2llbnRzIGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuCi0gICAgLy8g
RklYTUU6IGFzIGFuIG9wdGltaXphdGlvbiwgaW1wbGVtZW50IGEgd2F5IHRoYXQgYSBCaXF1YWQg
b2JqZWN0IGNhbiBzaW1wbHkgY29weSBpdHMgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50cyBm
cm9tIGFub3RoZXIgQmlxdWFkIG9iamVjdC4KLSAgICAvLyBUaGVuIHJlLWZhY3RvciB0aGlzIGNv
ZGUgdG8gb25seSBydW4gZm9yIHRoZSBmaXJzdCBCaXF1YWREU1BLZXJuZWwgb2YgZWFjaCBCaXF1
YWRQcm9jZXNzb3IuCi0gICAgaWYgKGJpcXVhZFByb2Nlc3NvcigpLT5maWx0ZXJDb2VmZmljaWVu
dHNEaXJ0eSgpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+
cGFyYW1ldGVyMSgpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTIgPSBi
aXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAg
IGRvdWJsZSBnYWluID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c21vb3RoZWRW
YWx1ZSgpOworICAgIGlmIChmb3JjZVVwZGF0ZSB8fCBiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVy
Q29lZmZpY2llbnRzRGlydHkoKSkgeworICAgICAgICBkb3VibGUgdmFsdWUxOworICAgICAgICBk
b3VibGUgdmFsdWUyOworICAgICAgICBkb3VibGUgZ2FpbjsKICAgICAgICAgCisgICAgICAgIGlm
ICh1c2VTbW9vdGhpbmcpIHsKKyAgICAgICAgICAgIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3Nvcigp
LT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgICAgIHZhbHVlMiA9IGJp
cXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKKyAgICAgICAg
ICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZhbHVl
KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNz
b3IoKS0+cGFyYW1ldGVyMSgpLT52YWx1ZSgpOworICAgICAgICAgICAgdmFsdWUyID0gYmlxdWFk
UHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGdhaW4gPSBi
aXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT52YWx1ZSgpOworICAgICAgICB9CisKICAg
ICAgICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAgLT4g
MS4KICAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7CiAgICAgICAgIGRv
dWJsZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFsdWUxIC8gbnlxdWlzdDsKQEAgLTgzLDEwICs4
OSw0NyBAQCB2b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNl
LCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcgogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9Cit9CisKK3ZvaWQgQmlxdWFkRFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZs
b2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
K3sKKyAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYmIGJpcXVhZFByb2Nlc3Nvcigp
KTsKKyAgICAKKyAgICAvLyBSZWNvbXB1dGUgZmlsdGVyIGNvZWZmaWNpZW50cyBpZiBhbnkgb2Yg
dGhlIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkLgorICAgIC8vIEZJWE1FOiBhcyBhbiBvcHRpbWl6
YXRpb24sIGltcGxlbWVudCBhIHdheSB0aGF0IGEgQmlxdWFkIG9iamVjdCBjYW4gc2ltcGx5IGNv
cHkgaXRzIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMgZnJvbSBhbm90aGVyIEJpcXVhZCBv
YmplY3QuCisgICAgLy8gVGhlbiByZS1mYWN0b3IgdGhpcyBjb2RlIHRvIG9ubHkgcnVuIGZvciB0
aGUgZmlyc3QgQmlxdWFkRFNQS2VybmVsIG9mIGVhY2ggQmlxdWFkUHJvY2Vzc29yLgorCisgICAg
dXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkodHJ1ZSwgZmFsc2UpOwogCiAgICAgbV9iaXF1
YWQucHJvY2Vzcyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3MpOwogfQogCit2
b2lkIEJpcXVhZERTUEtlcm5lbDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2ll
cywgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwgZmxvYXQqIHBoYXNlUmVzcG9uc2UpCit7Cisg
ICAgYm9vbCBpc0dvb2QgPSBuRnJlcXVlbmNpZXMgPiAwICYmIGZyZXF1ZW5jeUh6ICYmIG1hZ1Jl
c3BvbnNlICYmIHBoYXNlUmVzcG9uc2U7CisgICAgQVNTRVJUKGlzR29vZCk7CisgICAgaWYgKCFp
c0dvb2QpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxmbG9hdD4gZnJlcXVlbmN5KG5G
cmVxdWVuY2llcyk7CisKKyAgICBkb3VibGUgbnlxdWlzdCA9IHRoaXMtPm55cXVpc3QoKTsKKwor
ICAgIC8vIENvbnZlcnQgZnJvbSBmcmVxdWVuY3kgaW4gSHogdG8gbm9ybWFsaXplZCBmcmVxdWVu
Y3kgKDAgLT4gMSksCisgICAgLy8gd2l0aCAxIGVxdWFsIHRvIHRoZSBOeXF1aXN0IGZyZXF1ZW5j
eS4KKyAgICBmb3IgKGludCBrID0gMDsgayA8IG5GcmVxdWVuY2llczsgKytrKQorICAgICAgICBm
cmVxdWVuY3lba10gPSBmcmVxdWVuY3lIeltrXSAvIG55cXVpc3Q7CisKKyAgICAvLyBXZSB3YW50
IHRvIGdldCB0aGUgZmluYWwgdmFsdWVzIG9mIHRoZSBjb2VmZmljaWVudHMgYW5kIGNvbXB1dGUK
KyAgICAvLyB0aGUgcmVzcG9uc2UgZnJvbSB0aGF0IGluc3RlYWQgb2Ygc29tZSBpbnRlcm1lZGlh
dGUgc21vb3RoZWQKKyAgICAvLyBzZXQuIAorCisgICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNl
c3NhcnkoZmFsc2UsIHRydWUpOworCisgICAgbV9iaXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9uc2Uo
bkZyZXF1ZW5jaWVzLCAmZnJlcXVlbmN5WzBdLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVE
SU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCmluZGV4IDQ3ZDBm
MzQzOWZmZjNjYTc0OWNlZmY2MTVhMWY4NzY0ZGI2Zjg1ZGYuLmJjODljOWY3ZTY1YmFlNGM2OTQ5
NGVlNzk4ZTdiNGEzZjMwODQxZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0JpcXVhZERTUEtlcm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERT
UEtlcm5lbC5oCkBAIC00NSwxMCArNDUsMTYgQEAgcHVibGljOgogICAgIC8vIEF1ZGlvRFNQS2Vy
bmVsCiAgICAgdmlydHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3QsIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgp
IHsgbV9iaXF1YWQucmVzZXQoKTsgfQotICAgIAorCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUg
YW5kIHBoYXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0
IG9mIGZyZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5z
LgorICAgIHZpcnR1YWwgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVz
LCBmbG9hdCogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBtYWdSZXNwb25zZSwgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOwogcHJvdGVjdGVk
OgogICAgIEJpcXVhZCBtX2JpcXVhZDsKICAgICBCaXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nl
c3NvcigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcio+KHByb2Nlc3Nvcigp
KTsgfQorCisgICAgdm9pZCB1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShib29sIHVzZVNt
b290aGluZywgYm9vbCBmb3JjZVVwZGF0ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCmluZGV4IGYx
NmQ4ZTVmOTZkNzU3YmY5NWQ1NzI0MmI2ZTJkYjk1Y2U2MWNmMGEuLjY4OTljYzc4Y2M1MjUzNjEy
MWI0NWEwODgyN2ViYWM5MDkwZTM2NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuY3BwCkBAIC01Myw2ICs1MywyNSBAQCB2b2lkIEJpcXVhZEZpbHRlck5v
ZGU6OnNldFR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAg
YmlxdWFkUHJvY2Vzc29yKCktPnNldFR5cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29yOjpG
aWx0ZXJUeXBlPih0eXBlKSk7CiB9CiAKKwordm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpnZXRGcmVx
dWVuY3lSZXNwb25zZShGbG9hdDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jlc3BvbnNlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkq
IHBoYXNlUmVzcG9uc2UpCit7CisgICAgaWYgKCFmcmVxdWVuY3lIeiB8fCAhbWFnUmVzcG9uc2Ug
fHwgIXBoYXNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgbiA9IHN0
ZDo6bWluKGZyZXF1ZW5jeUh6LT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZDo6
bWluKG1hZ1Jlc3BvbnNlLT5sZW5ndGgoKSwgcGhhc2VSZXNwb25zZS0+bGVuZ3RoKCkpKTsKKwor
ICAgIGlmIChuKSB7CisgICAgICAgIGJpcXVhZFByb2Nlc3NvcigpLT5nZXRGcmVxdWVuY3lSZXNw
b25zZShuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJlcXVlbmN5SHotPmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hZ1Jlc3BvbnNlLT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZVJlc3BvbnNlLT5kYXRhKCkpOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaAppbmRleCA2ODNi
MmEzOWQ0NzRmODNlZWNkNmI1NjUyYzQyMWVlNjgwYjU3NzkzLi5lYjUyY2I3NWE4NjY0YmNmNDQ2
NWRlNTlkZmM2M2NmNjdmZWNjNGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWRGaWx0ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFk
RmlsdGVyTm9kZS5oCkBAIC01Nyw3ICs1NywxMiBAQCBwdWJsaWM6CiAgICAgQXVkaW9QYXJhbSog
ZnJlcXVlbmN5KCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjEoKTsgfQog
ICAgIEF1ZGlvUGFyYW0qIHEoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVy
MigpOyB9CiAgICAgQXVkaW9QYXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3Nvcigp
LT5wYXJhbWV0ZXIzKCk7IH0KLSAgICAKKworICAgIC8vIEdldCB0aGUgbWFnbml0dWRlIGFuZCBw
aGFzZSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgorICAgIC8vIHNldCBvZiBm
cmVxdWVuY2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoRmxvYXQzMkFycmF5KiBmcmVxdWVu
Y3lIeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5
KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxv
YXQzMkFycmF5KiBwaGFzZVJlc3BvbnNlKTsKIHByaXZhdGU6CiAgICAgQmlxdWFkRmlsdGVyTm9k
ZShBdWRpb0NvbnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAppbmRleCA1ODYxYjg4OWNjZjU3MjViYzJkOGRk
OTRhYzJlNDk4ZWY4MjZkZTZkLi44NGUwMTVhYTMzODE1MDU0MTdiMTUwMTY1MzM0NGMzZTg3Y2Y2
MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbApA
QCAtNDMsNSArNDMsOSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICByZWFkb25seSBhdHRyaWJ1
dGUgQXVkaW9QYXJhbSBmcmVxdWVuY3k7IC8vIGluIEhlcnR6CiAgICAgICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBBdWRpb1BhcmFtIFE7IC8vIFF1YWxpdHkgZmFjdG9yCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBBdWRpb1BhcmFtIGdhaW47IC8vIGluIERlY2liZWxzCisKKyAgICAgICAgdm9p
ZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbiBGbG9hdDMyQXJyYXkgZnJlcXVlbmN5SHosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRmxvYXQzMkFycmF5IG1hZ1Jlc3BvbnNl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBwaGFz
ZVJlc3BvbnNlKTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkUHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFBy
b2Nlc3Nvci5jcHAKaW5kZXggMTkyNzU1YTViOGVmOTkzNWZhYmM2NDI5MGU3NjQxZDZlMjU4ODk3
OC4uMDdkNjQyYjM4NzhkZjk4NzQwYzgxMDY5YTY1ZmZmMDk1MTc4MjMzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCkBAIC05MCwxNCArOTAsMTAgQEAg
UGFzc093blB0cjxBdWRpb0RTUEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwo
KQogICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKIH0KIAot
dm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1YWRQcm9jZXNz
b3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVudHMoKQogewotICAgIGlmICghaXNJbml0aWFsaXpl
ZCgpKSB7Ci0gICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgICAgIAotICAgIC8vIERlYWwgd2l0aCBzbW9vdGhpbmcgLyBkZS16aXBwZXJpbmcu
ICBTdGFydCBvdXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4K
KyAgICAvLyBEZWFsIHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVyaW5nLiBTdGFydCBvdXQgYXNz
dW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KKwogICAgIC8vIFRoZSBC
aXF1YWREU1BLZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlmIHRoZXkg
bmVlZCB0byByZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMuCiAg
ICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOwogICAgIApAQCAtMTA5LDE0ICsx
MDUsMjQgQEAgdm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwg
QXVkaW9CdXMqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnIKICAgICAgICAgbV9maWx0ZXJDb2VmZmlj
aWVudHNEaXJ0eSA9IHRydWU7CiAgICAgICAgIG1faGFzSnVzdFJlc2V0ID0gZmFsc2U7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gU21vb3RoIGFsbCBvZiB0aGUgZmlsdGVyIHBhcmFtZXRlcnMu
ICBJZiB0aGV5IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0byB0aGVpciB0YXJnZXQgdmFsdWUgdGhl
biBtYXJrIGNvZWZmaWNpZW50cyBhcyBkaXJ0eS4KKyAgICAgICAgLy8gU21vb3RoIGFsbCBvZiB0
aGUgZmlsdGVyIHBhcmFtZXRlcnMuIElmIHRoZXkgaGF2ZW4ndCB5ZXQgY29udmVyZ2VkIHRvIHRo
ZWlyIHRhcmdldCB2YWx1ZSB0aGVuIG1hcmsgY29lZmZpY2llbnRzIGFzIGRpcnR5LgogICAgICAg
ICBib29sIGlzU3RhYmxlMSA9IG1fcGFyYW1ldGVyMS0+c21vb3RoKCk7CiAgICAgICAgIGJvb2wg
aXNTdGFibGUyID0gbV9wYXJhbWV0ZXIyLT5zbW9vdGgoKTsKICAgICAgICAgYm9vbCBpc1N0YWJs
ZTMgPSBtX3BhcmFtZXRlcjMtPnNtb290aCgpOwogICAgICAgICBpZiAoIShpc1N0YWJsZTEgJiYg
aXNTdGFibGUyICYmIGlzU3RhYmxlMykpCiAgICAgICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50
c0RpcnR5ID0gdHJ1ZTsKICAgICB9Cit9CisKK3ZvaWQgQmlxdWFkUHJvY2Vzc29yOjpwcm9jZXNz
KEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1Rv
UHJvY2VzcykKK3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBkZXN0aW5h
dGlvbi0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKKyAgICBjaGVj
a0ZvckRpcnR5Q29lZmZpY2llbnRzKCk7CisgICAgICAgICAgICAKICAgICAvLyBGb3IgZWFjaCBj
aGFubmVsIG9mIG91ciBpbnB1dCwgcHJvY2VzcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBCaXF1
YWREU1BLZXJuZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fa2VybmVscy5zaXplKCk7ICsraSkKICAgICAgICAgbV9rZXJuZWxzW2ldLT5w
cm9jZXNzKHNvdXJjZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBkZXN0aW5hdGlvbi0+Y2hhbm5lbChp
KS0+ZGF0YSgpLCBmcmFtZXNUb1Byb2Nlc3MpOwpAQCAtMTMwLDYgKzEzNiwxOSBAQCB2b2lkIEJp
cXVhZFByb2Nlc3Nvcjo6c2V0VHlwZShGaWx0ZXJUeXBlIHR5cGUpCiAgICAgfQogfQogCit2b2lk
IEJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywg
ZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkKK3sKKyAgICAvLyBDb21wdXRlIHRo
ZSBmcmVxdWVuY3kgcmVzcG9uc2Ugb24gYSBzZXBhcmF0ZSB0ZW1wb3Jhcnkga2VybmVsCisgICAg
Ly8gdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgcHJvY2Vzc2luZyBydW5uaW5nIGluIHRo
ZSBhdWRpbworICAgIC8vIHRocmVhZCBvbiB0aGUgbWFpbiBrZXJuZWxzLgorICAgIAorICAgIE93
blB0cjxCaXF1YWREU1BLZXJuZWw+IHJlc3BvbnNlS2VybmVsID0gYWRvcHRQdHIobmV3IEJpcXVh
ZERTUEtlcm5lbCh0aGlzKSk7CisKKyAgICByZXNwb25zZUtlcm5lbC0+Z2V0RnJlcXVlbmN5UmVz
cG9uc2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3lIeiwgbWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9u
c2UpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vz
c29yLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAppbmRleCAx
NmVmNDA1ZGUyYzQ0NTdmM2ExNGNkZGM1MTE1YzM5YzE3NTA1YzlmLi42MWIxNmRlOTkxZmU3MmRl
NzUxYmMwYTllZjIxMDE4MzllYzMxNTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9CaXF1YWRQcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRQcm9jZXNzb3IuaApAQCAtNjAsNiArNjAsMTIgQEAgcHVibGljOgogICAgICAgICAKICAgICB2
aXJ0dWFsIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRp
b24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUg
YW5kIHBoYXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0
IG9mIGZyZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5z
LgorICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywgZmxvYXQq
IGZyZXF1ZW5jeUh6LCBmbG9hdCogbWFnUmVzcG9uc2UsIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsK
KworICAgIHZvaWQgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgIAogICAgIGJvb2wg
ZmlsdGVyQ29lZmZpY2llbnRzRGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckNvZWZmaWNp
ZW50c0RpcnR5OyB9CiAKICAgICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIxKCkgeyByZXR1cm4gbV9w
YXJhbWV0ZXIxLmdldCgpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113665</attachid>
            <date>2011-11-04 09:28:00 -0700</date>
            <delta_ts>2022-02-28 00:05:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71055-20111104092759.patch</filename>
            <type>text/plain</type>
            <size>17614</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg5NjYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ZWE2ZGEwOTg4ODk0ZDI3
NzZjZGNiNzU1Yjg4MTMwYmJhMTU4YTA3Li41NDM2ZGM4OTFiYjM4MGQ3MjAzM2RkOWI2Y2JhYzky
ZjQ4ZjM5OWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMTEtMDMgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgQWRkIG1ldGhvZHMgdG8gY29tcHV0
ZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNlIGZvciBiaXF1YWRzCisgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDU1CisKKyAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgor
ICAgICAgICBDb21wdXRlcyB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSAocmFkaWFucykgcmVzcG9u
c2UgZm9yIHRoZSBnaXZlbgorICAgICAgICBiaXF1YWQgYXQgdGhlIHNwZWNpZmllZCBzZXQgb2Yg
KG5vcm1hbGl6ZWQpIGZyZXF1ZW5jaWVzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdl
YmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BL
ZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0aGF0IHVwZGF0ZXMgZmlsdGVyIGNvZWZmaWNpZW50cy4gIEFsbG93IHRoZQor
ICAgICAgICBjYWxsZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBzbW9vdGhlZCB2YWx1ZXMgYXJl
IHVzZWQgb3Igbm90IGFuZAorICAgICAgICB3aGV0aGVyIHdlIGRvIHRoZSB1cGRhdGUgZXZlbiBp
ZiB0aGUgY29lZmZpY2llbnRzIGFyZSBub3QgZGlydHkuCisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICBVc2UgdXBkYXRlQ29lZmZpY2llbnRzSWZO
ZWNlc3NhcnkgdG8gdXBkYXRlLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRFNQS2VybmVsOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxtZW50YXRpb24gb2YgZ2V0RnJlcXVl
bmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6CisgICAg
ICAgIERlY2xhcmUgZ2V0RnJlcXVlbmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2RlOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGdldEZyZXF1
ZW5jeVJlc3BvbnNlCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oOgorICAg
ICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsOgorICAgICAgICBEZWZpbmUgaW50ZXJmYWNlIHRvIGdldEZyZXF1
ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVu
dHMpOgorICAgICAgICBGYWN0b3Igb3V0IGNvZGUgZm9yIGNoZWNraW5nIGZvciBkaXJ0eSBjb2Vm
ZmljaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MpOgor
ICAgICAgICBVc2UgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OkJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgorICAgICAgICBJbXBsZW1l
bnRhdGlvbiBvZiBnZXRGcmVxdWVuY3lSZXNwb25zZQorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorCiAy
MDExLTExLTAxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KIAogICAgICAgICBD
U1NSdWxlOiBEZXZpcnR1YWxpemUgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5jcHAKaW5kZXggMzU2ODEwMjc1ZjYzOGE2ODkwNDM2
Njg0YjAyZmU4Y2NmNDA1MmE3Yy4uOGRjMWY0ZmI2OWU3MTEyYmJiMTYwZDk3ZDEzM2MwMGVjODkw
YTYyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwCkBAIC0zNzUs
NiArMzc1LDQ1IEBAIHZvaWQgQmlxdWFkOjpzZXRBbGxwYXNzUG9sZShjb25zdCBDb21wbGV4ICZw
b2xlKQogICAgIHNldFplcm9Qb2xlUGFpcnMoemVybywgcG9sZSk7CiB9CiAKK3ZvaWQgQmlxdWFk
OjpnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3ksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQoreworICAgIC8vIEV2YWx1
YXRlIHRoZSBaLXRyYW5zZm9ybSBvZiB0aGUgZmlsdGVyIGF0IGdpdmVuIG5vcm1hbGl6ZWQKKyAg
ICAvLyBmcmVxdWVuY3kgZnJvbSAwIHRvIDEuICAoMSBjb3JyZXNwb25kcyB0byB0aGUgTnlxdWlz
dAorICAgIC8vIGZyZXF1ZW5jeS4pCisgICAgLy8KKyAgICAvLyBUaGUgei10cmFuc2Zvcm0gb2Yg
dGhlIGZpbHRlciBpcworICAgIC8vCisgICAgLy8gSCh6KSA9IChiMCArIGIxKnpeKC0xKSArIGIy
KnpeKC0yKSkvKDEgKyBhMSp6XigtMSkgKyBhMip6XigtMikpCisgICAgLy8KKyAgICAvLyBFdmFs
dWF0ZSBhcworICAgIC8vCisgICAgLy8gYjAgKyAoYjEgKyBiMip6MSkqejEKKyAgICAvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIDEgKyAoYTEgKyBhMip6MSkqejEKKyAgICAvLworICAg
IC8vIHdpdGggejEgPSAxL3ogYW5kIHogPSBleHAoaipwaSpmcmVxdWVuY3kpLiBIZW5jZSB6MSA9
IGV4cCgtaipwaSpmcmVxdWVuY3kpCisKKyAgICAvLyBNYWtlIGxvY2FsIGNvcGllcyBvZiB0aGUg
Y29lZmZpY2llbnRzIGFzIGEgbWljcm8tb3B0aW1pemF0aW9uLgorICAgIGRvdWJsZSBiMCA9IG1f
YjA7CisgICAgZG91YmxlIGIxID0gbV9iMTsKKyAgICBkb3VibGUgYjIgPSBtX2IyOworICAgIGRv
dWJsZSBhMSA9IG1fYTE7CisgICAgZG91YmxlIGEyID0gbV9hMjsKKyAgICAKKyAgICBmb3IgKGlu
dCBrID0gMDsgayA8IG5GcmVxdWVuY2llczsgKytrKSB7CisgICAgICAgIGRvdWJsZSBvbWVnYSA9
IC1waURvdWJsZSAqIGZyZXF1ZW5jeVtrXTsKKyAgICAgICAgQ29tcGxleCB6ID0gQ29tcGxleChj
b3Mob21lZ2EpLCBzaW4ob21lZ2EpKTsKKyAgICAgICAgQ29tcGxleCBudW1lcmF0b3IgPSBiMCAr
IChiMSArIGIyICogeikgKiB6OworICAgICAgICBDb21wbGV4IGRlbm9taW5hdG9yID0gQ29tcGxl
eCgxLCAwKSArIChhMSArIGEyICogeikgKiB6OworICAgICAgICBDb21wbGV4IHJlc3BvbnNlID0g
bnVtZXJhdG9yIC8gZGVub21pbmF0b3I7CisgICAgICAgIG1hZ1Jlc3BvbnNlW2tdID0gc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGFicyhyZXNwb25zZSkpOworICAgICAgICBwaGFzZVJlc3BvbnNlW2tdID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0YW4yKGltYWcocmVzcG9uc2UpLCByZWFsKHJlc3BvbnNlKSkp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0Jp
cXVhZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmgKaW5kZXggM2Zj
ZTdkYjk3ZDc0MDNjZTAxNDQyYjg1ZTY5NGNhZGRiODAwZWRmMC4uNzgzODExNThiM2ZmZjJhYTAx
N2U4ZTBiMjFhOWZjNDZmZDVmNDhhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQmlxdWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlx
dWFkLmgKQEAgLTcwLDEwICs3MCwxOSBAQCBwdWJsaWM6CiAgICAgLy8gUmVzZXRzIGZpbHRlciBz
dGF0ZQogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIC8vIEZpbHRlciByZXNwb25zZSBhdCBhIHNl
dCBvZiBuIGZyZXF1ZW5jaWVzLiBUaGUgbWFnbml0dWRlIGFuZAorICAgIC8vIHBoYXNlIHJlc3Bv
bnNlIGFyZSByZXR1cm5lZCBpbiBtYWdSZXNwb25zZSBhbmQgcGhhc2VSZXNwb25zZS4KKyAgICAv
LyBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFkaWFucy4KKyAgICB2b2lkIGdldEZyZXF1ZW5j
eVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCogZnJlcXVlbmN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQq
IHBoYXNlUmVzcG9uc2UpOwogcHJpdmF0ZToKICAgICB2b2lkIHNldE5vcm1hbGl6ZWRDb2VmZmlj
aWVudHMoZG91YmxlIGIwLCBkb3VibGUgYjEsIGRvdWJsZSBiMiwgZG91YmxlIGEwLCBkb3VibGUg
YTEsIGRvdWJsZSBhMik7Ci0KLSAgICAvLyBGaWx0ZXIgY29lZmZpY2llbnRzCisgICAgCisgICAg
Ly8gRmlsdGVyIGNvZWZmaWNpZW50cy4gVGhlIGZpbHRlciBpcyBkZWZpbmVkIGFzCisgICAgLy8K
KyAgICAvLyB5W25dICsgbV9hMSp5W24tMV0gKyBtX2EyKnlbbi0yXSA9IG1fYjAqeFtuXSArIG1f
YjEqeFtuLTFdICsgbV9iMip4W24tMl0uCiAgICAgZG91YmxlIG1fYjA7CiAgICAgZG91YmxlIG1f
YjE7CiAgICAgZG91YmxlIG1fYjI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQ
S2VybmVsLmNwcAppbmRleCBhMjIwNGI0MWE5MmVmZmM4ZjQ4YjdhZTQ3ZGYxY2E2ZDNiZTFkN2Ux
Li44MDc5NDhkZTJiMmMyN2JkZmUxZjViN2VlNDNlMGM5Zjg2MDE5YmJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKQEAgLTI5LDIxICsyOSwyNyBAQAog
I2luY2x1ZGUgIkJpcXVhZERTUEtlcm5lbC5oIgogCiAjaW5jbHVkZSAiQmlxdWFkUHJvY2Vzc29y
LmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZv
aWQgQmlxdWFkRFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBk
ZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3ZvaWQgQmlxdWFkRFNQS2VybmVs
Ojp1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShib29sIHVzZVNtb290aGluZywgYm9vbCBm
b3JjZVVwZGF0ZSkKIHsKLSAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYmIGJpcXVh
ZFByb2Nlc3NvcigpKTsKLSAgICAKLSAgICAvLyBSZWNvbXB1dGUgZmlsdGVyIGNvZWZmaWNpZW50
cyBpZiBhbnkgb2YgdGhlIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkLgotICAgIC8vIEZJWE1FOiBh
cyBhbiBvcHRpbWl6YXRpb24sIGltcGxlbWVudCBhIHdheSB0aGF0IGEgQmlxdWFkIG9iamVjdCBj
YW4gc2ltcGx5IGNvcHkgaXRzIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMgZnJvbSBhbm90
aGVyIEJpcXVhZCBvYmplY3QuCi0gICAgLy8gVGhlbiByZS1mYWN0b3IgdGhpcyBjb2RlIHRvIG9u
bHkgcnVuIGZvciB0aGUgZmlyc3QgQmlxdWFkRFNQS2VybmVsIG9mIGVhY2ggQmlxdWFkUHJvY2Vz
c29yLgotICAgIGlmIChiaXF1YWRQcm9jZXNzb3IoKS0+ZmlsdGVyQ29lZmZpY2llbnRzRGlydHko
KSkgewotICAgICAgICBkb3VibGUgdmFsdWUxID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjEoKS0+c21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBkb3VibGUgdmFsdWUyID0gYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+c21vb3RoZWRWYWx1ZSgpOwotICAgICAgICBkb3VibGUg
Z2FpbiA9IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCktPnNtb290aGVkVmFsdWUoKTsK
KyAgICBpZiAoZm9yY2VVcGRhdGUgfHwgYmlxdWFkUHJvY2Vzc29yKCktPmZpbHRlckNvZWZmaWNp
ZW50c0RpcnR5KCkpIHsKKyAgICAgICAgZG91YmxlIHZhbHVlMTsKKyAgICAgICAgZG91YmxlIHZh
bHVlMjsKKyAgICAgICAgZG91YmxlIGdhaW47CiAgICAgICAgIAorICAgICAgICBpZiAodXNlU21v
b3RoaW5nKSB7CisgICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1l
dGVyMSgpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgICAgICB2YWx1ZTIgPSBiaXF1YWRQcm9j
ZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5zbW9vdGhlZFZhbHVlKCk7CisgICAgICAgICAgICBnYWlu
ID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c21vb3RoZWRWYWx1ZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFsdWUxID0gYmlxdWFkUHJvY2Vzc29yKCktPnBh
cmFtZXRlcjEoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHZhbHVlMiA9IGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIyKCktPnZhbHVlKCk7CisgICAgICAgICAgICBnYWluID0gYmlxdWFkUHJv
Y2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+dmFsdWUoKTsKKyAgICAgICAgfQorCiAgICAgICAgIC8v
IENvbnZlcnQgZnJvbSBIZXJ0eiB0byBub3JtYWxpemVkIGZyZXF1ZW5jeSAwIC0+IDEuCiAgICAg
ICAgIGRvdWJsZSBueXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgpOwogICAgICAgICBkb3VibGUgbm9y
bWFsaXplZEZyZXF1ZW5jeSA9IHZhbHVlMSAvIG55cXVpc3Q7CkBAIC04MywxMCArODksNTAgQEAg
dm9pZCBCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnIKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQorfQorCit2b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpCit7CisgICAg
QVNTRVJUKHNvdXJjZSAmJiBkZXN0aW5hdGlvbiAmJiBiaXF1YWRQcm9jZXNzb3IoKSk7CisgICAg
CisgICAgLy8gUmVjb21wdXRlIGZpbHRlciBjb2VmZmljaWVudHMgaWYgYW55IG9mIHRoZSBwYXJh
bWV0ZXJzIGhhdmUgY2hhbmdlZC4KKyAgICAvLyBGSVhNRTogYXMgYW4gb3B0aW1pemF0aW9uLCBp
bXBsZW1lbnQgYSB3YXkgdGhhdCBhIEJpcXVhZCBvYmplY3QgY2FuIHNpbXBseSBjb3B5IGl0cyBp
bnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRzIGZyb20gYW5vdGhlciBCaXF1YWQgb2JqZWN0Lgor
ICAgIC8vIFRoZW4gcmUtZmFjdG9yIHRoaXMgY29kZSB0byBvbmx5IHJ1biBmb3IgdGhlIGZpcnN0
IEJpcXVhZERTUEtlcm5lbCBvZiBlYWNoIEJpcXVhZFByb2Nlc3Nvci4KKworICAgIHVwZGF0ZUNv
ZWZmaWNpZW50c0lmTmVjZXNzYXJ5KHRydWUsIGZhbHNlKTsKIAogICAgIG1fYmlxdWFkLnByb2Nl
c3Moc291cmNlLCBkZXN0aW5hdGlvbiwgZnJhbWVzVG9Qcm9jZXNzKTsKIH0KIAordm9pZCBCaXF1
YWREU1BLZXJuZWw6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1
ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCogcGhhc2VSZXNwb25zZSkKK3sKKyAgICBib29sIGlzR29vZCA9IG5GcmVxdWVuY2ll
cyA+IDAgJiYgZnJlcXVlbmN5SHogJiYgbWFnUmVzcG9uc2UgJiYgcGhhc2VSZXNwb25zZTsKKyAg
ICBBU1NFUlQoaXNHb29kKTsKKyAgICBpZiAoIWlzR29vZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPGZsb2F0PiBmcmVxdWVuY3kobkZyZXF1ZW5jaWVzKTsKKworICAgIGRvdWJsZSBu
eXF1aXN0ID0gdGhpcy0+bnlxdWlzdCgpOworCisgICAgLy8gQ29udmVydCBmcm9tIGZyZXF1ZW5j
eSBpbiBIeiB0byBub3JtYWxpemVkIGZyZXF1ZW5jeSAoMCAtPiAxKSwKKyAgICAvLyB3aXRoIDEg
ZXF1YWwgdG8gdGhlIE55cXVpc3QgZnJlcXVlbmN5LgorICAgIGZvciAoaW50IGsgPSAwOyBrIDwg
bkZyZXF1ZW5jaWVzOyArK2spCisgICAgICAgIGZyZXF1ZW5jeVtrXSA9IGZyZXF1ZW5jeUh6W2td
IC8gbnlxdWlzdDsKKworICAgIC8vIFdlIHdhbnQgdG8gZ2V0IHRoZSBmaW5hbCB2YWx1ZXMgb2Yg
dGhlIGNvZWZmaWNpZW50cyBhbmQgY29tcHV0ZQorICAgIC8vIHRoZSByZXNwb25zZSBmcm9tIHRo
YXQgaW5zdGVhZCBvZiBzb21lIGludGVybWVkaWF0ZSBzbW9vdGhlZAorICAgIC8vIHNldC4gRm9y
Y2VmdWxseSB1cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuIGlmIHRoZXkgYXJlIG5vdAorICAg
IC8vIGRpcnR5LgorCisgICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoZmFsc2UsIHRy
dWUpOworCisgICAgbV9iaXF1YWQuZ2V0RnJlcXVlbmN5UmVzcG9uc2UobkZyZXF1ZW5jaWVzLCBm
cmVxdWVuY3kuZGF0YSgpLCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWREU1BLZXJuZWwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCmluZGV4IDQ3ZDBmMzQzOWZmZjNjYTc0
OWNlZmY2MTVhMWY4NzY0ZGI2Zjg1ZGYuLmEyMWUyNGMwZDBjODRkODk0MDAzMzg5YmU3NWZjNGNl
OGQyOWIwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtl
cm5lbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5oCkBA
IC00NSwxMCArNDUsMjUgQEAgcHVibGljOgogICAgIC8vIEF1ZGlvRFNQS2VybmVsCiAgICAgdmly
dHVhbCB2b2lkIHByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJjZSwgZmxvYXQqIGRlc3QsIHNpemVf
dCBmcmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpIHsgbV9iaXF1YWQu
cmVzZXQoKTsgfQotICAgIAorCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJl
c3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0IG9mIGZyZXF1ZW5j
aWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgorICAgIHZvaWQg
Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKIHByb3RlY3RlZDoKICAgICBCaXF1YWQgbV9i
aXF1YWQ7CiAgICAgQmlxdWFkUHJvY2Vzc29yKiBiaXF1YWRQcm9jZXNzb3IoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxCaXF1YWRQcm9jZXNzb3IqPihwcm9jZXNzb3IoKSk7IH0KKworICAgIC8vIFRv
IHByZXZlbnQgYXVkaW8gZ2xpdGNoZXMgd2hlbiBwYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkLAorICAg
IC8vIGRlemlwcGVyaW5nIGlzIHVzZWQgdG8gc2xvd2x5IGNoYW5nZSB0aGUgcGFyYW1ldGVycy4K
KyAgICAvLyB8dXNlU21vb3RoaW5nfCBpbXBsaWVzIHRoYXQgd2Ugd2FudCB0byB1cGRhdGUgdXNp
bmcgdGhlCisgICAgLy8gc21vb3RoZWQgdmFsdWVzLiBPdGhlcndpc2UgdGhlIGZpbmFsIHRhcmdl
dCB2YWx1ZXMgYXJlCisgICAgLy8gdXNlZC4gSWYgfGZvcmNlVXBkYXRlfCBpcyB0cnVlLCB3ZSB1
cGRhdGUgdGhlIGNvZWZmaWNpZW50cyBldmVuCisgICAgLy8gaWYgdGhleSBhcmUgbm90IGRpcnR5
LiAoVXNlZCB3aGVuIGNvbXB1dGluZyB0aGUgZnJlcXVlbmN5CisgICAgLy8gcmVzcG9uc2UuKQor
ICAgIHZvaWQgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkoYm9vbCB1c2VTbW9vdGhpbmcs
IGJvb2wgZm9yY2VVcGRhdGUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmNwcAppbmRleCBmMTZkOGU1Zjk2
ZDc1N2JmOTVkNTcyNDJiNmUyZGI5NWNlNjFjZjBhLi44MGMzZjkzOGNkMDE5OWUyODdkYzUzYTNi
YTk1YjhjOGVjYWQ4MzlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRGaWx0ZXJOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0
ZXJOb2RlLmNwcApAQCAtNTMsNiArNTMsMjUgQEAgdm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpzZXRU
eXBlKHVuc2lnbmVkIHNob3J0IHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIGJpcXVhZFBy
b2Nlc3NvcigpLT5zZXRUeXBlKHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcjo6RmlsdGVyVHlw
ZT4odHlwZSkpOwogfQogCisKK3ZvaWQgQmlxdWFkRmlsdGVyTm9kZTo6Z2V0RnJlcXVlbmN5UmVz
cG9uc2UoY29uc3QgRmxvYXQzMkFycmF5KiBmcmVxdWVuY3lIeiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBtYWdSZXNwb25zZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5KiBw
aGFzZVJlc3BvbnNlKQoreworICAgIGlmICghZnJlcXVlbmN5SHogfHwgIW1hZ1Jlc3BvbnNlIHx8
ICFwaGFzZVJlc3BvbnNlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG4gPSBzdGQ6
Om1pbihmcmVxdWVuY3lIei0+bGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICBzdGQ6Om1p
bihtYWdSZXNwb25zZS0+bGVuZ3RoKCksIHBoYXNlUmVzcG9uc2UtPmxlbmd0aCgpKSk7CisKKyAg
ICBpZiAobikgeworICAgICAgICBiaXF1YWRQcm9jZXNzb3IoKS0+Z2V0RnJlcXVlbmN5UmVzcG9u
c2UobiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
ZXF1ZW5jeUh6LT5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYWdSZXNwb25zZS0+ZGF0YSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2VSZXNwb25zZS0+ZGF0YSgpKTsKKyAgICB9Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgKaW5kZXggNjgzYjJh
MzlkNDc0ZjgzZWVjZDZiNTY1MmM0MjFlZTY4MGI1Nzc5My4uNDc0YTAyMDYxODU4ODhiYjEyZWNk
NTUxMzNmYzYyMGVjNDY4ZjU5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkRmlsdGVyTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZp
bHRlck5vZGUuaApAQCAtNTcsNyArNTcsMTIgQEAgcHVibGljOgogICAgIEF1ZGlvUGFyYW0qIGZy
ZXF1ZW5jeSgpIHsgcmV0dXJuIGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIxKCk7IH0KICAg
ICBBdWRpb1BhcmFtKiBxKCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIo
KTsgfQogICAgIEF1ZGlvUGFyYW0qIGdhaW4oKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+
cGFyYW1ldGVyMygpOyB9Ci0gICAgCisKKyAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQgcGhh
c2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBzZXQgb2YgZnJl
cXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCisgICAg
dmlydHVhbCB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJheSogZnJl
cXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0MzJB
cnJheSogbWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEZsb2F0MzJBcnJheSogcGhhc2VSZXNwb25zZSk7CiBwcml2YXRlOgogICAgIEJpcXVhZEZpbHRl
ck5vZGUoQXVkaW9Db250ZXh0KiwgZmxvYXQgc2FtcGxlUmF0ZSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaWRsIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwKaW5kZXggNTg2MWI4ODljY2Y1NzI1YmMy
ZDhkZDk0YWMyZTQ5OGVmODI2ZGU2ZC4uODRlMDE1YWEzMzgxNTA1NDE3YjE1MDE2NTMzNDRjM2U4
N2NmNjI1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVy
Tm9kZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5p
ZGwKQEAgLTQzLDUgKzQzLDkgQEAgbW9kdWxlIGF1ZGlvIHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEF1ZGlvUGFyYW0gZnJlcXVlbmN5OyAvLyBpbiBIZXJ0egogICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBROyAvLyBRdWFsaXR5IGZhY3RvcgogICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgQXVkaW9QYXJhbSBnYWluOyAvLyBpbiBEZWNpYmVscworCisgICAgICAg
IHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW4gRmxvYXQzMkFycmF5IGZyZXF1ZW5jeUh6LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBtYWdSZXNw
b25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBGbG9hdDMyQXJyYXkg
cGhhc2VSZXNwb25zZSk7CiAgICAgfTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1
YWRQcm9jZXNzb3IuY3BwCmluZGV4IDE5Mjc1NWE1YjhlZjk5MzVmYWJjNjQyOTBlNzY0MWQ2ZTI1
ODg5NzguLjEyMjQzYzBjOTliZTFjYzc3NTNlYzJhOWY3OTUyODM5Zjg2OTk2MjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcApAQCAtOTAsMTQgKzkwLDEw
IEBAIFBhc3NPd25QdHI8QXVkaW9EU1BLZXJuZWw+IEJpcXVhZFByb2Nlc3Nvcjo6Y3JlYXRlS2Vy
bmVsKCkKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJpcXVhZERTUEtlcm5lbCh0aGlzKSk7CiB9
CiAKLXZvaWQgQmlxdWFkUHJvY2Vzc29yOjpwcm9jZXNzKEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlv
QnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykKK3ZvaWQgQmlxdWFkUHJv
Y2Vzc29yOjpjaGVja0ZvckRpcnR5Q29lZmZpY2llbnRzKCkKIHsKLSAgICBpZiAoIWlzSW5pdGlh
bGl6ZWQoKSkgewotICAgICAgICBkZXN0aW5hdGlvbi0+emVybygpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgICAgICAKLSAgICAvLyBEZWFsIHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVy
aW5nLiAgU3RhcnQgb3V0IGFzc3VtaW5nIGZpbHRlciBwYXJhbWV0ZXJzIGFyZSBub3QgY2hhbmdp
bmcuCisgICAgLy8gRGVhbCB3aXRoIHNtb290aGluZyAvIGRlLXppcHBlcmluZy4gU3RhcnQgb3V0
IGFzc3VtaW5nIGZpbHRlciBwYXJhbWV0ZXJzIGFyZSBub3QgY2hhbmdpbmcuCisKICAgICAvLyBU
aGUgQmlxdWFkRFNQS2VybmVsIG9iamVjdHMgcmVseSBvbiB0aGlzIHZhbHVlIHRvIHNlZSBpZiB0
aGV5IG5lZWQgdG8gcmUtY29tcHV0ZSB0aGVpciBpbnRlcm5hbCBmaWx0ZXIgY29lZmZpY2llbnRz
LgogICAgIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHkgPSBmYWxzZTsKICAgICAKQEAgLTEwOSwx
NCArMTA1LDI0IEBAIHZvaWQgQmlxdWFkUHJvY2Vzc29yOjpwcm9jZXNzKEF1ZGlvQnVzKiBzb3Vy
Y2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyCiAgICAgICAgIG1fZmlsdGVyQ29l
ZmZpY2llbnRzRGlydHkgPSB0cnVlOwogICAgICAgICBtX2hhc0p1c3RSZXNldCA9IGZhbHNlOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFNtb290aCBhbGwgb2YgdGhlIGZpbHRlciBwYXJhbWV0
ZXJzLiAgSWYgdGhleSBoYXZlbid0IHlldCBjb252ZXJnZWQgdG8gdGhlaXIgdGFyZ2V0IHZhbHVl
IHRoZW4gbWFyayBjb2VmZmljaWVudHMgYXMgZGlydHkuCisgICAgICAgIC8vIFNtb290aCBhbGwg
b2YgdGhlIGZpbHRlciBwYXJhbWV0ZXJzLiBJZiB0aGV5IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0
byB0aGVpciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNvZWZmaWNpZW50cyBhcyBkaXJ0eS4KICAg
ICAgICAgYm9vbCBpc1N0YWJsZTEgPSBtX3BhcmFtZXRlcjEtPnNtb290aCgpOwogICAgICAgICBi
b29sIGlzU3RhYmxlMiA9IG1fcGFyYW1ldGVyMi0+c21vb3RoKCk7CiAgICAgICAgIGJvb2wgaXNT
dGFibGUzID0gbV9wYXJhbWV0ZXIzLT5zbW9vdGgoKTsKICAgICAgICAgaWYgKCEoaXNTdGFibGUx
ICYmIGlzU3RhYmxlMiAmJiBpc1N0YWJsZTMpKQogICAgICAgICAgICAgbV9maWx0ZXJDb2VmZmlj
aWVudHNEaXJ0eSA9IHRydWU7CiAgICAgfQorfQorCit2b2lkIEJpcXVhZFByb2Nlc3Nvcjo6cHJv
Y2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24sIHNpemVfdCBmcmFt
ZXNUb1Byb2Nlc3MpCit7CisgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpIHsKKyAgICAgICAgZGVz
dGluYXRpb24tPnplcm8oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAgICAgCisgICAg
Y2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgICAgICAgICAgCiAgICAgLy8gRm9yIGVh
Y2ggY2hhbm5lbCBvZiBvdXIgaW5wdXQsIHByb2Nlc3MgdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcg
QmlxdWFkRFNQS2VybmVsIGludG8gdGhlIG91dHB1dCBjaGFubmVsLgogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX2tlcm5lbHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIG1fa2VybmVsc1tp
XS0+cHJvY2Vzcyhzb3VyY2UtPmNoYW5uZWwoaSktPmRhdGEoKSwgZGVzdGluYXRpb24tPmNoYW5u
ZWwoaSktPmRhdGEoKSwgZnJhbWVzVG9Qcm9jZXNzKTsKQEAgLTEzMCw2ICsxMzYsMjAgQEAgdm9p
ZCBCaXF1YWRQcm9jZXNzb3I6OnNldFR5cGUoRmlsdGVyVHlwZSB0eXBlKQogICAgIH0KIH0KIAor
dm9pZCBCaXF1YWRQcm9jZXNzb3I6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNp
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxv
YXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSkKK3sKKyAgICAvLyBDb21wdXRlIHRoZSBm
cmVxdWVuY3kgcmVzcG9uc2Ugb24gYSBzZXBhcmF0ZSB0ZW1wb3Jhcnkga2VybmVsCisgICAgLy8g
dG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgcHJvY2Vzc2luZyBydW5uaW5nIGluIHRoZSBh
dWRpbworICAgIC8vIHRocmVhZCBvbiB0aGUgbWFpbiBrZXJuZWxzLgorICAgIAorICAgIE93blB0
cjxCaXF1YWREU1BLZXJuZWw+IHJlc3BvbnNlS2VybmVsID0gYWRvcHRQdHIobmV3IEJpcXVhZERT
UEtlcm5lbCh0aGlzKSk7CisKKyAgICByZXNwb25zZUtlcm5lbC0+Z2V0RnJlcXVlbmN5UmVzcG9u
c2UobkZyZXF1ZW5jaWVzLCBmcmVxdWVuY3lIeiwgbWFnUmVzcG9uc2UsIHBoYXNlUmVzcG9uc2Up
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV0VCX0FV
RElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29y
LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaAppbmRleCAxNmVm
NDA1ZGUyYzQ0NTdmM2ExNGNkZGM1MTE1YzM5YzE3NTA1YzlmLi5jN2Y3ZDMwNjhhM2NmNWRlNWM4
MjQxMzE5MTNiY2Y2NDU5MjM3OTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWRQcm9jZXNzb3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQ
cm9jZXNzb3IuaApAQCAtNjAsNiArNjAsMTUgQEAgcHVibGljOgogICAgICAgICAKICAgICB2aXJ0
dWFsIHZvaWQgcHJvY2VzcyhBdWRpb0J1cyogc291cmNlLCBBdWRpb0J1cyogZGVzdGluYXRpb24s
IHNpemVfdCBmcmFtZXNUb1Byb2Nlc3MpOwogCisgICAgLy8gR2V0IHRoZSBtYWduaXR1ZGUgYW5k
IHBoYXNlIHJlc3BvbnNlIG9mIHRoZSBmaWx0ZXIgYXQgdGhlIGdpdmVuCisgICAgLy8gc2V0IG9m
IGZyZXF1ZW5jaWVzIChpbiBIeikuIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgor
ICAgIHZvaWQgZ2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3lIeiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZsb2F0KiBtYWdSZXNwb25zZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKTsKKworICAgIHZvaWQgY2hlY2tG
b3JEaXJ0eUNvZWZmaWNpZW50cygpOworICAgIAogICAgIGJvb2wgZmlsdGVyQ29lZmZpY2llbnRz
RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5OyB9CiAKICAg
ICBBdWRpb1BhcmFtKiBwYXJhbWV0ZXIxKCkgeyByZXR1cm4gbV9wYXJhbWV0ZXIxLmdldCgpOyB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113710</attachid>
            <date>2011-11-04 14:11:37 -0700</date>
            <delta_ts>2011-11-04 17:34:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-71055-20111104141136.patch</filename>
            <type>text/plain</type>
            <size>17601</size>
            <attacher name="Raymond Toy">rtoy</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTkyNzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZjI0NzczMTkzNDk2M2Vh
ZGNkZTA2ZjMwMjMwMDlmOGE4NzQxYmJmLi40NDcwM2IyNGRmZjM3NjA1NDU0MDU2NzhkZTVmOGFm
Y2RhMjlmZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTEtMTEtMDMgIFJheW1v
bmQgVG95ICA8cnRveUBnb29nbGUuY29tPgorCisgICAgICAgQWRkIG1ldGhvZHMgdG8gY29tcHV0
ZSBtYWduaXR1ZGUgYW5kIHBoYXNlIHJlc3BvbnNlIGZvciBiaXF1YWRzCisgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMDU1CisKKyAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQmlxdWFk
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpcXVhZDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgor
ICAgICAgICBDb21wdXRlcyB0aGUgbWFnbml0dWRlIGFuZCBwaGFzZSAocmFkaWFucykgcmVzcG9u
c2UgZm9yIHRoZSBnaXZlbgorICAgICAgICBiaXF1YWQgYXQgdGhlIHNwZWNpZmllZCBzZXQgb2Yg
KG5vcm1hbGl6ZWQpIGZyZXF1ZW5jaWVzLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL0JpcXVh
ZC5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdl
YmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWREU1BL
ZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KToKKyAgICAgICAgRmFjdG9yIG91
dCB0aGUgY29kZSB0aGF0IHVwZGF0ZXMgZmlsdGVyIGNvZWZmaWNpZW50cy4gIEFsbG93IHRoZQor
ICAgICAgICBjYWxsZXIgdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBzbW9vdGhlZCB2YWx1ZXMgYXJl
IHVzZWQgb3Igbm90IGFuZAorICAgICAgICB3aGV0aGVyIHdlIGRvIHRoZSB1cGRhdGUgZXZlbiBp
ZiB0aGUgY29lZmZpY2llbnRzIGFyZSBub3QgZGlydHkuCisgICAgICAgIChXZWJDb3JlOjpCaXF1
YWREU1BLZXJuZWw6OnByb2Nlc3MpOgorICAgICAgICBVc2UgdXBkYXRlQ29lZmZpY2llbnRzSWZO
ZWNlc3NhcnkgdG8gdXBkYXRlLgorICAgICAgICAoV2ViQ29yZTo6QmlxdWFkRFNQS2VybmVsOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxtZW50YXRpb24gb2YgZ2V0RnJlcXVl
bmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmg6CisgICAg
ICAgIERlY2xhcmUgZ2V0RnJlcXVlbmN5UmVzcG9uc2UuCisgICAgICAgICogd2ViYXVkaW8vQmlx
dWFkRmlsdGVyTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRGaWx0ZXJOb2RlOjpn
ZXRGcmVxdWVuY3lSZXNwb25zZSk6CisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGdldEZyZXF1
ZW5jeVJlc3BvbnNlCisgICAgICAgICogd2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5oOgorICAg
ICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0Jp
cXVhZEZpbHRlck5vZGUuaWRsOgorICAgICAgICBEZWZpbmUgaW50ZXJmYWNlIHRvIGdldEZyZXF1
ZW5jeVJlc3BvbnNlLgorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OmNoZWNrRm9yRGlydHlDb2VmZmljaWVu
dHMpOgorICAgICAgICBGYWN0b3Igb3V0IGNvZGUgZm9yIGNoZWNraW5nIGZvciBkaXJ0eSBjb2Vm
ZmljaWVudHMuCisgICAgICAgIChXZWJDb3JlOjpCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MpOgor
ICAgICAgICBVc2UgY2hlY2tGb3JEaXJ0eUNvZWZmaWNpZW50cy4KKyAgICAgICAgKFdlYkNvcmU6
OkJpcXVhZFByb2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UpOgorICAgICAgICBJbXBsZW1l
bnRhdGlvbiBvZiBnZXRGcmVxdWVuY3lSZXNwb25zZQorICAgICAgICAqIHdlYmF1ZGlvL0JpcXVh
ZFByb2Nlc3Nvci5oOgorICAgICAgICBEZWNsYXJlIGdldEZyZXF1ZW5jeVJlc3BvbnNlLgorCiAy
MDExLTExLTA0ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQgQ01ha2UgYnVpbGQgZml4IGZvciAhRU5BQkxFKFNRTF9EQVRBQkFTRSku
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vQmlxdWFkLmNwcAppbmRleCAzNTY4MTAyNzVm
NjM4YTY4OTA0MzY2ODRiMDJmZThjY2Y0MDUyYTdjLi44ZGMxZjRmYjY5ZTcxMTJiYmIxNjBkOTdk
MTMzYzAwZWM4OTBhNjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9CaXF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0JpcXVhZC5j
cHAKQEAgLTM3NSw2ICszNzUsNDUgQEAgdm9pZCBCaXF1YWQ6OnNldEFsbHBhc3NQb2xlKGNvbnN0
IENvbXBsZXggJnBvbGUpCiAgICAgc2V0WmVyb1BvbGVQYWlycyh6ZXJvLCBwb2xlKTsKIH0KIAor
dm9pZCBCaXF1YWQ6OmdldEZyZXF1ZW5jeVJlc3BvbnNlKGludCBuRnJlcXVlbmNpZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpCit7Cisg
ICAgLy8gRXZhbHVhdGUgdGhlIFotdHJhbnNmb3JtIG9mIHRoZSBmaWx0ZXIgYXQgZ2l2ZW4gbm9y
bWFsaXplZAorICAgIC8vIGZyZXF1ZW5jeSBmcm9tIDAgdG8gMS4gICgxIGNvcnJlc3BvbmRzIHRv
IHRoZSBOeXF1aXN0CisgICAgLy8gZnJlcXVlbmN5LikKKyAgICAvLworICAgIC8vIFRoZSB6LXRy
YW5zZm9ybSBvZiB0aGUgZmlsdGVyIGlzCisgICAgLy8KKyAgICAvLyBIKHopID0gKGIwICsgYjEq
el4oLTEpICsgYjIqel4oLTIpKS8oMSArIGExKnpeKC0xKSArIGEyKnpeKC0yKSkKKyAgICAvLwor
ICAgIC8vIEV2YWx1YXRlIGFzCisgICAgLy8KKyAgICAvLyBiMCArIChiMSArIGIyKnoxKSp6MQor
ICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gMSArIChhMSArIGEyKnoxKSp6MQor
ICAgIC8vCisgICAgLy8gd2l0aCB6MSA9IDEveiBhbmQgeiA9IGV4cChqKnBpKmZyZXF1ZW5jeSku
IEhlbmNlIHoxID0gZXhwKC1qKnBpKmZyZXF1ZW5jeSkKKworICAgIC8vIE1ha2UgbG9jYWwgY29w
aWVzIG9mIHRoZSBjb2VmZmljaWVudHMgYXMgYSBtaWNyby1vcHRpbWl6YXRpb24uCisgICAgZG91
YmxlIGIwID0gbV9iMDsKKyAgICBkb3VibGUgYjEgPSBtX2IxOworICAgIGRvdWJsZSBiMiA9IG1f
YjI7CisgICAgZG91YmxlIGExID0gbV9hMTsKKyAgICBkb3VibGUgYTIgPSBtX2EyOworICAgIAor
ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbkZyZXF1ZW5jaWVzOyArK2spIHsKKyAgICAgICAgZG91
YmxlIG9tZWdhID0gLXBpRG91YmxlICogZnJlcXVlbmN5W2tdOworICAgICAgICBDb21wbGV4IHog
PSBDb21wbGV4KGNvcyhvbWVnYSksIHNpbihvbWVnYSkpOworICAgICAgICBDb21wbGV4IG51bWVy
YXRvciA9IGIwICsgKGIxICsgYjIgKiB6KSAqIHo7CisgICAgICAgIENvbXBsZXggZGVub21pbmF0
b3IgPSBDb21wbGV4KDEsIDApICsgKGExICsgYTIgKiB6KSAqIHo7CisgICAgICAgIENvbXBsZXgg
cmVzcG9uc2UgPSBudW1lcmF0b3IgLyBkZW5vbWluYXRvcjsKKyAgICAgICAgbWFnUmVzcG9uc2Vb
a10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYWJzKHJlc3BvbnNlKSk7CisgICAgICAgIHBoYXNlUmVz
cG9uc2Vba10gPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRhbjIoaW1hZyhyZXNwb25zZSksIHJlYWwo
cmVzcG9uc2UpKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vQmlxdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQu
aAppbmRleCAzZmNlN2RiOTdkNzQwM2NlMDE0NDJiODVlNjk0Y2FkZGI4MDBlZGYwLi43ODM4MTE1
OGIzZmZmMmFhMDE3ZThlMGIyMWE5ZmM0NmZkNWY0OGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9CaXF1YWQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9CaXF1YWQuaApAQCAtNzAsMTAgKzcwLDE5IEBAIHB1YmxpYzoKICAgICAvLyBSZXNl
dHMgZmlsdGVyIHN0YXRlCiAgICAgdm9pZCByZXNldCgpOwogCisgICAgLy8gRmlsdGVyIHJlc3Bv
bnNlIGF0IGEgc2V0IG9mIG4gZnJlcXVlbmNpZXMuIFRoZSBtYWduaXR1ZGUgYW5kCisgICAgLy8g
cGhhc2UgcmVzcG9uc2UgYXJlIHJldHVybmVkIGluIG1hZ1Jlc3BvbnNlIGFuZCBwaGFzZVJlc3Bv
bnNlLgorICAgIC8vIFRoZSBwaGFzZSByZXNwb25zZSBpcyBpbiByYWRpYW5zLgorICAgIHZvaWQg
Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGZsb2F0KiBmcmVxdWVuY3ksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbG9hdCogbWFnUmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCogcGhhc2VSZXNwb25zZSk7CiBwcml2YXRlOgogICAgIHZvaWQgc2V0Tm9ybWFs
aXplZENvZWZmaWNpZW50cyhkb3VibGUgYjAsIGRvdWJsZSBiMSwgZG91YmxlIGIyLCBkb3VibGUg
YTAsIGRvdWJsZSBhMSwgZG91YmxlIGEyKTsKLQotICAgIC8vIEZpbHRlciBjb2VmZmljaWVudHMK
KyAgICAKKyAgICAvLyBGaWx0ZXIgY29lZmZpY2llbnRzLiBUaGUgZmlsdGVyIGlzIGRlZmluZWQg
YXMKKyAgICAvLworICAgIC8vIHlbbl0gKyBtX2ExKnlbbi0xXSArIG1fYTIqeVtuLTJdID0gbV9i
MCp4W25dICsgbV9iMSp4W24tMV0gKyBtX2IyKnhbbi0yXS4KICAgICBkb3VibGUgbV9iMDsKICAg
ICBkb3VibGUgbV9iMTsKICAgICBkb3VibGUgbV9iMjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9CaXF1YWREU1BLZXJuZWwuY3BwCmluZGV4IGEyMjA0YjQxYTkyZWZmYzhmNDhiN2FlNDdkZjFj
YTZkM2JlMWQ3ZTEuLjgwNzk0OGRlMmIyYzI3YmRmZTFmNWI3ZWU0M2UwYzlmODYwMTliYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmNwcApAQCAtMjksMjEg
KzI5LDI3IEBACiAjaW5jbHVkZSAiQmlxdWFkRFNQS2VybmVsLmgiCiAKICNpbmNsdWRlICJCaXF1
YWRQcm9jZXNzb3IuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBCaXF1YWREU1BLZXJuZWw6OnByb2Nlc3MoY29uc3QgZmxvYXQqIHNvdXJj
ZSwgZmxvYXQqIGRlc3RpbmF0aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1
YWREU1BLZXJuZWw6OnVwZGF0ZUNvZWZmaWNpZW50c0lmTmVjZXNzYXJ5KGJvb2wgdXNlU21vb3Ro
aW5nLCBib29sIGZvcmNlVXBkYXRlKQogewotICAgIEFTU0VSVChzb3VyY2UgJiYgZGVzdGluYXRp
b24gJiYgYmlxdWFkUHJvY2Vzc29yKCkpOwotICAgIAotICAgIC8vIFJlY29tcHV0ZSBmaWx0ZXIg
Y29lZmZpY2llbnRzIGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBoYXZlIGNoYW5nZWQuCi0gICAg
Ly8gRklYTUU6IGFzIGFuIG9wdGltaXphdGlvbiwgaW1wbGVtZW50IGEgd2F5IHRoYXQgYSBCaXF1
YWQgb2JqZWN0IGNhbiBzaW1wbHkgY29weSBpdHMgaW50ZXJuYWwgZmlsdGVyIGNvZWZmaWNpZW50
cyBmcm9tIGFub3RoZXIgQmlxdWFkIG9iamVjdC4KLSAgICAvLyBUaGVuIHJlLWZhY3RvciB0aGlz
IGNvZGUgdG8gb25seSBydW4gZm9yIHRoZSBmaXJzdCBCaXF1YWREU1BLZXJuZWwgb2YgZWFjaCBC
aXF1YWRQcm9jZXNzb3IuCi0gICAgaWYgKGJpcXVhZFByb2Nlc3NvcigpLT5maWx0ZXJDb2VmZmlj
aWVudHNEaXJ0eSgpKSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTEgPSBiaXF1YWRQcm9jZXNzb3Io
KS0+cGFyYW1ldGVyMSgpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTIg
PSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMigpLT5zbW9vdGhlZFZhbHVlKCk7Ci0gICAg
ICAgIGRvdWJsZSBnYWluID0gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjMoKS0+c21vb3Ro
ZWRWYWx1ZSgpOworICAgIGlmIChmb3JjZVVwZGF0ZSB8fCBiaXF1YWRQcm9jZXNzb3IoKS0+Zmls
dGVyQ29lZmZpY2llbnRzRGlydHkoKSkgeworICAgICAgICBkb3VibGUgdmFsdWUxOworICAgICAg
ICBkb3VibGUgdmFsdWUyOworICAgICAgICBkb3VibGUgZ2FpbjsKICAgICAgICAgCisgICAgICAg
IGlmICh1c2VTbW9vdGhpbmcpIHsKKyAgICAgICAgICAgIHZhbHVlMSA9IGJpcXVhZFByb2Nlc3Nv
cigpLT5wYXJhbWV0ZXIxKCktPnNtb290aGVkVmFsdWUoKTsKKyAgICAgICAgICAgIHZhbHVlMiA9
IGJpcXVhZFByb2Nlc3NvcigpLT5wYXJhbWV0ZXIyKCktPnNtb290aGVkVmFsdWUoKTsKKyAgICAg
ICAgICAgIGdhaW4gPSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT5zbW9vdGhlZFZh
bHVlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YWx1ZTEgPSBiaXF1YWRQcm9j
ZXNzb3IoKS0+cGFyYW1ldGVyMSgpLT52YWx1ZSgpOworICAgICAgICAgICAgdmFsdWUyID0gYmlx
dWFkUHJvY2Vzc29yKCktPnBhcmFtZXRlcjIoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGdhaW4g
PSBiaXF1YWRQcm9jZXNzb3IoKS0+cGFyYW1ldGVyMygpLT52YWx1ZSgpOworICAgICAgICB9CisK
ICAgICAgICAgLy8gQ29udmVydCBmcm9tIEhlcnR6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5IDAg
LT4gMS4KICAgICAgICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7CiAgICAgICAg
IGRvdWJsZSBub3JtYWxpemVkRnJlcXVlbmN5ID0gdmFsdWUxIC8gbnlxdWlzdDsKQEAgLTgzLDEw
ICs4OSw1MCBAQCB2b2lkIEJpcXVhZERTUEtlcm5lbDo6cHJvY2Vzcyhjb25zdCBmbG9hdCogc291
cmNlLCBmbG9hdCogZGVzdGluYXRpb24sIHNpemVfdCBmcgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9Cit9CisKK3ZvaWQgQmlxdWFkRFNQS2VybmVsOjpwcm9jZXNzKGNvbnN0
IGZsb2F0KiBzb3VyY2UsIGZsb2F0KiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vz
cykKK3sKKyAgICBBU1NFUlQoc291cmNlICYmIGRlc3RpbmF0aW9uICYmIGJpcXVhZFByb2Nlc3Nv
cigpKTsKKyAgICAKKyAgICAvLyBSZWNvbXB1dGUgZmlsdGVyIGNvZWZmaWNpZW50cyBpZiBhbnkg
b2YgdGhlIHBhcmFtZXRlcnMgaGF2ZSBjaGFuZ2VkLgorICAgIC8vIEZJWE1FOiBhcyBhbiBvcHRp
bWl6YXRpb24sIGltcGxlbWVudCBhIHdheSB0aGF0IGEgQmlxdWFkIG9iamVjdCBjYW4gc2ltcGx5
IGNvcHkgaXRzIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMgZnJvbSBhbm90aGVyIEJpcXVh
ZCBvYmplY3QuCisgICAgLy8gVGhlbiByZS1mYWN0b3IgdGhpcyBjb2RlIHRvIG9ubHkgcnVuIGZv
ciB0aGUgZmlyc3QgQmlxdWFkRFNQS2VybmVsIG9mIGVhY2ggQmlxdWFkUHJvY2Vzc29yLgorCisg
ICAgdXBkYXRlQ29lZmZpY2llbnRzSWZOZWNlc3NhcnkodHJ1ZSwgZmFsc2UpOwogCiAgICAgbV9i
aXF1YWQucHJvY2Vzcyhzb3VyY2UsIGRlc3RpbmF0aW9uLCBmcmFtZXNUb1Byb2Nlc3MpOwogfQog
Cit2b2lkIEJpcXVhZERTUEtlcm5lbDo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVu
Y2llcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCogZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZsb2F0KiBwaGFzZVJlc3BvbnNlKQoreworICAgIGJvb2wgaXNHb29kID0g
bkZyZXF1ZW5jaWVzID4gMCAmJiBmcmVxdWVuY3lIeiAmJiBtYWdSZXNwb25zZSAmJiBwaGFzZVJl
c3BvbnNlOworICAgIEFTU0VSVChpc0dvb2QpOworICAgIGlmICghaXNHb29kKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8ZmxvYXQ+IGZyZXF1ZW5jeShuRnJlcXVlbmNpZXMpOworCisg
ICAgZG91YmxlIG55cXVpc3QgPSB0aGlzLT5ueXF1aXN0KCk7CisKKyAgICAvLyBDb252ZXJ0IGZy
b20gZnJlcXVlbmN5IGluIEh6IHRvIG5vcm1hbGl6ZWQgZnJlcXVlbmN5ICgwIC0+IDEpLAorICAg
IC8vIHdpdGggMSBlcXVhbCB0byB0aGUgTnlxdWlzdCBmcmVxdWVuY3kuCisgICAgZm9yIChpbnQg
ayA9IDA7IGsgPCBuRnJlcXVlbmNpZXM7ICsraykKKyAgICAgICAgZnJlcXVlbmN5W2tdID0gZnJl
cXVlbmN5SHpba10gLyBueXF1aXN0OworCisgICAgLy8gV2Ugd2FudCB0byBnZXQgdGhlIGZpbmFs
IHZhbHVlcyBvZiB0aGUgY29lZmZpY2llbnRzIGFuZCBjb21wdXRlCisgICAgLy8gdGhlIHJlc3Bv
bnNlIGZyb20gdGhhdCBpbnN0ZWFkIG9mIHNvbWUgaW50ZXJtZWRpYXRlIHNtb290aGVkCisgICAg
Ly8gc2V0LiBGb3JjZWZ1bGx5IHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGV2ZW4gaWYgdGhleSBh
cmUgbm90CisgICAgLy8gZGlydHkuCisKKyAgICB1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2Fy
eShmYWxzZSwgdHJ1ZSk7CisKKyAgICBtX2JpcXVhZC5nZXRGcmVxdWVuY3lSZXNwb25zZShuRnJl
cXVlbmNpZXMsIGZyZXF1ZW5jeS5kYXRhKCksIG1hZ1Jlc3BvbnNlLCBwaGFzZVJlc3BvbnNlKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZERTUEtlcm5lbC5o
IGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQS2VybmVsLmgKaW5kZXggNDdkMGYz
NDM5ZmZmM2NhNzQ5Y2VmZjYxNWExZjg3NjRkYjZmODVkZi4uYTIxZTI0YzBkMGM4NGQ4OTQwMDMz
ODliZTc1ZmM0Y2U4ZDI5YjBkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QmlxdWFkRFNQS2VybmVsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFkRFNQ
S2VybmVsLmgKQEAgLTQ1LDEwICs0NSwyNSBAQCBwdWJsaWM6CiAgICAgLy8gQXVkaW9EU1BLZXJu
ZWwKICAgICB2aXJ0dWFsIHZvaWQgcHJvY2Vzcyhjb25zdCBmbG9hdCogc291cmNlLCBmbG9hdCog
ZGVzdCwgc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lkIHJlc2V0KCkg
eyBtX2JpcXVhZC5yZXNldCgpOyB9Ci0gICAgCisKKyAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBh
bmQgcGhhc2UgcmVzcG9uc2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBzZXQg
b2YgZnJlcXVlbmNpZXMgKGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMu
CisgICAgdm9pZCBnZXRGcmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOwogcHJvdGVjdGVkOgogICAg
IEJpcXVhZCBtX2JpcXVhZDsKICAgICBCaXF1YWRQcm9jZXNzb3IqIGJpcXVhZFByb2Nlc3Nvcigp
IHsgcmV0dXJuIHN0YXRpY19jYXN0PEJpcXVhZFByb2Nlc3Nvcio+KHByb2Nlc3NvcigpKTsgfQor
CisgICAgLy8gVG8gcHJldmVudCBhdWRpbyBnbGl0Y2hlcyB3aGVuIHBhcmFtZXRlcnMgYXJlIGNo
YW5nZWQsCisgICAgLy8gZGV6aXBwZXJpbmcgaXMgdXNlZCB0byBzbG93bHkgY2hhbmdlIHRoZSBw
YXJhbWV0ZXJzLgorICAgIC8vIHx1c2VTbW9vdGhpbmd8IGltcGxpZXMgdGhhdCB3ZSB3YW50IHRv
IHVwZGF0ZSB1c2luZyB0aGUKKyAgICAvLyBzbW9vdGhlZCB2YWx1ZXMuIE90aGVyd2lzZSB0aGUg
ZmluYWwgdGFyZ2V0IHZhbHVlcyBhcmUKKyAgICAvLyB1c2VkLiBJZiB8Zm9yY2VVcGRhdGV8IGlz
IHRydWUsIHdlIHVwZGF0ZSB0aGUgY29lZmZpY2llbnRzIGV2ZW4KKyAgICAvLyBpZiB0aGV5IGFy
ZSBub3QgZGlydHkuIChVc2VkIHdoZW4gY29tcHV0aW5nIHRoZSBmcmVxdWVuY3kKKyAgICAvLyBy
ZXNwb25zZS4pCisgICAgdm9pZCB1cGRhdGVDb2VmZmljaWVudHNJZk5lY2Vzc2FyeShib29sIHVz
ZVNtb290aGluZywgYm9vbCBmb3JjZVVwZGF0ZSk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2Rl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCmluZGV4
IGYxNmQ4ZTVmOTZkNzU3YmY5NWQ1NzI0MmI2ZTJkYjk1Y2U2MWNmMGEuLjgwYzNmOTM4Y2QwMTk5
ZTI4N2RjNTNhM2JhOTViOGM4ZWNhZDgzOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L0JpcXVhZEZpbHRlck5vZGUuY3BwCkBAIC01Myw2ICs1MywyNSBAQCB2b2lkIEJpcXVhZEZpbHRl
ck5vZGU6OnNldFR5cGUodW5zaWduZWQgc2hvcnQgdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgYmlxdWFkUHJvY2Vzc29yKCktPnNldFR5cGUoc3RhdGljX2Nhc3Q8QmlxdWFkUHJvY2Vzc29y
OjpGaWx0ZXJUeXBlPih0eXBlKSk7CiB9CiAKKwordm9pZCBCaXF1YWRGaWx0ZXJOb2RlOjpnZXRG
cmVxdWVuY3lSZXNwb25zZShjb25zdCBGbG9hdDMyQXJyYXkqIGZyZXF1ZW5jeUh6LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkqIG1hZ1Jl
c3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9h
dDMyQXJyYXkqIHBoYXNlUmVzcG9uc2UpCit7CisgICAgaWYgKCFmcmVxdWVuY3lIeiB8fCAhbWFn
UmVzcG9uc2UgfHwgIXBoYXNlUmVzcG9uc2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
bnQgbiA9IHN0ZDo6bWluKGZyZXF1ZW5jeUh6LT5sZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6bWluKG1hZ1Jlc3BvbnNlLT5sZW5ndGgoKSwgcGhhc2VSZXNwb25zZS0+bGVuZ3Ro
KCkpKTsKKworICAgIGlmIChuKSB7CisgICAgICAgIGJpcXVhZFByb2Nlc3NvcigpLT5nZXRGcmVx
dWVuY3lSZXNwb25zZShuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnJlcXVlbmN5SHotPmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1hZ1Jlc3BvbnNlLT5kYXRhKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZVJlc3BvbnNlLT5kYXRhKCkp
OworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZp
bHRlck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZEZpbHRlck5vZGUuaApp
bmRleCA2ODNiMmEzOWQ0NzRmODNlZWNkNmI1NjUyYzQyMWVlNjgwYjU3NzkzLi41NDViMDYwYmVl
ZTZhMTk5ODQ0OGZiY2IzOGI4M2JmMDI3MmQ2OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVk
aW8vQmlxdWFkRmlsdGVyTm9kZS5oCkBAIC01Nyw3ICs1NywxMiBAQCBwdWJsaWM6CiAgICAgQXVk
aW9QYXJhbSogZnJlcXVlbmN5KCkgeyByZXR1cm4gYmlxdWFkUHJvY2Vzc29yKCktPnBhcmFtZXRl
cjEoKTsgfQogICAgIEF1ZGlvUGFyYW0qIHEoKSB7IHJldHVybiBiaXF1YWRQcm9jZXNzb3IoKS0+
cGFyYW1ldGVyMigpOyB9CiAgICAgQXVkaW9QYXJhbSogZ2FpbigpIHsgcmV0dXJuIGJpcXVhZFBy
b2Nlc3NvcigpLT5wYXJhbWV0ZXIzKCk7IH0KLSAgICAKKworICAgIC8vIEdldCB0aGUgbWFnbml0
dWRlIGFuZCBwaGFzZSByZXNwb25zZSBvZiB0aGUgZmlsdGVyIGF0IHRoZSBnaXZlbgorICAgIC8v
IHNldCBvZiBmcmVxdWVuY2llcyAoaW4gSHopLiBUaGUgcGhhc2UgcmVzcG9uc2UgaXMgaW4gcmFk
aWFucy4KKyAgICB2b2lkIGdldEZyZXF1ZW5jeVJlc3BvbnNlKGNvbnN0IEZsb2F0MzJBcnJheSog
ZnJlcXVlbmN5SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdDMyQXJyYXkq
IG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXQzMkFycmF5
KiBwaGFzZVJlc3BvbnNlKTsKIHByaXZhdGU6CiAgICAgQmlxdWFkRmlsdGVyTm9kZShBdWRpb0Nv
bnRleHQqLCBmbG9hdCBzYW1wbGVSYXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vQmlxdWFkRmlsdGVyTm9kZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9C
aXF1YWRGaWx0ZXJOb2RlLmlkbAppbmRleCA1ODYxYjg4OWNjZjU3MjViYzJkOGRkOTRhYzJlNDk4
ZWY4MjZkZTZkLi44NGUwMTVhYTMzODE1MDU0MTdiMTUwMTY1MzM0NGMzZTg3Y2Y2MjVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRGaWx0ZXJOb2RlLmlkbApAQCAtNDMsNSAr
NDMsOSBAQCBtb2R1bGUgYXVkaW8gewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQXVkaW9Q
YXJhbSBmcmVxdWVuY3k7IC8vIGluIEhlcnR6CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBB
dWRpb1BhcmFtIFE7IC8vIFF1YWxpdHkgZmFjdG9yCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBBdWRpb1BhcmFtIGdhaW47IC8vIGluIERlY2liZWxzCisKKyAgICAgICAgdm9pZCBnZXRGcmVx
dWVuY3lSZXNwb25zZShpbiBGbG9hdDMyQXJyYXkgZnJlcXVlbmN5SHosCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW4gRmxvYXQzMkFycmF5IG1hZ1Jlc3BvbnNlLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIEZsb2F0MzJBcnJheSBwaGFzZVJlc3BvbnNl
KTsKICAgICB9OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQmlxdWFk
UHJvY2Vzc29yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5j
cHAKaW5kZXggMTkyNzU1YTViOGVmOTkzNWZhYmM2NDI5MGU3NjQxZDZlMjU4ODk3OC4uMTIyNDNj
MGM5OWJlMWNjNzc1M2VjMmE5Zjc5NTI4MzlmODY5OTYyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvd2ViYXVkaW8vQmlxdWFkUHJvY2Vzc29yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93
ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuY3BwCkBAIC05MCwxNCArOTAsMTAgQEAgUGFzc093blB0
cjxBdWRpb0RTUEtlcm5lbD4gQmlxdWFkUHJvY2Vzc29yOjpjcmVhdGVLZXJuZWwoKQogICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMpKTsKIH0KIAotdm9pZCBCaXF1
YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMqIGRlc3RpbmF0
aW9uLCBzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKQordm9pZCBCaXF1YWRQcm9jZXNzb3I6OmNoZWNr
Rm9yRGlydHlDb2VmZmljaWVudHMoKQogewotICAgIGlmICghaXNJbml0aWFsaXplZCgpKSB7Ci0g
ICAgICAgIGRlc3RpbmF0aW9uLT56ZXJvKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
ICAgIAotICAgIC8vIERlYWwgd2l0aCBzbW9vdGhpbmcgLyBkZS16aXBwZXJpbmcuICBTdGFydCBv
dXQgYXNzdW1pbmcgZmlsdGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KKyAgICAvLyBE
ZWFsIHdpdGggc21vb3RoaW5nIC8gZGUtemlwcGVyaW5nLiBTdGFydCBvdXQgYXNzdW1pbmcgZmls
dGVyIHBhcmFtZXRlcnMgYXJlIG5vdCBjaGFuZ2luZy4KKwogICAgIC8vIFRoZSBCaXF1YWREU1BL
ZXJuZWwgb2JqZWN0cyByZWx5IG9uIHRoaXMgdmFsdWUgdG8gc2VlIGlmIHRoZXkgbmVlZCB0byBy
ZS1jb21wdXRlIHRoZWlyIGludGVybmFsIGZpbHRlciBjb2VmZmljaWVudHMuCiAgICAgbV9maWx0
ZXJDb2VmZmljaWVudHNEaXJ0eSA9IGZhbHNlOwogICAgIApAQCAtMTA5LDE0ICsxMDUsMjQgQEAg
dm9pZCBCaXF1YWRQcm9jZXNzb3I6OnByb2Nlc3MoQXVkaW9CdXMqIHNvdXJjZSwgQXVkaW9CdXMq
IGRlc3RpbmF0aW9uLCBzaXplX3QgZnIKICAgICAgICAgbV9maWx0ZXJDb2VmZmljaWVudHNEaXJ0
eSA9IHRydWU7CiAgICAgICAgIG1faGFzSnVzdFJlc2V0ID0gZmFsc2U7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgLy8gU21vb3RoIGFsbCBvZiB0aGUgZmlsdGVyIHBhcmFtZXRlcnMuICBJZiB0aGV5
IGhhdmVuJ3QgeWV0IGNvbnZlcmdlZCB0byB0aGVpciB0YXJnZXQgdmFsdWUgdGhlbiBtYXJrIGNv
ZWZmaWNpZW50cyBhcyBkaXJ0eS4KKyAgICAgICAgLy8gU21vb3RoIGFsbCBvZiB0aGUgZmlsdGVy
IHBhcmFtZXRlcnMuIElmIHRoZXkgaGF2ZW4ndCB5ZXQgY29udmVyZ2VkIHRvIHRoZWlyIHRhcmdl
dCB2YWx1ZSB0aGVuIG1hcmsgY29lZmZpY2llbnRzIGFzIGRpcnR5LgogICAgICAgICBib29sIGlz
U3RhYmxlMSA9IG1fcGFyYW1ldGVyMS0+c21vb3RoKCk7CiAgICAgICAgIGJvb2wgaXNTdGFibGUy
ID0gbV9wYXJhbWV0ZXIyLT5zbW9vdGgoKTsKICAgICAgICAgYm9vbCBpc1N0YWJsZTMgPSBtX3Bh
cmFtZXRlcjMtPnNtb290aCgpOwogICAgICAgICBpZiAoIShpc1N0YWJsZTEgJiYgaXNTdGFibGUy
ICYmIGlzU3RhYmxlMykpCiAgICAgICAgICAgICBtX2ZpbHRlckNvZWZmaWNpZW50c0RpcnR5ID0g
dHJ1ZTsKICAgICB9Cit9CisKK3ZvaWQgQmlxdWFkUHJvY2Vzc29yOjpwcm9jZXNzKEF1ZGlvQnVz
KiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1lc1RvUHJvY2VzcykK
K3sKKyAgICBpZiAoIWlzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBkZXN0aW5hdGlvbi0+emVy
bygpOworICAgICAgICByZXR1cm47CisgICAgfQogICAgICAgICAKKyAgICBjaGVja0ZvckRpcnR5
Q29lZmZpY2llbnRzKCk7CisgICAgICAgICAgICAKICAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9m
IG91ciBpbnB1dCwgcHJvY2VzcyB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBCaXF1YWREU1BLZXJu
ZWwgaW50byB0aGUgb3V0cHV0IGNoYW5uZWwuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fa2VybmVscy5zaXplKCk7ICsraSkKICAgICAgICAgbV9rZXJuZWxzW2ldLT5wcm9jZXNzKHNv
dXJjZS0+Y2hhbm5lbChpKS0+ZGF0YSgpLCBkZXN0aW5hdGlvbi0+Y2hhbm5lbChpKS0+ZGF0YSgp
LCBmcmFtZXNUb1Byb2Nlc3MpOwpAQCAtMTMwLDYgKzEzNiwyMCBAQCB2b2lkIEJpcXVhZFByb2Nl
c3Nvcjo6c2V0VHlwZShGaWx0ZXJUeXBlIHR5cGUpCiAgICAgfQogfQogCit2b2lkIEJpcXVhZFBy
b2Nlc3Nvcjo6Z2V0RnJlcXVlbmN5UmVzcG9uc2UoaW50IG5GcmVxdWVuY2llcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCogZnJlcXVlbmN5
SHosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIG1h
Z1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
b2F0KiBwaGFzZVJlc3BvbnNlKQoreworICAgIC8vIENvbXB1dGUgdGhlIGZyZXF1ZW5jeSByZXNw
b25zZSBvbiBhIHNlcGFyYXRlIHRlbXBvcmFyeSBrZXJuZWwKKyAgICAvLyB0byBhdm9pZCBpbnRl
cmZlcmluZyB3aXRoIHRoZSBwcm9jZXNzaW5nIHJ1bm5pbmcgaW4gdGhlIGF1ZGlvCisgICAgLy8g
dGhyZWFkIG9uIHRoZSBtYWluIGtlcm5lbHMuCisgICAgCisgICAgT3duUHRyPEJpcXVhZERTUEtl
cm5lbD4gcmVzcG9uc2VLZXJuZWwgPSBhZG9wdFB0cihuZXcgQmlxdWFkRFNQS2VybmVsKHRoaXMp
KTsKKworICAgIHJlc3BvbnNlS2VybmVsLT5nZXRGcmVxdWVuY3lSZXNwb25zZShuRnJlcXVlbmNp
ZXMsIGZyZXF1ZW5jeUh6LCBtYWdSZXNwb25zZSwgcGhhc2VSZXNwb25zZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9CaXF1YWRQcm9jZXNzb3IuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCmluZGV4IDE2ZWY0MDVkZTJjNDQ1N2Yz
YTE0Y2RkYzUxMTVjMzljMTc1MDVjOWYuLmM3ZjdkMzA2OGEzY2Y1ZGU1YzgyNDEzMTkxM2JjZjY0
NTkyMzc5ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nl
c3Nvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0JpcXVhZFByb2Nlc3Nvci5oCkBA
IC02MCw2ICs2MCwxNSBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgIHZpcnR1YWwgdm9pZCBwcm9j
ZXNzKEF1ZGlvQnVzKiBzb3VyY2UsIEF1ZGlvQnVzKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGZyYW1l
c1RvUHJvY2Vzcyk7CiAKKyAgICAvLyBHZXQgdGhlIG1hZ25pdHVkZSBhbmQgcGhhc2UgcmVzcG9u
c2Ugb2YgdGhlIGZpbHRlciBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBzZXQgb2YgZnJlcXVlbmNpZXMg
KGluIEh6KS4gVGhlIHBoYXNlIHJlc3BvbnNlIGlzIGluIHJhZGlhbnMuCisgICAgdm9pZCBnZXRG
cmVxdWVuY3lSZXNwb25zZShpbnQgbkZyZXF1ZW5jaWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgZmxvYXQqIGZyZXF1ZW5jeUh6LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZmxvYXQqIG1hZ1Jlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQqIHBoYXNlUmVzcG9uc2UpOworCisgICAgdm9pZCBjaGVja0ZvckRpcnR5Q29lZmZp
Y2llbnRzKCk7CisgICAgCiAgICAgYm9vbCBmaWx0ZXJDb2VmZmljaWVudHNEaXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsdGVyQ29lZmZpY2llbnRzRGlydHk7IH0KIAogICAgIEF1ZGlvUGFyYW0q
IHBhcmFtZXRlcjEoKSB7IHJldHVybiBtX3BhcmFtZXRlcjEuZ2V0KCk7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>