<?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>87873</bug_id>
          
          <creation_ts>2012-05-30 10:28:59 -0700</creation_ts>
          <short_desc>[chromium] Single thread proxy should not tick animations unless the layer renderer has been initialized</short_desc>
          <delta_ts>2012-05-31 16:48:57 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>jamesr</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>637390</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-05-30 10:28:59 -0700</bug_when>
    <thetext>Currently, in CCSingleThreadProxy::initializeLayerRenderer(), the reference to m_contextBeforeInitialization is released and passed to m_layerTreeHostImpl-&gt;initializeLayerRenderer(...), but if that call fails, then m_contextBeforeInitialization is null, so subsequent calls to CCSingleThreadProxy::initializeLayerRenderer() will cause a crash. It is reasonable to retry initialization, because it can fail due to memory issues that may eventually be resolved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637401</commentid>
    <comment_count>1</comment_count>
      <attachid>144862</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-30 10:35:21 -0700</bug_when>
    <thetext>Created attachment 144862
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637433</commentid>
    <comment_count>2</comment_count>
      <attachid>144862</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 11:05:18 -0700</bug_when>
    <thetext>Comment on attachment 144862
Patch

If initializeLayerRenderer() fails then we should stop using the compositor completely and never hit the function again - initialization errors are fatal and permanent until the embedder attempts to instantiate compositing again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637449</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 11:12:43 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Currently, in CCSingleThreadProxy::initializeLayerRenderer(), the reference to m_contextBeforeInitialization is released and passed to m_layerTreeHostImpl-&gt;initializeLayerRenderer(...), but if that call fails, then m_contextBeforeInitialization is null, so subsequent calls to CCSingleThreadProxy::initializeLayerRenderer() will cause a crash. It is reasonable to retry initialization, because it can fail due to memory issues that may eventually be resolved.

The embedder should decide to retry by passing in a new context, the compositor shouldn&apos;t attempt to retry with the existing context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637451</commentid>
    <comment_count>4</comment_count>
      <attachid>144875</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-30 11:15:55 -0700</bug_when>
    <thetext>Created attachment 144875
Patch

(In reply to comment #3)
&gt; (In reply to comment #0)
&gt; &gt; Currently, in CCSingleThreadProxy::initializeLayerRenderer(), the reference to m_contextBeforeInitialization is released and passed to m_layerTreeHostImpl-&gt;initializeLayerRenderer(...), but if that call fails, then m_contextBeforeInitialization is null, so subsequent calls to CCSingleThreadProxy::initializeLayerRenderer() will cause a crash. It is reasonable to retry initialization, because it can fail due to memory issues that may eventually be resolved.
&gt;
&gt; The embedder should decide to retry by passing in a new context, the compositor shouldn&apos;t attempt to retry with the existing context.
Sg. If we fail with the first context. We won&apos;t try with it again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637460</commentid>
    <comment_count>5</comment_count>
      <attachid>144875</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 11:21:12 -0700</bug_when>
    <thetext>Comment on attachment 144875
Patch

This still feels fishy - nobody should be calling initializeLayerRenderer() if we returned false.  Where&apos;s this call coming from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637461</commentid>
    <comment_count>6</comment_count>
      <attachid>144875</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 11:21:46 -0700</bug_when>
    <thetext>Comment on attachment 144875
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:164
&gt;      ASSERT(m_contextBeforeInitialization);
&gt;      {
&gt;          DebugScopedSetImplThread impl;
&gt; -        bool ok = m_layerTreeHostImpl-&gt;initializeLayerRenderer(m_contextBeforeInitialization.release(), UnthrottledUploader);
&gt; +        bool ok = m_contextBeforeInitialization &amp;&amp; m_layerTreeHostImpl-&gt;initializeLayerRenderer(m_contextBeforeInitialization.release(), UnthrottledUploader);

Clearly somebody is confused about the expectations here - either the ASSERT() is wrong or the code is wrong</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637504</commentid>
    <comment_count>7</comment_count>
      <attachid>144886</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-30 11:53:18 -0700</bug_when>
    <thetext>Created attachment 144886
Patch

(In reply to comment #5)
&gt; (From update of attachment 144875 [details])
&gt; This still feels fishy - nobody should be calling initializeLayerRenderer() if we returned false.  Where&apos;s this call coming from?
Someone started the animation timer before the layer renderer was initialized, and when it fires we land in this code.
If the CCSingleThreadProxy is destroyed, then this timer is stopped, but it doesn&apos;t seems like that&apos;s happening, so I&apos;ve
put guard code in the timer callback to ensure that we only tick if we&apos;ve got an initialized layer renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637513</commentid>
    <comment_count>8</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-05-30 12:06:20 -0700</bug_when>
    <thetext>To bikeshed, this does feel like the wrong solution to me because ticking calls updateLayers which does in fact do the initialization. We could ensure that initialization can&apos;t be attempted twice, if that&apos;s the desired behaviour, in CCLTH::updateLayers, by having it early-out instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637562</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 12:51:35 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=144886) [details]
&gt; Patch
&gt; 
&gt; (In reply to comment #5)
&gt; &gt; (From update of attachment 144875 [details] [details])
&gt; &gt; This still feels fishy - nobody should be calling initializeLayerRenderer() if we returned false.  Where&apos;s this call coming from?
&gt; Someone started the animation timer before the layer renderer was initialized, and when it fires we land in this code.
&gt; If the CCSingleThreadProxy is destroyed, then this timer is stopped, but it doesn&apos;t seems like that&apos;s happening

I&apos;d like to understand why this isn&apos;t happening.  Can we repro?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>637915</commentid>
    <comment_count>10</comment_count>
      <attachid>144886</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-30 18:48:36 -0700</bug_when>
    <thetext>Comment on attachment 144886
Patch

R- until we have a better understanding of why the timer is still alive in this case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638320</commentid>
    <comment_count>11</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-05-31 06:22:20 -0700</bug_when>
    <thetext>Here&apos;s the chain of events:

1. An animation is added. This can happen before we attempt to initialize the layer renderer, and causes a timer to be set to schedule a composite.

2. We get around to initializing the layer renderer. More specifically:

CCLayerTreeHost::initializeLayerRenderer()
  - calls CCSingleThreadProxy::initializeLayerRenderer() 
  - when it fails, calls 
    -&gt; WebLayerTreeViewClientAdapter::didRecreateContext(false)
    -&gt; WebViewImpl::didRebindGraphicsContext(false)
    -&gt; WebViewImpl::setIsAcceleratedCompositingActive(false)

      *** NOTE: this does not cause WebViewImpl::m_layerTreeView to be deleted, nor, I think, should it.
          This means that the proxy is not destroyed nor is its timer stopped.

    -&gt; RenderWidget::didDeactivateCompositor()
    -&gt; (via IPC)RenderWidgetHostImpl::OnMsgDidActivateAcceleratedCompositing(false)
    -&gt; RenderWidgetHostViewAura::OnAcceleratedCompositingStateChange()
    -&gt; ui::Layer::set_scale_content(false)

3. The timer fires and indirectly tries to reinitialize the renderer (by trying to composite). It should not do this, a composite should only be attempted if we have a layer renderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638428</commentid>
    <comment_count>12</comment_count>
      <attachid>145096</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 08:12:17 -0700</bug_when>
    <thetext>Created attachment 145096
Patch

CCLayerTreeHost::finishAllRendering is called iff we are shutting down
accelerated compositing. If we are shutting down accelerated compositing, it
makes sense to stop CCSingleThreadProxy&apos;s timer here so it never fires after
we&apos;ve switched to software mode. This required a minor change to
finishAllRendering. Previously, CCLTH::finishAllRendering bailed early if we
hadn&apos;t initialized the layer renderer (which foils the plan to stop the timer).
Now, the proxy&apos;s know that this function may be called without an initialized
layer renderer and have the appropriate checks.

I&apos;ve added a unit test to ensure that we do indeed stop the timer in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638497</commentid>
    <comment_count>13</comment_count>
      <attachid>145103</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 09:26:21 -0700</bug_when>
    <thetext>Created attachment 145103
Patch

Sorry for the spam. Removed some code that would have surely been contentious.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638548</commentid>
    <comment_count>14</comment_count>
      <attachid>145103</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-31 10:29:52 -0700</bug_when>
    <thetext>Comment on attachment 145103
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:97
&gt; +    virtual void didStopAnimationTimer() { }

This is an odd part of the API, especially since the notion of animation timer is CCSingleThreadProxy specific.  Is this just a test hook?  Why not simply have a test that calls finishAllRendering and then ASSERT()s that the timer doesn&apos;t fire?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:126
&gt; +    virtual bool initializeLayerRenderer(PassRefPtr&lt;GraphicsContext3D&gt;, TextureUploaderOption);

Also a weird test hook - we can make initialization fail by passing a GraphicsContext3D in that&apos;s not useful (say, make the first makeContextCurrent() call return false) - that&apos;s a much more realistic test and we do it in other places

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:133
&gt; +        // We&apos;re done rendering and should not process any future animation events.

I&apos;d much prefer that we cancel the timer when initialization fails.  The fact that WebViewImpl calls finishAllRendering() is a strange historical artifact of how shutdown used to work and isn&apos;t really a concern of the compositor - in fact I&apos;ve been planning to delete that call.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638608</commentid>
    <comment_count>15</comment_count>
      <attachid>145124</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 11:47:47 -0700</bug_when>
    <thetext>Created attachment 145124
Patch

 (In reply to comment #14)
&gt; (From update of attachment 145103 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145103&amp;action=review
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:97
&gt; &gt; +    virtual void didStopAnimationTimer() { }
&gt;
&gt; This is an odd part of the API, especially since the notion of animation timer is CCSingleThreadProxy specific.  Is this just a test hook?  Why not simply have a test that calls finishAllRendering and then ASSERT()s that the timer doesn&apos;t fire?
Done.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:126
&gt; &gt; +    virtual bool initializeLayerRenderer(PassRefPtr&lt;GraphicsContext3D&gt;, TextureUploaderOption);
&gt;
&gt; Also a weird test hook - we can make initialization fail by passing a GraphicsContext3D in that&apos;s not useful (say, make the first makeContextCurrent() call return false) - that&apos;s a much more realistic test and we do it in other places
Done.
&gt;
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp:133
&gt; &gt; +        // We&apos;re done rendering and should not process any future animation events.
&gt;
&gt; I&apos;d much prefer that we cancel the timer when initialization fails.  The fact that WebViewImpl calls finishAllRendering() is a strange historical artifact of how shutdown used to work and isn&apos;t really a concern of the compositor - in fact I&apos;ve been planning to delete that call.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638644</commentid>
    <comment_count>16</comment_count>
      <attachid>145124</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-31 12:34:48 -0700</bug_when>
    <thetext>Comment on attachment 145124
Patch

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

Looks good

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1474
&gt; +        m_layerTreeHost-&gt;finishAllRendering();

We don&apos;t need this call any more, do we?

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1475
&gt; +        endTestAfterDelay(CCSingleThreadProxy::animationTimerDelay() * 1000);

I think it&apos;s worth having a comment here explaining why this value is chosen (since we&apos;re setting the timer against the animation timer).  This will round down since it&apos;s truncating from a double to millis - might be safer to explicitly ceil() here so if the timer implementation does something else we can be sure we don&apos;t run before it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638664</commentid>
    <comment_count>17</comment_count>
      <attachid>145143</attachid>
    <who name="">vollick</who>
    <bug_when>2012-05-31 13:17:15 -0700</bug_when>
    <thetext>Created attachment 145143
Patch

(In reply to comment #16)
&gt; (From update of attachment 145124 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145124&amp;action=review
&gt;
&gt; Looks good
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1474
&gt; &gt; +        m_layerTreeHost-&gt;finishAllRendering();
&gt;
&gt; We don&apos;t need this call any more, do we?
Good point. Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostTest.cpp:1475
&gt; &gt; +        endTestAfterDelay(CCSingleThreadProxy::animationTimerDelay() * 1000);
&gt;
&gt; I think it&apos;s worth having a comment here explaining why this value is chosen (since we&apos;re setting the timer against the animation timer).  This will round down since it&apos;s truncating from a double to millis - might be safer to explicitly ceil() here so if the timer implementation does something else we can be sure we don&apos;t run before it.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638812</commentid>
    <comment_count>18</comment_count>
      <attachid>145143</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 16:48:47 -0700</bug_when>
    <thetext>Comment on attachment 145143
Patch

Clearing flags on attachment: 145143

Committed r119173: &lt;http://trac.webkit.org/changeset/119173&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638813</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-31 16:48:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144862</attachid>
            <date>2012-05-30 10:35:21 -0700</date>
            <delta_ts>2012-05-30 11:15:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120530133520.patch</filename>
            <type>text/plain</type>
            <size>1816</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJi
MjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uNjkwYTQ4MGNkNmY2NTc4MTljMTY1OTU1ZmUzMjAy
ZmFmYTY0MDgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTMwICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHJlbGVhc2UgaXRzIGNvbnRleHQgcHJlbWF0dXJl
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODcz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKwogMjAxMi0wNS0yOSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIG1ha2UgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0
IHVzYWJsZSBieSBub24td2Via2l0IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKaW5kZXggMDExM2MwNzlhNjg0YmFhZGNkZDRlZTQ3MTYyYjNjZmIxOTI4Yjk4Ny4u
MGY4YjA4NDkzMzY0YWI1ZjcyYjI4MmNhYzJmMjQ4ZjY5ZDk3NGQ4NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE2MSw4ICsxNjEsOSBAQCBib29sIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKICAgICBBU1NFUlQobV9j
b250ZXh0QmVmb3JlSW5pdGlhbGl6YXRpb24pOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGJvb2wgb2sgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihtX2NvbnRleHRCZWZvcmVJbml0aWFsaXphdGlvbi5y
ZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgICAgICBib29sIG9rID0gbV9sYXll
clRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIobV9jb250ZXh0QmVmb3JlSW5p
dGlhbGl6YXRpb24uZ2V0KCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOwogICAgICAgICBpZiAob2sp
IHsKKyAgICAgICAgICAgIG1fY29udGV4dEJlZm9yZUluaXRpYWxpemF0aW9uLmNsZWFyKCk7CiAg
ICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAg
ICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVI
b3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpOwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144875</attachid>
            <date>2012-05-30 11:15:55 -0700</date>
            <delta_ts>2012-05-30 11:53:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120530141554.patch</filename>
            <type>text/plain</type>
            <size>1790</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJi
MjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uNjkwYTQ4MGNkNmY2NTc4MTljMTY1OTU1ZmUzMjAy
ZmFmYTY0MDgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTMwICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHJlbGVhc2UgaXRzIGNvbnRleHQgcHJlbWF0dXJl
bHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODcz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVy
KToKKwogMjAxMi0wNS0yOSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbY2hyb21pdW1dIG1ha2UgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb2JqZWN0
IHVzYWJsZSBieSBub24td2Via2l0IGNvZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKaW5kZXggMDExM2MwNzlhNjg0YmFhZGNkZDRlZTQ3MTYyYjNjZmIxOTI4Yjk4Ny4u
NDNkN2EzNDkxOTA1YzA2M2M3YjA4OTE4MDNiN2JkMzdkZDgyOTEwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKCkKICAgICBBU1NFUlQobV9j
b250ZXh0QmVmb3JlSW5pdGlhbGl6YXRpb24pOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIGJvb2wgb2sgPSBtX2xheWVyVHJlZUhvc3RJbXBs
LT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihtX2NvbnRleHRCZWZvcmVJbml0aWFsaXphdGlvbi5y
ZWxlYXNlKCksIFVudGhyb3R0bGVkVXBsb2FkZXIpOworICAgICAgICBib29sIG9rID0gbV9jb250
ZXh0QmVmb3JlSW5pdGlhbGl6YXRpb24gJiYgbV9sYXllclRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXIobV9jb250ZXh0QmVmb3JlSW5pdGlhbGl6YXRpb24ucmVsZWFzZSgpLCBV
bnRocm90dGxlZFVwbG9hZGVyKTsKICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICBtX2xh
eWVyUmVuZGVyZXJJbml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgICBtX2xheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJS
ZW5kZXJlckNhcGFiaWxpdGllcygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144886</attachid>
            <date>2012-05-30 11:53:18 -0700</date>
            <delta_ts>2012-05-31 08:12:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120530145317.patch</filename>
            <type>text/plain</type>
            <size>2236</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJi
MjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uYjc5ZmRlYTk4N2UwYTBhMGJkYzdhMzg0NDk4NGU0
MzgzMTk2NDFjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTMwICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxh
eWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorCiAyMDEyLTA1LTI5ICBTaGF3biBTaW5n
aCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gbWFrZSBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvYmplY3QgdXNhYmxlIGJ5IG5vbi13ZWJraXQgY29kZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCAwMTEzYzA3OWE2ODRi
YWFkY2RkNGVlNDcxNjJiM2NmYjE5MjhiOTg3Li41OWU2MTE1MzIxNmE3NGZjNDM0YWFmMmVhNjNl
OTI2YTk2MDI5YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApA
QCAtNDUsNyArNDUsMTEgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIG9uVGltZXJGaXJl
ZCgpIE9WRVJSSURFCiAgICAgewotICAgICAgICBtX3Byb3h5LT5jb21wb3NpdGVJbW1lZGlhdGVs
eSgpOworICAgICAgICAvLyBUaGlzIHRpbWVyIG1heSBoYXZlIGJlZW4gc3RhcnRlZCBiZWZvcmUg
d2UgdHJpZWQgdG8gaW5pdGlhbGl6ZSB0aGUKKyAgICAgICAgLy8gbGF5ZXIgcmVuZGVyZXIuIFdl
IHNob3VsZCBvbmx5IHN0YXJ0IGEgY29tbWl0IGlmIHRoaXMgaW5pdGlhbGl6YXRpb24KKyAgICAg
ICAgLy8gaGFzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuCisgICAgICAgIGlmIChtX3Byb3h5LT5t
X2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCkKKyAgICAgICAgICAgIG1fcHJveHktPmNvbXBvc2l0
ZUltbWVkaWF0ZWx5KCk7CiAgICAgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5oCmluZGV4IDhmYzg5ODRiZjk0MDBmMmI4M2ZmYjhlMTRhZGMxZTQyMGYyMWRm
ZWMuLmZhZTBlMWNlNmIxNmY5NTczYzQxZGQ5MGE1YjE5MzEyNzU2ODBiNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTgwLDYgKzgwLDggQEAgcHVibGljOgogICAg
IHZvaWQgY29tcG9zaXRlSW1tZWRpYXRlbHkoKTsKIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgQ0NTaW5nbGVUaHJlYWRQcm94eUFuaW1hdGlvblRpbWVyOworCiAgICAgZXhwbGljaXQgQ0NT
aW5nbGVUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKIAogICAgIGJvb2wgY29tbWl0QW5k
Q29tcG9zaXRlKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145096</attachid>
            <date>2012-05-31 08:12:17 -0700</date>
            <delta_ts>2012-05-31 09:26:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120531111216.patch</filename>
            <type>text/plain</type>
            <size>12305</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4ODU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E2ZWRkODBjOTc3NTJi
MjE5MDA5YmI1MmZhYjRjNjYxYjQ0OThiZi4uM2QxM2RkYzg2YTE3MDZiZTQ0MTZhYzI4MjliYjQw
ZmUxMWI3ZDljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxh
eWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRv
IGluaXRpYWxpemUsIHdlIHN0b3AgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nIGlzIGNhbGxlZCBpZmYgd2UgYXJlIHNo
dXR0aW5nIGRvd24KKyAgICAgICAgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuIElmIHdlIGFyZSBz
aHV0dGluZyBkb3duIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBpdAorICAgICAgICBtYWtlcyBz
ZW5zZSB0byBzdG9wIENDU2luZ2xlVGhyZWFkUHJveHkncyB0aW1lciBoZXJlIHNvIGl0IG5ldmVy
IGZpcmVzIGFmdGVyCisgICAgICAgIHdlJ3ZlIHN3aXRjaGVkIHRvIHNvZnR3YXJlIG1vZGUuIFRo
aXMgcmVxdWlyZWQgYSBtaW5vciBjaGFuZ2UgdG8KKyAgICAgICAgZmluaXNoQWxsUmVuZGVyaW5n
LiBQcmV2aW91c2x5LCBDQ0xUSDo6ZmluaXNoQWxsUmVuZGVyaW5nIGJhaWxlZCBlYXJseSBpZiB3
ZQorICAgICAgICBoYWRuJ3QgaW5pdGlhbGl6ZWQgdGhlIGxheWVyIHJlbmRlcmVyICh3aGljaCBm
b2lscyB0aGUgcGxhbiB0byBzdG9wIHRoZSB0aW1lcikuCisgICAgICAgIE5vdywgdGhlIHByb3h5
J3Mga25vdyB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aXRob3V0IGFuIGluaXRp
YWxpemVkCisgICAgICAgIGxheWVyIHJlbmRlcmVyIGFuZCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBj
aGVja3MuCisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uLnJ1blNpbmdsZVRocmVhZAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmg6CisgICAgICAgIChDQ0xheWVyVHJlZUhvc3RJbXBsKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmZpbmlzaEFsbFJlbmRlcmluZyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgor
CiAyMDEyLTA1LTI5ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFtjaHJvbWl1bV0gbWFrZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBvYmplY3QgdXNh
YmxlIGJ5IG5vbi13ZWJraXQgY29kZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA5YjM4
ZDZkYmQyODBjNGY0OWFmNTY5Yzc4ZmM5M2ZlMWY0YTkwZDAzLi40YmQyMTQwOGI3MjI4NzYyN2Qx
NDNjY2E1ZjI0YWNhMTgzMjg2ZDk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQwIEBACisyMDEyLTA1LTMxICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFtjaHJvbWl1bV0gU2luZ2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRp
Y2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxheWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxp
emVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4g
dGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRvIGluaXRpYWxpemUsIHdlIHN0b3AgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcuCisgICAgICAgIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVy
aW5nIGlzIGNhbGxlZCBpZmYgd2UgYXJlIHNodXR0aW5nIGRvd24KKyAgICAgICAgYWNjZWxlcmF0
ZWQgY29tcG9zaXRpbmcuIElmIHdlIGFyZSBzaHV0dGluZyBkb3duIGFjY2VsZXJhdGVkIGNvbXBv
c2l0aW5nLCBpdAorICAgICAgICBtYWtlcyBzZW5zZSB0byBzdG9wIENDU2luZ2xlVGhyZWFkUHJv
eHkncyB0aW1lciBoZXJlIHNvIGl0IG5ldmVyIGZpcmVzIGFmdGVyCisgICAgICAgIHdlJ3ZlIHN3
aXRjaGVkIHRvIHNvZnR3YXJlIG1vZGUuIFRoaXMgcmVxdWlyZWQgYSBtaW5vciBjaGFuZ2UgdG8K
KyAgICAgICAgZmluaXNoQWxsUmVuZGVyaW5nLiBQcmV2aW91c2x5LCBDQ0xUSDo6ZmluaXNoQWxs
UmVuZGVyaW5nIGJhaWxlZCBlYXJseSBpZiB3ZQorICAgICAgICBoYWRuJ3QgaW5pdGlhbGl6ZWQg
dGhlIGxheWVyIHJlbmRlcmVyICh3aGljaCBmb2lscyB0aGUgcGxhbiB0byBzdG9wIHRoZSB0aW1l
cikuCisgICAgICAgIE5vdywgdGhlIHByb3h5J3Mga25vdyB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5
IGJlIGNhbGxlZCB3aXRob3V0IGFuIGluaXRpYWxpemVkCisgICAgICAgIGxheWVyIHJlbmRlcmVy
IGFuZCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBjaGVja3MuCisKKworICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0SG9va3M6OmluaXRpYWxp
emVMYXllclJlbmRlcmVyT25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OlRlc3RIb29rczo6ZGlk
UmVjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdURjo6TW9ja0xheWVyVHJlZUhvc3RJbXBsOjpp
bml0aWFsaXplTGF5ZXJSZW5kZXJlcik6CisgICAgICAgIChNb2NrTGF5ZXJUcmVlSG9zdEltcGwp
OgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpDQ0xheWVyVHJlZUhvc3RUZXN0
KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6ZXhwZWN0VGltZU91dCk6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdDo6cnVuVGVzdCk6CisgICAgICAgIChXVEYpOgorICAgICAgICAoQ0NMYXllclRyZWVI
b3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbik6Cisg
ICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZh
aWxzQWZ0ZXJBZGRBbmltYXRpb246OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJS
ZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpi
ZWdpblRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxh
eWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjphbmltYXRlTGF5ZXJzKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNB
ZnRlckFkZEFuaW1hdGlvbjo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKToKKyAg
ICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFp
bHNBZnRlckFkZEFuaW1hdGlvbjo6ZGlkUmVjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKFdURjo6
Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFu
aW1hdGlvbjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6VEVTVF9GKToKKwogMjAxMi0wNS0y
OSAgQWxlYyBGbGV0dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhl
ZERCOiBBbGlnbiBjb2RlcyBhbmQgbmFtZXMgZm9yIElEQi1zcGVjaWZpYyBhbmQgRE9NLXNwZWNp
ZmljIGVycm9ycy9leGNlcHRpb25zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAppbmRl
eCA5NjM5N2NhNDVjNDIxNjQ5NWFjZmI4YTA3ZTRiNmEwYTE1OTkwMWFjLi4zZjRlNDJhYWU5OTQz
ZTE0MWY1MjUzODUwN2E3MmEyMTkzYjkxZGJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5jcHAKQEAgLTMwOCw4ICszMDgsNiBAQCBib29sIENDTGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRl
QW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJS
ZW5kZXJlckluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47CiAgICAgbV9wcm94eS0+ZmluaXNo
QWxsUmVuZGVyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApp
bmRleCBmOGI3NjMxNDA0ZDdjMjM4MzExN2M1ODZhZmRiZmE0Y2EwYzMyMGIwLi4yMzM0ZmQxZjlj
ODliNzE0YTg4NTFmMWY0YTRjZGY4OWE3YzRlZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0SW1wbC5oCkBAIC0xMjIsNyArMTIyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZmluaXNo
QWxsUmVuZGVyaW5nKCk7CiAgICAgaW50IGZyYW1lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZU51bWJlcjsgfQogCi0gICAgYm9vbCBpbml0aWFsaXplTGF5ZXJSZW5kZXJlcihQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgVGV4dHVyZVVwbG9hZGVyT3B0aW9uKTsKKyAgICB2aXJ0
dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIFRleHR1cmVVcGxvYWRlck9wdGlvbik7CiAgICAgYm9vbCBpc0NvbnRleHRMb3N0KCk7
CiAgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyKCkgeyByZXR1cm4gbV9s
YXllclJlbmRlcmVyLmdldCgpOyB9CiAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxpdGll
cyYgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcAppbmRleCAwMTEzYzA3OWE2ODRiYWFkY2RkNGVlNDcxNjJiM2Nm
YjE5MjhiOTg3Li44ZGQ3MmQ4M2U5OTRhN2I4ZmQ5NzU0NGFlZWZmMjljZDliYzBmNGM2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMTI2LDcgKzEyNiwxMiBA
QCBHcmFwaGljc0NvbnRleHQzRCogQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4dCgpCiAKIHZv
aWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKIHsKKyAgICAvLyBX
ZSdyZSBkb25lIHJlbmRlcmluZyBhbmQgc2hvdWxkIG5vdCBwcm9jZXNzIGFueSBmdXR1cmUgYW5p
bWF0aW9uIGV2ZW50cy4KKyAgICBtX2FuaW1hdGlvblRpbWVyLT5zdG9wKCk7CisKICAgICBBU1NF
UlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOworCisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcklu
aXRpYWxpemVkKQogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7
CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBmYjBhNWMxMGI1N2Y3OTg4MTAzZDIxMzIzOThj
NmExOGNjM2MxNDE5Li43ZTM3ZjJjZjQ1NDBiMGE5M2U3MzY4YzlhZjI2ZGEzMDQxOGU1MmJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMTU5LDYgKzE1OSw5IEBAIEdyYXBoaWNz
Q29udGV4dDNEKiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKIAogdm9pZCBDQ1RocmVhZFByb3h5
OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogeworICAgIGlmICghbV9sYXllclJlbmRlcmVySW5pdGlh
bGl6ZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJl
YWQoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgYWxsIEdMIGRyYXdpbmcgaXMgZmluaXNoZWQgb24g
dGhlIGltcGwgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTI3NWVjODU0MjgxMDk4YzMxZTFiODAzMDYx
YzljY2E0ZGJmNWQ4Yy4uZGI2ZDcxODVlMWQ5YjNmOTA2MjE2OWQ3ZTY5MGQ1ZmMxNTRlYzk4YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9z
dFRlc3QuY3BwCkBAIC03OSwxMSArNzksMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBw
cmVwYXJlVG9EcmF3T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKSB7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJbXBsKiwgZG91
YmxlIG1vbm90b25pY1RpbWUpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFsaXplTGF5ZXJS
ZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgd2lsbEFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCos
IGRvdWJsZSBtb25vdG9uaWNUaW1lKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxB
bmRTY2FsZShjb25zdCBJbnRTaXplJiwgZmxvYXQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVBbmltYXRpb25zKGRvdWJsZSBtb25vdG9uaWNUaW1lKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1
Y2NlZGVkKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVDb250ZXh0KGJvb2wgc3Vj
Y2VlZGVkKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0KCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIGRpZENvbW1pdEFuZERyYXdGcmFtZSgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBzY2hl
ZHVsZUNvbXBvc2l0ZSgpIHsgfQpAQCAtMTI2LDYgKzEyNywxNCBAQCBwdWJsaWM6CiAgICAgICAg
IG1fdGVzdEhvb2tzLT5kcmF3TGF5ZXJzT25DQ1RocmVhZCh0aGlzKTsKICAgICB9CiAKKyAgICB2
aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCwgVGV4dHVyZVVwbG9hZGVyT3B0aW9uIG9wdGlvbikKKyAgICB7Cisg
ICAgICAgIGJvb2wgcmVzdWx0ID0gQ0NMYXllclRyZWVIb3N0SW1wbDo6aW5pdGlhbGl6ZUxheWVy
UmVuZGVyZXIoY29udGV4dCwgb3B0aW9uKTsKKyAgICAgICAgaWYgKCFtX3Rlc3RIb29rcy0+aW5p
dGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKHRoaXMpKQorICAgICAgICAgICAgcmVzdWx0
ID0gZmFsc2U7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCiAgICAgLy8gTWFrZSB0
aGVzZSBwdWJsaWMuCiAgICAgdHlwZWRlZiBWZWN0b3I8Q0NMYXllckltcGwqPiBDQ0xheWVyTGlz
dDsKICAgICB1c2luZyBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OwpAQCAtNDAwLDkgKzQwOSwxMSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAg
ICBDQ0xheWVyVHJlZUhvc3RUZXN0KCkKLSAgICAgICAgOiBtX2JlZ2lubmluZyhmYWxzZSkKKyAg
ICAgICAgOiBtX2R1cmF0aW9uKDUwMDApCisgICAgICAgICwgbV9iZWdpbm5pbmcoZmFsc2UpCiAg
ICAgICAgICwgbV9lbmRXaGVuQmVnaW5SZXR1cm5zKGZhbHNlKQogICAgICAgICAsIG1fdGltZWRP
dXQoZmFsc2UpCisgICAgICAgICwgbV9leHBlY3RUaW1lT3V0KGZhbHNlKQogICAgICAgICAsIG1f
ZmluaXNoZWQoZmFsc2UpCiAgICAgICAgICwgbV9zY2hlZHVsZWQoZmFsc2UpCiAgICAgICAgICwg
bV9zdGFydGVkKGZhbHNlKQpAQCAtNDE4LDYgKzQyOSwxMiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoJkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OmRpc3BhdGNoQ29tcG9zaXRl
LCB0aGlzKTsKICAgICB9CiAKKyAgICB2b2lkIGV4cGVjdFRpbWVPdXQoaW50IGR1cmF0aW9uKQor
ICAgIHsKKyAgICAgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgICAgICBtX2V4cGVjdFRp
bWVPdXQgPSB0cnVlOworICAgIH0KKwogICAgIHN0YXRpYyB2b2lkIG9uRW5kVGVzdCh2b2lkKiBz
ZWxmKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTYxMSw3ICs2
MjgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fYmVnaW5UYXNrID0gbmV3IEJlZ2luVGFzayh0
aGlzKTsKICAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFk
KCktPnBvc3REZWxheWVkVGFzayhtX2JlZ2luVGFzaywgMCk7IC8vIHBvc3REZWxheWVkVGFzayB0
YWtlcyBvd25lcnNoaXAgb2YgdGhlIHRhc2sKICAgICAgICAgbV90aW1lb3V0VGFzayA9IG5ldyBU
aW1lb3V0VGFzayh0aGlzKTsKLSAgICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5j
dXJyZW50VGhyZWFkKCktPnBvc3REZWxheWVkVGFzayhtX3RpbWVvdXRUYXNrLCA1MDAwKTsKKyAg
ICAgICAgV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3RE
ZWxheWVkVGFzayhtX3RpbWVvdXRUYXNrLCBtX2R1cmF0aW9uKTsKICAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPmVudGVyUnVuTG9vcCgpOwogCiAg
ICAgICAgIGlmIChtX2xheWVyVHJlZUhvc3QgJiYgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIo
KSkKQEAgLTYyMyw3ICs2NDAsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgQVNTRVJUX0ZBTFNF
KG1fbGF5ZXJUcmVlSG9zdC5nZXQoKSk7CiAgICAgICAgIG1fY2xpZW50LmNsZWFyKCk7Ci0gICAg
ICAgIGlmIChtX3RpbWVkT3V0KSB7CisgICAgICAgIGlmIChtX3RpbWVkT3V0ICYmICFtX2V4cGVj
dFRpbWVPdXQpIHsKICAgICAgICAgICAgIEZBSUwoKSA8PCAiVGVzdCB0aW1lZCBvdXQiOwogICAg
ICAgICAgICAgV2ViQ29tcG9zaXRvcjo6c2h1dGRvd24oKTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTYzNyw5ICs2NTQsMTEgQEAgcHJvdGVjdGVkOgogICAgIE93blB0cjxDQ0xheWVyVHJlZUhv
c3Q+IG1fbGF5ZXJUcmVlSG9zdDsKIAogcHJpdmF0ZToKKyAgICBpbnQgbV9kdXJhdGlvbjsKICAg
ICBib29sIG1fYmVnaW5uaW5nOwogICAgIGJvb2wgbV9lbmRXaGVuQmVnaW5SZXR1cm5zOwogICAg
IGJvb2wgbV90aW1lZE91dDsKKyAgICBib29sIG1fZXhwZWN0VGltZU91dDsKICAgICBib29sIG1f
ZmluaXNoZWQ7CiAgICAgYm9vbCBtX3NjaGVkdWxlZDsKICAgICBib29sIG1fc3RhcnRlZDsKQEAg
LTEzODksNiArMTQwOCw0NSBAQCBwcml2YXRlOgogCiBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9U
RVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdFN5bmNocm9uaXplQW5pbWF0aW9uU3RhcnRUaW1lcykK
IAorLy8gRW5zdXJlcyB0aGF0IHdlIGRvIG5vdCBhbmltYXRlCitjbGFzcyBDQ0xheWVyVHJlZUhv
c3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uIDogcHVi
bGljIENDTGF5ZXJUcmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRl
c3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24oKQorICAgIHsK
KyAgICAgICAgZXhwZWN0VGltZU91dCgxMDApOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgcG9zdEFkZEFuaW1hdGlvblRvTWFpblRocmVhZCgp
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlTGF5ZXJzKENDTGF5ZXJUcmVlSG9z
dEltcGwqIGxheWVyVHJlZUhvc3RJbXBsLCBkb3VibGUgbW9ub3RvbmljVGltZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBp
bml0aWFsaXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9G
QUxTRShzdWNjZWVkZWQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZpbmlzaEFsbFJlbmRl
cmluZygpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAg
ICB9Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRl
cmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbiwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRl
c3QoZmFsc2UpOworfQorCiAvLyBFbnN1cmVzIHRoYXQgbWFpbiB0aHJlYWQgYW5pbWF0aW9ucyBo
YXZlIHRoZWlyIHN0YXJ0IHRpbWVzIHN5bmNocm9uaXplZCB3aXRoIGltcGwgdGhyZWFkIGFuaW1h
dGlvbnMuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0QW5pbWF0aW9uRmluaXNoZWRFdmVudHMg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145103</attachid>
            <date>2012-05-31 09:26:21 -0700</date>
            <delta_ts>2012-05-31 11:47:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120531122619.patch</filename>
            <type>text/plain</type>
            <size>11346</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjUzYzcwOWM5YTg2YjFi
YmRkZGM5Yzc2ZjQ3ZDY4ZjA2MjJiZWFjMy4uZmJkYzI3ZTNjZTUxYzdiMzM3ZTA4NGUzNjdlNzdm
YjZlNTU4MDVhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxh
eWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRv
IGluaXRpYWxpemUsIHdlIHN0b3AgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuCisgICAgICAgIEND
TGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5nIGlzIGNhbGxlZCBpZmYgd2UgYXJlIHNo
dXR0aW5nIGRvd24KKyAgICAgICAgYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcuIElmIHdlIGFyZSBz
aHV0dGluZyBkb3duIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLCBpdAorICAgICAgICBtYWtlcyBz
ZW5zZSB0byBzdG9wIENDU2luZ2xlVGhyZWFkUHJveHkncyB0aW1lciBoZXJlIHNvIGl0IG5ldmVy
IGZpcmVzIGFmdGVyCisgICAgICAgIHdlJ3ZlIHN3aXRjaGVkIHRvIHNvZnR3YXJlIG1vZGUuIFRo
aXMgcmVxdWlyZWQgYSBtaW5vciBjaGFuZ2UgdG8KKyAgICAgICAgZmluaXNoQWxsUmVuZGVyaW5n
LiBQcmV2aW91c2x5LCBDQ0xUSDo6ZmluaXNoQWxsUmVuZGVyaW5nIGJhaWxlZCBlYXJseSBpZiB3
ZQorICAgICAgICBoYWRuJ3QgaW5pdGlhbGl6ZWQgdGhlIGxheWVyIHJlbmRlcmVyICh3aGljaCBm
b2lscyB0aGUgcGxhbiB0byBzdG9wIHRoZSB0aW1lcikuCisgICAgICAgIE5vdywgdGhlIHByb3h5
J3Mga25vdyB0aGF0IHRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCB3aXRob3V0IGFuIGluaXRp
YWxpemVkCisgICAgICAgIGxheWVyIHJlbmRlcmVyIGFuZCBoYXZlIHRoZSBhcHByb3ByaWF0ZSBj
aGVja3MuCisKKyAgICAgICAgVW5pdCB0ZXN0OiBDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uLnJ1blNpbmdsZVRocmVhZAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5n
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpkaWRTdG9w
QW5pbWF0aW9uVGltZXIpOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJp
bmcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVy
aW5nKToKKwogMjAxMi0wNS0zMSAgQ2hyaXN0b3BoZSBEdW1leiAgPGNocmlzdG9waGUuZHVtZXpA
aW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdIEVuYWJsZSBDU1NfSU1BR0VfU0VUIGZsYWcKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOGYwZDhiNjNhMTFjZWRhY2IzYjVmMmQ3YWRmYzM5
YmQ2ZTAwNWE4Yi4uMTk0MTNiNGE0MWVjY2RhODY5ZTE3YjBjNzFjZjU5MzA0Mzc5MzY2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAxMi0wNS0zMSAgSWFu
IFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIFNp
bmdsZSB0aHJlYWQgcHJveHkgc2hvdWxkIG5vdCB0aWNrIGFuaW1hdGlvbnMgdW5sZXNzIHRoZSBs
YXllciByZW5kZXJlciBoYXMgYmVlbiBpbml0aWFsaXplZAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4NzMKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHRoZSBsYXllciByZW5kZXJlciBmYWlscyB0
byBpbml0aWFsaXplLCB3ZSBzdG9wIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLgorICAgICAgICBD
Q0xheWVyVHJlZUhvc3Q6OmZpbmlzaEFsbFJlbmRlcmluZyBpcyBjYWxsZWQgaWZmIHdlIGFyZSBz
aHV0dGluZyBkb3duCisgICAgICAgIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5nLiBJZiB3ZSBhcmUg
c2h1dHRpbmcgZG93biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZywgaXQKKyAgICAgICAgbWFrZXMg
c2Vuc2UgdG8gc3RvcCBDQ1NpbmdsZVRocmVhZFByb3h5J3MgdGltZXIgaGVyZSBzbyBpdCBuZXZl
ciBmaXJlcyBhZnRlcgorICAgICAgICB3ZSd2ZSBzd2l0Y2hlZCB0byBzb2Z0d2FyZSBtb2RlLiBU
aGlzIHJlcXVpcmVkIGEgbWlub3IgY2hhbmdlIHRvCisgICAgICAgIGZpbmlzaEFsbFJlbmRlcmlu
Zy4gUHJldmlvdXNseSwgQ0NMVEg6OmZpbmlzaEFsbFJlbmRlcmluZyBiYWlsZWQgZWFybHkgaWYg
d2UKKyAgICAgICAgaGFkbid0IGluaXRpYWxpemVkIHRoZSBsYXllciByZW5kZXJlciAod2hpY2gg
Zm9pbHMgdGhlIHBsYW4gdG8gc3RvcCB0aGUgdGltZXIpLgorICAgICAgICBOb3csIHRoZSBwcm94
eSdzIGtub3cgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgd2l0aG91dCBhbiBpbml0
aWFsaXplZAorICAgICAgICBsYXllciByZW5kZXJlciBhbmQgaGF2ZSB0aGUgYXBwcm9wcmlhdGUg
Y2hlY2tzLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHA6CisgICAg
ICAgIChXVEY6OlRlc3RIb29rczo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKToK
KyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjpkaWRTdG9wQW5pbWF0aW9uVGltZXJPbkNDVGhyZWFk
KToKKyAgICAgICAgKFdURjo6VGVzdEhvb2tzOjpkaWRSZWNyZWF0ZUNvbnRleHQpOgorICAgICAg
ICAoV1RGOjpNb2NrTGF5ZXJUcmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToK
KyAgICAgICAgKE1vY2tMYXllclRyZWVIb3N0SW1wbCk6CisgICAgICAgIChXVEY6Ok1vY2tMYXll
clRyZWVIb3N0SW1wbDo6ZGlkU3RvcEFuaW1hdGlvblRpbWVyKToKKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0Fm
dGVyQWRkQW5pbWF0aW9uKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRp
YWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6Q0NMYXllclRyZWVIb3N0
VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbik6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxz
QWZ0ZXJBZGRBbmltYXRpb246OmJlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVl
SG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmFu
aW1hdGVMYXllcnMpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6
ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjppbml0aWFsaXplTGF5ZXJSZW5k
ZXJlck9uQ0NUaHJlYWQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpkaWRSZWNyZWF0ZUNvbnRl
eHQpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVu
ZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpkaWRTdG9wQW5pbWF0aW9uVGltZXJPbkNDVGhy
ZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJl
bmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6YWZ0ZXJUZXN0KToKKyAgICAgICAgKFdURjo6
VEVTVF9GKToKKwogMjAxMi0wNS0zMSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtDaHJvbWl1bV0gQ2Fubm90IGJyaW5n
IEluc3BlY3RvciB0byBmcm9udCB3aGVuIHBhdXNlZCBvbiBicmVha3BvaW50CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCA5NjM5N2NhNDVjNDIxNjQ5NWFjZmI4YTA3ZTRiNmEw
YTE1OTkwMWFjLi4zZjRlNDJhYWU5OTQzZTE0MWY1MjUzODUwN2E3MmEyMTkzYjkxZGJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTMwOCw4ICszMDgsNiBAQCBib29sIEND
TGF5ZXJUcmVlSG9zdDo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJ
bnRSZWN0JiByZWN0KQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZmluaXNoQWxsUmVuZGVyaW5n
KCkKIHsKLSAgICBpZiAoIW1fbGF5ZXJSZW5kZXJlckluaXRpYWxpemVkKQotICAgICAgICByZXR1
cm47CiAgICAgbV9wcm94eS0+ZmluaXNoQWxsUmVuZGVyaW5nKCk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBmOGI3NjMxNDA0ZDdjMjM4MzExN2M1ODZhZmRi
ZmE0Y2EwYzMyMGIwLi4yOGFkYjVhMTI2ZDY2MjA2MzlmMDA2MjFkM2ZjY2Y4MmQ0NTNjZTA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC05NCw2ICs5NCw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0Q29tcGxldGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShkb3VibGUgbW9ub3Rv
bmljVGltZSwgZG91YmxlIHdhbGxDbG9ja1RpbWUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9w
QW5pbWF0aW9uVGltZXIoKSB7IH0KIAogICAgIC8vIFJldHVybnMgZmFsc2UgaWYgcHJvYmxlbXMg
b2NjdXJlZCBwcmVwYXJpbmcgdGhlIGZyYW1lLCBhbmQgd2Ugc2hvdWxkIHRyeQogICAgIC8vIHRv
IGF2b2lkIGRpc3BsYXlpbmcgdGhlIGZyYW1lLiBJZiBwcmVwYXJlVG9EcmF3IGlzIGNhbGxlZCwK
QEAgLTEyMiw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaW5pc2hBbGxSZW5kZXJpbmco
KTsKICAgICBpbnQgZnJhbWVOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lTnVtYmVyOyB9
CiAKLSAgICBib29sIGluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+LCBUZXh0dXJlVXBsb2FkZXJPcHRpb24pOworICAgIHZpcnR1YWwgYm9vbCBpbml0
aWFsaXplTGF5ZXJSZW5kZXJlcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgVGV4dHVy
ZVVwbG9hZGVyT3B0aW9uKTsKICAgICBib29sIGlzQ29udGV4dExvc3QoKTsKICAgICBMYXllclJl
bmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIoKSB7IHJldHVybiBtX2xheWVyUmVuZGVyZXIu
Z2V0KCk7IH0KICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzJiBsYXllclJlbmRl
cmVyQ2FwYWJpbGl0aWVzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCmluZGV4IDAxMTNjMDc5YTY4NGJhYWRjZGQ0ZWU0NzE2MmIzY2ZiMTkyOGI5ODcuLmU5
NTdlMGU1ZTZjZWE0NTlmNTRjNmRmNGFiNDEwYjYyN2M4ZjUxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwCkBAIC0xMjksNyArMTI5LDEzIEBAIHZvaWQgQ0NTaW5n
bGVUaHJlYWRQcm94eTo6ZmluaXNoQWxsUmVuZGVyaW5nKCkKICAgICBBU1NFUlQoQ0NQcm94eTo6
aXNNYWluVGhyZWFkKCkpOwogICAgIHsKICAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygp
OworCisgICAgICAgIC8vIFdlJ3JlIGRvbmUgcmVuZGVyaW5nIGFuZCBzaG91bGQgbm90IHByb2Nl
c3MgYW55IGZ1dHVyZSBhbmltYXRpb24gZXZlbnRzLgorICAgICAgICBtX2FuaW1hdGlvblRpbWVy
LT5zdG9wKCk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmRpZFN0b3BBbmltYXRpb25U
aW1lcigpOworCisgICAgICAgIGlmIChtX2xheWVyUmVuZGVyZXJJbml0aWFsaXplZCkKKyAgICAg
ICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmZpbmlzaEFsbFJlbmRlcmluZygpOwogICAgIH0K
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBmYjBhNWMxMGI1N2Y3OTg4MTAz
ZDIxMzIzOThjNmExOGNjM2MxNDE5Li43ZTM3ZjJjZjQ1NDBiMGE5M2U3MzY4YzlhZjI2ZGEzMDQx
OGU1MmJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMTU5LDYgKzE1OSw5IEBA
IEdyYXBoaWNzQ29udGV4dDNEKiBDQ1RocmVhZFByb3h5Ojpjb250ZXh0KCkKIAogdm9pZCBDQ1Ro
cmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQogeworICAgIGlmICghbV9sYXllclJlbmRl
cmVySW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybjsKKwogICAgIEFTU0VSVChDQ1Byb3h5Ojpp
c01haW5UaHJlYWQoKSk7CiAKICAgICAvLyBNYWtlIHN1cmUgYWxsIEdMIGRyYXdpbmcgaXMgZmlu
aXNoZWQgb24gdGhlIGltcGwgdGhyZWFkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggMTI3NWVjODU0MjgxMDk4YzMx
ZTFiODAzMDYxYzljY2E0ZGJmNWQ4Yy4uYTkwYmIzMTEyMjNlMmQ2YTdlNDhjNWZkMzBmMmY4MmJl
ODQ1YzA5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdFRlc3QuY3BwCkBAIC03OSwxMSArNzksMTMgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlVG9EcmF3T25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVycyhDQ0xheWVyVHJlZUhvc3RJ
bXBsKiwgZG91YmxlIG1vbm90b25pY1RpbWUpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBpbml0aWFs
aXplTGF5ZXJSZW5kZXJlck9uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgcmV0dXJu
IHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RvcEFuaW1hdGlvblRpbWVyT25DQ1RocmVh
ZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CiAgICAgdmlydHVhbCB2b2lkIHdpbGxBbmltYXRl
TGF5ZXJzKENDTGF5ZXJUcmVlSG9zdEltcGwqLCBkb3VibGUgbW9ub3RvbmljVGltZSkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsQW5kU2NhbGUoY29uc3QgSW50U2l6ZSYsIGZsb2F0
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQW5pbWF0aW9ucyhkb3VibGUgbW9ub3Rvbmlj
VGltZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpIHsgfQotICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWRlZCkgeyB9CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkgeyB9CiAgICAgdmlydHVhbCB2b2lk
IGRpZENvbW1pdCgpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21taXRBbmREcmF3RnJhbWUo
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKSB7IH0KQEAgLTEyNiw2
ICsxMjgsMjAgQEAgcHVibGljOgogICAgICAgICBtX3Rlc3RIb29rcy0+ZHJhd0xheWVyc09uQ0NU
aHJlYWQodGhpcyk7CiAgICAgfQogCisgICAgdmlydHVhbCBib29sIGluaXRpYWxpemVMYXllclJl
bmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFRleHR1cmVVcGxv
YWRlck9wdGlvbiBvcHRpb24pCisgICAgeworICAgICAgICBib29sIHJlc3VsdCA9IENDTGF5ZXJU
cmVlSG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQsIG9wdGlvbik7Cisg
ICAgICAgIGlmICghbV90ZXN0SG9va3MtPmluaXRpYWxpemVMYXllclJlbmRlcmVyT25DQ1RocmVh
ZCh0aGlzKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkaWRTdG9wQW5pbWF0aW9uVGltZXIoKQor
ICAgIHsKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0SW1wbDo6ZGlkU3RvcEFuaW1hdGlvblRpbWVy
KCk7CisgICAgICAgIG1fdGVzdEhvb2tzLT5kaWRTdG9wQW5pbWF0aW9uVGltZXJPbkNDVGhyZWFk
KHRoaXMpOworICAgIH0KKwogICAgIC8vIE1ha2UgdGhlc2UgcHVibGljLgogICAgIHR5cGVkZWYg
VmVjdG9yPENDTGF5ZXJJbXBsKj4gQ0NMYXllckxpc3Q7CiAgICAgdXNpbmcgQ0NMYXllclRyZWVI
b3N0SW1wbDo6Y2FsY3VsYXRlUmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKQEAgLTEzODksNiArMTQw
NSw0OSBAQCBwcml2YXRlOgogCiBTSU5HTEVfQU5EX01VTFRJX1RIUkVBRF9URVNUX0YoQ0NMYXll
clRyZWVIb3N0VGVzdFN5bmNocm9uaXplQW5pbWF0aW9uU3RhcnRUaW1lcykKIAorLy8gRW5zdXJl
cyB0aGF0IHdlIGRvIG5vdCBhbmltYXRlCitjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uIDogcHVibGljIENDTGF5ZXJU
cmVlSG9zdFRlc3QgeworcHVibGljOgorICAgIENDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24oKQorICAgIHsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkKKyAgICB7CisgICAgICAgIHBvc3RBZGRBbmltYXRp
b25Ub01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZUxheWVy
cyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBsYXllclRyZWVIb3N0SW1wbCwgZG91YmxlIG1vbm90b25p
Y1RpbWUpCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIGJvb2wgaW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJPbkNDVGhyZWFkKENDTGF5ZXJU
cmVlSG9zdEltcGwqKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpCisgICAgewor
ICAgICAgICBFWFBFQ1RfRkFMU0Uoc3VjY2VlZGVkKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0
LT5maW5pc2hBbGxSZW5kZXJpbmcoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3Rv
cEFuaW1hdGlvblRpbWVyT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikKKyAgICB7Cisg
ICAgICAgIGVuZFRlc3QoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWZ0ZXJUZXN0KCkK
KyAgICB7CisgICAgfQorfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24sIHJ1blNpbmdsZVRocmVhZCkKK3sK
KyAgICBydW5UZXN0KGZhbHNlKTsKK30KKwogLy8gRW5zdXJlcyB0aGF0IG1haW4gdGhyZWFkIGFu
aW1hdGlvbnMgaGF2ZSB0aGVpciBzdGFydCB0aW1lcyBzeW5jaHJvbml6ZWQgd2l0aCBpbXBsIHRo
cmVhZCBhbmltYXRpb25zLgogY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdEFuaW1hdGlvbkZpbmlz
aGVkRXZlbnRzIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRPbmx5IHsKIHB1Ymxp
YzoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145124</attachid>
            <date>2012-05-31 11:47:47 -0700</date>
            <delta_ts>2012-05-31 13:17:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120531144745.patch</filename>
            <type>text/plain</type>
            <size>17090</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjUzYzcwOWM5YTg2YjFi
YmRkZGM5Yzc2ZjQ3ZDY4ZjA2MjJiZWFjMy4uYTE1NWUwZDlmYjAyMjI3MGUwYTAyM2U0ZDQzYzIx
N2IzOGIzOWMwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxh
eWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRv
IGluaXRpYWxpemUsIGJlIHN1cmUgdG8gc3RvcCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorCisgICAg
ICAgIFVuaXQgdGVzdDogQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVy
RmFpbHNBZnRlckFkZEFuaW1hdGlvbi5ydW5TaW5nbGVUaHJlYWQKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6ZGlkQWRkQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmFuaW1hdGlvblRpbWVy
RGVsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorCiAyMDEyLTA1LTMxICBDaHJpc3Rv
cGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0g
RW5hYmxlIENTU19JTUFHRV9TRVQgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4
ZjBkOGI2M2ExMWNlZGFjYjNiNWYyZDdhZGZjMzliZDZlMDA1YThiLi5mODkxYTI0Y2FhMmUxNDhm
ZTIzNjI1ZDY0YjYxMDcyMjZhOWZkMTI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ5IEBACisyMDEyLTA1LTMxICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2luZ2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90
IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxheWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRp
YWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdo
ZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRvIGluaXRpYWxpemUsIGJlIHN1cmUgdG8gc3Rv
cCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHA6CisgICAgICAgIChDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0
aFRleHR1cmVUcmFja2luZyk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Y3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdURjo6
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OmJp
bmRUZXh0dXJlKToKKyAgICAgICAgKFdURjo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6Om51bVRleHR1cmVzKToKKyAgICAgICAgKFdURjo6Q29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OnRleHR1
cmUpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0
aFRleHR1cmVUcmFja2luZzo6cmVzZXRUZXh0dXJlcyk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0
b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpudW1Vc2VkVGV4
dHVyZXMpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
V2l0aFRleHR1cmVUcmFja2luZzo6dXNlZFRleHR1cmUpOgorICAgICAgICAoV1RGOjpDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6cmVzZXRVc2Vk
VGV4dHVyZXMpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RFdpdGhUZXh0dXJlVHJhY2tpbmcpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VGVz
dEhvb2tzOjpkaWRSZWNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoVGVzdEhvb2tzKToKKyAgICAg
ICAgKFdURjo6VGVzdEhvb2tzOjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKENDTGF5ZXJUcmVl
SG9zdFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpjbGVhckVuZFRl
c3RUYXNrKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Q0NMYXllclRyZWVI
b3N0VGVzdCk6CisgICAgICAgIChFbmRUZXN0VGFzayk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3Q6OkVuZFRlc3RUYXNrOjpFbmRUZXN0VGFzayk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OkVuZFRlc3RUYXNrOjp+RW5kVGVzdFRhc2spOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpFbmRUZXN0VGFzazo6Y2xlYXJUZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6RW5kVGVzdFRhc2s6OnJ1bik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0ZXJEZWxheSk6CisgICAgICAgIChGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKToKKyAgICAgICAgKFdURjo6RmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRGYWlsczo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0
ZXJBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNB
ZnRlckFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6YW5p
bWF0ZUxheWVycyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmRpZFJlY3JlYXRlQ29udGV4dCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisKIDIwMTItMDUtMzEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIENhbm5vdCBicmluZyBJbnNw
ZWN0b3IgdG8gZnJvbnQgd2hlbiBwYXVzZWQgb24gYnJlYWtwb2ludApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCAwMTEzYzA3OWE2ODRiYWFkY2RkNGVlNDcxNjJi
M2NmYjE5MjhiOTg3Li4xN2NkYzU5ZTQ1MWFmZDU0NTZlNzk3NjYwZGFkNjNkMDMyMjQ0YzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNTgsOSArNTgsNiBA
QCBwcml2YXRlOgogICAgIENDU2luZ2xlVGhyZWFkUHJveHkqIG1fcHJveHk7CiB9OwogCi0vLyBN
ZWFzdXJlZCBpbiBzZWNvbmRzLgotc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRl
bGF5ID0gMSAvIDYwLjA7Ci0KIFBhc3NPd25QdHI8Q0NQcm94eT4gQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsKICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDU2luZ2xlVGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOwpAQCAtMTY1
LDcgKzE2MiwxMCBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJl
bmRlcmVyKCkKICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLy8gSWYg
d2UgY291bGRuJ3QgaW5pdGlhbGl6ZSB0aGUgbGF5ZXIgcmVuZGVyZXIsIHdlIHNob3VsZG4ndCBw
cm9jZXNzIGFueSBmdXR1cmUgYW5pbWF0aW9uIGV2ZW50cy4KKyAgICAgICAgICAgIG1fYW5pbWF0
aW9uVGltZXItPnN0b3AoKTsKKwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogfQpAQCAtMjc4
LDcgKzI3OCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0UmVxdWVzdGVkKCkg
Y29uc3QKIAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpkaWRBZGRBbmltYXRpb24oKQogewot
ICAgIG1fYW5pbWF0aW9uVGltZXItPnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsK
KyAgICBtX2FuaW1hdGlvblRpbWVyLT5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSgp
KTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKQEAgLTMyNiw2ICszMjYs
MTEgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiAg
ICAgfQogfQogCitkb3VibGUgQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5pbWF0aW9uVGltZXJEZWxh
eSgpCit7CisgICAgcmV0dXJuIDEgLyA2MC4wOworfQorCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmZvcmNlU2VyaWFsaXplT25Td2FwQnVmZmVycygpCiB7CiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDhmYzg5ODRiZjk0MDBmMmI4M2ZmYjhlMTRhZGMx
ZTQyMGYyMWRmZWMuLjQ0MTQ2NmFmY2U1OWVmMTYwMDIyY2FhYWY4MWVkZjljOGIwNDZlM2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTc5LDYgKzc5LDkgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0
IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwog
CisgICAgLy8gTWVhc3VyZWQgaW4gc2Vjb25kcy4KKyAgICBzdGF0aWMgZG91YmxlIGFuaW1hdGlv
blRpbWVyRGVsYXkoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFBy
b3h5KENDTGF5ZXJUcmVlSG9zdCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAxMjc1ZWM4NTQyODEwOThjMzFl
MWI4MDMwNjFjOWNjYTRkYmY1ZDhjLi4xNTdjODg1ZGVhNmFjMzc1YTIzMjllMzg0NDk3YjY4NTY5
NDJmNjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCkBAIC00Myw2ICs0NCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRU
aHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNs
dWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgpAQCAtNzEsNiArNzMsNTIgQEAgdXNp
bmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3MgQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRv
ckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+
IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2lu
ZyhhdHRycykpOworICAgIH0KKworICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkK
KyAgICB7CisgICAgICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4dHVyZXMuc2l6ZSgpICsgMTsK
KyAgICAgICAgbV90ZXh0dXJlcy5hcHBlbmQodGV4dHVyZSk7CisgICAgICAgIHJldHVybiB0ZXh0
dXJlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQgdGV4
dHVyZSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlcy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fdGV4dHVyZXNbaV0gPT0gdGV4dHVyZSkg
eworICAgICAgICAgICAgICAgIG1fdGV4dHVyZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGJpbmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVyZSkK
KyAgICB7CisgICAgICAgIG1fdXNlZFRleHR1cmVzLmFkZCh0ZXh0dXJlKTsKKyAgICB9CisKKyAg
ICBpbnQgbnVtVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4
dHVyZXMuc2l6ZSgpKTsgfQorICAgIGludCB0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVzW2ldOyB9CisgICAgdm9pZCByZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNs
ZWFyKCk7IH0KKworICAgIGludCBudW1Vc2VkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUoKSk7IH0KKyAgICBib29sIHVzZWRUZXh0
dXJlKGludCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRUZXh0dXJlcy5maW5kKHRleHR1
cmUpICE9IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9CisgICAgdm9pZCByZXNldFVzZWRUZXh0dXJl
cygpIHsgbV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKEF0
dHJpYnV0ZXMgYXR0cnMpIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRy
cykKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPFdlYkdMSWQ+IG1fdGV4dHVyZXM7CisgICAg
SGFzaFNldDxXZWJHTElkLCBEZWZhdWx0SGFzaDxXZWJHTElkPjo6SGFzaCwgVW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8V2ViR0xJZD4gPiBtX3VzZWRUZXh0dXJlczsKK307CisKIC8vIFVz
ZWQgYnkgdGVzdCBzdHVicyB0byBub3RpZnkgdGhlIHRlc3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJl
c3RpbmcgaGFwcGVucy4KIGNsYXNzIFRlc3RIb29rcyA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9u
RGVsZWdhdGUgewogcHVibGljOgpAQCAtODMsNyArMTMxLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
cmVhdGVDb250ZXh0KGJvb2wgc3VjY2VkZWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNy
ZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CkBAIC05MSw2ICsxMzksMTYg
QEAgcHVibGljOgogICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5ZXJBbmltYXRpb25EZWxl
Z2F0ZQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1l
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRp
bWUpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVDb250ZXh0KCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzOworICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRy
czsKKyAgICAgICAgd2ViQXR0cnMuYWxwaGEgPSBhdHRycy5hbHBoYTsKKworICAgICAgICBPd25Q
dHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Y3JlYXRlKHdlYkF0dHJzKTsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgfQogfTsKIAogLy8gQWRhcHRzIEND
TGF5ZXJUcmVlSG9zdEltcGwgZm9yIHRlc3QuIFJ1bnMgcmVhbCBjb2RlLCB0aGVuIGludm9rZXMg
dGVzdCBob29rcy4KQEAgLTIwNiw1MiArMjY0LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlk
QWRkQW5pbWF0aW9uV2FzQ2FsbGVkOwogfTsKIAotY2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFw
aGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0
ZShBdHRyaWJ1dGVzIGF0dHJzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyhhdHRy
cykpOwotICAgIH0KLQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkKLSAgICB7
Ci0gICAgICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4dHVyZXMuc2l6ZSgpICsgMTsKLSAgICAg
ICAgbV90ZXh0dXJlcy5hcHBlbmQodGV4dHVyZSk7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkK
LSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlcy5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZXNbaV0gPT0gdGV4dHVyZSkgewotICAg
ICAgICAgICAgICAgIG1fdGV4dHVyZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGJp
bmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1fdXNlZFRleHR1cmVzLmFkZCh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBpbnQg
bnVtVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZXMu
c2l6ZSgpKTsgfQotICAgIGludCB0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmVzW2ldOyB9Ci0gICAgdm9pZCByZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7
IH0KLQotICAgIGludCBudW1Vc2VkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUoKSk7IH0KLSAgICBib29sIHVzZWRUZXh0dXJlKGlu
dCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRUZXh0dXJlcy5maW5kKHRleHR1cmUpICE9
IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9Ci0gICAgdm9pZCByZXNldFVzZWRUZXh0dXJlcygpIHsg
bV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IENvbXBv
c2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKEF0dHJpYnV0
ZXMgYXR0cnMpIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykKLSAg
ICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkdMSWQ+IG1fdGV4dHVyZXM7Ci0gICAgSGFzaFNl
dDxXZWJHTElkLCBEZWZhdWx0SGFzaDxXZWJHTElkPjo6SGFzaCwgVW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8V2ViR0xJZD4gPiBtX3VzZWRUZXh0dXJlczsKLX07Ci0KIC8vIEltcGxlbWVu
dGF0aW9uIG9mIENDTGF5ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCiBjbGFzcyBNb2Nr
TGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVi
bGljOgpAQCAtMjg1LDEyICsyOTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKSBPVkVSUklERQogICAgIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJzOwotICAgICAgICB3ZWJBdHRycy5h
bHBoYSA9IGF0dHJzLmFscGhhOwotCi0gICAgICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQz
RD4gd2ViQ29udGV4dCA9IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4
dHVyZVRyYWNraW5nOjpjcmVhdGUod2ViQXR0cnMpOwotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJD
b250ZXh0LnJlbGVhc2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKKyAgICAgICAgcmV0dXJuIG1fdGVzdEhvb2tzLT5jcmVhdGVDb250ZXh0KCk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxDb21taXQoKSBPVkVSUklERQpAQCAtMzQzLDYg
KzM1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOwogCiAg
ICAgdm9pZCBlbmRUZXN0KCk7CisgICAgdm9pZCBlbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlN
aWxsaXNlY29uZHMpOwogCiAgICAgdm9pZCBwb3N0U2V0TmVlZHNBbmltYXRlVG9NYWluVGhyZWFk
KCkKICAgICB7CkBAIC0zOTUsNiArNDAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV90aW1lb3V0
VGFzayA9IDA7CiAgICAgfQogCisgICAgdm9pZCBjbGVhckVuZFRlc3RUYXNrKCkKKyAgICB7Cisg
ICAgICAgIG1fZW5kVGVzdFRhc2sgPSAwOworICAgIH0KKwogICAgIENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQogCiAKQEAg
LTQwNiw2ICs0MTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICwgbV9maW5pc2hlZChmYWxzZSkK
ICAgICAgICAgLCBtX3NjaGVkdWxlZChmYWxzZSkKICAgICAgICAgLCBtX3N0YXJ0ZWQoZmFsc2Up
CisgICAgICAgICwgbV9lbmRUZXN0VGFzaygwKQogICAgIHsgfQogCiAgICAgdm9pZCBkb0JlZ2lu
VGVzdCgpOwpAQCAtNTk3LDYgKzYxMSwzNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIG1fdGVzdDsKICAgICB9OwogCisgICAgY2xhc3MgRW5kVGVzdFRhc2sgOiBw
dWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IEVu
ZFRlc3RUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgICAgICA6IG1fdGVz
dCh0ZXN0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIH5FbmRUZXN0
VGFzaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Rlc3QpCisgICAgICAgICAgICAg
ICAgbV90ZXN0LT5jbGVhckVuZFRlc3RUYXNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGNsZWFyVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGVzdCA9IDA7CisgICAgICAg
IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fdGVzdCkKKyAgICAgICAgICAgICAgICBtX3Rlc3QtPmVuZFRlc3QoKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0Owor
ICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgcnVuVGVzdChib29sIHRocmVhZGVkKQogICAgIHsK
ICAgICAgICAgaWYgKHRocmVhZGVkKSB7CkBAIC02MjEsNiArNjYzLDkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBpZiAobV90aW1lb3V0VGFzaykKICAgICAgICAgICAgIG1fdGltZW91dFRhc2stPmNs
ZWFyVGVzdCgpOwogCisgICAgICAgIGlmIChtX2VuZFRlc3RUYXNrKQorICAgICAgICAgICAgbV9l
bmRUZXN0VGFzay0+Y2xlYXJUZXN0KCk7CisKICAgICAgICAgQVNTRVJUX0ZBTFNFKG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7CiAgICAgICAgIG1fY2xpZW50LmNsZWFyKCk7CiAgICAgICAgIGlmICht
X3RpbWVkT3V0KSB7CkBAIC02NDgsNiArNjkzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q0NT
Y29wZWRUaHJlYWRQcm94eT4gbV9tYWluVGhyZWFkUHJveHk7CiAgICAgVGltZW91dFRhc2sqIG1f
dGltZW91dFRhc2s7CiAgICAgQmVnaW5UYXNrKiBtX2JlZ2luVGFzazsKKyAgICBFbmRUZXN0VGFz
ayogbV9lbmRUZXN0VGFzazsKIH07CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdp
blRlc3QoKQpAQCAtNjg2LDYgKzczMiwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVu
ZFRlc3QoKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0
ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCit7CisgICAgLy8gSWYgd2UgYXJlIGNhbGxl
ZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRU
ZXN0QWZ0ZXJEZWxheSwgZGVsYXlNaWxsaXNlY29uZHMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9lbmRUZXN0VGFzayA9IG5ldyBFbmRUZXN0VGFzayh0aGlzKTsKKyAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3REZWxheWVkVGFzayhtX2Vu
ZFRlc3RUYXNrLCBkZWxheU1pbGxpc2Vjb25kcyk7CisgICAgfQorfQorCiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKIHB1
YmxpYzoKICAgICB2b2lkIHJ1blRlc3RUaHJlYWRlZCgpCkBAIC0xMzg5LDYgKzE0NDYsNTAgQEAg
cHJpdmF0ZToKIAogU0lOR0xFX0FORF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTeW5jaHJvbml6ZUFuaW1hdGlvblN0YXJ0VGltZXMpCiAKK2NsYXNzIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
eyByZXR1cm4gZmFsc2U7IH0KK307CisKKy8vIEVuc3VyZXMgdGhhdCB3ZSBkbyBub3QgYW5pbWF0
ZQorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNB
ZnRlckFkZEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVy
QWRkQW5pbWF0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICBwb3N0QWRkQW5pbWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAg
fQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVMYXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCog
bGF5ZXJUcmVlSG9zdEltcGwsIGRvdWJsZSBtb25vdG9uaWNUaW1lKQorICAgIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3Jl
YXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9GQUxTRShz
dWNjZWVkZWQpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmZpbmlzaEFsbFJlbmRlcmluZygp
OworICAgICAgICBlbmRUZXN0QWZ0ZXJEZWxheShDQ1NpbmdsZVRocmVhZFByb3h5OjphbmltYXRp
b25UaW1lckRlbGF5KCkgKiAxMDAwKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKSBPVkVSUklERQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0
RnJvbVdlYkNvbnRleHQoYWRvcHRQdHIobmV3IEZha2VXZWJHcmFwaGljc0NvbnRleHQzRE1ha2VD
dXJyZW50RmFpbHMpLCBHcmFwaGljc0NvbnRleHQzRDo6UmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5k
b3cpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICB9
Cit9OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVy
RmFpbHNBZnRlckFkZEFuaW1hdGlvbiwgcnVuU2luZ2xlVGhyZWFkKQoreworICAgIHJ1blRlc3Qo
ZmFsc2UpOworfQorCiAvLyBFbnN1cmVzIHRoYXQgbWFpbiB0aHJlYWQgYW5pbWF0aW9ucyBoYXZl
IHRoZWlyIHN0YXJ0IHRpbWVzIHN5bmNocm9uaXplZCB3aXRoIGltcGwgdGhyZWFkIGFuaW1hdGlv
bnMuCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0QW5pbWF0aW9uRmluaXNoZWRFdmVudHMgOiBw
dWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145143</attachid>
            <date>2012-05-31 13:17:15 -0700</date>
            <delta_ts>2012-05-31 16:48:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87873-20120531161714.patch</filename>
            <type>text/plain</type>
            <size>17457</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjUzYzcwOWM5YTg2YjFi
YmRkZGM5Yzc2ZjQ3ZDY4ZjA2MjJiZWFjMy4uMzJhYjk5NGU3Njk5OThmYzExN2IwMGFmNWU1NzA0
YjFmZTNhMmU3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA1LTMxICBJYW4g
Vm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2lu
Z2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxh
eWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRpYWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IEph
bWVzIFJvYmluc29uLgorCisgICAgICAgIFdoZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRv
IGluaXRpYWxpemUsIGJlIHN1cmUgdG8gc3RvcCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorCisgICAg
ICAgIFVuaXQgdGVzdDogQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVy
RmFpbHNBZnRlckFkZEFuaW1hdGlvbi5ydW5TaW5nbGVUaHJlYWQKKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6ZGlkQWRkQW5pbWF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmFuaW1hdGlvblRpbWVy
RGVsYXkpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorCiAyMDEyLTA1LTMxICBDaHJpc3Rv
cGhlIER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF0g
RW5hYmxlIENTU19JTUFHRV9TRVQgZmxhZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4
ZjBkOGI2M2ExMWNlZGFjYjNiNWYyZDdhZGZjMzliZDZlMDA1YThiLi45ZjMxYWQ2NWI5NTU3ZGNj
MWUzMTY5MzMzNTRlNmMyNDQwOTY3NTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ5IEBACisyMDEyLTA1LTMxICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gU2luZ2xlIHRocmVhZCBwcm94eSBzaG91bGQgbm90
IHRpY2sgYW5pbWF0aW9ucyB1bmxlc3MgdGhlIGxheWVyIHJlbmRlcmVyIGhhcyBiZWVuIGluaXRp
YWxpemVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04
Nzg3MworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAgICAgIFdo
ZW4gdGhlIGxheWVyIHJlbmRlcmVyIGZhaWxzIHRvIGluaXRpYWxpemUsIGJlIHN1cmUgdG8gc3Rv
cCB0aGUgYW5pbWF0aW9uIHRpbWVyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0
VGVzdC5jcHA6CisgICAgICAgIChDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0
aFRleHR1cmVUcmFja2luZyk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhp
Y3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpjcmVhdGUpOgorICAgICAgICAoV1RGOjpD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Y3Jl
YXRlVGV4dHVyZSk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250
ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKFdURjo6
Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OmJp
bmRUZXh0dXJlKToKKyAgICAgICAgKFdURjo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6Om51bVRleHR1cmVzKToKKyAgICAgICAgKFdURjo6Q29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc6OnRleHR1
cmUpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0
aFRleHR1cmVUcmFja2luZzo6cmVzZXRUZXh0dXJlcyk6CisgICAgICAgIChXVEY6OkNvbXBvc2l0
b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nOjpudW1Vc2VkVGV4
dHVyZXMpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNE
V2l0aFRleHR1cmVUcmFja2luZzo6dXNlZFRleHR1cmUpOgorICAgICAgICAoV1RGOjpDb21wb3Np
dG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6cmVzZXRVc2Vk
VGV4dHVyZXMpOgorICAgICAgICAoV1RGOjpDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4
dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQz
RFdpdGhUZXh0dXJlVHJhY2tpbmcpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6VGVz
dEhvb2tzOjpkaWRSZWNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoVGVzdEhvb2tzKToKKyAgICAg
ICAgKFdURjo6VGVzdEhvb2tzOjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKENDTGF5ZXJUcmVl
SG9zdFRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpjbGVhckVuZFRl
c3RUYXNrKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6Q0NMYXllclRyZWVI
b3N0VGVzdCk6CisgICAgICAgIChFbmRUZXN0VGFzayk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3Q6OkVuZFRlc3RUYXNrOjpFbmRUZXN0VGFzayk6CisgICAgICAgIChXVEY6OkND
TGF5ZXJUcmVlSG9zdFRlc3Q6OkVuZFRlc3RUYXNrOjp+RW5kVGVzdFRhc2spOgorICAgICAgICAo
V1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0OjpFbmRUZXN0VGFzazo6Y2xlYXJUZXN0KToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdDo6RW5kVGVzdFRhc2s6OnJ1bik6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xh
eWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0ZXJEZWxheSk6CisgICAgICAgIChGYWtlV2ViR3Jh
cGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKToKKyAgICAgICAgKFdURjo6RmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNETWFrZUN1cnJlbnRGYWlsczo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAg
ICAgICAgKENDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0
ZXJBZGRBbmltYXRpb24pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlh
bGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uOjpDQ0xheWVyVHJlZUhvc3RU
ZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVyQWRkQW5pbWF0aW9uKToKKyAgICAg
ICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNB
ZnRlckFkZEFuaW1hdGlvbjo6YmVnaW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVI
b3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNBZnRlckFkZEFuaW1hdGlvbjo6YW5p
bWF0ZUxheWVycyk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXpl
TGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmRpZFJlY3JlYXRlQ29udGV4dCk6
CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RJbml0aWFsaXplTGF5ZXJSZW5kZXJl
ckZhaWxzQWZ0ZXJBZGRBbmltYXRpb246OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisKIDIwMTItMDUtMzEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBbQ2hyb21pdW1dIENhbm5vdCBicmluZyBJbnNw
ZWN0b3IgdG8gZnJvbnQgd2hlbiBwYXVzZWQgb24gYnJlYWtwb2ludApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCAwMTEzYzA3OWE2ODRiYWFkY2RkNGVlNDcxNjJi
M2NmYjE5MjhiOTg3Li4xN2NkYzU5ZTQ1MWFmZDU0NTZlNzk3NjYwZGFkNjNkMDMyMjQ0YzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtNTgsOSArNTgsNiBA
QCBwcml2YXRlOgogICAgIENDU2luZ2xlVGhyZWFkUHJveHkqIG1fcHJveHk7CiB9OwogCi0vLyBN
ZWFzdXJlZCBpbiBzZWNvbmRzLgotc3RhdGljIGNvbnN0IGRvdWJsZSBhbmltYXRpb25UaW1lckRl
bGF5ID0gMSAvIDYwLjA7Ci0KIFBhc3NPd25QdHI8Q0NQcm94eT4gQ0NTaW5nbGVUaHJlYWRQcm94
eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsKICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IENDU2luZ2xlVGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOwpAQCAtMTY1
LDcgKzE2MiwxMCBAQCBib29sIENDU2luZ2xlVGhyZWFkUHJveHk6OmluaXRpYWxpemVMYXllclJl
bmRlcmVyKCkKICAgICAgICAgaWYgKG9rKSB7CiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJJ
bml0aWFsaXplZCA9IHRydWU7CiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXNGb3JNYWluVGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFi
aWxpdGllcygpOwotICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLy8gSWYg
d2UgY291bGRuJ3QgaW5pdGlhbGl6ZSB0aGUgbGF5ZXIgcmVuZGVyZXIsIHdlIHNob3VsZG4ndCBw
cm9jZXNzIGFueSBmdXR1cmUgYW5pbWF0aW9uIGV2ZW50cy4KKyAgICAgICAgICAgIG1fYW5pbWF0
aW9uVGltZXItPnN0b3AoKTsKKwogICAgICAgICByZXR1cm4gb2s7CiAgICAgfQogfQpAQCAtMjc4
LDcgKzI3OCw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0UmVxdWVzdGVkKCkg
Y29uc3QKIAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpkaWRBZGRBbmltYXRpb24oKQogewot
ICAgIG1fYW5pbWF0aW9uVGltZXItPnN0YXJ0T25lU2hvdChhbmltYXRpb25UaW1lckRlbGF5KTsK
KyAgICBtX2FuaW1hdGlvblRpbWVyLT5zdGFydE9uZVNob3QoYW5pbWF0aW9uVGltZXJEZWxheSgp
KTsKIH0KIAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKCkKQEAgLTMyNiw2ICszMjYs
MTEgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21wb3NpdGVJbW1lZGlhdGVseSgpCiAg
ICAgfQogfQogCitkb3VibGUgQ0NTaW5nbGVUaHJlYWRQcm94eTo6YW5pbWF0aW9uVGltZXJEZWxh
eSgpCit7CisgICAgcmV0dXJuIDEgLyA2MC4wOworfQorCiB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OmZvcmNlU2VyaWFsaXplT25Td2FwQnVmZmVycygpCiB7CiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NTaW5nbGVUaHJlYWRQcm94eS5oCmluZGV4IDhmYzg5ODRiZjk0MDBmMmI4M2ZmYjhlMTRhZGMx
ZTQyMGYyMWRmZWMuLjQ0MTQ2NmFmY2U1OWVmMTYwMDIyY2FhYWY4MWVkZjljOGIwNDZlM2IgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgKQEAgLTc5LDYgKzc5LDkgQEAgcHVi
bGljOgogICAgIC8vIENhbGxlZCBieSB0aGUgbGVnYWN5IHBhdGggd2hlcmUgUmVuZGVyV2lkZ2V0
IGRvZXMgdGhlIHNjaGVkdWxpbmcuCiAgICAgdm9pZCBjb21wb3NpdGVJbW1lZGlhdGVseSgpOwog
CisgICAgLy8gTWVhc3VyZWQgaW4gc2Vjb25kcy4KKyAgICBzdGF0aWMgZG91YmxlIGFuaW1hdGlv
blRpbWVyRGVsYXkoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBDQ1NpbmdsZVRocmVhZFBy
b3h5KENDTGF5ZXJUcmVlSG9zdCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcAppbmRleCAxMjc1ZWM4NTQyODEwOThjMzFl
MWI4MDMwNjFjOWNjYTRkYmY1ZDhjLi43MjhhZGUyOTMyODgxODYyNmRmY2NjMzk1NDA5OThjODRk
ZTQwMzI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJDQ1RpbGVkTGF5
ZXJUZXN0Q29tbW9uLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRl
eHQzRC5oIgogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiRmFr
ZVdlYkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5h
Z2VyLmgiCkBAIC00Myw2ICs0NCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY29wZWRU
aHJlYWRQcm94eS5oIgorI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNs
dWRlICJjYy9DQ1RleHR1cmVVcGRhdGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaHJlYWRUYXNrLmgi
CiAjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgpAQCAtNzEsNiArNzMsNTIgQEAgdXNp
bmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIHsKIAorY2xhc3MgQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRv
ckZha2VXZWJHcmFwaGljc0NvbnRleHQzRCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25Q
dHI8Q29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+
IGNyZWF0ZShBdHRyaWJ1dGVzIGF0dHJzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRy
KG5ldyBDb21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2lu
ZyhhdHRycykpOworICAgIH0KKworICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkK
KyAgICB7CisgICAgICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4dHVyZXMuc2l6ZSgpICsgMTsK
KyAgICAgICAgbV90ZXh0dXJlcy5hcHBlbmQodGV4dHVyZSk7CisgICAgICAgIHJldHVybiB0ZXh0
dXJlOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQgdGV4
dHVyZSkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlcy5z
aXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fdGV4dHVyZXNbaV0gPT0gdGV4dHVyZSkg
eworICAgICAgICAgICAgICAgIG1fdGV4dHVyZXMucmVtb3ZlKGkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIGJpbmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVyZSkK
KyAgICB7CisgICAgICAgIG1fdXNlZFRleHR1cmVzLmFkZCh0ZXh0dXJlKTsKKyAgICB9CisKKyAg
ICBpbnQgbnVtVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4
dHVyZXMuc2l6ZSgpKTsgfQorICAgIGludCB0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBt
X3RleHR1cmVzW2ldOyB9CisgICAgdm9pZCByZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNs
ZWFyKCk7IH0KKworICAgIGludCBudW1Vc2VkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUoKSk7IH0KKyAgICBib29sIHVzZWRUZXh0
dXJlKGludCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRUZXh0dXJlcy5maW5kKHRleHR1
cmUpICE9IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9CisgICAgdm9pZCByZXNldFVzZWRUZXh0dXJl
cygpIHsgbV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0
IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKEF0
dHJpYnV0ZXMgYXR0cnMpIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRy
cykKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPFdlYkdMSWQ+IG1fdGV4dHVyZXM7CisgICAg
SGFzaFNldDxXZWJHTElkLCBEZWZhdWx0SGFzaDxXZWJHTElkPjo6SGFzaCwgVW5zaWduZWRXaXRo
WmVyb0tleUhhc2hUcmFpdHM8V2ViR0xJZD4gPiBtX3VzZWRUZXh0dXJlczsKK307CisKIC8vIFVz
ZWQgYnkgdGVzdCBzdHVicyB0byBub3RpZnkgdGhlIHRlc3Qgd2hlbiBzb21ldGhpbmcgaW50ZXJl
c3RpbmcgaGFwcGVucy4KIGNsYXNzIFRlc3RIb29rcyA6IHB1YmxpYyBDQ0xheWVyQW5pbWF0aW9u
RGVsZWdhdGUgewogcHVibGljOgpAQCAtODMsNyArMTMxLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhcHBseVNjcm9sbEFuZFNjYWxlKGNvbnN0IEludFNpemUmLCBmbG9hdCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUFuaW1hdGlvbnMoZG91YmxlIG1vbm90b25pY1RpbWUpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
cmVhdGVDb250ZXh0KGJvb2wgc3VjY2VkZWQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNy
ZWF0ZUNvbnRleHQoYm9vbCBzdWNjZWVkZWQpIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21t
aXQoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tbWl0QW5kRHJhd0ZyYW1lKCkgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCkgeyB9CkBAIC05MSw2ICsxMzksMTYg
QEAgcHVibGljOgogICAgIC8vIEltcGxlbWVudGF0aW9uIG9mIENDTGF5ZXJBbmltYXRpb25EZWxl
Z2F0ZQogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGRvdWJsZSB0aW1l
KSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0aW9uRmluaXNoZWQoZG91YmxlIHRp
bWUpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVh
dGVDb250ZXh0KCkKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
IGF0dHJzOworICAgICAgICBXZWJHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyB3ZWJBdHRy
czsKKyAgICAgICAgd2ViQXR0cnMuYWxwaGEgPSBhdHRycy5hbHBoYTsKKworICAgICAgICBPd25Q
dHI8V2ViR3JhcGhpY3NDb250ZXh0M0Q+IHdlYkNvbnRleHQgPSBDb21wb3NpdG9yRmFrZVdlYkdy
YXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZzo6Y3JlYXRlKHdlYkF0dHJzKTsKKyAg
ICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlR3JhcGhpY3NDb250
ZXh0RnJvbVdlYkNvbnRleHQod2ViQ29udGV4dC5yZWxlYXNlKCksIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdyk7CisgICAgfQogfTsKIAogLy8gQWRhcHRzIEND
TGF5ZXJUcmVlSG9zdEltcGwgZm9yIHRlc3QuIFJ1bnMgcmVhbCBjb2RlLCB0aGVuIGludm9rZXMg
dGVzdCBob29rcy4KQEAgLTIwNiw1MiArMjY0LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fZGlk
QWRkQW5pbWF0aW9uV2FzQ2FsbGVkOwogfTsKIAotY2xhc3MgQ29tcG9zaXRvckZha2VXZWJHcmFw
aGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmcgOiBwdWJsaWMgQ29tcG9zaXRvckZha2VX
ZWJHcmFwaGljc0NvbnRleHQzRCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q29t
cG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRFdpdGhUZXh0dXJlVHJhY2tpbmc+IGNyZWF0
ZShBdHRyaWJ1dGVzIGF0dHJzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBD
b21wb3NpdG9yRmFrZVdlYkdyYXBoaWNzQ29udGV4dDNEV2l0aFRleHR1cmVUcmFja2luZyhhdHRy
cykpOwotICAgIH0KLQotICAgIHZpcnR1YWwgV2ViR0xJZCBjcmVhdGVUZXh0dXJlKCkKLSAgICB7
Ci0gICAgICAgIFdlYkdMSWQgdGV4dHVyZSA9IG1fdGV4dHVyZXMuc2l6ZSgpICsgMTsKLSAgICAg
ICAgbV90ZXh0dXJlcy5hcHBlbmQodGV4dHVyZSk7Ci0gICAgICAgIHJldHVybiB0ZXh0dXJlOwot
ICAgIH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMSWQgdGV4dHVyZSkK
LSAgICB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlcy5zaXplKCk7
IGkrKykgewotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZXNbaV0gPT0gdGV4dHVyZSkgewotICAg
ICAgICAgICAgICAgIG1fdGV4dHVyZXMucmVtb3ZlKGkpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGJp
bmRUZXh0dXJlKFdHQzNEZW51bSAvKiB0YXJnZXQgKi8sIFdlYkdMSWQgdGV4dHVyZSkKLSAgICB7
Ci0gICAgICAgIG1fdXNlZFRleHR1cmVzLmFkZCh0ZXh0dXJlKTsKLSAgICB9Ci0KLSAgICBpbnQg
bnVtVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZXMu
c2l6ZSgpKTsgfQotICAgIGludCB0ZXh0dXJlKGludCBpKSBjb25zdCB7IHJldHVybiBtX3RleHR1
cmVzW2ldOyB9Ci0gICAgdm9pZCByZXNldFRleHR1cmVzKCkgeyBtX3RleHR1cmVzLmNsZWFyKCk7
IH0KLQotICAgIGludCBudW1Vc2VkVGV4dHVyZXMoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdXNlZFRleHR1cmVzLnNpemUoKSk7IH0KLSAgICBib29sIHVzZWRUZXh0dXJlKGlu
dCB0ZXh0dXJlKSBjb25zdCB7IHJldHVybiBtX3VzZWRUZXh0dXJlcy5maW5kKHRleHR1cmUpICE9
IG1fdXNlZFRleHR1cmVzLmVuZCgpOyB9Ci0gICAgdm9pZCByZXNldFVzZWRUZXh0dXJlcygpIHsg
bV91c2VkVGV4dHVyZXMuY2xlYXIoKTsgfQotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IENvbXBv
c2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4dHVyZVRyYWNraW5nKEF0dHJpYnV0
ZXMgYXR0cnMpIDogQ29tcG9zaXRvckZha2VXZWJHcmFwaGljc0NvbnRleHQzRChhdHRycykKLSAg
ICB7Ci0gICAgfQotCi0gICAgVmVjdG9yPFdlYkdMSWQ+IG1fdGV4dHVyZXM7Ci0gICAgSGFzaFNl
dDxXZWJHTElkLCBEZWZhdWx0SGFzaDxXZWJHTElkPjo6SGFzaCwgVW5zaWduZWRXaXRoWmVyb0tl
eUhhc2hUcmFpdHM8V2ViR0xJZD4gPiBtX3VzZWRUZXh0dXJlczsKLX07Ci0KIC8vIEltcGxlbWVu
dGF0aW9uIG9mIENDTGF5ZXJUcmVlSG9zdCBjYWxsYmFjayBpbnRlcmZhY2UuCiBjbGFzcyBNb2Nr
TGF5ZXJUcmVlSG9zdENsaWVudCA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewogcHVi
bGljOgpAQCAtMjg1LDEyICsyOTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUNvbnRleHQoKSBPVkVSUklERQogICAgIHsKLSAg
ICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnM7Ci0gICAgICAgIFdlYkdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIHdlYkF0dHJzOwotICAgICAgICB3ZWJBdHRycy5h
bHBoYSA9IGF0dHJzLmFscGhhOwotCi0gICAgICAgIE93blB0cjxXZWJHcmFwaGljc0NvbnRleHQz
RD4gd2ViQ29udGV4dCA9IENvbXBvc2l0b3JGYWtlV2ViR3JhcGhpY3NDb250ZXh0M0RXaXRoVGV4
dHVyZVRyYWNraW5nOjpjcmVhdGUod2ViQXR0cnMpOwotICAgICAgICByZXR1cm4gR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjpjcmVhdGVHcmFwaGljc0NvbnRleHRGcm9tV2ViQ29udGV4dCh3ZWJD
b250ZXh0LnJlbGVhc2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlJlbmRlckRpcmVjdGx5VG9Ib3N0
V2luZG93KTsKKyAgICAgICAgcmV0dXJuIG1fdGVzdEhvb2tzLT5jcmVhdGVDb250ZXh0KCk7CiAg
ICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxDb21taXQoKSBPVkVSUklERQpAQCAtMzQzLDYg
KzM1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UZXN0KCkgPSAwOwogCiAg
ICAgdm9pZCBlbmRUZXN0KCk7CisgICAgdm9pZCBlbmRUZXN0QWZ0ZXJEZWxheShpbnQgZGVsYXlN
aWxsaXNlY29uZHMpOwogCiAgICAgdm9pZCBwb3N0U2V0TmVlZHNBbmltYXRlVG9NYWluVGhyZWFk
KCkKICAgICB7CkBAIC0zOTUsNiArNDAzLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV90aW1lb3V0
VGFzayA9IDA7CiAgICAgfQogCisgICAgdm9pZCBjbGVhckVuZFRlc3RUYXNrKCkKKyAgICB7Cisg
ICAgICAgIG1fZW5kVGVzdFRhc2sgPSAwOworICAgIH0KKwogICAgIENDTGF5ZXJUcmVlSG9zdCog
bGF5ZXJUcmVlSG9zdCgpIHsgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdC5nZXQoKTsgfQogCiAKQEAg
LTQwNiw2ICs0MTksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICwgbV9maW5pc2hlZChmYWxzZSkK
ICAgICAgICAgLCBtX3NjaGVkdWxlZChmYWxzZSkKICAgICAgICAgLCBtX3N0YXJ0ZWQoZmFsc2Up
CisgICAgICAgICwgbV9lbmRUZXN0VGFzaygwKQogICAgIHsgfQogCiAgICAgdm9pZCBkb0JlZ2lu
VGVzdCgpOwpAQCAtNTk3LDYgKzYxMSwzNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIENDTGF5ZXJU
cmVlSG9zdFRlc3QqIG1fdGVzdDsKICAgICB9OwogCisgICAgY2xhc3MgRW5kVGVzdFRhc2sgOiBw
dWJsaWMgV2ViVGhyZWFkOjpUYXNrIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGV4cGxpY2l0IEVu
ZFRlc3RUYXNrKENDTGF5ZXJUcmVlSG9zdFRlc3QqIHRlc3QpCisgICAgICAgICAgICA6IG1fdGVz
dCh0ZXN0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIH5FbmRUZXN0
VGFzaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Rlc3QpCisgICAgICAgICAgICAg
ICAgbV90ZXN0LT5jbGVhckVuZFRlc3RUYXNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGNsZWFyVGVzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fdGVzdCA9IDA7CisgICAgICAg
IH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKG1fdGVzdCkKKyAgICAgICAgICAgICAgICBtX3Rlc3QtPmVuZFRlc3QoKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ0NMYXllclRyZWVIb3N0VGVzdCogbV90ZXN0Owor
ICAgIH07CisKICAgICB2aXJ0dWFsIHZvaWQgcnVuVGVzdChib29sIHRocmVhZGVkKQogICAgIHsK
ICAgICAgICAgaWYgKHRocmVhZGVkKSB7CkBAIC02MjEsNiArNjYzLDkgQEAgcHJvdGVjdGVkOgog
ICAgICAgICBpZiAobV90aW1lb3V0VGFzaykKICAgICAgICAgICAgIG1fdGltZW91dFRhc2stPmNs
ZWFyVGVzdCgpOwogCisgICAgICAgIGlmIChtX2VuZFRlc3RUYXNrKQorICAgICAgICAgICAgbV9l
bmRUZXN0VGFzay0+Y2xlYXJUZXN0KCk7CisKICAgICAgICAgQVNTRVJUX0ZBTFNFKG1fbGF5ZXJU
cmVlSG9zdC5nZXQoKSk7CiAgICAgICAgIG1fY2xpZW50LmNsZWFyKCk7CiAgICAgICAgIGlmICht
X3RpbWVkT3V0KSB7CkBAIC02NDgsNiArNjkzLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Q0NT
Y29wZWRUaHJlYWRQcm94eT4gbV9tYWluVGhyZWFkUHJveHk7CiAgICAgVGltZW91dFRhc2sqIG1f
dGltZW91dFRhc2s7CiAgICAgQmVnaW5UYXNrKiBtX2JlZ2luVGFzazsKKyAgICBFbmRUZXN0VGFz
ayogbV9lbmRUZXN0VGFzazsKIH07CiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0VGVzdDo6ZG9CZWdp
blRlc3QoKQpAQCAtNjg2LDYgKzczMiwxNyBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVu
ZFRlc3QoKQogICAgIH0KIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRUZXN0QWZ0
ZXJEZWxheShpbnQgZGVsYXlNaWxsaXNlY29uZHMpCit7CisgICAgLy8gSWYgd2UgYXJlIGNhbGxl
ZCBmcm9tIHRoZSBDQ1RocmVhZCwgcmUtY2FsbCBlbmRUZXN0IG9uIHRoZSBtYWluIHRocmVhZC4K
KyAgICBpZiAoIWlzTWFpblRocmVhZCgpKQorICAgICAgICBtX21haW5UaHJlYWRQcm94eS0+cG9z
dFRhc2soY3JlYXRlQ0NUaHJlYWRUYXNrKHRoaXMsICZDQ0xheWVyVHJlZUhvc3RUZXN0OjplbmRU
ZXN0QWZ0ZXJEZWxheSwgZGVsYXlNaWxsaXNlY29uZHMpKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
bV9lbmRUZXN0VGFzayA9IG5ldyBFbmRUZXN0VGFzayh0aGlzKTsKKyAgICAgICAgV2ViS2l0OjpQ
bGF0Zm9ybTo6Y3VycmVudCgpLT5jdXJyZW50VGhyZWFkKCktPnBvc3REZWxheWVkVGFzayhtX2Vu
ZFRlc3RUYXNrLCBkZWxheU1pbGxpc2Vjb25kcyk7CisgICAgfQorfQorCiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RUZXN0VGhyZWFkT25seSA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKIHB1
YmxpYzoKICAgICB2b2lkIHJ1blRlc3RUaHJlYWRlZCgpCkBAIC0xMzg5LDYgKzE0NDYsNTYgQEAg
cHJpdmF0ZToKIAogU0lOR0xFX0FORF9NVUxUSV9USFJFQURfVEVTVF9GKENDTGF5ZXJUcmVlSG9z
dFRlc3RTeW5jaHJvbml6ZUFuaW1hdGlvblN0YXJ0VGltZXMpCiAKK2NsYXNzIEZha2VXZWJHcmFw
aGljc0NvbnRleHQzRE1ha2VDdXJyZW50RmFpbHMgOiBwdWJsaWMgRmFrZVdlYkdyYXBoaWNzQ29u
dGV4dDNEIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCkg
eyByZXR1cm4gZmFsc2U7IH0KK307CisKKy8vIEVuc3VyZXMgdGhhdCB3ZSBkbyBub3QgYW5pbWF0
ZQorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdEluaXRpYWxpemVMYXllclJlbmRlcmVyRmFpbHNB
ZnRlckFkZEFuaW1hdGlvbiA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0IHsKK3B1YmxpYzoK
KyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0SW5pdGlhbGl6ZUxheWVyUmVuZGVyZXJGYWlsc0FmdGVy
QWRkQW5pbWF0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGJlZ2luVGVz
dCgpCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgdGhlIGFuaW1hdGlvbiB0aW1l
ciB0byBiZSBzZXQgd2hpY2ggd2lsbCBmaXJlIGluCisgICAgICAgIC8vIENDU2luZ2xlVGhyZWFk
UHJveHk6OmFuaW1hdGlvblRpbWVyRGVsYXkoKSBzZWNvbmRzLgorICAgICAgICBwb3N0QWRkQW5p
bWF0aW9uVG9NYWluVGhyZWFkKCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVM
YXllcnMoQ0NMYXllclRyZWVIb3N0SW1wbCogbGF5ZXJUcmVlSG9zdEltcGwsIGRvdWJsZSBtb25v
dG9uaWNUaW1lKQorICAgIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY3JlYXRlQ29udGV4dChib29sIHN1Y2NlZWRlZCkKKyAg
ICB7CisgICAgICAgIEVYUEVDVF9GQUxTRShzdWNjZWVkZWQpOworCisgICAgICAgIC8vIE1ha2Ug
c3VyZSB3ZSB3YWl0IENDU2luZ2xlVGhyZWFkUHJveHk6OmFuaW1hdGlvblRpbWVyRGVsYXkoKSBz
ZWNvbmRzCisgICAgICAgIC8vICh1c2UgY2VpbCBqdXN0IHRvIGJlIHN1cmUpLiBJZiB0aGUgdGlt
ZXIgd2FzIG5vdCBkaXNhYmxlZCwgd2Ugd2lsbAorICAgICAgICAvLyBhdHRlbXB0IHRvIGNhbGwg
Q0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tcG9zaXRlSW1tZWRpYXRlbHkgYW5kIHRoZQorICAgICAg
ICAvLyB0ZXN0IHdpbGwgZmFpbC4KKyAgICAgICAgZW5kVGVzdEFmdGVyRGVsYXkoY2VpbChDQ1Np
bmdsZVRocmVhZFByb3h5OjphbmltYXRpb25UaW1lckRlbGF5KCkgKiAxMDAwKSk7CisgICAgfQor
CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjcmVhdGVDb250ZXh0
KCkgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmNyZWF0ZUdyYXBoaWNzQ29udGV4dEZyb21XZWJDb250ZXh0KGFkb3B0UHRyKG5ldyBGYWtl
V2ViR3JhcGhpY3NDb250ZXh0M0RNYWtlQ3VycmVudEZhaWxzKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
YWZ0ZXJUZXN0KCkKKyAgICB7CisgICAgfQorfTsKKworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRl
c3RJbml0aWFsaXplTGF5ZXJSZW5kZXJlckZhaWxzQWZ0ZXJBZGRBbmltYXRpb24sIHJ1blNpbmds
ZVRocmVhZCkKK3sKKyAgICBydW5UZXN0KGZhbHNlKTsKK30KKwogLy8gRW5zdXJlcyB0aGF0IG1h
aW4gdGhyZWFkIGFuaW1hdGlvbnMgaGF2ZSB0aGVpciBzdGFydCB0aW1lcyBzeW5jaHJvbml6ZWQg
d2l0aCBpbXBsIHRocmVhZCBhbmltYXRpb25zLgogY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdEFu
aW1hdGlvbkZpbmlzaGVkRXZlbnRzIDogcHVibGljIENDTGF5ZXJUcmVlSG9zdFRlc3RUaHJlYWRP
bmx5IHsKIHB1YmxpYzoK
</data>

          </attachment>
      

    </bug>

</bugzilla>