<?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>36664</bug_id>
          
          <creation_ts>2010-03-26 09:19:57 -0700</creation_ts>
          <short_desc>Add animation to progress element</short_desc>
          <delta_ts>2010-04-01 07:58:05 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>36224</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yael">yael</reporter>
          <assigned_to name="Yael">yael</assigned_to>
          <cc>ap</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>204612</commentid>
    <comment_count>0</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-26 09:19:57 -0700</bug_when>
    <thetext>Indeterminate progress bar should animate, and on Mac OS even determinate progress bar should animate.
Add a timer and capability to animate the progress bar when needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204681</commentid>
    <comment_count>1</comment_count>
      <attachid>51763</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-26 11:02:37 -0700</bug_when>
    <thetext>Created attachment 51763
Patch for animation.

Add a timer to control the animation of the progress bar.
Remove an obsolete function RenderTheme::getNumberOfPixelsForProgressPosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204697</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-26 11:42:17 -0700</bug_when>
    <thetext>What stops the animation when the page goes into b/f cache?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204700</commentid>
    <comment_count>3</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-26 11:46:59 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; What stops the animation when the page goes into b/f cache?

RenderObject::willRenderContents() will return false when the document is in cache, and animation will not start again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205458</commentid>
    <comment_count>4</comment_count>
      <attachid>51763</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-03-29 08:42:23 -0700</bug_when>
    <thetext>Comment on attachment 51763
Patch for animation.

Looks generally good. I think you should consider doing animations in other way than incrementing frame counter (see below) so r- for now.

&gt;  #if ENABLE(PROGRESS_TAG)
&gt; -bool RenderThemeQt::getNumberOfPixelsForProgressPosition(double position, int&amp; progressSize) const
&gt; +double RenderThemeQt::animationIntervalForProgressBar(bool determinate) const
&gt;  {
&gt; -    progressSize = 65536 * position;
&gt; -    return false;
&gt; +    // FIXME: Use hardcoded value until http://bugreports.qt.nokia.com/browse/QTBUG-9171 is fixed.
&gt; +    // Use the value from windows style which is 10 fps.
&gt; +    if (determinate)
&gt; +        return -1;
&gt; +    return 0.1;
&gt;  }

Either 0 (real interval can&apos;t be 0) or std::numeric_limits&lt;double&gt;::infinity() would be more natural ways to signal &quot;no animation interval&quot; than slightly random -1.

&gt;  #if ENABLE(PROGRESS_TAG)
&gt; -    // Helper method for optimizing the paint area of the progress bar.
&gt; -    // If supported, it returns number of pixels needed to draw the progress bar up to the progress position.
&gt; -    // progressSize is the value that is passed back to RenderTheme during drawing.
&gt; -    virtual bool getNumberOfPixelsForProgressPosition(double position, int&amp; progressSize) const;
&gt; +    // Returns the interval for the progress bar animation, or -1 if no animation is required.
&gt; +    virtual double animationIntervalForProgressBar(bool determinate) const;
&gt;  #endif

Enums are generally preferred over magic bools since it is hard to tell what is going on from the call site.

&gt; &gt; ===================================================================
&gt; --- WebCore/rendering/RenderObject.h	(revision 56630)
&gt; +++ WebCore/rendering/RenderObject.h	(working copy)
&gt; @@ -788,6 +788,8 @@ protected:
&gt;      void paintOutline(GraphicsContext*, int tx, int ty, int w, int h, const RenderStyle*);
&gt;      void addPDFURLRect(GraphicsContext*, const IntRect&amp;);
&gt;  
&gt; +    bool willRenderContents();
&gt; +
&gt;      virtual IntRect viewRect() const;

Could be public and next to willRenderImage() in the header


&gt; +void RenderProgress::animationFrameTimerFired(Timer&lt;RenderProgress&gt;*)
&gt; +{
&gt; +    m_animationFrame++;

Usually animation in WebKit is tracked in terms of progress on timeline. Doing animation by increment frame count is not optimal. If you increase the animation frame rate it will also cause the animation to run faster. RenderMedia fade is an example of this type of animation in an existing similar type of control element.

&gt; +    repaintRectangle(contentBoxRect());
&gt; +
&gt; +    IntRect r(contentBoxRect());
&gt; +}

This line does nothing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205980</commentid>
    <comment_count>5</comment_count>
      <attachid>52030</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-30 06:53:21 -0700</bug_when>
    <thetext>Created attachment 52030
Adress Antti&apos;s comments in #4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206028</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-03-30 09:00:43 -0700</bug_when>
    <thetext>Some stuff I said in IRC about possible ways to clarify responsibilities between theme and the renderer.

[18:39] anttik: so how about this
[18:42] anttik: RenderProgress will have animating state
[18:43] anttik: which is independent of whether the animation is currently happening (since that depends on if it is visible or not)
[18:44] anttik: when entering animating state it records the start time
[18:44] anttik: animationProgress() is calculated from start time, duration and current time
[18:45] anttik: and is used as input for rendering
[18:47] anttik: if in animating state it will restart the animation timer on paint()
[18:48] anttik: actual changes in the progress bar state will trigger changes in and out of the animating state
[18:49] anttik: possibly querying style if a given progress bar state needs animation or not
[18:51] anttik: so paint() will have if (m_animating) m_startOneShot(m_repeatInterval)
[18:51] anttik: and start/stopAnimation() will do state transitions
[18:51] anttik: m_animationTimer.startOneShot()
[18:53] anttik: that should lead to a clear split of responsibility
[18:53] anttik: does that sound stupid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206113</commentid>
    <comment_count>7</comment_count>
      <attachid>52069</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-30 12:26:29 -0700</bug_when>
    <thetext>Created attachment 52069
Patch 

Update the design as siggested on IRC (comment #6).
Some changes 
- Renamed startAnimation() to updateAnimationState() because it is not starting the animation timer anymore.
- Removed the check RenderObject::willRenderContents() because when a page is in the b/f cache, paint() is not called, so the timer will not start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206465</commentid>
    <comment_count>8</comment_count>
      <attachid>52069</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-03-31 05:19:26 -0700</bug_when>
    <thetext>Comment on attachment 52069
Patch 

Looks pretty good, a few comments:

&gt;  #if ENABLE(PROGRESS_TAG)
&gt; -bool RenderThemeQt::getNumberOfPixelsForProgressPosition(double position, int&amp; progressSize) const
&gt; +bool RenderThemeQt::animationIntervalAndDurationForProgressBar(RenderProgress* renderProgress, double&amp; interval, double&amp; duration) const

The style is to name functions that return values in parameters get* -&gt; getAnimationIntervalAndDurationForProgressBar. Alternatively use multiple functions with single return value.

It would be better to return all values as parameters. Now it is unclear what the separate bool return means. I&apos;m not sure if it is really needed either, 0 duration could signal the same thing (==don&apos;t animate).

+RenderProgress::~RenderProgress()
+{
+    m_animationTimer.stop();
+}
+

No need to add destructor for this, the timer will get deleted and stop automatically.

&gt; +double RenderProgress::animationProgress()
&gt; +{
&gt; +    return m_animating ? (fmod((currentTime() - m_animationStartTime), m_animationDuration) / m_animationInterval) : 0;
&gt; +}

Dividing by m_animationInterval is bit strange and seems to tie to the specific way the theme is implemented. It would be better to divide by m_animationDuration to get 0-1 progress range. The paint position can then be calculated in the theme by progress * option.rect.width().

&gt; +void RenderProgress::updateAnimationState()
&gt; +{
&gt; +    m_animationTimer.stop();
&gt; +    m_animating = theme()-&gt;animationIntervalAndDurationForProgressBar(this, m_animationInterval, m_animationDuration);
&gt; +    if (m_animating)
&gt; +        m_animationStartTime = currentTime();
&gt; +}

Should this also start the timer if the state changed? Stopping the timer seems wrong if the state did not change.

&gt;      double m_position;
&gt; +    double m_animationStartTime;
&gt; +    double m_animationInterval;

m_animationRepeatInterval perhaps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206535</commentid>
    <comment_count>9</comment_count>
      <attachid>52177</attachid>
    <who name="Yael">yael</who>
    <bug_when>2010-03-31 09:00:05 -0700</bug_when>
    <thetext>Created attachment 52177
Patch updated based on comment #8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206550</commentid>
    <comment_count>10</comment_count>
      <attachid>52177</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2010-03-31 09:41:32 -0700</bug_when>
    <thetext>Comment on attachment 52177
Patch updated based on comment #8.

Nice, r=me

&gt; +    m_animationTimer.stop();
&gt; +    if (m_animating) {
&gt; +        m_animationStartTime = currentTime();
&gt; +        m_animationTimer.startOneShot(m_animationRepeatInterval);
&gt; +    }

That could be

else
    m_animationTimer.stop();

(it is ok to start active timer again)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206562</commentid>
    <comment_count>11</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-03-31 10:08:46 -0700</bug_when>
    <thetext>Landed in r56850.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207156</commentid>
    <comment_count>12</comment_count>
    <who name="Yael">yael</who>
    <bug_when>2010-04-01 07:58:05 -0700</bug_when>
    <thetext>*** Bug 36224 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51763</attachid>
            <date>2010-03-26 11:02:37 -0700</date>
            <delta_ts>2010-03-30 06:53:21 -0700</delta_ts>
            <desc>Patch for animation.</desc>
            <filename>36664.patch</filename>
            <type>text/plain</type>
            <size>18607</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjYzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMTAtMDMtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICBBZGQgYSB0aW1lciB0
byBjb250cm9sIHRoZSBhbmltYXRpb24uIFRoZSB0aW1lciBpcyBzdGFydGVkIGFmdGVyIHBhaW50
aW5nCisgICAgICAgIHRvIHByZXZlbnQgYW5pbWF0aW9uIGZyb20gcnVubmluZyB3aGVuIHRoZSBw
cm9ncmVzcyBiYXIgaXMgbm90IHZpc2libGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uSW50ZXJ2YWxGb3JQcm9n
cmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0OjpwYWludFByb2dyZXNz
QmFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmpl
Y3Q6OndpbGxSZW5kZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Ondp
bGxSZW5kZXJDb250ZW50cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQcm9ncmVzczo6UmVuZGVyUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyUHJvZ3Jlc3M6On5SZW5kZXJQcm9ncmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQ
cm9ncmVzczo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OnN0b3BBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6
OnN0YXJ0QW5pbWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjphbmlt
YXRpb25GcmFtZVRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6
OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjphbmltYXRpb25GcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJQcm9ncmVzczo6cmVzZXRBbmltYXRpb25GcmFtZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lOjph
bmltYXRpb25JbnRlcnZhbEZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGhlbWUuaDoKKwogMjAxMC0wMy0yNiAgSmFubmUgS29za2luZW4gIDxqYW5uZS5wLmtvc2tp
bmVuQGRpZ2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBMYXN6bG8gR29tYm9zLgpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gNTY2MzApCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxIVE1MUHJvZ3Jlc3NFbGVtZW50PiBIVE1MUHJvZwogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFByb2dyZXNzRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVu
dCwgZm9ybSkpOwogfQogCi1SZW5kZXJPYmplY3QqIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OmNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxlKQorUmVuZGVy
T2JqZWN0KiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSog
YXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkgUmVuZGVyUHJv
Z3Jlc3ModGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJ
KHJldmlzaW9uIDU2NjMwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjUzLDEwICs2NTMsMTMgQEAgYm9vbCBSZW5kZXJUaGVtZVF0
OjpwYWludE1lbnVMaXN0QnV0dG9uKAogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLWJv
b2wgUmVuZGVyVGhlbWVRdDo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKGRv
dWJsZSBwb3NpdGlvbiwgaW50JiBwcm9ncmVzc1NpemUpIGNvbnN0Citkb3VibGUgUmVuZGVyVGhl
bWVRdDo6YW5pbWF0aW9uSW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcihib29sIGRldGVybWluYXRlKSBj
b25zdAogewotICAgIHByb2dyZXNzU2l6ZSA9IDY1NTM2ICogcG9zaXRpb247Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIC8vIEZJWE1FOiBVc2UgaGFyZGNvZGVkIHZhbHVlIHVudGlsIGh0dHA6Ly9i
dWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZC4KKyAgICAv
LyBVc2UgdGhlIHZhbHVlIGZyb20gd2luZG93cyBzdHlsZSB3aGljaCBpcyAxMCBmcHMuCisgICAg
aWYgKGRldGVybWluYXRlKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIDAuMTsKIH0K
IAogdm9pZCBSZW5kZXJUaGVtZVF0OjphZGp1c3RQcm9ncmVzc0JhclN0eWxlKENTU1N0eWxlU2Vs
ZWN0b3IqLCBSZW5kZXJTdHlsZSogc3R5bGUsIEVsZW1lbnQqKSBjb25zdApAQCAtNjg2LDcgKzY4
OSwyMiBAQCBib29sIFJlbmRlclRoZW1lUXQ6OnBhaW50UHJvZ3Jlc3NCYXIoUmVuCiAgICAgb3B0
aW9uLnJlY3QubW92ZVRvKFFQb2ludCgwLCAwKSk7CiAgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShy
LnNpemUoKSk7CiAKLSAgICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsIG9w
dGlvbik7CisgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNv
bS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAvLyB3ZSBkcmF3IGFuIGFuaW1hdGlv
biBvZiBvbmUgc3F1YXJlLgorICAgIGlmIChvcHRpb24ucHJvZ3Jlc3MgPCAwKSB7CisgICAgICAg
IHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhckdyb292ZSwgb3B0aW9uKTsKKyAg
ICAgICAgaW50IGNodW5rV2lkdGggPSBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Q
cm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pOworICAgICAgICBpZiAoY2h1bmtXaWR0aCAq
IChyZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uRnJhbWUoKSArIDEpID4gb3B0aW9uLnJlY3Qud2lk
dGgoKSkKKyAgICAgICAgICAgIHJlbmRlclByb2dyZXNzLT5yZXNldEFuaW1hdGlvbkZyYW1lKCk7
CisKKyAgICAgICAgUUNvbG9yIGNvbG9yID0gKG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09
IG9wdGlvbi5wYWxldHRlLmJhY2tncm91bmQoKSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFs
ZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGlnaGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9y
KFFQYWxldHRlOjpIaWdobGlnaHQpOworICAgICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxl
KCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qo
b3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5rV2lkdGggKiAocmVuZGVyUHJvZ3Jlc3MtPmFuaW1h
dGlvbkZyYW1lKCkgKyAxKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNv
bG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChjaHVu
a1dpZHRoICogcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvbkZyYW1lKCksIDAsIGNodW5rV2lkdGgs
IG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisgICAgICAgIHAuZHJh
d0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKwogICAgIHAucGFpbnRl
ci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKIAogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZpc2lvbiA1NjYzMCkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsMTAgKzEyOCw4
IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNE
ZWNvcmF0aW9uKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwg
Y29uc3QgSW50UmVjdCYpOwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykKLSAgICAvLyBIZWxw
ZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBwYWludCBhcmVhIG9mIHRoZSBwcm9ncmVzcyBi
YXIuCi0gICAgLy8gSWYgc3VwcG9ydGVkLCBpdCByZXR1cm5zIG51bWJlciBvZiBwaXhlbHMgbmVl
ZGVkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciB1cCB0byB0aGUgcHJvZ3Jlc3MgcG9zaXRpb24u
Ci0gICAgLy8gcHJvZ3Jlc3NTaXplIGlzIHRoZSB2YWx1ZSB0aGF0IGlzIHBhc3NlZCBiYWNrIHRv
IFJlbmRlclRoZW1lIGR1cmluZyBkcmF3aW5nLgotICAgIHZpcnR1YWwgYm9vbCBnZXROdW1iZXJP
ZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBvc2l0aW9uLCBpbnQmIHByb2dyZXNz
U2l6ZSkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgaW50ZXJ2YWwgZm9yIHRoZSBwcm9ncmVz
cyBiYXIgYW5pbWF0aW9uLCBvciAtMSBpZiBubyBhbmltYXRpb24gaXMgcmVxdWlyZWQuCisgICAg
dmlydHVhbCBkb3VibGUgYW5pbWF0aW9uSW50ZXJ2YWxGb3JQcm9ncmVzc0Jhcihib29sIGRldGVy
bWluYXRlKSBjb25zdDsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFZJREVPKQpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA1NjYzMCkKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMjEsNiArMjMyMSwxMSBA
QCB2b2lkIFJlbmRlck9iamVjdDo6Y29sbGVjdERhc2hib2FyZFJlZ2lvCiAKIGJvb2wgUmVuZGVy
T2JqZWN0Ojp3aWxsUmVuZGVySW1hZ2UoQ2FjaGVkSW1hZ2UqKQogeworICAgIHJldHVybiB3aWxs
UmVuZGVyQ29udGVudHMoKTsKK30KKworYm9vbCBSZW5kZXJPYmplY3Q6OndpbGxSZW5kZXJDb250
ZW50cygpCit7CiAgICAgLy8gV2l0aG91dCB2aXNpYmlsaXR5IHdlIHdvbid0IHJlbmRlciAoYW5k
IHRoZXJlZm9yZSBkb24ndCBjYXJlIGFib3V0IGFuaW1hdGlvbikuCiAgICAgaWYgKHN0eWxlKCkt
PnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFKQogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNTY2MzApCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzg4LDYgKzc4OCw4IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIHBhaW50T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgs
IGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSopOwogICAgIHZvaWQgYWRk
UERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAgICBib29s
IHdpbGxSZW5kZXJDb250ZW50cygpOworCiAgICAgdmlydHVhbCBJbnRSZWN0IHZpZXdSZWN0KCkg
Y29uc3Q7CiAKICAgICB2b2lkIGFkanVzdFJlY3RGb3JPdXRsaW5lQW5kU2hhZG93KEludFJlY3Qm
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHJldmlzaW9u
IDU2NjMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw5ICszNSwxNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogUmVu
ZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKEhUTUxQcm9ncmVzc0VsZW1lbnQqIGVsZW1lbnQp
CiAgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQogICAgICwgbV9wb3NpdGlvbigtMSkKKyAgICAs
IG1fZnJhbWVJbnRlcnZhbCh0aGVtZSgpLT5hbmltYXRpb25JbnRlcnZhbEZvclByb2dyZXNzQmFy
KGZhbHNlKSkKKyAgICAsIG1fYW5pbWF0aW9uRnJhbWUoMCkKKyAgICAsIG1fYW5pbWF0aW9uRnJh
bWVUaW1lcih0aGlzLCAmUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvbkZyYW1lVGltZXJGaXJlZCkK
IHsKIH0KIAorUmVuZGVyUHJvZ3Jlc3M6On5SZW5kZXJQcm9ncmVzcygpCit7CisgICAgc3RvcEFu
aW1hdGlvbigpOworfQorCiB2b2lkIFJlbmRlclByb2dyZXNzOjpsYXlvdXQoKQogewogICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKQEAgLTYxLDggKzY5LDM4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jl
c3M6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcG9zaXRpb24g
PSBlbGVtZW50LT5wb3NpdGlvbigpOwogCisgICAgc3RvcEFuaW1hdGlvbigpOworICAgIG1fZnJh
bWVJbnRlcnZhbCA9IHRoZW1lKCktPmFuaW1hdGlvbkludGVydmFsRm9yUHJvZ3Jlc3NCYXIobV9w
b3NpdGlvbiA+PSAwKTsKICAgICByZXBhaW50KCk7CiB9CiAKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6
OnN0b3BBbmltYXRpb24oKQoreworICAgIG1fYW5pbWF0aW9uRnJhbWVUaW1lci5zdG9wKCk7Cit9
CisKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnN0YXJ0QW5pbWF0aW9uKCkKK3sKKyAgICBpZiAobV9m
cmFtZUludGVydmFsID49IDAgJiYgUmVuZGVyT2JqZWN0Ojp3aWxsUmVuZGVyQ29udGVudHMoKSkK
KyAgICAgICAgbV9hbmltYXRpb25GcmFtZVRpbWVyLnN0YXJ0T25lU2hvdChtX2ZyYW1lSW50ZXJ2
YWwpOworfQorCit2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25GcmFtZVRpbWVyRmlyZWQo
VGltZXI8UmVuZGVyUHJvZ3Jlc3M+KikKK3sKKyAgICBtX2FuaW1hdGlvbkZyYW1lKys7CisgICAg
cmVwYWludFJlY3RhbmdsZShjb250ZW50Qm94UmVjdCgpKTsKKworICAgIEludFJlY3Qgcihjb250
ZW50Qm94UmVjdCgpKTsKK30KKwordm9pZCBSZW5kZXJQcm9ncmVzczo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludEluZm8sIGludCB0eCwgaW50IHR5KQoreworICAgIGlmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUJsb2NrQmFja2dyb3VuZCkgeworICAgICAgICBpZiAoIW1fYW5pbWF0aW9u
RnJhbWVUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICAgICAgc3RhcnRBbmltYXRpb24oKTsKKyAg
ICB9CisgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dy
ZXNzLmgJKHJldmlzaW9uIDU2NjMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jl
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTQgKzMxLDI2IEBAIGNsYXNzIEhUTUxQcm9ncmVz
c0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJQcm9ncmVzcyA6IHB1YmxpYyBSZW5kZXJCbG9jayB7CiBw
dWJsaWM6CiAgICAgUmVuZGVyUHJvZ3Jlc3MoSFRNTFByb2dyZXNzRWxlbWVudCopOworICAgIH5S
ZW5kZXJQcm9ncmVzcygpOwogICAgIGRvdWJsZSBwb3NpdGlvbigpIHsgcmV0dXJuIG1fcG9zaXRp
b247IH0KKyAgICBpbnQgYW5pbWF0aW9uRnJhbWUoKSB7IHJldHVybiBtX2FuaW1hdGlvbkZyYW1l
OyB9CisgICAgdm9pZCByZXNldEFuaW1hdGlvbkZyYW1lKCkgeyBtX2FuaW1hdGlvbkZyYW1lID0g
MDsgfQogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJQcm9ncmVzcyI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9n
cmVzcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKworICAgIHZvaWQgc3RvcEFuaW1h
dGlvbigpOworICAgIHZvaWQgc3RhcnRBbmltYXRpb24oKTsKKyAgICB2b2lkIGFuaW1hdGlvbkZy
YW1lVGltZXJGaXJlZChUaW1lcjxSZW5kZXJQcm9ncmVzcz4qKTsKKwogICAgIGRvdWJsZSBtX3Bv
c2l0aW9uOworICAgIGRvdWJsZSBtX2ZyYW1lSW50ZXJ2YWw7CisgICAgaW50IG1fYW5pbWF0aW9u
RnJhbWU7CisgICAgVGltZXI8UmVuZGVyUHJvZ3Jlc3M+IG1fYW5pbWF0aW9uRnJhbWVUaW1lcjsK
IH07CiAKIGlubGluZSBSZW5kZXJQcm9ncmVzcyogdG9SZW5kZXJQcm9ncmVzcyhSZW5kZXJPYmpl
Y3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9uIDU2
NjMwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NDAsMTAgKzg0MCw5IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5
bGUoQ1MKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi1ib29sIFJlbmRlclRoZW1lOjpn
ZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlICwgaW50JiBwcm9ncmVz
c1NpemUpIGNvbnN0Citkb3VibGUgUmVuZGVyVGhlbWU6OmFuaW1hdGlvbkludGVydmFsRm9yUHJv
Z3Jlc3NCYXIoYm9vbCkgY29uc3QKIHsKLSAgICBwcm9ncmVzc1NpemUgPSAwOwotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gLTE7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVzdFBy
b2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiwgRWxlbWVudCop
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDU2NjMwKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDEw
ICsxNzAsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0
b3IoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJ
bnRSZWN0JikgeyByZXR1cm4gMDsgfTsKIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAg
Ly8gSGVscGVyIG1ldGhvZCBmb3Igb3B0aW1pemluZyB0aGUgcGFpbnQgYXJlYSBvZiB0aGUgcHJv
Z3Jlc3MgYmFyLgotICAgIC8vIElmIHN1cHBvcnRlZCwgaXQgcmV0dXJucyBudW1iZXIgb2YgcGl4
ZWxzIG5lZWRlZCB0byBkcmF3IHRoZSBwcm9ncmVzcyBiYXIgdXAgdG8gdGhlIHByb2dyZXNzIHBv
c2l0aW9uLgotICAgIC8vIHByb2dyZXNzU2l6ZSBpcyB0aGUgdmFsdWUgdGhhdCBpcyBwYXNzZWQg
YmFjayB0byBSZW5kZXJUaGVtZSBkdXJpbmcgZHJhd2luZy4KLSAgICB2aXJ0dWFsIGJvb2wgZ2V0
TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKGRvdWJsZSBwb3NpdGlvbiwgaW50JiBw
cm9ncmVzc1NpemUpIGNvbnN0OworICAgIC8vIFJldHJ1bnMgdGhlIGludGVydmFsIGZvciB0aGUg
cHJvZ3Jlc3MgYmFyIGFuaW1hdGlvbiwgb3IgLTEgaWYgbm8gYW5pbWF0aW9uIGlzIHJlcXVpcmVk
LgorICAgIHZpcnR1YWwgZG91YmxlIGFuaW1hdGlvbkludGVydmFsRm9yUHJvZ3Jlc3NCYXIoYm9v
bCBkZXRlcm1pbmF0ZSkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFTykKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU2NjMxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDMtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFy
b25Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICAqIGZhc3Qv
ZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC5odG1sOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVu
dC1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1M
UHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1lbnQtZXhwZWN0ZWQucG5nOgorICAgICAgICAq
IHBsYXRmb3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVu
dC1leHBlY3RlZC50eHQ6CisKIDIwMTAtMDMtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25A
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxl
bWVudC9wcm9ncmVzcy1lbGVtZW50Lmh0bWwJKHJldmlzaW9uIDU2NjMwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50Lmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTxodG1sPjxib2R5Pjxwcm9ncmVzcyB2YWx1ZT03MCBt
YXg9MTAwPjwvcHJvZ3Jlc3M+PHNtYWxsPjxwcm9ncmVzcyB2YWx1ZT03MCBtYXg9MTAwIGRpcj0i
cnRsIj48L3Byb2dyZXNzPjwvc21hbGw+PC9ib2R5PjwvaHRtbD4KKzxodG1sPjxib2R5Pjxwcm9n
cmVzcyB2YWx1ZT03MCBtYXg9MTAwPjwvcHJvZ3Jlc3M+PHNtYWxsPjxwcm9ncmVzcyB2YWx1ZT03
MCBtYXg9MTAwIGRpcj0icnRsIj48L3Byb2dyZXNzPjwvc21hbGw+PHByb2dyZXNzPjwvcHJvZ3Jl
c3M+PHByb2dyZXNzIGRpcj0icnRsIj48L3Byb2dyZXNzPjwvYm9keT48L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dy
ZXNzLWVsZW1lbnQtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50
LWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA1NjYzMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1leHBl
Y3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNThlMDI4ODNhOTQ0YzUx
OWJjOTlhMjEwMDhkZGYwNzYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisxOWE4YTJhMDE2
MzY4ODc1YWNkOGQwZmU3NWNmYmQwZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJv
Z3Jlc3MtZWxlbWVudC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gNTY2MzApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1lbnQtZXhwZWN0ZWQudHh0
CSh3b3JraW5nIGNvcHkpCkBAIC02LDQgKzYsNiBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2
MDAKICAgICAgIFJlbmRlclByb2dyZXNzIHtQUk9HUkVTU30gYXQgKDAsMCkgc2l6ZSAxNjB4MTYK
ICAgICAgIFJlbmRlcklubGluZSB7U01BTEx9IGF0ICgwLDApIHNpemUgMTMzeDE2CiAgICAgICAg
IFJlbmRlclByb2dyZXNzIHtQUk9HUkVTU30gYXQgKDE2MCwyKSBzaXplIDEzM3gxMworICAgICAg
UmVuZGVyUHJvZ3Jlc3Mge1BST0dSRVNTfSBhdCAoMjkzLDApIHNpemUgMTYweDE2CisgICAgICBS
ZW5kZXJQcm9ncmVzcyB7UFJPR1JFU1N9IGF0ICg0NTMsMCkgc2l6ZSAxNjB4MTYKICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MApJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50LWV4
cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJp
bmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBeUFBQUFKWUNBWUFBQUNhZG9Kd0FBQUFDWEJJV1hNQUFBN0VB
QUFPeEFHVkt3NGJBQUFOCkhrbEVRVlI0bk8zY3dXM1RZQmlBNFJoMURFYmd3QmdNUXFWU2hxZzZS
SnBLV1lReE9EQUNlL3hja1JCeTJpYXZYZWQ1enQvaE8xaE8KWHYrSnB6SEcyQUVBQUFRK0xMMEFB
QUJ3UFFRSUFBQ1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFRG1abTdnKzdmYgpZ
Zy80eC81d1hIb0ZWbWlhSG1kbjd1OStCNXR3YmZhSG84OUVMdUxwK2VQc3pCZ1B3U2JRbUEyUTNX
NjN1Ny83ZXVrOUFNN0dQWXRMCmNuMXhiay9QUDVaZUFWSW5CUWdzeGRORy91WlVEQURldnhjRnlL
ZlAveS8wWHorL21Gblp6Rlo0MmdnQXNCMytoQTRBQUdUOEJBdGUKYVcwblhsdWRBUUMyeFFrSUFB
Q1FFU0FBQUVCR2dBQUFBQmtCQWdBQVpBUUlBQUNRRVNBQUFFREdhM2pobFU1NVRheVp0ODhBQU52
eQpvZ0JaMnhjVE13QUE4TDQ0QVdIVjlvZmowaXNBQUhCRzB4aGpMTDBFd0ttbTZYRjJab3lIWUJP
QTgzQmY0OW9JRUFBQUlPTXRXQUFBClFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFB
QUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0EKQUpBUklBQUFRRWFBQUFB
QUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFB
R1FFQwpBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFB
R1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBCkFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFB
R1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVIKSUFBQVFFYUFBQUFB
R1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFH
UUVDQUFCawpCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFH
UUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBCkdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFH
UUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUEKUUVhQUFBQUFH
UUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdR
RUNBQUJrQkFnQQpBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdR
RUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDCkFBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdR
RUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUEKQUFBQUdR
RUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FF
Q0FBQmtCQWdBQUpBUgpJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FF
Q0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrCkJBZ0FBSkFSSUFBQVFFYUFBQUFBR1FF
Q0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUEKR1FF
Q0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVD
QUFCa0JBZ0FBSkFSSUFBQQpRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVD
QUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBCkFKQVJJQUFBUUVhQUFBQUFHUUVD
QUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUMK
QUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNB
QUJrQkFnQUFKQVJJQUFBUUVhQQpBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNB
QUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSCklBQUFRRWFBQUFBQUdRRUNB
QUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FB
QmsKQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBQUFBQQpHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBClFFYUFBQUFBR1FFQ0FB
QmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
a0JBZ0EKQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQwpBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBCkFBQUFHUUVDQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCawpCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBCkdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUEKUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQQpBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDCkFBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUEKQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUgpJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrCkJB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUEKR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQQpRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
CkFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUMKQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQQpBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSCklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmsKQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQQpHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBClFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0EKQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQwpBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBCkFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCawpCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBCkdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUEKUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQQpBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDCkFBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUEKQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmsvZ0RQOVpwLwps
WHRSMVFBQUFBQkpSVTVFcmtKZ2dnPT0KCg==
</data>
<flag name="review"
          id="35101"
          type_id="1"
          status="-"
          setter="koivisto"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52030</attachid>
            <date>2010-03-30 06:53:21 -0700</date>
            <delta_ts>2010-03-30 12:26:29 -0700</delta_ts>
            <desc>Adress Antti&apos;s comments in #4</desc>
            <filename>36664.patch</filename>
            <type>text/plain</type>
            <size>20195</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjczNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDMtMjkgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICBBZGQgYSB0aW1lciB0
byBjb250cm9sIHRoZSBhbmltYXRpb24uIFRoZSB0aW1lciBpcyBzdGFydGVkIGFmdGVyIHBhaW50
aW5nCisgICAgICAgIHRvIHByZXZlbnQgYW5pbWF0aW9uIGZyb20gcnVubmluZyB3aGVuIHRoZSBw
cm9ncmVzcyBiYXIgaXMgbm90IHZpc2libGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uSW50ZXJ2YWxBbmREdXJh
dGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6d2lsbFJlbmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6d2lsbFJlbmRlckNvbnRlbnRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpSZW5kZXJQcm9ncmVzcyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6flJlbmRlclByb2dyZXNzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclByb2dyZXNzOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJQcm9ncmVzczo6c3RvcEFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJQcm9ncmVzczo6c3RhcnRBbmltYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OmFuaW1hdGlvblRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJv
Z3Jlc3M6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjphbmltYXRpb25TdGFydFRpbWUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUaGVtZTo6YW5pbWF0aW9uSW50ZXJ2YWxBbmREdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwogMjAxMC0wMy0yOSAgS2VubmV0aCBS
dXNzZWxsICA8a2JyQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlz
aGVyLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gNTY3
MzUpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgUGFzc1JlZlB0cjxIVE1MUHJvZ3Jlc3NFbGVtZW50PiBIVE1M
UHJvZwogICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTFByb2dyZXNzRWxlbWVudCh0YWdOYW1l
LCBkb2N1bWVudCwgZm9ybSkpOwogfQogCi1SZW5kZXJPYmplY3QqIEhUTUxQcm9ncmVzc0VsZW1l
bnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiBhcmVuYSwgUmVuZGVyU3R5bGUqIHN0eWxl
KQorUmVuZGVyT2JqZWN0KiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5k
ZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKikKIHsKICAgICByZXR1cm4gbmV3IChhcmVuYSkg
UmVuZGVyUHJvZ3Jlc3ModGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRl
clRoZW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhl
bWVRdC5jcHAJKHJldmlzaW9uIDU2NzM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJU
aGVtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUzLDEwICs2NTMsMjEgQEAgYm9vbCBSZW5k
ZXJUaGVtZVF0OjpwYWludE1lbnVMaXN0QnV0dG9uKAogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNT
X1RBRykKLWJvb2wgUmVuZGVyVGhlbWVRdDo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bv
c2l0aW9uKGRvdWJsZSBwb3NpdGlvbiwgaW50JiBwcm9ncmVzc1NpemUpIGNvbnN0Citib29sIFJl
bmRlclRoZW1lUXQ6OmFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihS
ZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MsIGRvdWJsZSYgaW50ZXJ2YWwsIGRvdWJsZSYg
ZHVyYXRpb24pIGNvbnN0CiB7Ci0gICAgcHJvZ3Jlc3NTaXplID0gNjU1MzYgKiBwb3NpdGlvbjsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlbmRlclByb2dyZXNzLT5wb3NpdGlvbigpID49
IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBVc2UgaGFyZGNvZGVk
IHZhbHVlIHVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9icm93c2UvUVRCVUct
OTE3MSBpcyBmaXhlZC4KKyAgICAvLyBVc2UgdGhlIHZhbHVlIGZyb20gd2luZG93cyBzdHlsZSB3
aGljaCBpcyAxMCBmcHMuCisgICAgaW50ZXJ2YWwgPSAwLjE7CisKKyAgICBRU3R5bGVPcHRpb25Q
cm9ncmVzc0JhclYyIG9wdGlvbjsKKyAgICBvcHRpb24ucmVjdC5zZXRTaXplKHJlbmRlclByb2dy
ZXNzLT5zaXplKCkpOworICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0cy5xdC5u
b2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCisgICAgLy8gd2Ugc2ltdWxhdGUg
b25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgZHVyYXRp
b24gPSAob3B0aW9uLnJlY3Qud2lkdGgoKSAvIHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6
OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbikpICogaW50ZXJ2YWw7CisgICAgcmV0
dXJuIHRydWU7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVRdDo6YWRqdXN0UHJvZ3Jlc3NCYXJTdHls
ZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqIHN0eWxlLCBFbGVtZW50KikgY29uc3QK
QEAgLTY4Niw3ICs2OTcsMjcgQEAgYm9vbCBSZW5kZXJUaGVtZVF0OjpwYWludFByb2dyZXNzQmFy
KFJlbgogICAgIG9wdGlvbi5yZWN0Lm1vdmVUbyhRUG9pbnQoMCwgMCkpOwogICAgIG9wdGlvbi5y
ZWN0LnNldFNpemUoci5zaXplKCkpOwogCi0gICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1By
b2dyZXNzQmFyLCBvcHRpb24pOworICAgIC8vIEZJWE1FOiBVbnRpbCBodHRwOi8vYnVncmVwb3J0
cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQsCisgICAgLy8gd2Ugc2lt
dWxhdGUgb25lIHNxdWFyZSBhbmltYXRpbmcgYWNyb3NzIHRoZSBwcm9ncmVzcyBiYXIuCisgICAg
aWYgKG9wdGlvbi5wcm9ncmVzcyA8IDApIHsKKyAgICAgICAgZG91YmxlIGludGVydmFsOworICAg
ICAgICBkb3VibGUgZHVyYXRpb247CisgICAgICAgIGFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRp
b25Gb3JQcm9ncmVzc0JhcihyZW5kZXJQcm9ncmVzcywgaW50ZXJ2YWwsIGR1cmF0aW9uKTsKKyAg
ICAgICAgUV9BU1NFUlQoaW50ZXJ2YWwgPiAwKTsKKworICAgICAgICBkb3VibGUgdGltZSA9IGN1
cnJlbnRUaW1lKCkgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uU3RhcnRUaW1lKCk7CisgICAg
ICAgIGludCBwb3NpdGlvbkluVGltZWxpbmUgPSAodGltZSAvIGludGVydmFsKTsKKworICAgICAg
ICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXJHcm9vdmUsIG9wdGlvbik7Cisg
ICAgICAgIGludCBjaHVua1dpZHRoID0gcVN0eWxlKCktPnBpeGVsTWV0cmljKFFTdHlsZTo6UE1f
UHJvZ3Jlc3NCYXJDaHVua1dpZHRoLCAmb3B0aW9uKTsKKyAgICAgICAgUUNvbG9yIGNvbG9yID0g
KG9wdGlvbi5wYWxldHRlLmhpZ2hsaWdodCgpID09IG9wdGlvbi5wYWxldHRlLmJhY2tncm91bmQo
KSkgPyBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6QWN0aXZlLCBRUGFsZXR0ZTo6SGln
aGxpZ2h0KSA6IG9wdGlvbi5wYWxldHRlLmNvbG9yKFFQYWxldHRlOjpIaWdobGlnaHQpOworICAg
ICAgICBpZiAocmVuZGVyUHJvZ3Jlc3MtPnN0eWxlKCktPmRpcmVjdGlvbigpID09IFJUTCkKKyAg
ICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qob3B0aW9uLnJlY3QucmlnaHQoKSAtIGNodW5r
V2lkdGggKiAocG9zaXRpb25JblRpbWVsaW5lICsgMSksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5y
ZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAucGFpbnRl
ci0+ZmlsbFJlY3QoY2h1bmtXaWR0aCAqIHBvc2l0aW9uSW5UaW1lbGluZSwgMCwgY2h1bmtXaWR0
aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNvbG9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcC5k
cmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyLCBvcHRpb24pOworCiAgICAgcC5wYWlu
dGVyLT50cmFuc2xhdGUoLXRvcExlZnQpOwogCiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHJldmlzaW9uIDU2NzM1KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAgUVRfRU5EX05BTUVTUEFDRQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIFJlbmRl
clByb2dyZXNzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50Owog
Y2xhc3MgU2Nyb2xsYmFyVGhlbWVRdDsKQEAgLTEyOCwxMCArMTI5LDggQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgYm9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7
CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9w
dGltaXppbmcgdGhlIHBhaW50IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICAvLyBJZiBz
dXBwb3J0ZWQsIGl0IHJldHVybnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUg
cHJvZ3Jlc3MgYmFyIHVwIHRvIHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KLSAgICAvLyBwcm9ncmVz
c1NpemUgaXMgdGhlIHZhbHVlIHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVy
aW5nIGRyYXdpbmcuCi0gICAgdmlydHVhbCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jl
c3NQb3NpdGlvbihkb3VibGUgcG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyAg
ICAvLyBTZXRzIHRoZSBpbnRlcnZhbCBhbmQgZHVyYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIg
YW5pbWF0aW9uLiBSZXR1cm5zIHRydWUgaWYgYW5pbWF0aW9uIGlzIHJlcXVpcmVkIGFuZCBmYWxz
ZSBpZiBub3QuCisgICAgdmlydHVhbCBib29sIGFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRpb25G
b3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MsIGRvdWJsZSYgaW50
ZXJ2YWwsIGRvdWJsZSYgZHVyYXRpb24pIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklE
RU8pCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDU2NzM1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMyMSw2ICsyMzIxLDExIEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpjb2xsZWN0RGFzaGJvYXJkUmVn
aW8KIAogYm9vbCBSZW5kZXJPYmplY3Q6OndpbGxSZW5kZXJJbWFnZShDYWNoZWRJbWFnZSopCiB7
CisgICAgcmV0dXJuIHdpbGxSZW5kZXJDb250ZW50cygpOworfQorCitib29sIFJlbmRlck9iamVj
dDo6d2lsbFJlbmRlckNvbnRlbnRzKCkKK3sKICAgICAvLyBXaXRob3V0IHZpc2liaWxpdHkgd2Ug
d29uJ3QgcmVuZGVyIChhbmQgdGhlcmVmb3JlIGRvbid0IGNhcmUgYWJvdXQgYW5pbWF0aW9uKS4K
ICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA1NjczNSkK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
NDUsNiArNzQ1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3Jh
cHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IDApIHsgfQogICAgIHZpcnR1YWwgYm9vbCB3
aWxsUmVuZGVySW1hZ2UoQ2FjaGVkSW1hZ2UqKTsKIAorICAgIHZpcnR1YWwgYm9vbCB3aWxsUmVu
ZGVyQ29udGVudHMoKTsKKwogICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzcG9zLCBp
bnQmIGVwb3MpIGNvbnN0OwogCiAgICAgUmVuZGVyT2JqZWN0KiBwYWludGluZ1Jvb3RGb3JDaGls
ZHJlbihQYWludEluZm8mIHBhaW50SW5mbykgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclByb2dyZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5jcHAJKHJldmlzaW9uIDU2NzM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICszNSwxNiBAQCB1c2luZyBu
YW1lc3BhY2UgSFRNTE5hbWVzOwogUmVuZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKEhUTUxQ
cm9ncmVzc0VsZW1lbnQqIGVsZW1lbnQpCiAgICAgOiBSZW5kZXJCbG9jayhlbGVtZW50KQogICAg
ICwgbV9wb3NpdGlvbigtMSkKKyAgICAsIG1fYW5pbWF0aW9uU3RhcnRUaW1lKDApCisgICAgLCBt
X2FuaW1hdGlvblRpbWVyKHRoaXMsICZSZW5kZXJQcm9ncmVzczo6YW5pbWF0aW9uVGltZXJGaXJl
ZCkKIHsKIH0KIAorUmVuZGVyUHJvZ3Jlc3M6On5SZW5kZXJQcm9ncmVzcygpCit7CisgICAgc3Rv
cEFuaW1hdGlvbigpOworfQorCiB2b2lkIFJlbmRlclByb2dyZXNzOjpsYXlvdXQoKQogewogICAg
IEFTU0VSVChuZWVkc0xheW91dCgpKTsKQEAgLTYxLDggKzY4LDQxIEBAIHZvaWQgUmVuZGVyUHJv
Z3Jlc3M6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcG9zaXRp
b24gPSBlbGVtZW50LT5wb3NpdGlvbigpOwogCisgICAgc3RvcEFuaW1hdGlvbigpOwogICAgIHJl
cGFpbnQoKTsKIH0KIAordm9pZCBSZW5kZXJQcm9ncmVzczo6c3RvcEFuaW1hdGlvbigpCit7Cisg
ICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnN0
YXJ0QW5pbWF0aW9uKCkKK3sKKyAgICBkb3VibGUgaW50ZXJ2YWw7CisgICAgZG91YmxlIGR1cmF0
aW9uOworICAgIGlmICghKFJlbmRlck9iamVjdDo6d2lsbFJlbmRlckNvbnRlbnRzKCkgJiYgdGhl
bWUoKS0+YW5pbWF0aW9uSW50ZXJ2YWxBbmREdXJhdGlvbkZvclByb2dyZXNzQmFyKHRoaXMsIGlu
dGVydmFsLCBkdXJhdGlvbikpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY3VycmVudFRp
bWUoKSAtIG1fYW5pbWF0aW9uU3RhcnRUaW1lID49IGR1cmF0aW9uKQorICAgICAgICBtX2FuaW1h
dGlvblN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisKKyAgICBtX2FuaW1hdGlvblRpbWVyLnN0
YXJ0T25lU2hvdChpbnRlcnZhbCk7Cit9CisKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlv
blRpbWVyRmlyZWQoVGltZXI8UmVuZGVyUHJvZ3Jlc3M+KikKK3sKKyAgICByZXBhaW50KCk7Cit9
CisKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQg
dHgsIGludCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9j
a0JhY2tncm91bmQpIHsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkp
CisgICAgICAgICAgICBzdGFydEFuaW1hdGlvbigpOworICAgIH0KKyAgICBSZW5kZXJCbG9jazo6
cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAkocmV2aXNpb24gNTY3MzUp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwxNCArMzEsMjQgQEAgY2xhc3MgSFRNTFByb2dyZXNzRWxlbWVudDsKIGNsYXNzIFJlbmRl
clByb2dyZXNzIDogcHVibGljIFJlbmRlckJsb2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJQcm9n
cmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50Kik7CisgICAgflJlbmRlclByb2dyZXNzKCk7CiAgICAg
ZG91YmxlIHBvc2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGRvdWJsZSBhbmlt
YXRpb25TdGFydFRpbWUoKSB7IHJldHVybiBtX2FuaW1hdGlvblN0YXJ0VGltZTsgfQogCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJu
ICJSZW5kZXJQcm9ncmVzcyI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzcygpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKworICAgIHZvaWQgc3RvcEFuaW1hdGlvbigpOworICAg
IHZvaWQgc3RhcnRBbmltYXRpb24oKTsKKyAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGlt
ZXI8UmVuZGVyUHJvZ3Jlc3M+Kik7CisKICAgICBkb3VibGUgbV9wb3NpdGlvbjsKKyAgICBkb3Vi
bGUgbV9hbmltYXRpb25TdGFydFRpbWU7CisgICAgVGltZXI8UmVuZGVyUHJvZ3Jlc3M+IG1fYW5p
bWF0aW9uVGltZXI7CiB9OwogCiBpbmxpbmUgUmVuZGVyUHJvZ3Jlc3MqIHRvUmVuZGVyUHJvZ3Jl
c3MoUmVuZGVyT2JqZWN0KiBvYmplY3QpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
CShyZXZpc2lvbiA1NjczNSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODQwLDkgKzg0MCw4IEBAIHZvaWQgUmVuZGVyVGhlbWU6OmFkanVz
dE1lbnVMaXN0U3R5bGUoQ1MKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi1ib29sIFJl
bmRlclRoZW1lOjpnZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlICwg
aW50JiBwcm9ncmVzc1NpemUpIGNvbnN0Citib29sIFJlbmRlclRoZW1lOjphbmltYXRpb25JbnRl
cnZhbEFuZER1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3MqLCBkb3VibGUmLCBk
b3VibGUmKSBjb25zdAogewotICAgIHByb2dyZXNzU2l6ZSA9IDA7CiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgJKHJldmlzaW9uIDU2NzM1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgUG9wdXBN
ZW51OwogY2xhc3MgUmVuZGVyTWVudUxpc3Q7CitjbGFzcyBSZW5kZXJQcm9ncmVzczsKIGNsYXNz
IENTU1N0eWxlU2hlZXQ7CiAKIGNsYXNzIFJlbmRlclRoZW1lIDogcHVibGljIFJlZkNvdW50ZWQ8
UmVuZGVyVGhlbWU+IHsKQEAgLTE3MCwxMCArMTcxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Ym9vbCBwYWludENhcHNMb2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9i
amVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07CiAKICNpZiBF
TkFCTEUoUFJPR1JFU1NfVEFHKQotICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9wdGltaXppbmcg
dGhlIHBhaW50IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICAvLyBJZiBzdXBwb3J0ZWQs
IGl0IHJldHVybnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3Mg
YmFyIHVwIHRvIHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KLSAgICAvLyBwcm9ncmVzc1NpemUgaXMg
dGhlIHZhbHVlIHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVyaW5nIGRyYXdp
bmcuCi0gICAgdmlydHVhbCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlv
bihkb3VibGUgcG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyAgICAvLyBTZXRz
IHRoZSBpbnRlcnZhbCBhbmQgZHVyYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIgYW5pbWF0aW9u
LiBSZXR1cm5zIHRydWUgaWYgYW5pbWF0aW9uIGlzIHJlcXVpcmVkIGFuZCBmYWxzZSBpZiBub3Qu
CisgICAgdmlydHVhbCBib29sIGFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRpb25Gb3JQcm9ncmVz
c0JhcihSZW5kZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MsIGRvdWJsZSYgaW50ZXJ2YWwsIGRv
dWJsZSYgZHVyYXRpb24pIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4
OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCShyZXZpc2lvbiA1NjczNSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEwLTAzLTI5ICBZYWVsIEFoYXJvbiAgPHlhZWwuYWhh
cm9uQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGQgYW5pbWF0aW9uIHRvIHByb2dyZXNzIGVsZW1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2NjY0CisKKyAgICAgICAgKiBmYXN0
L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1lbnQuaHRtbDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1l
bnQtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vcXQvZmFzdC9kb20vSFRN
TFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50LWV4cGVjdGVkLnBuZzoKKyAgICAgICAg
KiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1l
bnQtZXhwZWN0ZWQudHh0OgorCiAyMDEwLTAzLTI5ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBEbWl0cnkgVGl0b3YuCkBAIC03
ODIsNiArNzk0LDE4IEBACiAKIDIwMTAtMDMtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25A
bm9raWEuY29tPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICAqIGZhc3QvZG9t
L0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC5odG1sOgorICAgICAgICAqIHBs
YXRmb3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1l
eHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1MUHJv
Z3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1lbnQtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBs
YXRmb3JtL3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1l
eHBlY3RlZC50eHQ6CisKKzIwMTAtMDMtMjYgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCiAgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgogCiAgICAgICAg
IEZpeCB0aGUgcmVuZGVyaW5nIG9mIEhUTUxQcm9ncmVzc0VsZW1lbnQKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJv
Z3Jlc3MtZWxlbWVudC5odG1sCShyZXZpc2lvbiA1NjczNSkKKysrIExheW91dFRlc3RzL2Zhc3Qv
ZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0xICsxIEBACi08aHRtbD48Ym9keT48cHJvZ3Jlc3MgdmFsdWU9NzAgbWF4PTEwMD48
L3Byb2dyZXNzPjxzbWFsbD48cHJvZ3Jlc3MgdmFsdWU9NzAgbWF4PTEwMCBkaXI9InJ0bCI+PC9w
cm9ncmVzcz48L3NtYWxsPjwvYm9keT48L2h0bWw+Cis8aHRtbD48Ym9keT48cHJvZ3Jlc3MgdmFs
dWU9NzAgbWF4PTEwMD48L3Byb2dyZXNzPjxzbWFsbD48cHJvZ3Jlc3MgdmFsdWU9NzAgbWF4PTEw
MCBkaXI9InJ0bCI+PC9wcm9ncmVzcz48L3NtYWxsPjxwcm9ncmVzcz48L3Byb2dyZXNzPjxwcm9n
cmVzcyBkaXI9InJ0bCI+PC9wcm9ncmVzcz48L2JvZHk+PC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvZmFzdC9kb20vSFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVt
ZW50LWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L3F0L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1leHBlY3Rl
ZC5jaGVja3N1bQkocmV2aXNpb24gNTY3MzUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9m
YXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVsZW1lbnQtZXhwZWN0ZWQuY2hl
Y2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTU4ZTAyODgzYTk0NGM1MTliYzk5YTIx
MDA4ZGRmMDc2ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMTlhOGEyYTAxNjM2ODg3NWFj
ZDhkMGZlNzVjZmJkMGQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9xdC9mYXN0L2RvbS9IVE1MUHJvZ3Jlc3NFbGVtZW50L3Byb2dyZXNzLWVs
ZW1lbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDU2NzM1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvZmFzdC9kb20v
SFRNTFByb2dyZXNzRWxlbWVudC9wcm9ncmVzcy1lbGVtZW50LWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtNiw0ICs2LDYgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAg
ICBSZW5kZXJQcm9ncmVzcyB7UFJPR1JFU1N9IGF0ICgwLDApIHNpemUgMTYweDE2CiAgICAgICBS
ZW5kZXJJbmxpbmUge1NNQUxMfSBhdCAoMCwwKSBzaXplIDEzM3gxNgogICAgICAgICBSZW5kZXJQ
cm9ncmVzcyB7UFJPR1JFU1N9IGF0ICgxNjAsMikgc2l6ZSAxMzN4MTMKKyAgICAgIFJlbmRlclBy
b2dyZXNzIHtQUk9HUkVTU30gYXQgKDI5MywwKSBzaXplIDE2MHgxNgorICAgICAgUmVuZGVyUHJv
Z3Jlc3Mge1BST0dSRVNTfSBhdCAoNDUzLDApIHNpemUgMTYweDE2CiAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2Zhc3QvZG9tL0hUTUxQcm9ncmVzc0VsZW1lbnQvcHJvZ3Jlc3MtZWxlbWVudC1leHBlY3RlZC5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQXlBQUFBSllDQVlBQUFDYWRvSndBQUFBQ1hCSVdYTUFBQTdFQUFBT3hBR1ZL
dzRiQUFBTgpIa2xFUVZSNG5PM2N3VzNUWUJpQTRSaDFERWJnd0JnTVFxVlNocWc2UkpwS1dZUXhP
REFDZS94Y2tSQnkyaWF2WGVkNXp0L2hPMWhPClh2K0pwekhHMkFFQUFBUStMTDBBQUFCd1BRUUlB
QUNRRVNBQUFFQkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRURtWm03Zys3ZmIKWWcvNHgvNXdY
SG9GVm1pYUhtZG43dTkrQjV0d2JmYUhvODlFTHVMcCtlUHN6QmdQd1NiUW1BMlEzVzYzdTcvN2V1
azlBTTdHUFl0TApjbjF4YmsvUFA1WmVBVkluQlFnc3hkTkcvdVpVREFEZXZ4Y0Z5S2ZQL3kvMFh6
Ky9tRm5aekZaNDJnZ0FzQjMraEE0QUFHVDhCQXRlCmFXMG5YbHVkQVFDMnhRa0lBQUNRRVNBQUFF
QkdnQUFBQUJrQkFnQUFaQVFJQUFDUUVTQUFBRURHYTNqaGxVNTVUYXladDg4QUFOdnkKb2dCWjJ4
Y1RNd0FBOEw0NEFXSFY5b2ZqMGlzQUFIQkcweGhqTEwwRXdLbW02WEYyWm95SFlCT0E4M0JmNDlv
SUVBQUFJT010V0FBQQpRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBCkFKQVJJQUFBUUVhQUFBQUFHUUVDQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUMKQUFC
a0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQQpBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSCklBQUFRRWFBQUFBQUdRRUNBQUJr
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmsK
QkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQQpHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBClFFYUFBQUFBR1FFQ0FBQmtC
QWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0EKQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQwpBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBCkFBQUFHUUVDQUFCa0JB
Z0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCawpCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBCkdRRUNBQUJrQkFn
QUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUEKUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQQpBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDCkFBQmtCQWdB
QUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUEKQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUgpJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrCkJBZ0FB
SkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUEKR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQQpRRWFBQUFBQUdRRUNBQUJrQkFnQUFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBCkFK
QVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUMKQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQQpBQUFBR1FFQ0FBQmtCQWdBQUpB
UklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
CklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmsKQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQQpHUUVDQUFCa0JBZ0FBSkFS
SUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBClFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0EKQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQwpBQUJrQkFnQUFKQVJJ
QUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklB
QUFRRWFBCkFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklB
QUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVIKSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklB
QUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCawpCQWdBQUpBUklB
QUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFB
QVFFYUFBQUFBCkdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFB
QVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUEKUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFB
QVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQQpBSkFSSUFB
QVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFB
UUVhQUFBQUFHUUVDCkFBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFB
UUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUEKQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFB
UUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUgpJQUFB
UUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFR
RWFBQUFBQUdRRUNBQUJrCkJBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFR
RWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUEKR1FFQ0FBQmtCQWdBQUpBUklBQUFR
RWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQQpR
RWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFF
YUFBQUFBR1FFQ0FBQmtCQWdBCkFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFF
YUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUMKQUFCa0JBZ0FBSkFSSUFBQVFF
YUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVh
QQpBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVh
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSCklBQUFRRWFBQUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVh
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmsKQkFnQUFKQVJJQUFBUUVh
QUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFB
QUFBQQpHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFB
QUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBClFFYUFBQUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFB
QUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0EKQUpBUklBQUFRRWFB
QUFBQUdRRUNBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFB
QUFBR1FFQwpBQUJrQkFnQUFKQVJJQUFBUUVhQUFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFB
QUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBCkFBQUFHUUVDQUFCa0JBZ0FBSkFSSUFBQVFFYUFB
QUFBR1FFQ0FBQmtCQWdBQUpBUklBQUFRRWFBQUFBQUdRRUNBQUJrL2dEUDlacC8KbFh0UjFRQUFB
QUJKUlU1RXJrSmdnZz09Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52069</attachid>
            <date>2010-03-30 12:26:29 -0700</date>
            <delta_ts>2010-03-31 09:00:05 -0700</delta_ts>
            <desc>Patch </desc>
            <filename>36664.patch</filename>
            <type>text/plain</type>
            <size>10810</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjgwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzMgQEAKKzIwMTAtMDMtMzAgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICBBZGQgYSB0aW1lciB0
byBjb250cm9sIHRoZSBhbmltYXRpb24uIFRoZSB0aW1lciBpcyBzdGFydGVkIGFmdGVyIHBhaW50
aW5nCisgICAgICAgIHRvIHByZXZlbnQgYW5pbWF0aW9uIGZyb20gcnVubmluZyB3aGVuIHRoZSBw
cm9ncmVzcyBiYXIgaXMgbm90IHZpc2libGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVz
c0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6YW5pbWF0aW9uSW50ZXJ2YWxBbmREdXJh
dGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lUXQ6OnBh
aW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUHJvZ3Jlc3M6OlJlbmRlclByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclByb2dyZXNzOjp+UmVuZGVyUHJvZ3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
UHJvZ3Jlc3M6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6dXBk
YXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OmFuaW1h
dGlvblByb2dyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjphbmltYXRp
b25UaW1lckZpcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwYWludCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5p
bWF0aW9uSW50ZXJ2YWxBbmREdXJhdGlvbkZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGhlbWUuaDoKKwogMjAxMC0wMy0zMCAgQWRhbSBMYW5nbGV5ICA8YWdsQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2NzM1KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0
NSw3IEBAIFBhc3NSZWZQdHI8SFRNTFByb2dyZXNzRWxlbWVudD4gSFRNTFByb2cKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEhUTUxQcm9ncmVzc0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZv
cm0pKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpjcmVhdGVSZW5k
ZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVj
dCogSFRNTFByb2dyZXNzRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5h
LCBSZW5kZXJTdHlsZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclByb2dyZXNz
KHRoaXMpOwogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuY3BwCShyZXZp
c2lvbiA1NjczNSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY1MywxMCArNjUzLDIxIEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFp
bnRNZW51TGlzdEJ1dHRvbigKIH0KIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi1ib29sIFJl
bmRlclRoZW1lUXQ6OmdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlvbihkb3VibGUg
cG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdAorYm9vbCBSZW5kZXJUaGVtZVF0Ojph
bmltYXRpb25JbnRlcnZhbEFuZER1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJvZ3Jlc3Mq
IHJlbmRlclByb2dyZXNzLCBkb3VibGUmIGludGVydmFsLCBkb3VibGUmIGR1cmF0aW9uKSBjb25z
dAogewotICAgIHByb2dyZXNzU2l6ZSA9IDY1NTM2ICogcG9zaXRpb247Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+cG9zaXRpb24oKSA+PSAwKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogVXNlIGhhcmRjb2RlZCB2YWx1ZSB1bnRpbCBo
dHRwOi8vYnVncmVwb3J0cy5xdC5ub2tpYS5jb20vYnJvd3NlL1FUQlVHLTkxNzEgaXMgZml4ZWQu
CisgICAgLy8gVXNlIHRoZSB2YWx1ZSBmcm9tIHdpbmRvd3Mgc3R5bGUgd2hpY2ggaXMgMTAgZnBz
LgorICAgIGludGVydmFsID0gMC4xOworCisgICAgUVN0eWxlT3B0aW9uUHJvZ3Jlc3NCYXJWMiBv
cHRpb247CisgICAgb3B0aW9uLnJlY3Quc2V0U2l6ZShyZW5kZXJQcm9ncmVzcy0+c2l6ZSgpKTsK
KyAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dz
ZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgIC8vIHdlIHNpbXVsYXRlIG9uZSBzcXVhcmUgYW5p
bWF0aW5nIGFjcm9zcyB0aGUgcHJvZ3Jlc3MgYmFyLgorICAgIGR1cmF0aW9uID0gKG9wdGlvbi5y
ZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Qcm9ncmVzc0Jh
ckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGludGVydmFsOworICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIFJlbmRlclRoZW1lUXQ6OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxl
Y3RvciosIFJlbmRlclN0eWxlKiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CkBAIC02ODYsNyArNjk3
LDE5IEBAIGJvb2wgUmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0JhcihSZW4KICAgICBvcHRp
b24ucmVjdC5tb3ZlVG8oUVBvaW50KDAsIDApKTsKICAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIu
c2l6ZSgpKTsKIAotICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0
aW9uKTsKKyAgICBpZiAob3B0aW9uLnByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBGSVhNRTog
VW50aWwgaHR0cDovL2J1Z3JlcG9ydHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlz
IGZpeGVkLAorICAgICAgICAvLyB3ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jv
c3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1By
b2dyZXNzQmFyR3Jvb3ZlLCBvcHRpb24pOworICAgICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHls
ZSgpLT5waXhlbE1ldHJpYyhRU3R5bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlv
bik7CisgICAgICAgIFFDb2xvciBjb2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9
PSBvcHRpb24ucGFsZXR0ZS5iYWNrZ3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBh
bGV0dGU6OkFjdGl2ZSwgUVBhbGV0dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xv
cihRUGFsZXR0ZTo6SGlnaGxpZ2h0KTsKKyAgICAgICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKSA9PSBSVEwpCisgICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0
KG9wdGlvbi5yZWN0LnJpZ2h0KCkgLSBjaHVua1dpZHRoICogKHJlbmRlclByb2dyZXNzLT5hbmlt
YXRpb25Qcm9ncmVzcygpICsgMSksIDAsIGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgp
LCBjb2xvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHAucGFpbnRlci0+ZmlsbFJlY3Qo
Y2h1bmtXaWR0aCAqIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpLCAwLCBjaHVu
a1dpZHRoLCBvcHRpb24ucmVjdC5oZWlnaHQoKSwgY29sb3IpOworICAgIH0gZWxzZQorICAgICAg
ICBwLmRyYXdDb250cm9sKFFTdHlsZTo6Q0VfUHJvZ3Jlc3NCYXIsIG9wdGlvbik7CisKICAgICBw
LnBhaW50ZXItPnRyYW5zbGF0ZSgtdG9wTGVmdCk7CiAKICAgICByZXR1cm4gZmFsc2U7CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAkocmV2aXNpb24gNTY3MzUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L1JlbmRlclRoZW1lUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiAr
MzQsOSBAQCBRVF9FTkRfTkFNRVNQQUNFCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorI2lmIEVO
QUJMRShQUk9HUkVTU19UQUcpCitjbGFzcyBSZW5kZXJQcm9ncmVzczsKKyNlbmRpZgogY2xhc3Mg
UmVuZGVyU3R5bGU7CiBjbGFzcyBIVE1MTWVkaWFFbGVtZW50OwogY2xhc3MgU2Nyb2xsYmFyVGhl
bWVRdDsKQEAgLTEyOCwxMCArMTMxLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFCTEUoUFJP
R1JFU1NfVEFHKQotICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9wdGltaXppbmcgdGhlIHBhaW50
IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICAvLyBJZiBzdXBwb3J0ZWQsIGl0IHJldHVy
bnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIHVwIHRv
IHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KLSAgICAvLyBwcm9ncmVzc1NpemUgaXMgdGhlIHZhbHVl
IHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVyaW5nIGRyYXdpbmcuCi0gICAg
dmlydHVhbCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlvbihkb3VibGUg
cG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyAgICAvLyBTZXRzIHRoZSBpbnRl
cnZhbCBhbmQgZHVyYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIgYW5pbWF0aW9uLiBSZXR1cm5z
IHRydWUgaWYgYW5pbWF0aW9uIGlzIHJlcXVpcmVkIGFuZCBmYWxzZSBpZiBub3QuCisgICAgdmly
dHVhbCBib29sIGFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5k
ZXJQcm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MsIGRvdWJsZSYgaW50ZXJ2YWwsIGRvdWJsZSYgZHVy
YXRpb24pIGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCShyZXZpc2lvbiA1NjczNSkKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsMTkg
QEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIFJlbmRlclByb2dyZXNzOjpSZW5kZXJQcm9n
cmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50KiBlbGVtZW50KQogICAgIDogUmVuZGVyQmxvY2soZWxl
bWVudCkKICAgICAsIG1fcG9zaXRpb24oLTEpCisgICAgLCBtX2FuaW1hdGlvblN0YXJ0VGltZSgw
KQorICAgICwgbV9hbmltYXRpb25JbnRlcnZhbCgwKQorICAgICwgbV9hbmltYXRpb25EdXJhdGlv
bigwKQorICAgICwgbV9hbmltYXRpbmcoZmFsc2UpCisgICAgLCBtX2FuaW1hdGlvblRpbWVyKHRo
aXMsICZSZW5kZXJQcm9ncmVzczo6YW5pbWF0aW9uVGltZXJGaXJlZCkKIHsKIH0KIAorUmVuZGVy
UHJvZ3Jlc3M6On5SZW5kZXJQcm9ncmVzcygpCit7CisgICAgbV9hbmltYXRpb25UaW1lci5zdG9w
KCk7Cit9CisKIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwpAQCAtNDksNiArNTksOCBAQCB2b2lkIFJlbmRlclByb2dyZXNzOjpsYXlv
dXQoKQogCiAgICAgbV9vdmVyZmxvdy5jbGVhcigpOwogCisgICAgdXBkYXRlQW5pbWF0aW9uU3Rh
dGUoKTsKKwogICAgIHJlcGFpbnRlci5yZXBhaW50QWZ0ZXJMYXlvdXQoKTsKIAogICAgIHNldE5l
ZWRzTGF5b3V0KGZhbHNlKTsKQEAgLTYxLDggKzczLDM4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6
OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgcmV0dXJuOwogICAgIG1fcG9zaXRpb24gPSBl
bGVtZW50LT5wb3NpdGlvbigpOwogCisgICAgdXBkYXRlQW5pbWF0aW9uU3RhdGUoKTsKKwogICAg
IHJlcGFpbnQoKTsKIH0KIAorZG91YmxlIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25Qcm9ncmVz
cygpCit7CisgICAgcmV0dXJuIG1fYW5pbWF0aW5nID8gKGZtb2QoKGN1cnJlbnRUaW1lKCkgLSBt
X2FuaW1hdGlvblN0YXJ0VGltZSksIG1fYW5pbWF0aW9uRHVyYXRpb24pIC8gbV9hbmltYXRpb25J
bnRlcnZhbCkgOiAwOworfQorCit2b2lkIFJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1lckZp
cmVkKFRpbWVyPFJlbmRlclByb2dyZXNzPiopCit7CisgICAgcmVwYWludCgpOworfQorCit2b2lk
IFJlbmRlclByb2dyZXNzOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQg
dHkpCit7CisgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3Jv
dW5kKSB7CisgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpICYmIG1fYW5p
bWF0aW5nKQorICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9uZVNob3QobV9hbmlt
YXRpb25JbnRlcnZhbCk7CisgICAgfQorCisgICAgUmVuZGVyQmxvY2s6OnBhaW50KHBhaW50SW5m
bywgdHgsIHR5KTsKK30KKwordm9pZCBSZW5kZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3Rh
dGUoKQoreworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOworICAgIG1fYW5pbWF0aW5nID0g
dGhlbWUoKS0+YW5pbWF0aW9uSW50ZXJ2YWxBbmREdXJhdGlvbkZvclByb2dyZXNzQmFyKHRoaXMs
IG1fYW5pbWF0aW9uSW50ZXJ2YWwsIG1fYW5pbWF0aW9uRHVyYXRpb24pOworICAgIGlmIChtX2Fu
aW1hdGluZykKKyAgICAgICAgbV9hbmltYXRpb25TdGFydFRpbWUgPSBjdXJyZW50VGltZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclByb2dyZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyUHJvZ3Jlc3MuaAkocmV2aXNpb24gNTY3MzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJQcm9ncmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMjYgQEAgY2xhc3MgSFRN
TFByb2dyZXNzRWxlbWVudDsKIGNsYXNzIFJlbmRlclByb2dyZXNzIDogcHVibGljIFJlbmRlckJs
b2NrIHsKIHB1YmxpYzoKICAgICBSZW5kZXJQcm9ncmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50Kik7
CisgICAgflJlbmRlclByb2dyZXNzKCk7CiAgICAgZG91YmxlIHBvc2l0aW9uKCkgeyByZXR1cm4g
bV9wb3NpdGlvbjsgfQorICAgIGRvdWJsZSBhbmltYXRpb25Qcm9ncmVzcygpOwogCiBwcml2YXRl
OgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJS
ZW5kZXJQcm9ncmVzcyI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNQcm9ncmVzcygpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCB0eCwgaW50IHR5KTsKKworICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1l
cjxSZW5kZXJQcm9ncmVzcz4qKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblN0YXRlKCk7CisK
ICAgICBkb3VibGUgbV9wb3NpdGlvbjsKKyAgICBkb3VibGUgbV9hbmltYXRpb25TdGFydFRpbWU7
CisgICAgZG91YmxlIG1fYW5pbWF0aW9uSW50ZXJ2YWw7CisgICAgZG91YmxlIG1fYW5pbWF0aW9u
RHVyYXRpb247CisgICAgYm9vbCBtX2FuaW1hdGluZzsKKyAgICBUaW1lcjxSZW5kZXJQcm9ncmVz
cz4gbV9hbmltYXRpb25UaW1lcjsKIH07CiAKIGlubGluZSBSZW5kZXJQcm9ncmVzcyogdG9SZW5k
ZXJQcm9ncmVzcyhSZW5kZXJPYmplY3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZS5jcHAJKHJldmlzaW9uIDU2NzM1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NDAsOSArODQwLDggQEAgdm9pZCBSZW5kZXJUaGVt
ZTo6YWRqdXN0TWVudUxpc3RTdHlsZShDUwogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RBRykK
LWJvb2wgUmVuZGVyVGhlbWU6OmdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlvbihk
b3VibGUgLCBpbnQmIHByb2dyZXNzU2l6ZSkgY29uc3QKK2Jvb2wgUmVuZGVyVGhlbWU6OmFuaW1h
dGlvbkludGVydmFsQW5kRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyosIGRv
dWJsZSYsIGRvdWJsZSYpIGNvbnN0CiB7Ci0gICAgcHJvZ3Jlc3NTaXplID0gMDsKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gNTY3
MzUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw2ICszOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBQb3B1cE1lbnU7CiBjbGFzcyBSZW5kZXJNZW51TGlzdDsKKyNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQorY2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CisjZW5kaWYKIGNsYXNzIENTU1N0eWxlU2hlZXQ7
CiAKIGNsYXNzIFJlbmRlclRoZW1lIDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyVGhlbWU+IHsK
QEAgLTE3MCwxMCArMTczLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBwYWludENhcHNM
b2NrSW5kaWNhdG9yKFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiwgY29uc3QgSW50UmVjdCYpIHsgcmV0dXJuIDA7IH07CiAKICNpZiBFTkFCTEUoUFJPR1JFU1Nf
VEFHKQotICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9wdGltaXppbmcgdGhlIHBhaW50IGFyZWEg
b2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICAvLyBJZiBzdXBwb3J0ZWQsIGl0IHJldHVybnMgbnVt
YmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFyIHVwIHRvIHRoZSBw
cm9ncmVzcyBwb3NpdGlvbi4KLSAgICAvLyBwcm9ncmVzc1NpemUgaXMgdGhlIHZhbHVlIHRoYXQg
aXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVyaW5nIGRyYXdpbmcuCi0gICAgdmlydHVh
bCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlvbihkb3VibGUgcG9zaXRp
b24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyAgICAvLyBTZXRzIHRoZSBpbnRlcnZhbCBh
bmQgZHVyYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIgYW5pbWF0aW9uLiBSZXR1cm5zIHRydWUg
aWYgYW5pbWF0aW9uIGlzIHJlcXVpcmVkIGFuZCBmYWxzZSBpZiBub3QuCisgICAgdmlydHVhbCBi
b29sIGFuaW1hdGlvbkludGVydmFsQW5kRHVyYXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyogcmVuZGVyUHJvZ3Jlc3MsIGRvdWJsZSYgaW50ZXJ2YWwsIGRvdWJsZSYgZHVyYXRpb24p
IGNvbnN0OwogI2VuZGlmCiAKICNpZiBFTkFCTEUoVklERU8pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52177</attachid>
            <date>2010-03-31 09:00:05 -0700</date>
            <delta_ts>2010-03-31 10:09:08 -0700</delta_ts>
            <desc>Patch updated based on comment #8.</desc>
            <filename>36664.patch</filename>
            <type>text/plain</type>
            <size>12271</size>
            <attacher name="Yael">yael</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njg0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMDMtMzEgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhbmltYXRpb24gdG8gcHJvZ3Jlc3MgZWxlbWVudAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY2NjQKKworICAgICAgICBBZGQgYSB0aW1lciB0
byBjb250cm9sIHRoZSBhbmltYXRpb24uIFRoZSB0aW1lciBpcyBzdGFydGVkIGFmdGVyIHBhaW50
aW5nCisgICAgICAgIG9yIGEgc3RhdGUgY2hhbmdlIGluIHRoZSBwcm9ncmVzcyBiYXIsIHRvIHBy
ZXZlbnQgYW5pbWF0aW9uIGZyb20gcnVubmluZworICAgICAgICB3aGVuIHRoZSBwcm9ncmVzcyBi
YXIgaXMgbm90IHZpc2libGUuCisKKyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6Y3JlYXRlUmVuZGVy
ZXIpOgorICAgICAgICAqIG1hbnVhbC10ZXN0cy9kb206IEFkZGVkLgorICAgICAgICAqIG1hbnVh
bC10ZXN0cy9kb20vcHJvZ3Jlc3NiYXIuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
cXQvUmVuZGVyVGhlbWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZVF0Ojph
bmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lUXQ6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVRdDo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICog
cGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQ
cm9ncmVzcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6UmVuZGVyUHJv
Z3Jlc3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OmxheW91dCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJQcm9ncmVzczo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblByb2dyZXNzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1lckZpcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclByb2dyZXNzOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJQcm9ncmVzczo6dXBkYXRlQW5pbWF0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJQcm9ncmVzcy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQ
cm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6YW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0Jhcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lLmg6
CisKIDIwMTAtMDMtMzEgIE1hdHRpYXMgTmlzc2xlciAgPG1uaXNzbGVyQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBy
b2dyZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDU2ODQwKQorKysgV2ViQ29yZS9odG1sL0hUTUxQ
cm9ncmVzc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIFBhc3NS
ZWZQdHI8SFRNTFByb2dyZXNzRWxlbWVudD4gSFRNTFByb2cKICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEhUTUxQcm9ncmVzc0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQsIGZvcm0pKTsKIH0KIAot
UmVuZGVyT2JqZWN0KiBIVE1MUHJvZ3Jlc3NFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSkKK1JlbmRlck9iamVjdCogSFRNTFByb2dy
ZXNzRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHls
ZSopCiB7CiAgICAgcmV0dXJuIG5ldyAoYXJlbmEpIFJlbmRlclByb2dyZXNzKHRoaXMpOwogfQpJ
bmRleDogV2ViQ29yZS9tYW51YWwtdGVzdHMvZG9tL3Byb2dyZXNzYmFyLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9tYW51YWwtdGVzdHMvZG9tL3Byb2dyZXNzYmFyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL21hbnVhbC10ZXN0cy9kb20vcHJvZ3Jlc3NiYXIuaHRtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw4IEBACis8aHRtbD48Ym9keT4KKzxoMT5JbmRldGVybWluYXRlIHBy
b2dyZXNzIGJhcjwvaDE+CitUaGlzIGlzIGFuIGV4YW1wbGUgb2YgPHByb2dyZXNzIHZhbHVlPTcg
bWF4PTEwPjwvcHJvZ3Jlc3M+IGEgZGV0ZXJtaW5hdGUgcHJvZ3Jlc3MgYmFyLjxicj4KK1RoaXMg
aXMgYW4gZXhhbXBsZSBvZiA8cHJvZ3Jlc3M+PC9wcm9ncmVzcz4gYW4gaW5kZXRlcm1pbmF0ZSBw
cm9ncmVzcyBiYXIuPGJyPgorVGhpcyBpcyBhbiBleGFtcGxlIG9mIDxwcm9ncmVzcyBkaXI9cnRs
IHZhbHVlPTcgbWF4PTEwPjwvcHJvZ3Jlc3M+IGEgcmlnaHQtdG8tbGVmdCBkZXRlcm1pbmF0ZSBw
cm9ncmVzcyBiYXIuPGJyPgorVGhpcyBpcyBhbiBleGFtcGxlIG9mIDxwcm9ncmVzcyBkaXI9cnRs
PjwvcHJvZ3Jlc3M+IGEgcmlnaHQtdG8tbGVmdCBpbmRldGVybWluYXRlIHByb2dyZXNzIGJhci48
YnI+CisKKzwvYm9keT48L2h0bWw+CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1JlbmRlclRo
ZW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVR
dC5jcHAJKHJldmlzaW9uIDU2ODQwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9SZW5kZXJUaGVt
ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUzLDEwICs2NTMsMjYgQEAgYm9vbCBSZW5kZXJU
aGVtZVF0OjpwYWludE1lbnVMaXN0QnV0dG9uKAogfQogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RB
RykKLWJvb2wgUmVuZGVyVGhlbWVRdDo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0
aW9uKGRvdWJsZSBwb3NpdGlvbiwgaW50JiBwcm9ncmVzc1NpemUpIGNvbnN0Citkb3VibGUgUmVu
ZGVyVGhlbWVRdDo6YW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQ
cm9ncmVzcyogcmVuZGVyUHJvZ3Jlc3MpIGNvbnN0CiB7Ci0gICAgcHJvZ3Jlc3NTaXplID0gNjU1
MzYgKiBwb3NpdGlvbjsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJlbmRlclByb2dyZXNz
LT5wb3NpdGlvbigpID49IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFVz
ZSBoYXJkLWNvZGVkIHZhbHVlIHVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5va2lhLmNvbS9i
cm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZC4KKyAgICAvLyBVc2UgdGhlIHZhbHVlIGZyb20gd2lu
ZG93cyBzdHlsZSB3aGljaCBpcyAxMCBmcHMuCisgICAgcmV0dXJuIDAuMTsKK30KKworZG91Ymxl
IFJlbmRlclRoZW1lUXQ6OmFuaW1hdGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIoUmVuZGVyUHJv
Z3Jlc3MqIHJlbmRlclByb2dyZXNzKSBjb25zdAoreworICAgIGlmIChyZW5kZXJQcm9ncmVzcy0+
cG9zaXRpb24oKSA+PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFFTdHlsZU9wdGlvblBy
b2dyZXNzQmFyVjIgb3B0aW9uOworICAgIG9wdGlvbi5yZWN0LnNldFNpemUocmVuZGVyUHJvZ3Jl
c3MtPnNpemUoKSk7CisgICAgLy8gRklYTUU6IFVudGlsIGh0dHA6Ly9idWdyZXBvcnRzLnF0Lm5v
a2lhLmNvbS9icm93c2UvUVRCVUctOTE3MSBpcyBmaXhlZCwKKyAgICAvLyB3ZSBzaW11bGF0ZSBv
bmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4KKyAgICByZXR1cm4g
KG9wdGlvbi5yZWN0LndpZHRoKCkgLyBxU3R5bGUoKS0+cGl4ZWxNZXRyaWMoUVN0eWxlOjpQTV9Q
cm9ncmVzc0JhckNodW5rV2lkdGgsICZvcHRpb24pKSAqIGFuaW1hdGlvblJlcGVhdEludGVydmFs
Rm9yUHJvZ3Jlc3NCYXIocmVuZGVyUHJvZ3Jlc3MpOwogfQogCiB2b2lkIFJlbmRlclRoZW1lUXQ6
OmFkanVzdFByb2dyZXNzQmFyU3R5bGUoQ1NTU3R5bGVTZWxlY3RvciosIFJlbmRlclN0eWxlKiBz
dHlsZSwgRWxlbWVudCopIGNvbnN0CkBAIC02ODYsNyArNzAyLDE5IEBAIGJvb2wgUmVuZGVyVGhl
bWVRdDo6cGFpbnRQcm9ncmVzc0JhcihSZW4KICAgICBvcHRpb24ucmVjdC5tb3ZlVG8oUVBvaW50
KDAsIDApKTsKICAgICBvcHRpb24ucmVjdC5zZXRTaXplKHIuc2l6ZSgpKTsKIAotICAgIHAuZHJh
d0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKyAgICBpZiAob3B0aW9u
LnByb2dyZXNzIDwgMCkgeworICAgICAgICAvLyBGSVhNRTogVW50aWwgaHR0cDovL2J1Z3JlcG9y
dHMucXQubm9raWEuY29tL2Jyb3dzZS9RVEJVRy05MTcxIGlzIGZpeGVkLAorICAgICAgICAvLyB3
ZSBzaW11bGF0ZSBvbmUgc3F1YXJlIGFuaW1hdGluZyBhY3Jvc3MgdGhlIHByb2dyZXNzIGJhci4K
KyAgICAgICAgcC5kcmF3Q29udHJvbChRU3R5bGU6OkNFX1Byb2dyZXNzQmFyR3Jvb3ZlLCBvcHRp
b24pOworICAgICAgICBpbnQgY2h1bmtXaWR0aCA9IHFTdHlsZSgpLT5waXhlbE1ldHJpYyhRU3R5
bGU6OlBNX1Byb2dyZXNzQmFyQ2h1bmtXaWR0aCwgJm9wdGlvbik7CisgICAgICAgIFFDb2xvciBj
b2xvciA9IChvcHRpb24ucGFsZXR0ZS5oaWdobGlnaHQoKSA9PSBvcHRpb24ucGFsZXR0ZS5iYWNr
Z3JvdW5kKCkpID8gb3B0aW9uLnBhbGV0dGUuY29sb3IoUVBhbGV0dGU6OkFjdGl2ZSwgUVBhbGV0
dGU6OkhpZ2hsaWdodCkgOiBvcHRpb24ucGFsZXR0ZS5jb2xvcihRUGFsZXR0ZTo6SGlnaGxpZ2h0
KTsKKyAgICAgICAgaWYgKHJlbmRlclByb2dyZXNzLT5zdHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBS
VEwpCisgICAgICAgICAgICBwLnBhaW50ZXItPmZpbGxSZWN0KG9wdGlvbi5yZWN0LnJpZ2h0KCkg
LSBjaHVua1dpZHRoICAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25Qcm9ncmVzcygpICogb3B0
aW9uLnJlY3Qud2lkdGgoKSwgMCwgY2h1bmtXaWR0aCwgb3B0aW9uLnJlY3QuaGVpZ2h0KCksIGNv
bG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcC5wYWludGVyLT5maWxsUmVjdChyZW5k
ZXJQcm9ncmVzcy0+YW5pbWF0aW9uUHJvZ3Jlc3MoKSAqIG9wdGlvbi5yZWN0LndpZHRoKCksIDAs
IGNodW5rV2lkdGgsIG9wdGlvbi5yZWN0LmhlaWdodCgpLCBjb2xvcik7CisgICAgfSBlbHNlCisg
ICAgICAgIHAuZHJhd0NvbnRyb2woUVN0eWxlOjpDRV9Qcm9ncmVzc0Jhciwgb3B0aW9uKTsKKwog
ICAgIHAucGFpbnRlci0+dHJhbnNsYXRlKC10b3BMZWZ0KTsKIAogICAgIHJldHVybiBmYWxzZTsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCShyZXZpc2lvbiA1Njg0MCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vcXQvUmVuZGVyVGhlbWVRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw2ICszNCw5IEBAIFFUX0VORF9OQU1FU1BBQ0UKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisj
aWYgRU5BQkxFKFBST0dSRVNTX1RBRykKK2NsYXNzIFJlbmRlclByb2dyZXNzOworI2VuZGlmCiBj
bGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIEhUTUxNZWRpYUVsZW1lbnQ7CiBjbGFzcyBTY3JvbGxi
YXJUaGVtZVF0OwpAQCAtMTI4LDEwICsxMzEsMTAgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
Ym9vbCBwYWludFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb24oUmVuZGVyT2JqZWN0KiwgY29u
c3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jik7CiAKICNpZiBFTkFC
TEUoUFJPR1JFU1NfVEFHKQotICAgIC8vIEhlbHBlciBtZXRob2QgZm9yIG9wdGltaXppbmcgdGhl
IHBhaW50IGFyZWEgb2YgdGhlIHByb2dyZXNzIGJhci4KLSAgICAvLyBJZiBzdXBwb3J0ZWQsIGl0
IHJldHVybnMgbnVtYmVyIG9mIHBpeGVscyBuZWVkZWQgdG8gZHJhdyB0aGUgcHJvZ3Jlc3MgYmFy
IHVwIHRvIHRoZSBwcm9ncmVzcyBwb3NpdGlvbi4KLSAgICAvLyBwcm9ncmVzc1NpemUgaXMgdGhl
IHZhbHVlIHRoYXQgaXMgcGFzc2VkIGJhY2sgdG8gUmVuZGVyVGhlbWUgZHVyaW5nIGRyYXdpbmcu
Ci0gICAgdmlydHVhbCBib29sIGdldE51bWJlck9mUGl4ZWxzRm9yUHJvZ3Jlc3NQb3NpdGlvbihk
b3VibGUgcG9zaXRpb24sIGludCYgcHJvZ3Jlc3NTaXplKSBjb25zdDsKKyAgICAvLyBSZXR1cm5z
IHRoZSByZXBlYXQgaW50ZXJ2YWwgb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJh
ci4KKyAgICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25SZXBlYXRJbnRlcnZhbEZvclByb2dyZXNz
QmFyKFJlbmRlclByb2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3Q7CisgICAgLy8gUmV0dXJu
cyB0aGUgZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiBmb3IgdGhlIHByb2dyZXNzIGJhci4KKyAg
ICB2aXJ0dWFsIGRvdWJsZSBhbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclBy
b2dyZXNzKiByZW5kZXJQcm9ncmVzcykgY29uc3Q7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURF
TykKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5jcHAJKHJldmlzaW9uIDU2ODQw
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw2ICszNSwxMSBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogUmVuZGVyUHJv
Z3Jlc3M6OlJlbmRlclByb2dyZXNzKEhUTUxQcm9ncmVzc0VsZW1lbnQqIGVsZW1lbnQpCiAgICAg
OiBSZW5kZXJCbG9jayhlbGVtZW50KQogICAgICwgbV9wb3NpdGlvbigtMSkKKyAgICAsIG1fYW5p
bWF0aW9uU3RhcnRUaW1lKDApCisgICAgLCBtX2FuaW1hdGlvblJlcGVhdEludGVydmFsKDApCisg
ICAgLCBtX2FuaW1hdGlvbkR1cmF0aW9uKDApCisgICAgLCBtX2FuaW1hdGluZyhmYWxzZSkKKyAg
ICAsIG1fYW5pbWF0aW9uVGltZXIodGhpcywgJlJlbmRlclByb2dyZXNzOjphbmltYXRpb25UaW1l
ckZpcmVkKQogewogfQogCkBAIC00OSw2ICs1NCw4IEBAIHZvaWQgUmVuZGVyUHJvZ3Jlc3M6Omxh
eW91dCgpCiAKICAgICBtX292ZXJmbG93LmNsZWFyKCk7CiAKKyAgICB1cGRhdGVBbmltYXRpb25T
dGF0ZSgpOworCiAgICAgcmVwYWludGVyLnJlcGFpbnRBZnRlckxheW91dCgpOwogCiAgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOwpAQCAtNjEsOCArNjgsNDcgQEAgdm9pZCBSZW5kZXJQcm9ncmVz
czo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICByZXR1cm47CiAgICAgbV9wb3NpdGlvbiA9
IGVsZW1lbnQtPnBvc2l0aW9uKCk7CiAKKyAgICB1cGRhdGVBbmltYXRpb25TdGF0ZSgpOworCisg
ICAgcmVwYWludCgpOworfQorCitkb3VibGUgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblByb2dy
ZXNzKCkKK3sKKyAgICByZXR1cm4gbV9hbmltYXRpbmcgPyAoZm1vZCgoY3VycmVudFRpbWUoKSAt
IG1fYW5pbWF0aW9uU3RhcnRUaW1lKSwgbV9hbmltYXRpb25EdXJhdGlvbikgLyBtX2FuaW1hdGlv
bkR1cmF0aW9uKSA6IDA7Cit9CisKK3ZvaWQgUmVuZGVyUHJvZ3Jlc3M6OmFuaW1hdGlvblRpbWVy
RmlyZWQoVGltZXI8UmVuZGVyUHJvZ3Jlc3M+KikKK3sKICAgICByZXBhaW50KCk7CiB9CiAKK3Zv
aWQgUmVuZGVyUHJvZ3Jlc3M6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGlu
dCB0eSkKK3sKKyAgICBpZiAocGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tn
cm91bmQpIHsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgJiYgbV9h
bmltYXRpbmcpCisgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChtX2Fu
aW1hdGlvblJlcGVhdEludGVydmFsKTsKKyAgICB9CisKKyAgICBSZW5kZXJCbG9jazo6cGFpbnQo
cGFpbnRJbmZvLCB0eCwgdHkpOworfQorCit2b2lkIFJlbmRlclByb2dyZXNzOjp1cGRhdGVBbmlt
YXRpb25TdGF0ZSgpCit7CisgICAgbV9hbmltYXRpb25EdXJhdGlvbiA9IHRoZW1lKCktPmFuaW1h
dGlvbkR1cmF0aW9uRm9yUHJvZ3Jlc3NCYXIodGhpcyk7CisgICAgbV9hbmltYXRpb25SZXBlYXRJ
bnRlcnZhbCA9IHRoZW1lKCktPmFuaW1hdGlvblJlcGVhdEludGVydmFsRm9yUHJvZ3Jlc3NCYXIo
dGhpcyk7CisKKyAgICBib29sIGFuaW1hdGluZyA9IG1fYW5pbWF0aW9uRHVyYXRpb24gPiAwOwor
ICAgIGlmIChhbmltYXRpbmcgPT0gbV9hbmltYXRpbmcpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fYW5pbWF0aW5nID0gYW5pbWF0aW5nOworICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwor
ICAgIGlmIChtX2FuaW1hdGluZykgeworICAgICAgICBtX2FuaW1hdGlvblN0YXJ0VGltZSA9IGN1
cnJlbnRUaW1lKCk7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KG1fYW5p
bWF0aW9uUmVwZWF0SW50ZXJ2YWwpOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJQcm9ncmVzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclByb2dyZXNzLmgJKHJldmlzaW9uIDU2
ODQwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUHJvZ3Jlc3MuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsMTMgKzMyLDI0IEBAIGNsYXNzIFJlbmRlclByb2dyZXNzIDogcHVibGljIFJlbmRl
ckJsb2MKIHB1YmxpYzoKICAgICBSZW5kZXJQcm9ncmVzcyhIVE1MUHJvZ3Jlc3NFbGVtZW50Kik7
CiAgICAgZG91YmxlIHBvc2l0aW9uKCkgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQorICAgIGRvdWJs
ZSBhbmltYXRpb25Qcm9ncmVzcygpOwogCiBwcml2YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJQcm9ncmVzcyI7IH0KICAgICB2
aXJ0dWFsIGJvb2wgaXNQcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7
CisgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKKwor
ICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxSZW5kZXJQcm9ncmVzcz4qKTsKKyAg
ICB2b2lkIHVwZGF0ZUFuaW1hdGlvblN0YXRlKCk7CisKICAgICBkb3VibGUgbV9wb3NpdGlvbjsK
KyAgICBkb3VibGUgbV9hbmltYXRpb25TdGFydFRpbWU7CisgICAgZG91YmxlIG1fYW5pbWF0aW9u
UmVwZWF0SW50ZXJ2YWw7CisgICAgZG91YmxlIG1fYW5pbWF0aW9uRHVyYXRpb247CisgICAgYm9v
bCBtX2FuaW1hdGluZzsKKyAgICBUaW1lcjxSZW5kZXJQcm9ncmVzcz4gbV9hbmltYXRpb25UaW1l
cjsKIH07CiAKIGlubGluZSBSZW5kZXJQcm9ncmVzcyogdG9SZW5kZXJQcm9ncmVzcyhSZW5kZXJP
YmplY3QqIG9iamVjdCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAJKHJldmlzaW9u
IDU2ODQwKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NDAsMTAgKzg0MCwxNCBAQCB2b2lkIFJlbmRlclRoZW1lOjphZGp1c3RNZW51TGlz
dFN0eWxlKENTCiB9CiAKICNpZiBFTkFCTEUoUFJPR1JFU1NfVEFHKQotYm9vbCBSZW5kZXJUaGVt
ZTo6Z2V0TnVtYmVyT2ZQaXhlbHNGb3JQcm9ncmVzc1Bvc2l0aW9uKGRvdWJsZSAsIGludCYgcHJv
Z3Jlc3NTaXplKSBjb25zdAorZG91YmxlIFJlbmRlclRoZW1lOjphbmltYXRpb25SZXBlYXRJbnRl
cnZhbEZvclByb2dyZXNzQmFyKFJlbmRlclByb2dyZXNzKikgY29uc3QKIHsKLSAgICBwcm9ncmVz
c1NpemUgPSAwOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gMDsKK30KKworZG91Ymxl
IFJlbmRlclRoZW1lOjphbmltYXRpb25EdXJhdGlvbkZvclByb2dyZXNzQmFyKFJlbmRlclByb2dy
ZXNzKikgY29uc3QKK3sKKyAgICByZXR1cm4gMDsKIH0KIAogdm9pZCBSZW5kZXJUaGVtZTo6YWRq
dXN0UHJvZ3Jlc3NCYXJTdHlsZShDU1NTdHlsZVNlbGVjdG9yKiwgUmVuZGVyU3R5bGUqLCBFbGVt
ZW50KikgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAkocmV2aXNpb24gNTY4NDAp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw2ICszOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBQ
b3B1cE1lbnU7CiBjbGFzcyBSZW5kZXJNZW51TGlzdDsKKyNpZiBFTkFCTEUoUFJPR1JFU1NfVEFH
KQorY2xhc3MgUmVuZGVyUHJvZ3Jlc3M7CisjZW5kaWYKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiAK
IGNsYXNzIFJlbmRlclRoZW1lIDogcHVibGljIFJlZkNvdW50ZWQ8UmVuZGVyVGhlbWU+IHsKQEAg
LTE3MCwxMCArMTczLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRDYXBzTG9j
a0luZGljYXRvcihSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmKSB7IHJldHVybiAwOyB9OwogCiAjaWYgRU5BQkxFKFBST0dSRVNTX1RB
RykKLSAgICAvLyBIZWxwZXIgbWV0aG9kIGZvciBvcHRpbWl6aW5nIHRoZSBwYWludCBhcmVhIG9m
IHRoZSBwcm9ncmVzcyBiYXIuCi0gICAgLy8gSWYgc3VwcG9ydGVkLCBpdCByZXR1cm5zIG51bWJl
ciBvZiBwaXhlbHMgbmVlZGVkIHRvIGRyYXcgdGhlIHByb2dyZXNzIGJhciB1cCB0byB0aGUgcHJv
Z3Jlc3MgcG9zaXRpb24uCi0gICAgLy8gcHJvZ3Jlc3NTaXplIGlzIHRoZSB2YWx1ZSB0aGF0IGlz
IHBhc3NlZCBiYWNrIHRvIFJlbmRlclRoZW1lIGR1cmluZyBkcmF3aW5nLgotICAgIHZpcnR1YWwg
Ym9vbCBnZXROdW1iZXJPZlBpeGVsc0ZvclByb2dyZXNzUG9zaXRpb24oZG91YmxlIHBvc2l0aW9u
LCBpbnQmIHByb2dyZXNzU2l6ZSkgY29uc3Q7CisgICAgLy8gUmV0dXJucyB0aGUgcmVwZWF0IGlu
dGVydmFsIG9mIHRoZSBhbmltYXRpb24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVh
bCBkb3VibGUgYW5pbWF0aW9uUmVwZWF0SW50ZXJ2YWxGb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9n
cmVzcyopIGNvbnN0OworICAgIC8vIFJldHVybnMgdGhlIGR1cmF0aW9uIG9mIHRoZSBhbmltYXRp
b24gZm9yIHRoZSBwcm9ncmVzcyBiYXIuCisgICAgdmlydHVhbCBkb3VibGUgYW5pbWF0aW9uRHVy
YXRpb25Gb3JQcm9ncmVzc0JhcihSZW5kZXJQcm9ncmVzcyopIGNvbnN0OwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoVklERU8pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>