<?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>70448</bug_id>
          
          <creation_ts>2011-10-19 15:57:06 -0700</creation_ts>
          <short_desc>compositing/video tests time out on Lion</short_desc>
          <delta_ts>2011-10-25 10:41:22 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>487080</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 15:57:06 -0700</bug_when>
    <thetext>These two tests time out for me every time I run them on Lion:

+compositing/video/video-poster.html	expected actual diff pretty diff		text	pass
+compositing/video/video-with-invalid-source.html	expected actual diff pretty diff		text	pass

This is in DRT, so WebKit1. The tests also time out when run directly from DRT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487154</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 17:06:33 -0700</bug_when>
    <thetext>Output with media logging turned on:

HTMLMediaElement::HTMLMediaElement
HTMLMediaElement::removedFromDocument
CONSOLE MESSAGE: line 31: event.type load
HTMLMediaElement::canPlayType(video/ogg) -&gt; 
HTMLMediaElement::scheduleLoad
HTMLMediaElement::prepareForLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::setPlaybackRate(1.000000)
HTMLMediaElement::setShouldDelayLoadEvent(true)
HTMLMediaElement::selectMediaResource
HTMLMediaElement::loadResource(file:///Volumes/SSData/Development/OSX/webkit/OpenSource/LayoutTests/compositing/resources/video.mp4, )
HTMLMediaElement::loadResource - m_currentSrc -&gt; file:///Volumes/SSData/Development/OSX/webkit/OpenSource/LayoutTests/compositing/resources/video.mp4
MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation(0x10b033760)
HTMLMediaElement::mediaPlayerEngineUpdated
Layer became composited, count=1
MediaPlayerPrivateAVFoundationObjC::platformLayer(0x10b033760)
MediaPlayerPrivateAVFoundation::load(0x10b033760)
HTMLMediaElement::setNetworkState(2) - current state is 2
MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL(0x10b033760)
MediaPlayerPrivateAVFoundationObjC::checkPlayability(0x10b033760)
Layer lost compositing, count=0
HTMLMediaElement::selectMediaResource, using &apos;src&apos; attribute url
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 11
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - early return
MediaPlayerPrivateAVFoundation::mainThreadCallback(0x10b033760)
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 11
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::playabilityKnown(0x10b033760)
MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata(0x10b033760) - requesting metadata loading
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 10
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - early return
MediaPlayerPrivateAVFoundation::mainThreadCallback(0x10b033760)
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 10
HTMLMediaElement::mediaPlayerCharacteristicChanged
WebCoreAVFMovieObserver:tracksChanged(0x10b033760) - hasVideo = true, hasAudio = false, hasCaptions = false
MediaPlayerPrivateAVFoundation:setNaturalSize(0x10b033760) - size = 352 x 288
HTMLMediaElement::mediaPlayerSizeChanged
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::prepareToPlay(0x10b033760)
MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem(0x10b033760)
MediaPlayerPrivateAVFoundationObjC::createAVPlayer(0x10b033760)
HTMLMediaElement::setReadyState(1) - current state is 0,
HTMLMediaElement::updatePlayState - shouldBePlaying = false, playerPaused = true
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 2, readyState = 1
WebCoreAVFMovieObserver:observeValueForKeyPath(0x10b02afa0) - keyPath = tracks
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 2
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 2
WebCoreAVFMovieObserver:tracksChanged(0x10b033760) - hasVideo = true, hasAudio = false, hasCaptions = false
MediaPlayerPrivateAVFoundation:setNaturalSize(0x10b033760) - size = 352 x 288
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 2, readyState = 1
WebCoreAVFMovieObserver:observeValueForKeyPath(0x10b02afa0) - keyPath = rate
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 12
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 12
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 2, readyState = 1
HTMLMediaElement::mediaPlayerRateChanged
HTMLMediaElement::invalidateCachedTime
HTMLMediaElement::invalidateCachedTime
WebCoreAVFMovieObserver:observeValueForKeyPath(0x10b02afa0) - keyPath = status
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 3
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 3
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::duration(0x10b033760) - caching 0.995000
HTMLMediaElement::setNetworkState(3) - current state is 2
HTMLMediaElement::setReadyState(3) - current state is 1,
HTMLMediaElement::setShouldDelayLoadEvent(false)
HTMLMediaElement::updatePlayState - shouldBePlaying = false, playerPaused = true
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 3, readyState = 3
WebCoreAVFMovieObserver:observeValueForKeyPath(0x10b02afa0) - keyPath = presentationSize
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x10b033760) - notification 6
MediaPlayerPrivateAVFoundation::dispatchNotification(0x10b033760) - dispatching 6
MediaPlayerPrivateAVFoundation:setNaturalSize(0x10b033760) - size = 352 x 288
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - entering with networkState = 3, readyState = 3
MediaPlayerPrivateAVFoundation::updateStates(0x10b033760) - exiting with networkState = 3, readyState = 3
FAIL: Timed out waiting for notifyDone to be called
FAIL: Timed out waiting for notifyDone to be called
Content-Type: text/plain
A &lt;video&gt; should not have a layer until playback begins.
This test can not be run manually, it requires layoutTestController.layerTreeAsText.

No src, no poster 
  PASS: wants layers = false, has layers = false


#EOF
HTMLMediaElement::stop
HTMLMediaElement::userCancelledLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::stop
HTMLMediaElement::userCancelledLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::~HTMLMediaElement
MediaPlayerPrivateAVFoundationObjC::cancelLoad(0x10b033760)
MediaPlayerPrivateAVFoundation::tearDownVideoRendering(0x10b033760)
MediaPlayerPrivateAVFoundationObjC::platformLayer(0x10b033760)
MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation(0x10b033760)
Program ended with exit code: 0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487160</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 17:16:45 -0700</bug_when>
    <thetext>The &apos;canplaythrough&apos; event never comes in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487165</commentid>
    <comment_count>3</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-19 17:24:05 -0700</bug_when>
    <thetext>Looks like a bug in HTMLMediaElement::setReadyState()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487189</commentid>
    <comment_count>4</comment_count>
      <attachid>111705</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-10-19 18:03:13 -0700</bug_when>
    <thetext>Created attachment 111705
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487191</commentid>
    <comment_count>5</comment_count>
      <attachid>111705</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-19 18:15:44 -0700</bug_when>
    <thetext>Comment on attachment 111705
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        AVFoundation will occasionally fill it&apos;s playback buffers before collecting enough
&gt; +        statistical information to answer YES to isLikelyToKeepUp.  In this situation, set the
&gt; +        ready state to HAVE_ENOUGH_DATA, on the presumption that if the playback buffers are
&gt; +        full, playback will probably not stall.

It would be good to have this comment...

&gt; Source/WebCore/platform/graphics/avfoundation/MediaPlayerPrivateAVFoundation.cpp:453
&gt;              case MediaPlayerAVPlayerItemStatusPlaybackLikelyToKeepUp:
&gt; +            case MediaPlayerAVPlayerItemStatusPlaybackBufferFull:

...here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487372</commentid>
    <comment_count>6</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-10-20 00:19:58 -0700</bug_when>
    <thetext>Committed r97944: &lt;http://trac.webkit.org/changeset/97944&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487729</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-10-20 11:25:45 -0700</bug_when>
    <thetext>Still failing for me:

HTMLMediaElement::HTMLMediaElement
HTMLMediaElement::removedFromDocument
HTMLMediaElement::canPlayType(video/ogg) -&gt; 
HTMLMediaElement::scheduleLoad
HTMLMediaElement::prepareForLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::setPlaybackRate(1.000000)
HTMLMediaElement::setShouldDelayLoadEvent(true)
HTMLMediaElement::selectMediaResource
HTMLMediaElement::loadResource(file:///Volumes/SSData/Development/OSX/webkit/OpenSource/LayoutTests/compositing/resources/video.mp4, )
HTMLMediaElement::loadResource - m_currentSrc -&gt; file:///Volumes/SSData/Development/OSX/webkit/OpenSource/LayoutTests/compositing/resources/video.mp4
MediaPlayerPrivateAVFoundation::MediaPlayerPrivateAVFoundation(0x107c0e5e0)
HTMLMediaElement::mediaPlayerEngineUpdated
MediaPlayerPrivateAVFoundationObjC::platformLayer(0x107c0e5e0)
MediaPlayerPrivateAVFoundation::load(0x107c0e5e0)
HTMLMediaElement::setNetworkState(2) - current state is 2
MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL(0x107c0e5e0)
MediaPlayerPrivateAVFoundationObjC::checkPlayability(0x107c0e5e0)
HTMLMediaElement::selectMediaResource, using &apos;src&apos; attribute url
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 11
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - early return
MediaPlayerPrivateAVFoundation::mainThreadCallback(0x107c0e5e0)
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 11
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::playabilityKnown(0x107c0e5e0)
MediaPlayerPrivateAVFoundationObjC::beginLoadingMetadata(0x107c0e5e0) - requesting metadata loading
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 10
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - early return
MediaPlayerPrivateAVFoundation::mainThreadCallback(0x107c0e5e0)
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 10
HTMLMediaElement::mediaPlayerCharacteristicChanged
WebCoreAVFMovieObserver:tracksChanged(0x107c0e5e0) - hasVideo = true, hasAudio = false, hasCaptions = false
MediaPlayerPrivateAVFoundation:setNaturalSize(0x107c0e5e0) - size = 352 x 288
HTMLMediaElement::mediaPlayerSizeChanged
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 2, readyState = 0
MediaPlayerPrivateAVFoundation::prepareToPlay(0x107c0e5e0)
MediaPlayerPrivateAVFoundationObjC::createAVPlayerItem(0x107c0e5e0)
MediaPlayerPrivateAVFoundationObjC::createAVPlayer(0x107c0e5e0)
HTMLMediaElement::setReadyState(1) - current state is 0,
HTMLMediaElement::updatePlayState - shouldBePlaying = false, playerPaused = true
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 2, readyState = 1
WebCoreAVFMovieObserver:observeValueForKeyPath(0x107c0d000) - keyPath = tracks
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 2
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 2
WebCoreAVFMovieObserver:tracksChanged(0x107c0e5e0) - hasVideo = true, hasAudio = false, hasCaptions = false
MediaPlayerPrivateAVFoundation:setNaturalSize(0x107c0e5e0) - size = 352 x 288
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 2, readyState = 1
WebCoreAVFMovieObserver:observeValueForKeyPath(0x107c0d000) - keyPath = rate
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 12
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 12
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 2, readyState = 1
HTMLMediaElement::mediaPlayerRateChanged
HTMLMediaElement::invalidateCachedTime
HTMLMediaElement::invalidateCachedTime
WebCoreAVFMovieObserver:observeValueForKeyPath(0x107c0d000) - keyPath = status
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 3
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 3
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 2, readyState = 1
MediaPlayerPrivateAVFoundation::duration(0x107c0e5e0) - caching 0.995000
HTMLMediaElement::setNetworkState(3) - current state is 2
HTMLMediaElement::setReadyState(3) - current state is 1,
HTMLMediaElement::setShouldDelayLoadEvent(false)
HTMLMediaElement::updatePlayState - shouldBePlaying = false, playerPaused = true
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 3, readyState = 3
WebCoreAVFMovieObserver:observeValueForKeyPath(0x107c0d000) - keyPath = presentationSize
MediaPlayerPrivateAVFoundation::scheduleMainThreadNotification(0x107c0e5e0) - notification 6
MediaPlayerPrivateAVFoundation::dispatchNotification(0x107c0e5e0) - dispatching 6
MediaPlayerPrivateAVFoundation:setNaturalSize(0x107c0e5e0) - size = 352 x 288
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - entering with networkState = 3, readyState = 3
MediaPlayerPrivateAVFoundation::updateStates(0x107c0e5e0) - exiting with networkState = 3, readyState = 3
FAIL: Timed out waiting for notifyDone to be called
FAIL: Timed out waiting for notifyDone to be called
Content-Type: text/plain
A &lt;video&gt; should not have a layer until playback begins.
This test can not be run manually, it requires layoutTestController.layerTreeAsText.

No src, no poster 
  PASS: wants layers = false, has layers = false


#EOF
HTMLMediaElement::stop
HTMLMediaElement::userCancelledLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::stop
HTMLMediaElement::userCancelledLoad
HTMLMediaElement::cancelPendingEventsAndCallbacks
HTMLMediaElement::~HTMLMediaElement
MediaPlayerPrivateAVFoundationObjC::cancelLoad(0x107c0e5e0)
MediaPlayerPrivateAVFoundation::tearDownVideoRendering(0x107c0e5e0)
MediaPlayerPrivateAVFoundationObjC::platformLayer(0x107c0e5e0)
MediaPlayerPrivateAVFoundation::~MediaPlayerPrivateAVFoundation(0x107c0e5e0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487801</commentid>
    <comment_count>8</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-10-20 12:49:54 -0700</bug_when>
    <thetext>The poster test begins succeeding when you null out the &lt;video&gt; element&apos;s poster attribute; so yes, this patch probably doesn&apos;t fix that problem.  I&apos;m looking into it more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489801</commentid>
    <comment_count>9</comment_count>
      <attachid>112282</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-10-24 17:17:11 -0700</bug_when>
    <thetext>Created attachment 112282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490129</commentid>
    <comment_count>10</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2011-10-25 10:41:22 -0700</bug_when>
    <thetext>Committed r98359: &lt;http://trac.webkit.org/changeset/98359&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111705</attachid>
            <date>2011-10-19 18:03:13 -0700</date>
            <delta_ts>2011-10-24 17:17:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70448-20111019180328.patch</filename>
            <type>text/plain</type>
            <size>2151</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc4NzUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwOGM5N2U1OGM1ZDZiMWRh
MzVjMDg5OTU1YzQ0NjY1YTRlZTI5MTQxLi4zOWE3M2FkMWRjMjczOTg1MzYyYTY4Y2U1YTE2NjNj
OTcxYWFmNTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMTAtMTkgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgY29tcG9zaXRpbmcvdmlkZW8g
dGVzdHMgdGltZSBvdXQgb24gTGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA0NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIEFWRm91
bmRhdGlvbiB3aWxsIG9jY2FzaW9uYWxseSBmaWxsIGl0J3MgcGxheWJhY2sgYnVmZmVycyBiZWZv
cmUgY29sbGVjdGluZyBlbm91Z2gKKyAgICAgICAgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gdG8g
YW5zd2VyIFlFUyB0byBpc0xpa2VseVRvS2VlcFVwLiAgSW4gdGhpcyBzaXR1YXRpb24sIHNldCB0
aGUKKyAgICAgICAgcmVhZHkgc3RhdGUgdG8gSEFWRV9FTk9VR0hfREFUQSwgb24gdGhlIHByZXN1
bXB0aW9uIHRoYXQgaWYgdGhlIHBsYXliYWNrIGJ1ZmZlcnMgYXJlCisgICAgICAgIGZ1bGwsIHBs
YXliYWNrIHdpbGwgcHJvYmFibHkgbm90IHN0YWxsLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0
YXRlcyk6CisKIDIwMTEtMTAtMTkgIENoYW5nIFNodSAgPGNzaHVAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBbUXRdIERpc2FibGUgZnVsbHNjcmVlbiBhcGkgb24gUXQgYnkgZGVmYXVsdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlh
UGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcApp
bmRleCAyOTM3NjU3MmVkYzkyNWQwZmU1MTNiZTgwNzJhMDQ0MDY1ZjkyNjNlLi41YmYyYTFiOWIz
MGYwNjZhNjEyMWZjNjhmNzcwMzQ0NDM5ODhiMWExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3Vu
ZGF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5k
YXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcApAQCAtNDUwLDEwICs0NTAs
MTAgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb246OnVwZGF0ZVN0YXRlcygp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJB
VlBsYXllckl0ZW1TdGF0dXNQbGF5YmFja0xpa2VseVRvS2VlcFVwOgorICAgICAgICAgICAgY2Fz
ZSBNZWRpYVBsYXllckFWUGxheWVySXRlbVN0YXR1c1BsYXliYWNrQnVmZmVyRnVsbDoKICAgICAg
ICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgIGNhc2UgTWVkaWFQbGF5ZXJBVlBs
YXllckl0ZW1TdGF0dXNQbGF5YmFja0J1ZmZlckZ1bGw6CiAgICAgICAgICAgICBjYXNlIE1lZGlh
UGxheWVyQVZQbGF5ZXJJdGVtU3RhdHVzUmVhZHlUb1BsYXk6CiAgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIHJlYWR5U3RhdGUgaXMgYWxyZWFkeSBIYXZlRW5vdWdoRGF0YSwgZG9uJ3QgZ28gbG93
ZXIgYmVjYXVzZSBvZiB0aGlzIHN0YXRlIGNoYW5nZS4KICAgICAgICAgICAgICAgICBpZiAobV9y
ZWFkeVN0YXRlID09IE1lZGlhUGxheWVyOjpIYXZlRW5vdWdoRGF0YSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112282</attachid>
            <date>2011-10-24 17:17:11 -0700</date>
            <delta_ts>2011-10-24 20:37:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-70448-20111024171710.patch</filename>
            <type>text/plain</type>
            <size>6599</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgwMDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjYjlmNTkzZjQwYjlhZDQ1
ZmNhY2RjMTYwNjcwYjU1MzY5NjM5MWZlLi5kMTM5NjExMzZlMmI0MzQzNjMwOTQ5NjU1YzIwY2Zh
NTRmYjVhYzQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMTAtMjQgIEplciBO
b2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKKyAgICAgICAgY29tcG9zaXRpbmcvdmlkZW8g
dGVzdHMgdGltZSBvdXQgb24gTGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzA0NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBVkZvdW5kYXRpb24gd2lsbCBub3QgYmVnaW4gbG9hZGluZyBvciBkZWNv
ZGluZyBtZWRpYSB1bnRpbCBhIGNvbnN1bWVyIGZvciB0aGF0IG1lZGlhIGlzIHByZXNlbnQuCisg
ICAgICAgIEZvciB2aWRlby1vbmx5IG1lZGlhLCB0aGlzIG1lYW5zIHRoYXQgYW4gQVZQbGF5ZXJM
YXllciBtdXN0IGJlIGNyZWF0ZWQgYW5kIGF0dGFjaGVkIHRvIHRoZSAKKyAgICAgICAgQVZQbGF5
ZXIgYmVmb3JlIHRoZSBsb2FkIHN0YXRlIHdpbGwgZXZlciByZWFjaCAiY2FuUGxheVRocm91Z2gi
LiBPbmNlIHRoZSBtZXRhZGF0YSBmb3IgYSBtZWRpYQorICAgICAgICBpcyBsb2FkZWQsIGNyZWF0
ZSBhIEFWUGxheWVyTGF5ZXIgaWYgdGhlIG1lZGlhIGhhcyBhIHZpZGVvIHRyYWNrLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVBVkZv
dW5kYXRpb246OnVwZGF0ZVN0YXRlcyk6CisKIDIwMTEtMTAtMjAgIE1hcmsgSGFobmVuYmVyZyAg
PG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW5hbWUgc3RhdGljIGRlbGV0ZVBy
b3BlcnR5IHRvIGRlbGV0ZVByb3BlcnR5QnlJbmRleApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91
bmRhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAppbmRleCA0ZjdmYTYyNmU5OTVi
MDVmYzQ2ZjFiMTc4MDIyOGIyNDYwZWI0YmViLi5hMjhjYWUyYWQ2ZDg4NWZiOTU5M2VhYjA3MDhm
NjYwZDhkMWY1YTA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vTWVkaWFQbGF5ZXJQ
cml2YXRlQVZGb3VuZGF0aW9uLmNwcApAQCAtNTMwLDYgKzUzMCwxMiBAQCB2b2lkIE1lZGlhUGxh
eWVyUHJpdmF0ZUFWRm91bmRhdGlvbjo6bWV0YWRhdGFMb2FkZWQoKQogewogICAgIG1fbG9hZGlu
Z01ldGFkYXRhID0gZmFsc2U7CiAgICAgdHJhY2tzQ2hhbmdlZCgpOworCisgICAgLy8gQVZGb3Vu
ZGF0aW9uIHdpbGwgbm90IHJldHVybiB0cnVlIGZvciBmaXJzdFZpZGVvRnJhbWVBdmFpbGFibGUg
dW50aWwKKyAgICAvLyBhbiBBVlBsYXllckxheWVyIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBBVlBs
YXllckl0ZW0sIHNvIGNhbGwgcHJlcGFyZUZvclJlbmRlcmluZygpCisgICAgLy8gaGVyZSB0byB0
cmlnZ2VyIGFsbG9jYXRpb24gb2YgYSBBVlBsYXllckxheWVyLgorICAgIGlmIChtX2NhY2hlZEhh
c1ZpZGVvKQorICAgICAgICBwcmVwYXJlRm9yUmVuZGVyaW5nKCk7CiB9CiAKIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uOjpyYXRlQ2hhbmdlZCgpCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggODJlMmRhODc0
Y2VjZTU1MjcyMGE5NmI0MTYwMmFkOWI1OWVkMjgwNi4uYzcyNmVmZDc5OGYwNjg5NDFmM2E5ZWMw
ZWUwODUwNDk1ODcwNmIzNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDExLTEwLTI0ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgorCisgICAgICAgIGNvbXBvc2l0aW5nL3ZpZGVv
IHRlc3RzIHRpbWUgb3V0IG9uIExpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcwNDQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBjb21wb3NpdGluZy92aWRlby92aWRlby1wb3N0ZXIuaHRtbDogU2Vl
aywgaW5zdGVhZCBvZiBwbGF5LCB0byB0cmlnZ2VyCisgICAgICAgICAgICBjcmVhdGlvbiBvZiBh
IGxheWVyCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS92aWRlby1sb2FkLXR3aWNlLmh0bWw6
IFVzZSB3YWl0Rm9yRXZlbnRPbmNlIHNvIHRoYXQKKyAgICAgICAgICAgIGNhblBsYXlUaHJvdWdo
IGxpc3RlbmVyIGlzIHRyaWdnZXJlZCBvbmx5IG9uY2UuCisgICAgICAgICogbWVkaWEvdmlkZW8t
dGVzdC5qczogQWRkIGEgbmV3IGZ1bmN0aW9uLCB3YWl0Rm9yRXZlbnRPbmNlLgorICAgICAgICAo
d2FpdEZvckV2ZW50T25jZSk6CisgICAgICAgICh3YWl0Rm9yRXZlbnQuX2V2ZW50Q2FsbGJhY2sp
OgorICAgICAgICAod2FpdEZvckV2ZW50KToKKwogMjAxMS0xMC0yMCAgTGVhbmRybyBQZXJlaXJh
ICA8bGVhbmRyb0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBVbnJldmlld2VkLiBBZGQgRUZM
IGJhc2VsaW5lcyBmb3IgdGhlIG92ZXJmbG93LCBwYXJzZXIsIHJlZmxlY3Rpb25zLCByZWdpb25z
LApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tcG9zdGVy
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL3ZpZGVvL3ZpZGVvLXBvc3Rl
ci1leHBlY3RlZC50eHQKaW5kZXggY2YyOWY5ZThiZTgzMTAxNjg0OTIzNmUwMTFmYmQzMTIwOTc3
YzM2NS4uMTVjNGU0Yjg0Nzk5OTczNzRmYjUxMTFhYThjOTk3OTQ4MGVhZjY2ZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tcG9zdGVyLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9jb21wb3NpdGluZy92aWRlby92aWRlby1wb3N0ZXItZXhwZWN0
ZWQudHh0CkBAIC03LDcgKzcsNyBAQCBObyBzcmMsIG5vIHBvc3RlcgogRGlzcGxheWluZyBwb3N0
ZXIgCiDCoMKgUEFTUzogd2FudHMgbGF5ZXJzID0gZmFsc2UsIGhhcyBsYXllcnMgPSBmYWxzZQog
Ci1QbGF5aW5nIG1vdmllIAorRGlzcGxheWluZyBtb3ZpZSAKIMKgwqBQQVNTOiB3YW50cyBsYXll
cnMgPSB0cnVlLCBoYXMgbGF5ZXJzID0gdHJ1ZQogCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2NvbXBvc2l0aW5nL3ZpZGVvL3ZpZGVvLXBvc3Rlci5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9z
aXRpbmcvdmlkZW8vdmlkZW8tcG9zdGVyLmh0bWwKaW5kZXggZmRlMzRiZDI4YzU2MTY0MjdlZWIz
NGViOTdjZjYwZjE4MTFlMjU4NC4uYTJiZGUyMjNmMWIxNmYwYTg4M2I5Yjg4YzY5MTY5YzMxNjNh
MmI3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tcG9z
dGVyLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvdmlkZW8vdmlkZW8tcG9zdGVy
Lmh0bWwKQEAgLTM3LDEwICszNywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgImNhbnBsYXl0aHJvdWdoIjoKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrTGF5ZXJzKCJEaXNwbGF5aW5nIHBvc3RlciIsIGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHZpZGVvLnBsYXkoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gMC41OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgInBsYXlpbmciOgotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hlY2tMYXllcnMoIlBsYXlpbmcgbW92aWUiLCB0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSAic2Vla2VkIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrTGF5
ZXJzKCJEaXNwbGF5aW5nIG1vdmllIiwgdHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNTYsNyArNTYsNyBAQAogICAgIDwvaGVhZD4KICAgICA8Ym9keT4K
ICAgICAKLSAgICAgICAgPHZpZGVvIG9uY2FucGxheXRocm91Z2g9ImxheWVyVGVzdCgpIiBvbnBs
YXlpbmc9ImxheWVyVGVzdCgpIj48L3ZpZGVvPgorICAgICAgICA8dmlkZW8gb25jYW5wbGF5dGhy
b3VnaD0ibGF5ZXJUZXN0KCkiIG9uc2Vla2VkPSJsYXllclRlc3QoKSI+PC92aWRlbz4KICAgICAg
ICAgCiAgICAgICAgIDxwPkEgJmx0O3ZpZGVvJmd0OyBzaG91bGQgbm90IGhhdmUgYSBsYXllciB1
bnRpbCBwbGF5YmFjayBiZWdpbnMuPGJyPgogICAgICAgICBUaGlzIHRlc3QgY2FuIG5vdCBiZSBy
dW4gbWFudWFsbHksIGl0IHJlcXVpcmVzIGxheW91dFRlc3RDb250cm9sbGVyLmxheWVyVHJlZUFz
VGV4dC48L3A+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3ZpZGVv
LWxvYWQtdHdpY2UuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9h
ZC10d2ljZS5odG1sCmluZGV4IDNjMzkwNDdlZWYyNjI1MDFiN2ZkODQzMTQ0ZThmZWNjOTU4M2Iz
ZGYuLjBlOWI1MDY5MjM2ZTI0MDAyZGMzYzM4ZWM2YjM4MGU3Y2E3ZDMwNzUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9hZC10d2ljZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvdmlkZW8tbG9hZC10d2ljZS5odG1sCkBAIC0x
NywxMyArMTcsMTMgQEAKICAgICBmdW5jdGlvbiBmaXJzdENhblBsYXlUaHJvdWdoKCkgewogICAg
ICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHZpZGVvKTsKICAgICAgICAgY3JlYXRlVmlk
ZW8oKTsKLSAgICAgICAgd2FpdEZvckV2ZW50KCdjYW5wbGF5dGhyb3VnaCcsIGVuZFRlc3QpOwor
ICAgICAgICB3YWl0Rm9yRXZlbnRPbmNlKCdjYW5wbGF5dGhyb3VnaCcsIGVuZFRlc3QpOwogICAg
ICAgICBydW4oInZpZGVvLnNyYyA9IGZpbGUiKTsKICAgICB9CiAKICAgICBmdW5jdGlvbiBpbml0
KCkgewogICAgICAgICBjcmVhdGVWaWRlbygpOwotICAgICAgICB3YWl0Rm9yRXZlbnQoJ2NhbnBs
YXl0aHJvdWdoJywgZmlyc3RDYW5QbGF5VGhyb3VnaCk7CisgICAgICAgIHdhaXRGb3JFdmVudE9u
Y2UoJ2NhbnBsYXl0aHJvdWdoJywgZmlyc3RDYW5QbGF5VGhyb3VnaCk7CiAgICAgICAgIHJ1bigi
dmlkZW8uc3JjID0gZmlsZSIpOwogICAgIH0KIDwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvbWVkaWEvdmlkZW8tdGVzdC5qcyBiL0xheW91dFRlc3RzL21lZGlhL3ZpZGVvLXRlc3Qu
anMKaW5kZXggZjYyNzMxNzYwMWZiNmNhN2M3Nzk2YzUzNGMxNmVkNmZhNTYyMzBmOC4uNTQxZmIx
Njk1MzZlMjIzOTYwNTM3ZjBjOWRiZDQ5MWYyNTNhMTZkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvbWVkaWEvdmlkZW8tdGVzdC5qcworKysgYi9MYXlvdXRUZXN0cy9tZWRpYS92aWRlby10ZXN0
LmpzCkBAIC0xMjcsMTUgKzEyNywyMyBAQCBmdW5jdGlvbiBydW4odGVzdEZ1bmNTdHJpbmcpCiAg
ICAgfQogfQogCitmdW5jdGlvbiB3YWl0Rm9yRXZlbnRPbmNlKGV2ZW50TmFtZSwgZnVuYywgZW5k
aXQpCit7CisgICAgd2FpdEZvckV2ZW50KGV2ZW50TmFtZSwgZnVuYywgZW5kaXQsIHRydWUpCit9
CisKIGZ1bmN0aW9uIHdhaXRGb3JFdmVudEFuZEVuZChldmVudE5hbWUsIGZ1bmNTdHJpbmcpCiB7
CiAgICAgd2FpdEZvckV2ZW50KGV2ZW50TmFtZSwgZnVuY1N0cmluZywgdHJ1ZSkKIH0KIAotZnVu
Y3Rpb24gd2FpdEZvckV2ZW50KGV2ZW50TmFtZSwgZnVuYywgZW5kaXQpCitmdW5jdGlvbiB3YWl0
Rm9yRXZlbnQoZXZlbnROYW1lLCBmdW5jLCBlbmRpdCwgb25lVGltZU9ubHkpCiB7CiAgICAgZnVu
Y3Rpb24gX2V2ZW50Q2FsbGJhY2soZXZlbnQpCiAgICAgeworICAgICAgICBpZiAob25lVGltZU9u
bHkpCisgICAgICAgICAgICBtZWRpYUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5h
bWUsIF9ldmVudENhbGxiYWNrLCB0cnVlKTsKKwogICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5U
KCIgKyBldmVudE5hbWUgKyAiKSIpOwogCiAgICAgICAgIGlmIChmdW5jKQo=
</data>
<flag name="review"
          id="110336"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>