<?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>87515</bug_id>
          
          <creation_ts>2012-05-25 11:05:52 -0700</creation_ts>
          <short_desc>[chromium] New animations are not always started in CCLayerTreeHost before commit</short_desc>
          <delta_ts>2013-04-09 17:06:15 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          <dependson>87301</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dana Jansens">danakj</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634080</commentid>
    <comment_count>0</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-25 11:05:52 -0700</bug_when>
    <thetext>crbug: http://code.google.com/p/chromium/issues/detail?id=123090

Animations now tick on the main thread after bug #87301. But we are not guaranteed that new animations are ticked on the first commit in which they exist. This causes the same missing tile symptoms to occur, though they are corrected quickly when the main thread does tick with a future frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634082</commentid>
    <comment_count>1</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-25 11:06:31 -0700</bug_when>
    <thetext>(FYI This is all in single-thread mode)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>650371</commentid>
    <comment_count>2</comment_count>
      <attachid>147865</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-15 11:39:38 -0700</bug_when>
    <thetext>Created attachment 147865
Patch

This new patch guarantees that we will have up-to-date layer positions on the
main thread before calling updateLayers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651127</commentid>
    <comment_count>3</comment_count>
      <attachid>147865</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-17 19:45:16 -0700</bug_when>
    <thetext>Comment on attachment 147865
Patch

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

So the problem here is that in single-threaded mode we don&apos;t get an animate() call from the RenderWidget in some cases because we haven&apos;t called scheduleAnimation(), right?  Where is scheduleAnimation() normally called in the single-threaded path?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:154
&gt; +    virtual void updateClientAnimations(double monotonicFrameBeginTime);
&gt; +    virtual void updateLayerAnimations(double monotonicFrameBeginTime);

the &quot;client&quot; vs &quot;layer&quot; distinction doesn&apos;t seem very helpful.  all animations are set on a layer and all animations have a client

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:350
&gt; +    double monotonicTime = monotonicallyIncreasingTime();
&gt; +    m_layerTreeHost-&gt;updateLayerAnimations(monotonicTime);

does this mean you&apos;re using a different timebase for compositor-driven animations vs WebCore-driven animations? that seems like a really bad idea unless it&apos;s completely unavoidable - we should try to use the same timebase for all animations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651129</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-17 19:48:27 -0700</bug_when>
    <thetext>Looking at the code perhaps we don&apos;t call scheduleAnimation() at all in the single-threaded path, which is probably the root cause of the bug.  If we want render_widget to call animate() on us we have to call scheduleAnimation()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653148</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-19 20:42:50 -0700</bug_when>
    <thetext>Ping - I&apos;m pretty curious about the answer to comment #4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653652</commentid>
    <comment_count>6</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-06-20 10:58:15 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Ping - I&apos;m pretty curious about the answer to comment #4

Sorry for the delay. It took me a bit to do some research to give you a proper answer.

(In reply to comment #3)
&gt; (From update of attachment 147865 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147865&amp;action=review
&gt; 
&gt; So the problem here is that in single-threaded mode we don&apos;t get an animate() call from the RenderWidget in some cases because we haven&apos;t called scheduleAnimation(), right?  

It turns out that there are several problems.

1) We do not schedule an animation when an animation is added to a layer (see below for an explanation of how schedule animation is normally called). I have written code to do this, but this does not fix the issue, because

2) RW::AnimateIfNeeded in RW::DoDeferredUpdate is called before webwidget_-&gt;layout(), which can cause animations to be added (specifically, if a new layer is added to the tree that has an animation. See LayerChromium::setLayerTreeHost), and changing the order of these appears to be a bad idea (I saw lots of flickering that I did not investigate). But, even if we did reorder these

3) RW::AnimateIfNeeded is not guaranteed to tick the animations. It is rate limited, which seems fundamental to its design?

We need to guarantee that compositor-driven animations are updated before compositing, and it doesn&apos;t appear that this approach can make this guarantee. Please let me know if I&apos;ve missed something.

&gt; Where is scheduleAnimation() normally called in the single-threaded path?

This is normally called via AnimationControllerPrivate&apos;s updateStyleIfNeeded timer, which bubbles its way out through the FrameView.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.h:154
&gt; &gt; +    virtual void updateClientAnimations(double monotonicFrameBeginTime);
&gt; &gt; +    virtual void updateLayerAnimations(double monotonicFrameBeginTime);
&gt; 
&gt; the &quot;client&quot; vs &quot;layer&quot; distinction doesn&apos;t seem very helpful.  all animations are set on a layer and all animations have a client
It&apos;s true. How about s/Client//, and s/Layer/Compositor/ ?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:350
&gt; &gt; +    double monotonicTime = monotonicallyIncreasingTime();
&gt; &gt; +    m_layerTreeHost-&gt;updateLayerAnimations(monotonicTime);
&gt; 
&gt; does this mean you&apos;re using a different timebase for compositor-driven animations vs WebCore-driven animations? that seems like a really bad idea unless it&apos;s completely unavoidable - we should try to use the same timebase for all animations

I&apos;ve been using monotonic times to be consistent with the other cc code. I&apos;m not sure how involved this change would be, but does seem like a good idea. Could it be done in another CL, though?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663079</commentid>
    <comment_count>7</comment_count>
      <attachid>150827</attachid>
    <who name="">vollick</who>
    <bug_when>2012-07-04 11:31:52 -0700</bug_when>
    <thetext>Created attachment 150827
Patch

Rebasing patch.

Also renamed update animation functions. To remain consistent with WebCore,
I&apos;ve renamed the function to update the compositor driven animations
updateAcceleratedAnimations, and I&apos;ve switched updateClientAnimations back to
updateAnimations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680837</commentid>
    <comment_count>8</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-27 11:13:13 -0700</bug_when>
    <thetext>Is this patch still valid? Does it still apply?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681119</commentid>
    <comment_count>9</comment_count>
      <attachid>155057</attachid>
    <who name="">vollick</who>
    <bug_when>2012-07-27 14:56:34 -0700</bug_when>
    <thetext>Created attachment 155057
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681120</commentid>
    <comment_count>10</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-07-27 14:57:28 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Is this patch still valid? Does it still apply?

No it didn&apos;t, but I&apos;ve just rebased it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681144</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-27 15:19:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; Ping - I&apos;m pretty curious about the answer to comment #4
&gt; 
&gt; Sorry for the delay. It took me a bit to do some research to give you a proper answer.
&gt; 
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 147865 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=147865&amp;action=review
&gt; &gt; 
&gt; &gt; So the problem here is that in single-threaded mode we don&apos;t get an animate() call from the RenderWidget in some cases because we haven&apos;t called scheduleAnimation(), right?  
&gt; 
&gt; It turns out that there are several problems.
&gt; 
&gt; 1) We do not schedule an animation when an animation is added to a layer (see below for an explanation of how schedule animation is normally called). I have written code to do this, but this does not fix the issue, because

I think fixing this would fix your problem (see below)

&gt; 
&gt; 2) RW::AnimateIfNeeded in RW::DoDeferredUpdate is called before webwidget_-&gt;layout(), which can cause animations to be added (specifically, if a new layer is added to the tree that has an animation. See LayerChromium::setLayerTreeHost), and changing the order of these appears to be a bad idea (I saw lots of flickering that I did not investigate). But, even if we did reorder these

Yes, you always want to animate() before layout().  That should happen.

&gt; 
&gt; 3) RW::AnimateIfNeeded is not guaranteed to tick the animations. It is rate limited, which seems fundamental to its design?

The rate limiting doesn&apos;t happen in compositing mode, so I don&apos;t see how that is relevant here (assuming that the context supports the swap buffers extension, which is always the case).

&gt; 
&gt; We need to guarantee that compositor-driven animations are updated before compositing, and it doesn&apos;t appear that this approach can make this guarantee. Please let me know if I&apos;ve missed something.

That&apos;s already taken care of.  I don&apos;t think you need or want to sidestep the RenderWidget flow control mechanisms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>699672</commentid>
    <comment_count>12</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-08-20 10:53:00 -0700</bug_when>
    <thetext>&gt; &gt; 2) RW::AnimateIfNeeded in RW::DoDeferredUpdate is called before webwidget_-&gt;layout(), which can cause animations to be added (specifically, if a new layer is added to the tree that has an animation. See LayerChromium::setLayerTreeHost), and changing the order of these appears to be a bad idea (I saw lots of flickering that I did not investigate). But, even if we did reorder these
&gt; 
&gt; Yes, you always want to animate() before layout().  That should happen.

The problem is that when layout() creates an animation, we will end up calling updateLayers() before ticking this animation, which can cause flickering. So, it seems to me that if we continue to lump all the animation servicing together, we&apos;ll need to run animate() before layout() (so that layout() has the values from the WebCore animations needed for it to run correctly), and also after layout() (so that updateLayers() has the values from the compositor-driven animations it needs to run correctly). This made me think it would be simpler to split up the animate() so that each of its components could be guaranteed to happen when it needs to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>704440</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-08-24 14:58:55 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; &gt; 2) RW::AnimateIfNeeded in RW::DoDeferredUpdate is called before webwidget_-&gt;layout(), which can cause animations to be added (specifically, if a new layer is added to the tree that has an animation. See LayerChromium::setLayerTreeHost), and changing the order of these appears to be a bad idea (I saw lots of flickering that I did not investigate). But, even if we did reorder these
&gt; &gt; 
&gt; &gt; Yes, you always want to animate() before layout().  That should happen.
&gt; 
&gt; The problem is that when layout() creates an animation, we will end up calling updateLayers() before ticking this animation, which can cause flickering. So, it seems to me that if we continue to lump all the animation servicing together, we&apos;ll need to run animate() before layout() (so that layout() has the values from the WebCore animations needed for it to run correctly), and also after layout() (so that updateLayers() has the values from the compositor-driven animations it needs to run correctly). This made me think it would be simpler to split up the animate() so that each of its components could be guaranteed to happen when it needs to.

That&apos;s a really good point.

I actually wonder if we should squash animateAndLayout() together to one call and pump compositor-driven animations after that call - but sharing the timestamp from animate().  We don&apos;t want to run all animate()s after layout(), just the compositor-driven ones that (by definition) can&apos;t change layout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872418</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen Chenney">schenney</who>
    <bug_when>2013-04-09 17:06:15 -0700</bug_when>
    <thetext>Marked LayoutTest bugs, bugs with Chromium IDs, and some others as WontFix. Test failure bugs still are trackable via TestExpectations or disabled unit tests.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147865</attachid>
            <date>2012-06-15 11:39:38 -0700</date>
            <delta_ts>2012-07-04 11:31:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87515-20120615143938.patch</filename>
            <type>text/plain</type>
            <size>12899</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwNDQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzU1NzBkZGMyZTI0MTYy
MWE3ODI2NjNiNTgxNGVmNDUyMGVkODE4ZC4uNDFiNWU5N2Q3ZDE4YmFhNDlmYmY5ZGEzMjk3YzQz
MTU4YTE1ZGEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA2LTE1ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmV3
IGFuaW1hdGlvbnMgYXJlIG5vdCBhbHdheXMgc3RhcnRlZCBpbiBDQ0xheWVyVHJlZUhvc3QgYmVm
b3JlIGNvbW1pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGUgc2luZ2xlIHRocmVhZCBwcm94eSBub3cgZm9yY2VzIGxheWVyIGFuaW1hdGlvbnMgdG8g
YmUgdXBkYXRlZCBiZWZvcmUKKyAgICAgICAgY2FsbGluZyB0aGUgbGF5ZXIgdHJlZSBob3N0J3Mg
dXBkYXRlTGF5ZXJzICh3aGljaCByZXF1aXJlcyBhY2N1cmF0ZQorICAgICAgICBsYXllciBwb3Np
dGlvbnMpLgorCisgICAgICAgIFVuaXQgdGVzdDoKKyAgICAgICAgICBDQ1NpbmdsZVRocmVhZFBy
b3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzLnJ1blNpbmdsZVRocmVhZAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ2xpZW50QW5pbWF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUxheWVyQW5p
bWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKENDTGF5ZXJUcmVlSG9z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21t
aXRBbmRDb21wb3NpdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZSk6CisKIDIwMTItMDYtMTUgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBBbGxvdyBzY3JvbGxpbmcgbm9uLXJvb3QgbGF5
ZXJzIGluIHRoZSBjb21wb3NpdG9yIHRocmVhZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBiZWU5NjM4YmYzYjQzNTNhYWRhZjA4NmFlNDAzNGQ1M2E0ZmQwNTVkLi44MTdmOGIwMmQ2ODI5
ZGZkYjg4ZmY2ZTNlMDgwNDQ2NzU2ZGIwNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIzIEBACisyMDEyLTA2LTE1ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmV3IGFuaW1hdGlvbnMgYXJlIG5vdCBhbHdh
eXMgc3RhcnRlZCBpbiBDQ0xheWVyVHJlZUhvc3QgYmVmb3JlIGNvbW1pdAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1MTUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHNyYy9XZWJMYXllclRyZWVWaWV3
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViTGF5ZXJUcmVlVmlldzo6dXBkYXRlQW5pbWF0aW9u
cyk6CisgICAgICAgICogdGVzdHMvQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3QuY3BwOgorICAgICAg
ICAoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3RVcGRhdGVzQW5pbWF0aW9uc0JlZm9yZUxheWVycyk6
CisgICAgICAgIChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3Jl
TGF5ZXJzOjpDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5
ZXJzKToKKyAgICAgICAgKFRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRlZFRlc3Qu
Y3BwOgorICAgICAgICAqIHRlc3RzL0NDVGhyZWFkZWRUZXN0Lmg6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6VGVzdEhvb2tzOjpkaWRVcGRhdGVMYXllcnMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OlRlc3RIb29rczo6ZGlkVXBkYXRlQ2xpZW50QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6VGVzdEhvb2tzOjpkaWRVcGRhdGVMYXllckFuaW1hdGlvbnMpOgorICAgICAgICAoVGVz
dEhvb2tzKToKKwogMjAxMi0wNi0xNSAgU2FtaSBLeW9zdGlsYSAgPHNreW9zdGlsQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFsbG93IHNjcm9sbGluZyBub24tcm9vdCBsYXll
cnMgaW4gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cAppbmRleCA0YTVmY2YzYzNkNDM4ZGY5N2NmY2E0MTgzYWEyYjZkMzhiMmUxNzVkLi40ZDlmZWIy
YjkwMDg5NDYyMWFjN2YyMjVjNjc1NTZjMzI4OWI3NTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdC5jcHAKQEAgLTIxMSwxNCArMjExLDE4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojph
Y3F1aXJlTGF5ZXJUZXh0dXJlcygpCiAgICAgbV9wcm94eS0+YWNxdWlyZUxheWVyVGV4dHVyZXMo
KTsKIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1v
bm90b25pY0ZyYW1lQmVnaW5UaW1lKQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNsaWVu
dEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKQogewogICAgIG1fYW5p
bWF0aW5nID0gdHJ1ZTsKICAgICBtX2NsaWVudC0+dXBkYXRlQW5pbWF0aW9ucyhtb25vdG9uaWNG
cmFtZUJlZ2luVGltZSk7Ci0gICAgYW5pbWF0ZUxheWVycyhtb25vdG9uaWNGcmFtZUJlZ2luVGlt
ZSk7CiAgICAgbV9hbmltYXRpbmcgPSBmYWxzZTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUxheWVyQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljRnJhbWVCZWdpblRpbWUpCit7
CisgICAgYW5pbWF0ZUxheWVycyhtb25vdG9uaWNGcmFtZUJlZ2luVGltZSk7Cit9CisKIHZvaWQg
Q0NMYXllclRyZWVIb3N0OjpsYXlvdXQoKQogewogICAgIG1fY2xpZW50LT5sYXlvdXQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZTE2MjhhZjdhNDJlOGIxYzExYTNmY2EwNjg2
YjU5MjczYmIxYzdlYS4uNWIzYmExMDhlMzk0MTg3ZjdhMDI3MGU2Mzg1OGUzMzI5NDYwY2ExMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTE1MCw3ICsxNTAsOCBAQCBwdWJsaWM6
CiAgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBDQ1Byb3h5LgogICAgIHZvaWQg
d2lsbEJlZ2luRnJhbWUoKSB7IG1fY2xpZW50LT53aWxsQmVnaW5GcmFtZSgpOyB9CiAgICAgdm9p
ZCBkaWRCZWdpbkZyYW1lKCkgeyBtX2NsaWVudC0+ZGlkQmVnaW5GcmFtZSgpOyB9Ci0gICAgdm9p
ZCB1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSk7CisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUNsaWVudEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0ZyYW1l
QmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTGF5ZXJBbmltYXRpb25zKGRvdWJs
ZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSk7CiAgICAgdm9pZCBsYXlvdXQoKTsKICAgICB2b2lk
IGJlZ2luQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKICAgICB2b2lk
IGZpbmlzaENvbW1pdE9uSW1wbFRocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKik7CkBAIC0xNzAs
NyArMTcxLDcgQEAgcHVibGljOgogICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uSW1w
bFRocmVhZChUZXh0dXJlQWxsb2NhdG9yKik7CiAgICAgdmlydHVhbCB2b2lkIGFjcXVpcmVMYXll
clRleHR1cmVzKCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSBzaG91bGQgYWJvcnQgdGhp
cyBmcmFtZSBkdWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4KLSAgICBib29sIHVwZGF0ZUxh
eWVycyhDQ1RleHR1cmVVcGRhdGVyJik7CisgICAgdmlydHVhbCBib29sIHVwZGF0ZUxheWVycyhD
Q1RleHR1cmVVcGRhdGVyJik7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCgp
IHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKaW5kZXggOGYzMDUyZDkzMTZjNDdhODhjZWIxZTBiOTZmM2MwMTgxOTQ3ZmExZS4uYzRl
MmFjNjNjMWZmOTAzYzJiMjIwZmZlZDA2N2Q0MTE2ZDM3MTk0ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTM0Niw2ICszNDYsOSBAQCBib29sIENDU2luZ2xl
VGhyZWFkUHJveHk6OmNvbW1pdEFuZENvbXBvc2l0ZSgpCiAKICAgICBDQ1RleHR1cmVVcGRhdGVy
IHVwZGF0ZXI7CiAKKyAgICBkb3VibGUgbW9ub3RvbmljVGltZSA9IG1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJBbmltYXRpb25z
KG1vbm90b25pY1RpbWUpOworCiAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUxheWVy
cyh1cGRhdGVyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCmluZGV4IGU5NTU1NTUxMDU2N2UyOTdmMzlhMGUzYzE5NmVmYThmMjgyYWM5YTQuLmVm
ZmUxYzk5OGVjYjhhMmJhNTgxNDJjYzQxMjU5OGVmZDU2OTdlMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwCkBAIC01MDAsNyArNTAwLDggQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lKCkKICAgICBtX2xheWVyVHJlZUhvc3QtPndpbGxCZWdpbkZyYW1lKCk7CiAKICAgICAv
LyBGSVhNRTogcmVjcmVhdGUgdGhlIGNvbnRleHQgaWYgaXQgd2FzIHJlcXVlc3RlZCBieSB0aGUg
aW1wbCB0aHJlYWQuCi0gICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVBbmltYXRpb25zKHJlcXVl
c3QtPm1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0
ZUNsaWVudEFuaW1hdGlvbnMocmVxdWVzdC0+bW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOworICAg
IG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJBbmltYXRpb25zKHJlcXVlc3QtPm1vbm90b25p
Y0ZyYW1lQmVnaW5UaW1lKTsKICAgICBtX2xheWVyVHJlZUhvc3QtPmxheW91dCgpOwogCiAgICAg
Ly8gQ2xlYXIgdGhlIGNvbW1pdCBmbGFnIGFmdGVyIHVwZGF0aW5nIGFuaW1hdGlvbnMgYW5kIGxh
eW91dCBoZXJlIC0tLSBvYmplY3RzIHRoYXQgb25seQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViTGF5ZXJUcmVlVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJMYXllclRyZWVWaWV3LmNwcAppbmRleCBlMDQyZjI1MTczMGZhYzk3ZWE4ZjYx
ODQ2MDRiOTgyZmZiNTAwOTNlLi4yY2M3YWNkNDE0MjU3Y2IwOWYyYzdkNjljODgyYzk2NTI4YmRj
MTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJMYXllclRyZWVWaWV3
LmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIHZvaWQgV2ViTGF5ZXJUcmVlVmlldzo6Y29tcG9zaXRl
KCkKIAogdm9pZCBXZWJMYXllclRyZWVWaWV3Ojp1cGRhdGVBbmltYXRpb25zKGRvdWJsZSBmcmFt
ZUJlZ2luVGltZSkKIHsKLSAgICBtX3ByaXZhdGUtPmxheWVyVHJlZUhvc3QoKS0+dXBkYXRlQW5p
bWF0aW9ucyhmcmFtZUJlZ2luVGltZSk7CisgICAgbV9wcml2YXRlLT5sYXllclRyZWVIb3N0KCkt
PnVwZGF0ZUNsaWVudEFuaW1hdGlvbnMoZnJhbWVCZWdpblRpbWUpOwogfQogCiBib29sIFdlYkxh
eWVyVHJlZVZpZXc6OmNvbXBvc2l0ZUFuZFJlYWRiYWNrKHZvaWQgKnBpeGVscywgY29uc3QgV2Vi
UmVjdCYgcmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NT
aW5nbGVUaHJlYWRQcm94eVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAKaW5kZXggNGZlNDBmMjQxODdjZjAxYTNmZDRlMDdl
YzM0NmZlZTFiZTQ2MGRkOS4uY2NlYWVmNzQ1OGZjY2M3NDEwMmFlOGQzOTE0Njc4NGY4MTQ4NmQx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVh
ZFByb3h5VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Npbmds
ZVRocmVhZFByb3h5VGVzdC5jcHAKQEAgLTQ3LDE5ICs0NywxOSBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKSBPVkVSUklERQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRo
ZSBhbmltYXRpb24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgogICAgICAgICAv
LyBDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcy4KICAg
ICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOwogICAgIH0KIAotICAgIHZpcnR1
YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqIGxheWVyVHJlZUhvc3RJ
bXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVy
cyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCwgZG91YmxlIG1vbm90b25p
Y1RpbWUpIE9WRVJSSURFCiAgICAgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wgc3VjY2VlZGVk
KQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpIE9W
RVJSSURFCiAgICAgewogICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2VlZGVkKTsKIApAQCAtNzUs
NyArNzUsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkgT1ZFUlJJREUKICAgICB7
CiAgICAgfQogfTsKQEAgLTkxLDI0ICs5MSwyNCBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3Qo
KSBPVkVSUklERQogICAgIHsKICAgICAgICAgLy8gVGhpcyB3aWxsIGNhdXNlIHRoZSBhbmltYXRp
b24gdGltZXIgdG8gYmUgc2V0IHdoaWNoIHdpbGwgZmlyZSBpbgogICAgICAgICAvLyBDQ1Npbmds
ZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgc2Vjb25kcy4KICAgICAgICAgcG9z
dERpZEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUpCisgICAgdmlydHVh
bCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCosIGRvdWJsZSkgT1ZFUlJJ
REUKICAgICB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCkKKyAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjcmVhdGVDb250ZXh0KGJvb2wpIE9WRVJSSURFCiAgICAgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQW5pbWF0aW9uKCkK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQW5pbWF0aW9uKCkgT1ZFUlJJREUKICAgICB7CiAgICAg
ICAgIC8vIE1ha2Ugc3VyZSB3ZSB3YWl0IENDU2luZ2xlVGhyZWFkUHJveHk6OmFuaW1hdGlvblRp
bWVyRGVsYXkoKSBzZWNvbmRzCiAgICAgICAgIC8vICh1c2UgY2VpbCBqdXN0IHRvIGJlIHN1cmUp
LiBJZiB0aGUgdGltZXIgd2FzIG5vdCBkaXNhYmxlZCwgd2Ugd2lsbApAQCAtMTIyLDcgKzEyMiw3
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3Jl
YXRlR3JhcGhpY3NDb250ZXh0RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVy
RGlyZWN0bHlUb0hvc3RXaW5kb3cpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhZnRlclRl
c3QoKQorICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKSBPVkVSUklERQogICAgIHsKICAgICB9
CiB9OwpAQCAtMTMxLDMgKzEzMSw0OSBAQCBURVNUX0YoQ0NTaW5nbGVUaHJlYWRQcm94eVRlc3RE
aWRBZGRBbmltYXRpb25CZWZvcmVJbml0aWFsaXppbmdMYXllclJlbmRlcmVyLCBydQogewogICAg
IHJ1blRlc3QoZmFsc2UpOwogfQorCisKK2NsYXNzIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0VXBk
YXRlc0FuaW1hdGlvbnNCZWZvcmVMYXllcnMgOiBwdWJsaWMgQ0NUaHJlYWRlZFRlc3QgeworcHVi
bGljOgorICAgIENDU2luZ2xlVGhyZWFkUHJveHlUZXN0VXBkYXRlc0FuaW1hdGlvbnNCZWZvcmVM
YXllcnMoKQorICAgICAgICA6IG1fYWRkZWRBbmltYXRpb24oZmFsc2UpCisgICAgICAgICwgbV91
cGRhdGVkTGF5ZXJzQWZ0ZXJBZGRpbmdBbmltYXRpb24oZmFsc2UpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgcG9z
dEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBk
aWRVcGRhdGVMYXllcnMoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgaWYgKG1fYWRkZWRBbmlt
YXRpb24pCisgICAgICAgICAgICBtX3VwZGF0ZWRMYXllcnNBZnRlckFkZGluZ0FuaW1hdGlvbiA9
IHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUxheWVyQW5pbWF0aW9u
cygpIE9WRVJSSURFCisgICAgeworICAgICAgICBFWFBFQ1RfRkFMU0UobV91cGRhdGVkTGF5ZXJz
QWZ0ZXJBZGRpbmdBbmltYXRpb24pOworICAgICAgICBlbmRUZXN0KCk7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGRpZEFkZEFuaW1hdGlvbigpIE9WRVJSSURFCisgICAgeworICAgICAgICBt
X2FkZGVkQW5pbWF0aW9uID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJU
ZXN0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgbV9hZGRl
ZEFuaW1hdGlvbjsKKyAgICBib29sIG1fdXBkYXRlZExheWVyc0FmdGVyQWRkaW5nQW5pbWF0aW9u
OworfTsKKworVEVTVF9GKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0VXBkYXRlc0FuaW1hdGlvbnNC
ZWZvcmVMYXllcnMsIHJ1blNpbmdsZVRocmVhZCkKK3sKKyAgICBydW5UZXN0KGZhbHNlKTsKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcApp
bmRleCA3YjQ2OGFiN2M5NjJhZmNmZjAzOGIyMDMxNTlhZWVkY2JhYTI0MjJmLi45N2QzODYwMjI1
YzlkNzE3MjY5OTAzNDEyMzA0MWVhZmJhODAyY2MzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcApAQCAtMTkwLDYgKzE5MCwyNSBAQCBwdWJs
aWM6CiAgICAgICAgIG1fdGVzdEhvb2tzLT5kaWRBZGRBbmltYXRpb24oKTsKICAgICB9CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ2xpZW50QW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljRnJh
bWVCZWdpblRpbWUpIE9WRVJSSURFCisgICAgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3Q6OnVw
ZGF0ZUNsaWVudEFuaW1hdGlvbnMobW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOworICAgICAgICBt
X3Rlc3RIb29rcy0+ZGlkVXBkYXRlQ2xpZW50QW5pbWF0aW9ucygpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVMYXllckFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0ZyYW1lQmVn
aW5UaW1lKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVM
YXllckFuaW1hdGlvbnMobW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOworICAgICAgICBtX3Rlc3RI
b29rcy0+ZGlkVXBkYXRlTGF5ZXJBbmltYXRpb25zKCk7CisgICAgfQorCisgICAgdmlydHVhbCBi
b29sIHVwZGF0ZUxheWVycyhXZWJDb3JlOjpDQ1RleHR1cmVVcGRhdGVyJiB1cGRhdGVyKSBPVkVS
UklERQorICAgIHsKKyAgICAgICAgYm9vbCByZXN1bHQgPSBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0
ZUxheWVycyh1cGRhdGVyKTsKKyAgICAgICAgbV90ZXN0SG9va3MtPmRpZFVwZGF0ZUxheWVycygp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogcHJpdmF0ZToKICAgICBNb2NrTGF5
ZXJUcmVlSG9zdChUZXN0SG9va3MqIHRlc3RIb29rcywgV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
Q2xpZW50KiBjbGllbnQsIGNvbnN0IFdlYkNvcmU6OkNDTGF5ZXJUcmVlU2V0dGluZ3MmIHNldHRp
bmdzKQogICAgICAgICA6IENDTGF5ZXJUcmVlSG9zdChjbGllbnQsIHNldHRpbmdzKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCmluZGV4IDRlZGM0ZTUy
MTY4MWY4MTllZjhjZDA5NjVlOGQ2ZmMzOTVhYzY5YjUuLjg5MjY3Zjc0NGIxMDViOGUyNDk2Mjgx
OTc3MTljOGE0MmNjNWVkZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRlZFRlc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
VGhyZWFkZWRUZXN0LmgKQEAgLTYzLDYgKzYzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ29tbWl0KCkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFt
ZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBkaWRVcGRhdGVMYXllcnMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBk
YXRlQ2xpZW50QW5pbWF0aW9ucygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVMYXll
ckFuaW1hdGlvbnMoKSB7IH0KKwogCiAgICAgLy8gSW1wbGVtZW50YXRpb24gb2YgQ0NMYXllckFu
aW1hdGlvbkRlbGVnYXRlCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQo
ZG91YmxlIHRpbWUpIHsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150827</attachid>
            <date>2012-07-04 11:31:52 -0700</date>
            <delta_ts>2012-07-27 14:56:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87515-20120704143151.patch</filename>
            <type>text/plain</type>
            <size>11889</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY1NjA1NGEwMjI5YmI2
MDg3NzUxM2NkMDQ2OWJlYjAyMGE4OTk3OC4uOGRmM2FiMjdmYTE3YjNhNWI1NjViYmJkOWNlMWRh
MTU4YTZmNmJkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI1IEBACiAyMDEyLTA3LTA0ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFtjaHJvbWl1bV0gTmV3
IGFuaW1hdGlvbnMgYXJlIG5vdCBhbHdheXMgc3RhcnRlZCBpbiBDQ0xheWVyVHJlZUhvc3QgYmVm
b3JlIGNvbW1pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBVbml0IHRlc3Q6IENDU2luZ2xlVGhyZWFkUHJveHlUZXN0VXBkYXRlc0FuaW1hdGlvbnNCZWZv
cmVMYXllcnMucnVuU2luZ2xlVGhyZWFkZWQKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVyVHJlZUhvc3Q6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp1cGRhdGVBY2NlbGVyYXRlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Lmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWUpOgorCisyMDEyLTA3LTA0ICBJ
YW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCiAgICAgICAgIFtjaHJvbWl1bV0g
Q29ycmVjdGx5IHJlamVjdCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHdpdGggY2VydGFpbiByb3Rh
dGlvbnMuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
OTc2OAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkYjUxMDIzMTJkODg1NGEwNDI1
YmRiZmIyODEwODFjYjZiY2NjNDEuLmU3M2I2NzZjY2RmZjFkNDVjNzI3ZmFjNmVkNmZhNTU5N2M4
ZGMxMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjMgQEAKIDIwMTIt
MDctMDQgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgW2No
cm9taXVtXSBOZXcgYW5pbWF0aW9ucyBhcmUgbm90IGFsd2F5cyBzdGFydGVkIGluIENDTGF5ZXJU
cmVlSG9zdCBiZWZvcmUgY29tbWl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NzUxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvQ0NTaW5nbGVUaHJl
YWRQcm94eVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKENDU2luZ2xlVGhyZWFkUHJveHlUZXN0
VXBkYXRlc0FuaW1hdGlvbnNCZWZvcmVMYXllcnMpOgorICAgICAgICAoQ0NTaW5nbGVUaHJlYWRQ
cm94eVRlc3RVcGRhdGVzQW5pbWF0aW9uc0JlZm9yZUxheWVyczo6Q0NTaW5nbGVUaHJlYWRQcm94
eVRlc3RVcGRhdGVzQW5pbWF0aW9uc0JlZm9yZUxheWVycyk6CisgICAgICAgIChURVNUX0YpOgor
ICAgICAgICAqIHRlc3RzL0NDVGhyZWFkZWRUZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9DQ1Ro
cmVhZGVkVGVzdC5oOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6ZGlkVXBkYXRl
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVzdEhvb2tzOjpkaWRVcGRhdGVB
Y2NlbGVyYXRlZEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RIb29rczo6
ZGlkVXBkYXRlTGF5ZXJzKToKKworMjAxMi0wNy0wNCAgSWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBbY2hyb21pdW1dIENvcnJlY3RseSByZWplY3QgYWNjZWxl
cmF0ZWQgYW5pbWF0aW9ucyB3aXRoIGNlcnRhaW4gcm90YXRpb25zLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODk3NjgKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdC5jcHAKaW5kZXggYTJmOGJiY2JhOTY1NzY5YjBhM2EyMmNmMzI1YmQ4MGFmZTFj
OGE5Yy4uNjYyM2EwZGE1MjgwYzA1NTQ4MTRjMjhhYzhlNDkwMTcwZWQwNGQxNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCkBAIC0yMTQsMTIgKzIxNCwxNiBAQCB2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljRnJhbWVCZWdpblRp
bWUpCiB7CiAgICAgbV9hbmltYXRpbmcgPSB0cnVlOwogICAgIG1fY2xpZW50LT51cGRhdGVBbmlt
YXRpb25zKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKLSAgICBhbmltYXRlTGF5ZXJzKG1vbm90
b25pY0ZyYW1lQmVnaW5UaW1lKTsKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogCiAgICAgbV9h
bmltYXRpb25GcmFtZU51bWJlcisrOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRl
QWNjZWxlcmF0ZWRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSkKK3sK
KyAgICBhbmltYXRlTGF5ZXJzKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKK30KKwogdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmxheW91dCgpCiB7CiAgICAgbV9jbGllbnQtPmxheW91dCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCA5NzRmNGNlZTUyNDAwNDVkZjVkNTZlNTdlYWEw
NjQ1YjUyMjRkMWY2Li45ZTU5ZTI0MWM5Yjg2OTQ1ZTJlOGQwNjljMDRiNzBlZDU3ZmQxODc3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMTY0LDcgKzE2NCw4IEBAIHB1YmxpYzoK
ICAgICAvLyBDQ0xheWVyVHJlZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCB3
aWxsQmVnaW5GcmFtZSgpIHsgbV9jbGllbnQtPndpbGxCZWdpbkZyYW1lKCk7IH0KICAgICB2b2lk
IGRpZEJlZ2luRnJhbWUoKSB7IG1fY2xpZW50LT5kaWRCZWdpbkZyYW1lKCk7IH0KLSAgICB2b2lk
IHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljRnJhbWVCZWdpblRp
bWUpOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVBY2NlbGVyYXRlZEFuaW1hdGlvbnMoZG91Ymxl
IG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKICAgICB2b2lkIGxheW91dCgpOwogICAgIHZvaWQg
YmVnaW5Db21taXRPbkltcGxUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopOwogICAgIHZvaWQg
ZmluaXNoQ29tbWl0T25JbXBsVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKQEAgLTE4NSw3
ICsxODYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFjcXVpcmVMYXllclRleHR1cmVz
KCk7CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFtZSBk
dWUgdG8gaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4KICAgICBib29sIGluaXRpYWxpemVMYXllclJl
bmRlcmVySWZOZWVkZWQoKTsKLSAgICB2b2lkIHVwZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVy
Jiwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRC
eXRlcyk7CiAKICAgICBDQ0xheWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1f
Y2xpZW50OyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXgg
Njc4ZWZkZmYwYTM1OGEyZDI5ZmIyYTg3YTc4MmQ1N2JmN2UzNjdjOC4uMjc3Njc3YzBmY2NkMjky
NzI0MWE2NDRmMGI4YjYyN2M3YzU3ZWM2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKQEAgLTMwNCwxMyArMzA0LDE0IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y29tbWl0QW5kQ29tcG9zaXRlKCkKIHsKICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhy
ZWFkKCkpOwogCi0KICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdC0+aW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAobV9sYXll
clRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlc1dlcmVQdXJnZWRTaW5jZUxhc3RDb21taXQo
KSkKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5ldmljdEFsbENvbnRlbnRUZXh0dXJlcygpOwog
CisgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVBY2NlbGVyYXRlZEFuaW1hdGlvbnMobW9ub3Rv
bmljYWxseUluY3JlYXNpbmdUaW1lKCkpOworCiAgICAgQ0NUZXh0dXJlVXBkYXRlciB1cGRhdGVy
OwogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPm1lbW9yeUFsbG9jYXRpb25MaW1pdEJ5dGVzKCkpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwCmluZGV4IDk5NzNhOTc0YjE1NjdiYjY2ODMxMjYwMzZlY2Q0MDQzMWYwMTFm
Y2MuLjZlNTZmMDZjZmYyNTIyZTBmMTgzZjY4YzkwOTJiOWE5MTExNmE1N2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwCkBAIC01MDksNiArNTA5LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
OjpiZWdpbkZyYW1lKCkKICAgICBtX2xheWVyVHJlZUhvc3QtPndpbGxCZWdpbkZyYW1lKCk7CiAK
ICAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUFuaW1hdGlvbnMocmVxdWVzdC0+bW9ub3Rvbmlj
RnJhbWVCZWdpblRpbWUpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQWNjZWxlcmF0ZWRB
bmltYXRpb25zKHJlcXVlc3QtPm1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKICAgICBtX2xheWVy
VHJlZUhvc3QtPmxheW91dCgpOwogCiAgICAgLy8gQ2xlYXIgdGhlIGNvbW1pdCBmbGFnIGFmdGVy
IHVwZGF0aW5nIGFuaW1hdGlvbnMgYW5kIGxheW91dCBoZXJlIC0tLSBvYmplY3RzIHRoYXQgb25s
eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggNWUyODkwMzk0MjI1MThmNTBhMWVi
ODRjYTdlNmExMWM2M2E4ZDAyZC4uNmZkNjc5NDAyODA0YjY5YzY1MTc5YWE3MTcxNTE2ZjA5Mjhj
NDViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC04Niw2ICs4Niw3IEBACiAg
ICAgICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJTdGF0ZU1hY2hpbmVUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0Q29tbW9uLmgnLAogICAgICAgICAgICAgJ3Rl
c3RzL0NDU2NoZWR1bGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2luZ2xlVGhy
ZWFkUHJveHlUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJ
bXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1vbi5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9DQ1RpbGVkTGF5ZXJJbXBsVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4wNjMyZGRlYWM2YTU2OGYyYWZmYThjMDBkMjM0YWEwYjcwN2NlNjNhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVh
ZFByb3h5VGVzdC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorCisjaW5j
bHVkZSAiQ0NUaHJlYWRlZFRlc3QuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOworCitjbGFzcyBDQ1NpbmdsZVRocmVhZFBy
b3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzIDogcHVibGljIENDVGhyZWFkZWRU
ZXN0IHsKK3B1YmxpYzoKKyAgICBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRp
b25zQmVmb3JlTGF5ZXJzKCkKKyAgICAgICAgOiBtX2FkZGVkQW5pbWF0aW9uKGZhbHNlKQorICAg
ICAgICAsIG1fdXBkYXRlZExheWVyc0FmdGVyQWRkaW5nQW5pbWF0aW9uKGZhbHNlKQorICAgIHsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgT1ZFUlJJREUKKyAgICB7Cisg
ICAgICAgIHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkVXBkYXRlTGF5ZXJzKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmICht
X2FkZGVkQW5pbWF0aW9uKQorICAgICAgICAgICAgbV91cGRhdGVkTGF5ZXJzQWZ0ZXJBZGRpbmdB
bmltYXRpb24gPSB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVBY2Nl
bGVyYXRlZEFuaW1hdGlvbnMoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KG1fdXBkYXRlZExheWVyc0FmdGVyQWRkaW5nQW5pbWF0aW9uKTsKKyAgICAgICAgZW5kVGVzdCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRBbmltYXRpb24oKSBPVkVSUklERQor
ICAgIHsKKyAgICAgICAgbV9hZGRlZEFuaW1hdGlvbiA9IHRydWU7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIGFmdGVyVGVzdCgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworcHJpdmF0ZToK
KyAgICBib29sIG1fYWRkZWRBbmltYXRpb247CisgICAgYm9vbCBtX3VwZGF0ZWRMYXllcnNBZnRl
ckFkZGluZ0FuaW1hdGlvbjsKK307CisKK1RFU1RfRihDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVw
ZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzLCBydW5TaW5nbGVUaHJlYWQpCit7CisgICAgcnVu
VGVzdChmYWxzZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvQ0NUaHJlYWRlZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1Ro
cmVhZGVkVGVzdC5jcHAKaW5kZXggNDBkM2NlNWU2ZmY5NDNiY2QwZTk0ZTc1YWIzMGJlNmM4MDZl
ZGQxOS4uOGI4MGMzOGIwNzNkM2M0YjEzNTUyN2I1ZDg5OWEyNTI3MDcyNDRjMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHAKQEAgLTE4Niw2
ICsxODYsMjQgQEAgcHVibGljOgogICAgICAgICBtX3Rlc3RIb29rcy0+ZGlkQWRkQW5pbWF0aW9u
KCk7CiAgICAgfQogCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1v
bm90b25pY0ZyYW1lQmVnaW5UaW1lKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICAg
ICAgbV90ZXN0SG9va3MtPmRpZFVwZGF0ZUFuaW1hdGlvbnMoKTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNGcmFt
ZUJlZ2luVGltZSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6dXBk
YXRlQWNjZWxlcmF0ZWRBbmltYXRpb25zKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICAg
ICAgbV90ZXN0SG9va3MtPmRpZFVwZGF0ZUFjY2VsZXJhdGVkQW5pbWF0aW9ucygpOworICAgIH0K
KworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRl
ciYgdXBkYXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykgT1ZFUlJJREUKKyAg
ICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIGNvbnRl
bnRzTWVtb3J5TGltaXRCeXRlcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5kaWRVcGRhdGVMYXll
cnMoKTsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgTW9ja0xheWVyVHJlZUhvc3QoVGVzdEhvb2tz
KiB0ZXN0SG9va3MsIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25z
dCBXZWJDb3JlOjpDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncykKICAgICAgICAgOiBDQ0xh
eWVyVHJlZUhvc3QoY2xpZW50LCBzZXR0aW5ncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NUaHJlYWRlZFRlc3QuaAppbmRleCA3NTg4NmVmZmVlMjVhNjdmYjg5NzY1ZjgyMTgx
NTA0MWZlMjdhMTU4Li5iNDM2NjRmODNhNjc5MjJiNTZmNGU3ZTNlYjA4OWI4ZDA1MGFlMzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCkBAIC02
Miw2ICs2Miw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQWRkQW5pbWF0aW9uKCkg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbW1pdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBk
aWRDb21taXRBbmREcmF3RnJhbWUoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlQW5p
bWF0aW9ucygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVBY2NlbGVyYXRlZEFuaW1h
dGlvbnMoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkVXBkYXRlTGF5ZXJzKCkgeyB9CiAgICAg
dmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CiAKICAgICAvLyBJbXBsZW1lbnRh
dGlvbiBvZiBDQ0xheWVyQW5pbWF0aW9uRGVsZWdhdGUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>155057</attachid>
            <date>2012-07-27 14:56:34 -0700</date>
            <delta_ts>2012-07-30 10:19:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87515-20120727175621.patch</filename>
            <type>text/plain</type>
            <size>13155</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjVjODQzNmI1NTkwYWI4
ZjM1NDhmM2I3MmU4NzM2NGE0YTQyYzYwMC4uYzJkZGEzNTk0ODhhMjJmY2VkMTBhNmY4M2FlMzJh
NzczNWY1YjgxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDEyLTA3LTI3ICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmV3
IGFuaW1hdGlvbnMgYXJlIG5vdCBhbHdheXMgc3RhcnRlZCBpbiBDQ0xheWVyVHJlZUhvc3QgYmVm
b3JlIGNvbW1pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTcGxpdHMgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zIGludG8gdHdvIHBpZWNl
cy4KKyAgICAgICAgT25lIHdpbGwgdXBkYXRlIHRoZSBjb21wb3NpdG9yIGRyaXZlbiBhbmltYXRp
b25zLCBhbmQgdGhlCisgICAgICAgIG90aGVyIHdpbGwgdXBkYXRlIHRoZSByZXN0IG9mIHRoZSBh
bmltYXRpb25zLiBUaGlzIHdheSwKKyAgICAgICAgd2UgY2FuIGhhdmUgdGhlIHNpbmdsZSB0aHJl
YWQgcHJveHkgdXBkYXRlIGp1c3QgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgZHJpdmVuIGFuaW1h
dGlvbnMgYmVmb3JlIGEgY29tbWl0LCBndWFyYW50ZWVpbmcgYWNjdXJhdGUKKyAgICAgICAgcG9z
aXRpb25zIG9mIHRoZSBsYXllcnMuCisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ1NpbmdsZVRocmVh
ZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzLnJ1blNpbmdsZVRocmVhZGVk
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0Ojp1cGRhdGVBbmltYXRp
b25zKTogUmVtb3ZlIGNvZGUgdGhhdCB1cGRhdGVzIGNvbXBvc2l0b3IgZHJpdmVuIGFuaW1hdGlv
bnMuCisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUFjY2VsZXJhdGVk
QW5pbWF0aW9ucyk6IE1vdmUgdGhlIHJlbW92ZWQgY29kZSBoZXJlLgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Lmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0QW5kQ29tcG9zaXRlKTogVXBkYXRlIHRo
ZSBjb21wb3NpdG9yIGRyaXZlbiBhbmltYXRpb25zIGJlZm9yZSBjb21taXR0aW5nLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVnaW5GcmFtZSk6IFdlIG5vdyBoYXZlIHRv
IGV4cGxpY2l0bHkgdXBkYXRlIGJvdGggdGhlIGNvbXBvc2l0b3IgZHJpdmVuIGFuZCBvdGhlciBh
bmltYXRpb25zIGluIHR3byBjYWxscy4KKwogMjAxMi0wNy0yNyAgVGhpYWdvIE1hcmNvcyBQLiBT
YW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVsLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIx
MjM4NTYpOiBCcmVha3MgdGhlIGJ1aWxkIHdoZW4gZGlzYWJsaW5nIGluc3BlY3RvcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA1ZTg1ZWIyMTdkOThiYmQxYjFiNDc3OWJhNzQ4MWFkYjcx
YjA1MDEwLi5hZWQzZWRlOTRkZjk4Yzg4MWQyN2ZmYTc5N2RhMzJjYWFkZjgzODYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTA3LTI3ICBJYW4gVm9s
bGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTmV3IGFu
aW1hdGlvbnMgYXJlIG5vdCBhbHdheXMgc3RhcnRlZCBpbiBDQ0xheWVyVHJlZUhvc3QgYmVmb3Jl
IGNvbW1pdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
ODc1MTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBT
cGxpdHMgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zIGludG8gdHdvIHBpZWNlcy4K
KyAgICAgICAgT25lIHdpbGwgdXBkYXRlIHRoZSBjb21wb3NpdG9yIGRyaXZlbiBhbmltYXRpb25z
LCBhbmQgdGhlCisgICAgICAgIG90aGVyIHdpbGwgdXBkYXRlIHRoZSByZXN0IG9mIHRoZSBhbmlt
YXRpb25zLiBUaGlzIHdheSwKKyAgICAgICAgd2UgY2FuIGhhdmUgdGhlIHNpbmdsZSB0aHJlYWQg
cHJveHkgdXBkYXRlIGp1c3QgdGhlIGNvbXBvc2l0b3IKKyAgICAgICAgZHJpdmVuIGFuaW1hdGlv
bnMgYmVmb3JlIGEgY29tbWl0LCBndWFyYW50ZWVpbmcgYWNjdXJhdGUKKyAgICAgICAgcG9zaXRp
b25zIG9mIHRoZSBsYXllcnMuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0
ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoQ0NTaW5n
bGVUaHJlYWRQcm94eVRlc3RVcGRhdGVzQW5pbWF0aW9uc0JlZm9yZUxheWVycyk6CisgICAgICAg
IChDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzOjpD
Q1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzKToKKyAg
ICAgICAgKFRFU1RfRik6CisgICAgICAgICogdGVzdHMvQ0NUaHJlYWRlZFRlc3QuY3BwOgorICAg
ICAgICAqIHRlc3RzL0NDVGhyZWFkZWRUZXN0Lmg6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVz
dEhvb2tzOjpkaWRVcGRhdGVBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0
SG9va3M6OmRpZFVwZGF0ZUFjY2VsZXJhdGVkQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJLaXRU
ZXN0czo6VGVzdEhvb2tzOjpkaWRVcGRhdGVMYXllcnMpOgorCiAyMDEyLTA3LTI3ICBQZXRlciBC
ZXZlcmxvbyAgPHBldGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLiAgUm9s
bGVkIERFUFMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRleCAxYzgyNTMxNzM1
MGU4ZjQ0ZTk2NTYxYjgwNGNhZDM5ZWU2YzBmZWQ3Li4yYmEzN2JhMjlmODNhYzliYjJhOTQ1YTFm
OWZiMTIxMmY5OTQ3MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTIw
NiwxMiArMjA2LDE2IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSkKIHsKICAgICBtX2FuaW1hdGluZyA9IHRydWU7
CiAgICAgbV9jbGllbnQtPnVwZGF0ZUFuaW1hdGlvbnMobW9ub3RvbmljRnJhbWVCZWdpblRpbWUp
OwotICAgIGFuaW1hdGVMYXllcnMobW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOwogICAgIG1fYW5p
bWF0aW5nID0gZmFsc2U7CiAKICAgICBtX3JlbmRlcmluZ1N0YXRzLm51bUFuaW1hdGlvbkZyYW1l
cysrOwogfQogCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQWNjZWxlcmF0ZWRBbmltYXRp
b25zKGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2luVGltZSkKK3sKKyAgICBhbmltYXRlTGF5ZXJz
KG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKK30KKwogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6Omxh
eW91dCgpCiB7CiAgICAgbV9jbGllbnQtPmxheW91dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuaAppbmRleCA4YTIyOGYxYTI4YmRkOWU0ZGZjMTBmYzJmYjVhOGJiMTcwMzUwNzMwLi4yMjkw
ZGUzNGQ2YmUxZDFjN2M3OWEyMmYxM2IzNTU4ZDYxZTY4Njk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuaApAQCAtMTY3LDcgKzE2Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBDQ0xheWVyVHJl
ZUhvc3QgaW50ZXJmYWNlIHRvIENDUHJveHkuCiAgICAgdm9pZCB3aWxsQmVnaW5GcmFtZSgpIHsg
bV9jbGllbnQtPndpbGxCZWdpbkZyYW1lKCk7IH0KICAgICB2b2lkIGRpZEJlZ2luRnJhbWUoKSB7
IG1fY2xpZW50LT5kaWRCZWdpbkZyYW1lKCk7IH0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMo
ZG91YmxlIG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
QW5pbWF0aW9ucyhkb3VibGUgbW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVBY2NlbGVyYXRlZEFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY0ZyYW1lQmVn
aW5UaW1lKTsKICAgICB2b2lkIGxheW91dCgpOwogICAgIHZvaWQgYmVnaW5Db21taXRPbkltcGxU
aHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopOwogICAgIHZvaWQgZmluaXNoQ29tbWl0T25JbXBs
VGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKQEAgLTE4OCw3ICsxODksNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGFjcXVpcmVMYXllclRleHR1cmVzKCk7CiAgICAgLy8gUmV0dXJu
cyBmYWxzZSBpZiB3ZSBzaG91bGQgYWJvcnQgdGhpcyBmcmFtZSBkdWUgdG8gaW5pdGlhbGl6YXRp
b24gZmFpbHVyZS4KICAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVySWZOZWVkZWQoKTsK
LSAgICB2b2lkIHVwZGF0ZUxheWVycyhDQ1RleHR1cmVVcGRhdGVyJiwgc2l6ZV90IGNvbnRlbnRz
TWVtb3J5TGltaXRCeXRlcyk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxheWVycyhDQ1RleHR1
cmVVcGRhdGVyJiwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcyk7CiAKICAgICBDQ0xh
eWVyVHJlZUhvc3RDbGllbnQqIGNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50OyB9CiAKQEAgLTI4
NSw3ICsyODYsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJv
bWl1bSosIENDVGV4dHVyZVVwZGF0ZXImKTsKIAotICAgIHZvaWQgcHJpb3JpdGl6ZVRleHR1cmVz
KGNvbnN0IExheWVyTGlzdCYsIENDT3ZlcmRyYXdNZXRyaWNzJik7IAorICAgIHZvaWQgcHJpb3Jp
dGl6ZVRleHR1cmVzKGNvbnN0IExheWVyTGlzdCYsIENDT3ZlcmRyYXdNZXRyaWNzJik7CiAgICAg
dm9pZCBzZXRQcmlvcml0aWVzRm9yU3VyZmFjZXMoc2l6ZV90IHN1cmZhY2VNZW1vcnlCeXRlcyk7
CiAgICAgdm9pZCBzZXRQcmlvcml0aWVzRm9yTGF5ZXJzKGNvbnN0IExheWVyTGlzdCYpOwogICAg
IHNpemVfdCBjYWxjdWxhdGVNZW1vcnlGb3JSZW5kZXJTdXJmYWNlcyhjb25zdCBMYXllckxpc3Qm
IHVwZGF0ZUxpc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRl
eCAyNmIwYTcxODY2MDIxYjY5MjdkNzA3MTYwNjNlYzg2MTIyZWUwM2U4Li4xZmRjMjk5NDc3N2Uy
MmNkMGNkMTY0ZDY0MjZiOTI2MDQyNjQ1NzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRo
cmVhZFByb3h5LmNwcApAQCAtMjk1LDEzICsyOTUsMTQgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFBy
b3h5Ojpjb21taXRBbmRDb21wb3NpdGUoKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5U
aHJlYWQoKSk7CiAKLQogICAgIGlmICghbV9sYXllclRyZWVIb3N0LT5pbml0aWFsaXplTGF5ZXJS
ZW5kZXJlcklmTmVlZGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2xh
eWVyVHJlZUhvc3RJbXBsLT5jb250ZW50c1RleHR1cmVzV2VyZVB1cmdlZFNpbmNlTGFzdENvbW1p
dCgpKQogICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmV2aWN0QWxsQ29udGVudFRleHR1cmVzKCk7
CiAKKyAgICBtX2xheWVyVHJlZUhvc3QtPnVwZGF0ZUFjY2VsZXJhdGVkQW5pbWF0aW9ucyhtb25v
dG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CisKICAgICBDQ1RleHR1cmVVcGRhdGVyIHVwZGF0
ZXI7CiAgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVMYXllcnModXBkYXRlciwgbV9sYXllclRy
ZWVIb3N0SW1wbC0+bWVtb3J5QWxsb2NhdGlvbkxpbWl0Qnl0ZXMoKSk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAKaW5kZXggOWE0NTVmZmIwMmFmZTc2OTc4NTk1Y2IxZWRiYTQ1Mzk1NGE0
ODNjOC4uNjc3MTYwNWY3MzVkODQyNjU0NDU0ZTVmZjA1ZThmNGVjMTc1N2QwNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTUwNiw2ICs1MDYsNyBAQCB2b2lkIENDVGhyZWFkUHJv
eHk6OmJlZ2luRnJhbWUoKQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+d2lsbEJlZ2luRnJhbWUoKTsK
IAogICAgIG1fbGF5ZXJUcmVlSG9zdC0+dXBkYXRlQW5pbWF0aW9ucyhyZXF1ZXN0LT5tb25vdG9u
aWNGcmFtZUJlZ2luVGltZSk7CisgICAgbV9sYXllclRyZWVIb3N0LT51cGRhdGVBY2NlbGVyYXRl
ZEFuaW1hdGlvbnMocmVxdWVzdC0+bW9ub3RvbmljRnJhbWVCZWdpblRpbWUpOwogICAgIG1fbGF5
ZXJUcmVlSG9zdC0+bGF5b3V0KCk7CiAKICAgICAvLyBDbGVhciB0aGUgY29tbWl0IGZsYWcgYWZ0
ZXIgdXBkYXRpbmcgYW5pbWF0aW9ucyBhbmQgbGF5b3V0IGhlcmUgLS0tIG9iamVjdHMgdGhhdCBv
bmx5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBiNTA3MTg5ZGI4MzMwMjVjMmYw
MzQ4NGQzNmI0NDUyZmE4ZWRjMjc1Li5hNzc1NjUwYTU5OWUwYTA3MjUxYTcyNmYzZGUyMjU5Yzc3
YTMxZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTgzLDYgKzgzLDcgQEAK
ICAgICAgICAgICAgICd0ZXN0cy9DQ1NjaGVkdWxlclRlc3RDb21tb24uaCcsCiAgICAgICAgICAg
ICAndGVzdHMvQ0NTY2hlZHVsZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTY29w
ZWRUZXh0dXJlVGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJv
eHlUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDVGVzdENvbW1vbi5oJywKICAgICAgICAgICAg
ICd0ZXN0cy9DQ1RleHR1cmVVcGRhdGVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5VGVzdC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDU2luZ2xlVGhyZWFkUHJveHlUZXN0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4wNjMyZGRlYWM2YTU2OGYyYWZmYThjMDBkMjM0YWEwYjcwN2NlNjNhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1NpbmdsZVRocmVhZFByb3h5
VGVzdC5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oIgorCisjaW5jbHVkZSAi
Q0NUaHJlYWRlZFRlc3QuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUaHJlYWQuaCIKKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdFRlc3RzOworCitjbGFzcyBDQ1NpbmdsZVRocmVhZFByb3h5VGVz
dFVwZGF0ZXNBbmltYXRpb25zQmVmb3JlTGF5ZXJzIDogcHVibGljIENDVGhyZWFkZWRUZXN0IHsK
K3B1YmxpYzoKKyAgICBDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNBbmltYXRpb25zQmVm
b3JlTGF5ZXJzKCkKKyAgICAgICAgOiBtX2FkZGVkQW5pbWF0aW9uKGZhbHNlKQorICAgICAgICAs
IG1fdXBkYXRlZExheWVyc0FmdGVyQWRkaW5nQW5pbWF0aW9uKGZhbHNlKQorICAgIHsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAg
IHBvc3RBZGRBbmltYXRpb25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgZGlkVXBkYXRlTGF5ZXJzKCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGlmIChtX2FkZGVk
QW5pbWF0aW9uKQorICAgICAgICAgICAgbV91cGRhdGVkTGF5ZXJzQWZ0ZXJBZGRpbmdBbmltYXRp
b24gPSB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVBY2NlbGVyYXRl
ZEFuaW1hdGlvbnMoKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKG1fdXBk
YXRlZExheWVyc0FmdGVyQWRkaW5nQW5pbWF0aW9uKTsKKyAgICAgICAgZW5kVGVzdCgpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRBZGRBbmltYXRpb24oKSBPVkVSUklERQorICAgIHsK
KyAgICAgICAgbV9hZGRlZEFuaW1hdGlvbiA9IHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGFmdGVyVGVzdCgpIE9WRVJSSURFCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1fYWRkZWRBbmltYXRpb247CisgICAgYm9vbCBtX3VwZGF0ZWRMYXllcnNBZnRlckFkZGlu
Z0FuaW1hdGlvbjsKK307CisKK1RFU1RfRihDQ1NpbmdsZVRocmVhZFByb3h5VGVzdFVwZGF0ZXNB
bmltYXRpb25zQmVmb3JlTGF5ZXJzLCBydW5TaW5nbGVUaHJlYWQpCit7CisgICAgcnVuVGVzdChm
YWxzZSk7Cit9CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NU
aHJlYWRlZFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVk
VGVzdC5jcHAKaW5kZXggMmUyYzFhMDZmNGIwZmY1YzBjZWYxZDNkNTI3OWVkODI2ZTljOWU4ZC4u
NDBkMmM0M2EyODBjZDYwYzYwOTYxYTBiYzVkMmM1ZGYyYTA1ZDE3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5jcHAKQEAgLTE4NSw2ICsxODUs
MjQgQEAgcHVibGljOgogICAgICAgICBtX3Rlc3RIb29rcy0+ZGlkQWRkQW5pbWF0aW9uKCk7CiAg
ICAgfQogCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25p
Y0ZyYW1lQmVnaW5UaW1lKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVBbmltYXRpb25zKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV90
ZXN0SG9va3MtPmRpZFVwZGF0ZUFuaW1hdGlvbnMoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlQWNjZWxlcmF0ZWRBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNGcmFtZUJlZ2lu
VGltZSkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQWNj
ZWxlcmF0ZWRBbmltYXRpb25zKG1vbm90b25pY0ZyYW1lQmVnaW5UaW1lKTsKKyAgICAgICAgbV90
ZXN0SG9va3MtPmRpZFVwZGF0ZUFjY2VsZXJhdGVkQW5pbWF0aW9ucygpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVMYXllcnMoV2ViQ29yZTo6Q0NUZXh0dXJlVXBkYXRlciYgdXBk
YXRlciwgc2l6ZV90IGNvbnRlbnRzTWVtb3J5TGltaXRCeXRlcykgT1ZFUlJJREUKKyAgICB7Cisg
ICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKHVwZGF0ZXIsIGNvbnRlbnRzTWVt
b3J5TGltaXRCeXRlcyk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5kaWRVcGRhdGVMYXllcnMoKTsK
KyAgICB9CisKIHByaXZhdGU6CiAgICAgTW9ja0xheWVyVHJlZUhvc3QoVGVzdEhvb2tzKiB0ZXN0
SG9va3MsIFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENsaWVudCogY2xpZW50LCBjb25zdCBXZWJD
b3JlOjpDQ0xheWVyVHJlZVNldHRpbmdzJiBzZXR0aW5ncykKICAgICAgICAgOiBDQ0xheWVyVHJl
ZUhvc3QoY2xpZW50LCBzZXR0aW5ncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NUaHJlYWRlZFRlc3QuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NUaHJlYWRlZFRlc3QuaAppbmRleCA3NTg4NmVmZmVlMjVhNjdmYjg5NzY1ZjgyMTgxNTA0MWZl
MjdhMTU4Li44YTk3NjAwMDViOTBiMGNkZTVjMjBlMDUxY2IzYTc0ZmU4MzdkNDE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGhyZWFkZWRUZXN0LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1RocmVhZGVkVGVzdC5oCkBAIC02Myw2ICs2
Myw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0KCkgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0ZSgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVBbmltYXRp
b25zKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFVwZGF0ZUFjY2VsZXJhdGVkQW5pbWF0aW9u
cygpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRVcGRhdGVMYXllcnMoKSB7IH0KIAogICAgIC8v
IEltcGxlbWVudGF0aW9uIG9mIENDTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZQogICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1lKSB7IH0K
</data>
<flag name="review"
          id="164454"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>