<?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>129393</bug_id>
          
          <creation_ts>2014-02-26 14:25:10 -0800</creation_ts>
          <short_desc>ASSERTION FAILED: m_numBreakpoints &gt;= numBreakpoints when deleting breakpoints</short_desc>
          <delta_ts>2014-03-03 13:35:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>984908</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-26 14:25:10 -0800</bug_when>
    <thetext>ASSERTION FAILED: m_numBreakpoints &gt;= numBreakpoints
/Volumes/Data/ws5/OpenSource/Source/JavaScriptCore/bytecode/CodeBlock.h(886) : void JSC::CodeBlock::removeBreakpoint(unsigned int)
1   0x1007368f0 WTFCrash
2   0x10012021e JSC::CodeBlock::removeBreakpoint(unsigned int)
3   0x10011dd8a JSC::Debugger::toggleBreakpoint(JSC::CodeBlock*, JSC::Breakpoint&amp;, JSC::Debugger::BreakpointState)
4   0x10012d8e7 JSC::Debugger::ToggleBreakpointFunctor::operator()(JSC::CodeBlock*)
5   0x10012d836 void JSC::CodeBlockSet::iterate&lt;JSC::Debugger::ToggleBreakpointFunctor&gt;(JSC::Debugger::ToggleBreakpointFunctor&amp;)
6   0x1001203ff void JSC::Heap::forEachCodeBlock&lt;JSC::Debugger::ToggleBreakpointFunctor&gt;(JSC::Debugger::ToggleBreakpointFunctor&amp;)
7   0x10011ddea JSC::Debugger::toggleBreakpoint(JSC::Breakpoint&amp;, JSC::Debugger::BreakpointState)
8   0x10011e6dc JSC::Debugger::removeBreakpoint(unsigned long)
9   0x100697be6 Inspector::ScriptDebugServer::removeBreakpoint(unsigned long)
10  0x10039a462 Inspector::InspectorDebuggerAgent::removeBreakpoint(WTF::String*, WTF::String const&amp;)
11  0x10039a577 non-virtual thunk to Inspector::InspectorDebuggerAgent::removeBreakpoint(WTF::String*, WTF::String const&amp;)
12  0x1003aaf3f Inspector::InspectorDebuggerBackendDispatcher::removeBreakpoint(long, Inspector::InspectorObject const&amp;)
13  0x1003a9be6 Inspector::InspectorDebuggerBackendDispatcher::dispatch(long, WTF::String const&amp;, WTF::PassRefPtr&lt;Inspector::InspectorObject&gt;)
14  0x1003876bc Inspector::InspectorBackendDispatcher::dispatch(WTF::String const&amp;)
15  0x100486191 Inspector::JSGlobalObjectInspectorController::dispatchMessageFromFrontend(WTF::String const&amp;)
16  0x10047c3bb JSC::JSGlobalObjectDebuggable::dispatchMessageFromRemoteFrontend(WTF::String const&amp;)
...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>984911</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-02-26 14:26:33 -0800</bug_when>
    <thetext>&lt;rdar://problem/16177455&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985002</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-26 17:08:12 -0800</bug_when>
    <thetext>The issue manifests because the debugger will iterate all CodeBlocks in the heap when setting / clearing breakpoints, but it is possible for a CodeBlock to have been instantiate but is not yet registered with the debugger.  Hence, any pending breakpoints that would land in that CodeBlock is as yet unset.  As such, an attempt to remove a &quot;would be&quot; breakpoint in that CodeBlock will fail that assertion.

The fix is have the debugger only operate on CodeBlocks that are registered with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985010</commentid>
    <comment_count>3</comment_count>
      <attachid>225327</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-26 17:22:09 -0800</bug_when>
    <thetext>Created attachment 225327
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985018</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-26 17:56:50 -0800</bug_when>
    <thetext>I think we need a full backtrace here to understand what&apos;s going on.

You though the problem was that the compilation thread was still running, but had not yet installed this CodeBlock. If the backtrace verifies that claim, then we have a problem: it&apos;s not clear that it&apos;s OK for the the profiler to jettison a CodeBlock that has not yet been installed, and is currently compiling. If that&apos;s the case, then I think the only solution that will solve both cases is to wait for all compilation to complete before attaching either the debugger or profiler, or modifying breakpoints.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985022</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-26 18:08:34 -0800</bug_when>
    <thetext>Here are the full backtraces of all threads when the issue manifests.  It doesn&apos;t look like compilation is in progress.

(lldb) bt all
  thread #1: tid = 0x6dddd8, 0x00007fff93d7e746 libsystem_kernel.dylib`__psynch_mutexwait + 10, queue = &apos;com.apple.main-thread&apos;
    frame #0: 0x00007fff93d7e746 libsystem_kernel.dylib`__psynch_mutexwait + 10
    frame #1: 0x00007fff8bf9e779 libsystem_pthread.dylib`_pthread_mutex_lock + 372
    frame #2: 0x00007fff958c57a9 libc++.1.dylib`std::__1::mutex::lock() + 9
    frame #3: 0x000000010049056d JavaScriptCore`JSC::JSLock::lock(this=0x0000000101b09740, lockCount=1) + 157 at JSLock.cpp:120
    frame #4: 0x000000010049012f JavaScriptCore`JSC::JSLock::lock(this=0x0000000101b09740) + 31 at JSLock.cpp:108
    frame #5: 0x0000000100490025 JavaScriptCore`JSC::JSLockHolder::init(this=0x00007fff5fbfce48) + 37 at JSLock.cpp:70
    frame #6: 0x0000000100490098 JavaScriptCore`JSC::JSLockHolder::JSLockHolder(this=0x00007fff5fbfce48, vm=0x0000000104815600) + 56 at JSLock.cpp:59
    frame #7: 0x000000010049004d JavaScriptCore`JSC::JSLockHolder::JSLockHolder(this=0x00007fff5fbfce48, vm=0x0000000104815600) + 29 at JSLock.cpp:60
    frame #8: 0x000000010038337d JavaScriptCore`JSC::APIEntryShim::APIEntryShim(this=0x00007fff5fbfce38, exec=0x00000001063cf9b0, registerThread=true) + 109 at APIShims.h:61
    frame #9: 0x00000001003832dc JavaScriptCore`JSC::APIEntryShim::APIEntryShim(this=0x00007fff5fbfce38, exec=0x00000001063cf9b0, registerThread=true) + 44 at APIShims.h:63
    frame #10: 0x00000001004a9d12 JavaScriptCore`JSObjectCallAsFunction(ctx=0x00000001063cf9b0, object=0x00000001067ddd30, thisObject=0x0000000000000000, argumentCount=2, arguments=0x00007fff5fbfced0, exception=0x0000000000000000) + 66 at JSObjectRef.cpp:522
    frame #11: 0x0000000100004f05 JSPong`-[PongAI nextMove](self=0x0000000101a52b90, _cmd=0x000000010000582a) + 213 at PongAI.m:130
    frame #12: 0x0000000100003cb6 JSPong`-[PongController update](self=0x0000000101e07890, _cmd=0x00007fff9803339e) + 1446 at PongController.m:187
    frame #13: 0x00007fff944e60f4 Foundation`__NSFireTimer + 96
    frame #14: 0x00007fff90bf9564 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
    frame #15: 0x00007fff90bf909f CoreFoundation`__CFRunLoopDoTimer + 1151
    frame #16: 0x00007fff90c6a5aa CoreFoundation`__CFRunLoopDoTimers + 298
    frame #17: 0x00007fff90bb48e5 CoreFoundation`__CFRunLoopRun + 1525
    frame #18: 0x00007fff90bb40b5 CoreFoundation`CFRunLoopRunSpecific + 309
    frame #19: 0x00007fff8fbbea0d HIToolbox`RunCurrentEventLoopInMode + 226
    frame #20: 0x00007fff8fbbe7b7 HIToolbox`ReceiveNextEventCommon + 479
    frame #21: 0x00007fff8fbbe5bc HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 65
    frame #22: 0x00007fff975fd3de AppKit`_DPSNextEvent + 1434
    frame #23: 0x00007fff975fca2b AppKit`-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 122
    frame #24: 0x00007fff975f0b2c AppKit`-[NSApplication run] + 553
    frame #25: 0x00007fff975db913 AppKit`NSApplicationMain + 940
    frame #26: 0x0000000100001522 JSPong`main(argc=1, argv=0x00007fff5fbffae0) + 34 at main.m:53

  thread #3: tid = 0x6dde07, 0x00007fff93d7f662 libsystem_kernel.dylib`kevent64 + 10, queue = &apos;com.apple.libdispatch-manager&apos;
    frame #0: 0x00007fff93d7f662 libsystem_kernel.dylib`kevent64 + 10
    frame #1: 0x00007fff8d38043d libdispatch.dylib`_dispatch_mgr_invoke + 239
    frame #2: 0x00007fff8d380152 libdispatch.dylib`_dispatch_mgr_thread + 52

  thread #4: tid = 0x6dde08, 0x00007fff93d7ee6a libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #0: 0x00007fff93d7ee6a libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00007fff8bf9cf08 libsystem_pthread.dylib`_pthread_wqthread + 330

* thread #5: tid = 0x6dde09, 0x000000010073696a JavaScriptCore`WTFCrash + 42 at Assertions.cpp:333, queue = &apos;com.apple.JavaScriptCore.remote-inspector-xpc-connection&apos;, stop reason = EXC_BAD_ACCESS (code=1, address=0xbbadbeef)
  * frame #0: 0x000000010073696a JavaScriptCore`WTFCrash + 42 at Assertions.cpp:333
    frame #1: 0x000000010012021a JavaScriptCore`JSC::CodeBlock::removeBreakpoint(this=0x0000000101914610, numBreakpoints=1) + 74 at CodeBlock.h:888
    frame #2: 0x000000010011ddda JavaScriptCore`JSC::Debugger::toggleBreakpoint(this=0x0000000101c0d960, codeBlock=0x0000000101914610, breakpoint=0x0000000101b1eeb0, enabledOrNot=BreakpointDisabled) + 378 at Debugger.cpp:281
    frame #3: 0x000000010012d95e JavaScriptCore`JSC::Debugger::ToggleBreakpointFunctor::operator(this=0x00000001063804b0, codeBlock=0x0000000101914610)(JSC::CodeBlock*) + 110 at Debugger.cpp:305
    frame #4: 0x000000010012d896 JavaScriptCore`void JSC::CodeBlockSet::iterate&lt;JSC::Debugger::ToggleBreakpointFunctor&gt;(this=0x000000010481f940, functor=0x00000001063804b0) + 118 at CodeBlockSet.h:82
    frame #5: 0x00000001001203ff JavaScriptCore`void JSC::Heap::forEachCodeBlock&lt;JSC::Debugger::ToggleBreakpointFunctor&gt;(this=0x0000000104815618, functor=0x00000001063804b0) + 47 at Heap.h:442
    frame #6: 0x000000010011de3a JavaScriptCore`JSC::Debugger::toggleBreakpoint(this=0x0000000101c0d960, breakpoint=0x0000000101b1eeb0, enabledOrNot=BreakpointDisabled) + 90 at Debugger.cpp:320
    frame #7: 0x000000010011e6ed JavaScriptCore`JSC::Debugger::removeBreakpoint(this=0x0000000101c0d960, id=1) + 621 at Debugger.cpp:393
    frame #8: 0x0000000100697c56 JavaScriptCore`Inspector::ScriptDebugServer::removeBreakpoint(this=0x0000000101c0d960, id=1) + 278 at ScriptDebugServer.cpp:86
    frame #9: 0x000000010039a4e2 JavaScriptCore`Inspector::InspectorDebuggerAgent::removeBreakpoint(this=0x0000000101c0d870, =0x00000001063808d0, breakpointIdentifier=0x0000000106380900) + 370 at InspectorDebuggerAgent.cpp:350
    frame #10: 0x000000010039a5f7 JavaScriptCore`_ZThn24_N9Inspector22InspectorDebuggerAgent16removeBreakpointEPN3WTF6StringERKS2_(this=0x0000000101c0d888, =0x00000001063808d0, breakpointIdentifier=0x0000000106380900) + 55 at InspectorDebuggerAgent.cpp:352
    frame #11: 0x00000001003aafbf JavaScriptCore`Inspector::InspectorDebuggerBackendDispatcher::removeBreakpoint(this=0x0000000101c03540, callId=15, message=0x0000000101c0efd0) + 511 at InspectorJSBackendDispatchers.cpp:333
    frame #12: 0x00000001003a9c66 JavaScriptCore`Inspector::InspectorDebuggerBackendDispatcher::dispatch(this=0x0000000101c03540, callId=15, method=0x0000000106380ba0, message=0x0000000106380b98) + 902 at InspectorJSBackendDispatchers.cpp:213
    frame #13: 0x000000010038773c JavaScriptCore`Inspector::InspectorBackendDispatcher::dispatch(this=0x0000000101c0ed60, message=0x0000000106380d90) + 1596 at InspectorBackendDispatcher.cpp:131
    frame #14: 0x0000000100486201 JavaScriptCore`Inspector::JSGlobalObjectInspectorController::dispatchMessageFromFrontend(this=0x0000000101908cd0, message=0x0000000106380d90) + 81 at JSGlobalObjectInspectorController.cpp:101
    frame #15: 0x000000010047c42b JavaScriptCore`JSC::JSGlobalObjectDebuggable::dispatchMessageFromRemoteFrontend(this=0x0000000101a53c70, message=0x0000000106380d90) + 75 at JSGlobalObjectDebuggable.cpp:70
    frame #16: 0x0000000100686987 JavaScriptCore`___ZN9Inspector35RemoteInspectorDebuggableConnection20sendMessageToBackendEP8NSString_block_invoke(.block_descriptor=&lt;unavailable&gt;) + 183 at RemoteInspectorDebuggableConnection.mm:149
    frame #17: 0x00007fff8d3811d7 libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #18: 0x00007fff8d37e2ad libdispatch.dylib`_dispatch_client_callout + 8
    frame #19: 0x00007fff8d38068f libdispatch.dylib`_dispatch_queue_drain + 451
    frame #20: 0x00007fff8d3819dd libdispatch.dylib`_dispatch_queue_invoke + 110
    frame #21: 0x00007fff8d37ffa3 libdispatch.dylib`_dispatch_root_queue_drain + 75
    frame #22: 0x00007fff8d381193 libdispatch.dylib`_dispatch_worker_thread2 + 40
    frame #23: 0x00007fff8bf9cef8 libsystem_pthread.dylib`_pthread_wqthread + 314

  thread #7: tid = 0x6dde19, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::BlockFree&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x00000001000499fe JavaScriptCore`JSC::BlockAllocator::blockFreeingThreadMain(this=0x0000000104815678) + 734 at BlockAllocator.cpp:144
    frame #4: 0x0000000100049715 JavaScriptCore`JSC::BlockAllocator::blockFreeingThreadStartFunc(blockAllocator=0x0000000104815678) + 21 at BlockAllocator.cpp:120
    frame #5: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000106007f80) + 144 at Threading.cpp:69
    frame #6: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x000000010600afd0) + 296 at ThreadingPthreads.cpp:170
    frame #7: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #8: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #8: tid = 0x6dde1a, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010a987c78, __pred=&lt;anonymous class&gt; at 0x000000010a987c18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e083c0) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e083c0) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e083c0) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e0b210) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e083e0) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #9: tid = 0x6dde1b, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010aa0ac78, __pred=&lt;anonymous class&gt; at 0x000000010aa0ac18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e0af50) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e0af50) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e0af50) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e076f0) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e07750) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #10: tid = 0x6dde1c, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010aa8dc78, __pred=&lt;anonymous class&gt; at 0x000000010aa8dc18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e09660) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e09660) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e09660) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e07240) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e0b510) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #11: tid = 0x6dde1d, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010ab10c78, __pred=&lt;anonymous class&gt; at 0x000000010ab10c18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e09680) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e09680) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e09680) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e0b840) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e09db0) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #12: tid = 0x6dde1e, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010ab93c78, __pred=&lt;anonymous class&gt; at 0x000000010ab93c18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e09000) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e09000) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e09000) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e09020) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e0b080) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #13: tid = 0x6dde1f, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JavaScriptCore::Marking&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x00007fff95891d43 libc++.1.dylib`std::__1::condition_variable::wait(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;) + 47
    frame #3: 0x0000000100352201 JavaScriptCore`void std::__1::condition_variable::wait&lt;JSC::GCThread::waitForNextPhase(this=0x000000010481f728, __lk=0x000000010ac16c78, __pred=&lt;anonymous class&gt; at 0x000000010ac16c18)::$_1&gt;(std::__1::unique_lock&lt;std::__1::mutex&gt;&amp;, JSC::GCThread::waitForNextPhase()::$_1) + 65 at __mutex_base:376
    frame #4: 0x00000001003520f6 JavaScriptCore`JSC::GCThread::waitForNextPhase(this=0x0000000101e091d0) + 230 at GCThread.cpp:80
    frame #5: 0x00000001003522aa JavaScriptCore`JSC::GCThread::gcThreadMain(this=0x0000000101e091d0) + 154 at GCThread.cpp:98
    frame #6: 0x00000001003523dd JavaScriptCore`JSC::GCThread::gcThreadStartFunc(data=0x0000000101e091d0) + 29 at GCThread.cpp:134
    frame #7: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101e091f0) + 144 at Threading.cpp:69
    frame #8: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x0000000101e04180) + 296 at ThreadingPthreads.cpp:170
    frame #9: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #10: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #14: tid = 0x6dde20, 0x00007fff93d7aa1a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #0: 0x00007fff93d7aa1a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x00007fff93d79d18 libsystem_kernel.dylib`mach_msg + 64
    frame #2: 0x00007fff90bb5155 CoreFoundation`__CFRunLoopServiceMachPort + 181
    frame #3: 0x00007fff90bb4779 CoreFoundation`__CFRunLoopRun + 1161
    frame #4: 0x00007fff90bb40b5 CoreFoundation`CFRunLoopRunSpecific + 309
    frame #5: 0x00007fff9779d16e AppKit`_NSEventThread + 144
    frame #6: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #7: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137

  thread #15: tid = 0x6dde67, 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10, name = &apos;JSC Compilation Thread&apos;
    frame #0: 0x00007fff93d7e716 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff8bf9dc3b libsystem_pthread.dylib`_pthread_cond_wait + 727
    frame #2: 0x0000000100787b40 JavaScriptCore`WTF::ThreadCondition::wait(this=0x00000001019119d8, mutex=0x0000000101911998) + 48 at ThreadingPthreads.cpp:342
    frame #3: 0x000000010032fa5e JavaScriptCore`JSC::DFG::Worklist::runThread(this=0x0000000101911870, data=0x000000010190b520) + 190 at DFGWorklist.cpp:273
    frame #4: 0x000000010032e804 JavaScriptCore`JSC::DFG::Worklist::threadFunction(argument=0x000000010190b520) + 36 at DFGWorklist.cpp:315
    frame #5: 0x00000001007861d0 JavaScriptCore`WTF::threadEntryPoint(contextData=0x0000000101911a50) + 144 at Threading.cpp:69
    frame #6: 0x0000000100786e58 JavaScriptCore`WTF::wtfThreadEntryPoint(param=0x000000010190c880) + 296 at ThreadingPthreads.cpp:170
    frame #7: 0x00007fff8bf9b899 libsystem_pthread.dylib`_pthread_body + 138
    frame #8: 0x00007fff8bf9b72a libsystem_pthread.dylib`_pthread_start + 137
(lldb)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985023</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-26 18:11:29 -0800</bug_when>
    <thetext>For the next step, I&apos;ll do some digging into the life cycle of that CodeBlock, and try to find out why its m_jitCode is still null.  All I know so far is that the CodeBlock has been added to the heap&apos;s CodeBlockSet but has not yet been installed with its executable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985044</commentid>
    <comment_count>7</comment_count>
      <attachid>225327</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-26 18:57:49 -0800</bug_when>
    <thetext>Comment on attachment 225327
the patch.

Looks like the initial explanation for this patch turned out to be false, so I&apos;ll mark this r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985258</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-27 10:59:01 -0800</bug_when>
    <thetext>* thread #1: tid = 0x71811f, 0x00000001000b0eeb JavaScriptCore`JSC::CodeBlock::CodeBlock(this=0x0000000101c0ff90, =CopyParsedBlock, other=0x0000000101926730) + 1915 at CodeBlock.cpp:1477, queue = &apos;com.apple.main-thread&apos;, stop reason = breakpoint 3.1
  * frame #0: 0x00000001000b0eeb JavaScriptCore`JSC::CodeBlock::CodeBlock(this=0x0000000101c0ff90, =CopyParsedBlock, other=0x0000000101926730) + 1915 at CodeBlock.cpp:1477
    frame #1: 0x0000000100347a21 JavaScriptCore`JSC::FunctionCodeBlock::FunctionCodeBlock(this=0x0000000101c0ff90, =CopyParsedBlock, other=0x0000000101926730) + 49 at CodeBlock.h:1191
    frame #2: 0x0000000100345543 JavaScriptCore`JSC::FunctionCodeBlock::FunctionCodeBlock(this=0x0000000101c0ff90, =CopyParsedBlock, other=0x0000000101926730) + 35 at CodeBlock.h:1192
    frame #3: 0x0000000100342af1 JavaScriptCore`JSC::ScriptExecutable::newReplacementCodeBlockFor(this=0x000000010b41fd70, kind=CodeForCall) + 833 at Executable.cpp:275
    frame #4: 0x00000001000b77b3 JavaScriptCore`JSC::CodeBlock::newReplacement(this=0x0000000101926730) + 67 at CodeBlock.cpp:2662
    frame #5: 0x00000001003f7120 JavaScriptCore`operationOptimize(exec=0x00007fff5fbfca00, bytecodeIndex=0) + 1968 at JITOperations.cpp:1184
    frame #6: 0x000051bd10c02912

Here&apos;s the stack trace that added the offending CodeBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985287</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-27 11:44:31 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; * thread #1: tid = 0x71811f, 0x00000001000b0eeb JavaScriptCore`JSC::CodeBlock::CodeBlock(this=0x0000000101c0ff90, =CopyParsedBlock, other=0x0000000101926730) + 1915 at CodeBlock.cpp:1477, queue = &apos;com.apple.main-thread&apos;, stop reason = breakpoint 3.1
...
&gt;     frame #5: 0x00000001003f7120 JavaScriptCore`operationOptimize(exec=0x00007fff5fbfca00, bytecodeIndex=0) + 1968 at JITOperations.cpp:1184
&gt;     frame #6: 0x000051bd10c02912
&gt; 
&gt; Here&apos;s the stack trace that added the offending CodeBlock.

And the CompilationResult that was returned by DFG::compile() after instantiating that CodeBlock is CompilationInvalidated (and I know this because I added some printfs to log the CodeBlock and the CompilationResult).

However, this code is before my recent fix for &lt;https://webkit.org/b/129355&gt;.  That fix may change this behavior.  Will svn up and re-test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985292</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-02-27 12:02:36 -0800</bug_when>
    <thetext>So, it seems there were three issues here:

(1) The debugger and profiler used to force CompilationInvalidated all the time.

(2) If CompilationInvalidated happens, we&apos;ll end up with a CodeBlock that never registers with the debugger.

(3) During async compilation, there is at least one CodeBlock that has not yet registered with the debugger or profiler, and will never register with the profiler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>985298</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-02-27 12:14:25 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; So, it seems there were three issues here:
&gt; 
&gt; (1) The debugger and profiler used to force CompilationInvalidated all the time.

With &lt;https://webkit.org/b/129355&gt; which fixes this issue, I can no longer reproduce the assertion failure in this bug.  Will think about the other 2 issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986197</commentid>
    <comment_count>12</comment_count>
      <attachid>225616</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-02 16:24:17 -0800</bug_when>
    <thetext>Created attachment 225616
patch 2: eagerly reaps zombie CodeBlocks, and waits for compilations to complete before proceeding with debugger/profiler work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986199</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-02 16:29:12 -0800</bug_when>
    <thetext>After more analysis, here&apos;s an update on the issue and the fix:

The issue manifests because the debugger will iterate all CodeBlocks in the heap when setting / clearing breakpoints, but it is possible for a CodeBlock to have been instantiate but is not yet registered with the debugger.  This can happen because of the following:

1. DFG worklist compilation is still in progress, and the target codeBlock is not ready for installation in its executable yet.

2. DFG compilation failed and we have a codeBlock that will never be installed in its executable, and the codeBlock has not been cleaned up by the GC yet.

The code for installing the codeBlock in its executable is the same code that registers it with the debugger.  Hence, these codeBlocks are not registered with the debugger, and any pending breakpoints that would map to that CodeBlock is as yet unset or will never be set.  As such, an attempt to remove a breakpoint in that CodeBlock will fail that assertion.

To fix this, we do the following:

1. We&apos;ll eagerly clean up any zombie CodeBlocks due to failed DFG / FTL compilation.  This is achieved by providing a DeferredCompilationCallback::compilationDidComplete() that does this clean up, and have all sub classes call it at the end of their compilationDidComplete() methods.

2. Before the debugger or profiler iterates CodeBlocks in the heap, they will wait for all compilations to complete before proceeding.  This ensures that:
    1. any zombie CodeBlocks would have been cleaned up, and won&apos;t be seen by the debugger or profiler.
    2. all CodeBlocks that the debugger and profiler needs to operate on will be &quot;ready&quot; for whatever needs to be done to them e.g. jettison&apos;ing of DFG codeBlocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986425</commentid>
    <comment_count>14</comment_count>
      <attachid>225616</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2014-03-03 11:45:03 -0800</bug_when>
    <thetext>Comment on attachment 225616
patch 2: eagerly reaps zombie CodeBlocks, and waits for compilations to complete before proceeding with debugger/profiler work

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

r=me

&gt; Source/JavaScriptCore/bytecode/DeferredCompilationCallback.cpp:41
&gt; +void DeferredCompilationCallback::compilationDidComplete(CodeBlock* codeBlock, CompilationResult result)
&gt; +{
&gt; +    ASSERT(result == CompilationFailed || result == CompilationInvalidated || result == CompilationSuccessful);
&gt; +    if (result != CompilationSuccessful)
&gt; +        codeBlock-&gt;heap()-&gt;removeCodeBlock(codeBlock);
&gt; +}

I would use a switch statement here. That way, the compiler will check your assertion at compile time.

&gt; Source/JavaScriptCore/heap/CodeBlockSet.h:70
&gt; +    // Remove a CodeBlock. This is only called when compilation is not successful
&gt; +    // in generating the jitCode for the CodeBlock.
&gt; +    void remove(CodeBlock*);

It&apos;s a layering violation to make promises about who will call this function and / or when. Let&apos;s remove this comment.

&gt; Source/JavaScriptCore/runtime/VM.h:502
&gt; -        void prepareToDiscardCode();
&gt; +        void prepareToDiscardCode() { waitForCompilationsToComplete(); }
&gt; +        void waitForCompilationsToComplete();

Instead of having two names for the same thing, let&apos;s pick one and have all callers use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986477</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-03-03 13:35:03 -0800</bug_when>
    <thetext>Thanks.  The feedback has been applied.  Landed in r165005: &lt;http://trac.webkit.org/r165005&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225327</attachid>
            <date>2014-02-26 17:22:09 -0800</date>
            <delta_ts>2014-03-02 16:24:17 -0800</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-129393.patch</filename>
            <type>text/plain</type>
            <size>6019</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0NzYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDE0LTAyLTI2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
U1NFUlRJT04gRkFJTEVEOiBtX251bUJyZWFrcG9pbnRzID49IG51bUJyZWFrcG9pbnRzIHdoZW4g
ZGVsZXRpbmcgYnJlYWtwb2ludHMuCisgICAgICAgIDxodHRwczovL3dlYmtpdC5vcmcvYi8xMjkz
OTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhl
IGlzc3VlIG1hbmlmZXN0cyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciB3aWxsIGl0ZXJhdGUgYWxsIENv
ZGVCbG9ja3MgaW4KKyAgICAgICAgdGhlIGhlYXAgd2hlbiBzZXR0aW5nIC8gY2xlYXJpbmcgYnJl
YWtwb2ludHMsIGJ1dCBpdCBpcyBwb3NzaWJsZSBmb3IgYQorICAgICAgICBDb2RlQmxvY2sgdG8g
aGF2ZSBiZWVuIGluc3RhbnRpYXRlIGJ1dCBpcyBub3QgeWV0IHJlZ2lzdGVyZWQgd2l0aCB0aGUK
KyAgICAgICAgZGVidWdnZXIuICBIZW5jZSwgYW55IHBlbmRpbmcgYnJlYWtwb2ludHMgdGhhdCB3
b3VsZCBsYW5kIGluIHRoYXQKKyAgICAgICAgQ29kZUJsb2NrIGlzIGFzIHlldCB1bnNldC4gIEFz
IHN1Y2gsIGFuIGF0dGVtcHQgdG8gcmVtb3ZlIGEgIndvdWxkIGJlIgorICAgICAgICBicmVha3Bv
aW50IGluIHRoYXQgQ29kZUJsb2NrIHdpbGwgZmFpbCB0aGF0IGFzc2VydGlvbi4KKworICAgICAg
ICBUaGUgZml4IGlzIGhhdmUgdGhlIGRlYnVnZ2VyIG9ubHkgb3BlcmF0ZSBvbiBDb2RlQmxvY2tz
IHRoYXQgYXJlCisgICAgICAgIHJlZ2lzdGVyZWQgd2l0aCBpdC4KKworICAgICAgICAqIGJ5dGVj
b2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp+Q29kZUJsb2NrKToKKyAgICAgICAgKiBieXRlY29k
ZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjppc1JlZ2lzdGVyZWRXaXRo
RGVidWdnZXIpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Omhhc0RlYnVnZ2VyUmVxdWVzdHMp
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnNldElzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcik6
CisgICAgICAgICogZGVidWdnZXIvRGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dl
cjo6U2V0U3RlcHBpbmdNb2RlRnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRl
YnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpUb2dn
bGVCcmVha3BvaW50RnVuY3Rvcjo6b3BlcmF0b3IoKSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2Vy
OjpDbGVhckNvZGVCbG9ja0RlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yOjpvcGVyYXRvcigpKToKKwog
MjAxNC0wMi0yNiAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFVuY29uZGl0aW9uYWwgbG9nZ2luZyBpbiBjb21waWxlRlRMT1NSRXhpdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9u
IDE2NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDM3LDYgKzE0MzcsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhDb3B5UGFyc2VkQmxvY2tUYWcsCiAgICAgLCBtX3RoaXNSZWdpc3RlcihvdGhlci5tX3RoaXNS
ZWdpc3RlcikKICAgICAsIG1fYXJndW1lbnRzUmVnaXN0ZXIob3RoZXIubV9hcmd1bWVudHNSZWdp
c3RlcikKICAgICAsIG1fYWN0aXZhdGlvblJlZ2lzdGVyKG90aGVyLm1fYWN0aXZhdGlvblJlZ2lz
dGVyKQorICAgICwgbV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXIoZmFsc2UpCiAgICAgLCBtX2lz
U3RyaWN0TW9kZShvdGhlci5tX2lzU3RyaWN0TW9kZSkKICAgICAsIG1fbmVlZHNBY3RpdmF0aW9u
KG90aGVyLm1fbmVlZHNBY3RpdmF0aW9uKQogICAgICwgbV9zb3VyY2Uob3RoZXIubV9zb3VyY2Up
CkBAIC0xNDkzLDYgKzE0OTQsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRh
YmxlKiBvCiAgICAgLCBtX3RoaXNSZWdpc3Rlcih1bmxpbmtlZENvZGVCbG9jay0+dGhpc1JlZ2lz
dGVyKCkpCiAgICAgLCBtX2FyZ3VtZW50c1JlZ2lzdGVyKHVubGlua2VkQ29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpKQogICAgICwgbV9hY3RpdmF0aW9uUmVnaXN0ZXIodW5saW5rZWRDb2Rl
QmxvY2stPmFjdGl2YXRpb25SZWdpc3RlcigpKQorICAgICwgbV9pc1JlZ2lzdGVyZWRXaXRoRGVi
dWdnZXIoZmFsc2UpCiAgICAgLCBtX2lzU3RyaWN0TW9kZSh1bmxpbmtlZENvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCkpCiAgICAgLCBtX25lZWRzQWN0aXZhdGlvbih1bmxpbmtlZENvZGVCbG9jay0+
aGFzQWN0aXZhdGlvblJlZ2lzdGVyKCkgJiYgdW5saW5rZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkg
PT0gRnVuY3Rpb25Db2RlKQogICAgICwgbV9zb3VyY2Uoc291cmNlUHJvdmlkZXIpCkBAIC0xODQz
LDYgKzE4NDUsOCBAQCBDb2RlQmxvY2s6On5Db2RlQmxvY2soKQogICAgIGZvciAoQmFnPFN0cnVj
dHVyZVN0dWJJbmZvPjo6aXRlcmF0b3IgaXRlciA9IG1fc3R1YkluZm9zLmJlZ2luKCk7ICEhaXRl
cjsgKytpdGVyKQogICAgICAgICAoKml0ZXIpLT5kZXJlZigpOwogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCisKKyAgICBtX2lzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlciA9IGZhbHNlOwogfQogCiB2b2lk
IENvZGVCbG9jazo6c2V0TnVtUGFyYW1ldGVycyhpbnQgbmV3VmFsdWUpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNjQ3MTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTg3Niw5ICs4NzYsMTIgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNPcERlYnVnRm9y
TGluZUFuZENvbHVtbih1bnNpZ25lZCBsaW5lLCB1bnNpZ25lZCBjb2x1bW4pOwogCi0gICAgaW50
IGhhc0RlYnVnZ2VyUmVxdWVzdHMoKSBjb25zdCB7IHJldHVybiAhIW1fZGVidWdnZXJSZXF1ZXN0
czsgfQorICAgIGJvb2wgaXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkgY29uc3QgeyByZXR1cm4g
bV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXI7IH0KKyAgICBib29sIGhhc0RlYnVnZ2VyUmVxdWVz
dHMoKSBjb25zdCB7IHJldHVybiAhIW1fZGVidWdnZXJSZXF1ZXN0czsgfQogICAgIHZvaWQqIGRl
YnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCkgeyByZXR1cm4gJm1fZGVidWdnZXJSZXF1ZXN0czsgfQog
CisgICAgdm9pZCBzZXRJc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXIoKSB7IG1faXNSZWdpc3RlcmVk
V2l0aERlYnVnZ2VyID0gdHJ1ZTsgfQorCiAgICAgdm9pZCBhZGRCcmVha3BvaW50KHVuc2lnbmVk
IG51bUJyZWFrcG9pbnRzKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQodW5zaWduZWQgbnVt
QnJlYWtwb2ludHMpCiAgICAgewpAQCAtMTAzOSw3ICsxMDQyLDggQEAgcHJpdmF0ZToKICAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9hcmd1bWVudHNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9hY3RpdmF0aW9uUmVnaXN0ZXI7CiAKLSAgICBib29sIG1faXNTdHJpY3RNb2RlOworICAgIGJv
b2wgbV9pc1JlZ2lzdGVyZWRXaXRoRGVidWdnZXIgOiAxOworICAgIGJvb2wgbV9pc1N0cmljdE1v
ZGUgOiAxOwogICAgIGJvb2wgbV9uZWVkc0FjdGl2YXRpb247CiAgICAgYm9vbCBtX21heUJlRXhl
Y3V0aW5nOwogICAgIHVpbnQ4X3QgbV92aXNpdEFnZ3JlZ2F0ZUhhc0JlZW5DYWxsZWQ7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9u
IDE2NDcxNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIG9w
ZXJhdG9yKCkoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiAgICAgewotICAgICAgICBpZiAobV9kZWJ1
Z2dlciA9PSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpKSB7CisgICAgICAg
IGlmIChjb2RlQmxvY2stPmlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpICYmIG1fZGVidWdnZXIg
PT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewogICAgICAgICAgICAg
aWYgKG1fbW9kZSA9PSBTdGVwcGluZ01vZGVFbmFibGVkKQogICAgICAgICAgICAgICAgIGNvZGVC
bG9jay0+c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6U3RlcHBpbmdNb2RlRW5hYmxlZCk7CiAg
ICAgICAgICAgICBlbHNlCkBAIC0yMzcsNiArMjM3LDcgQEAgdm9pZCBEZWJ1Z2dlcjo6c2V0U3Rl
cHBpbmdNb2RlKFN0ZXBwaW5nTQogCiB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhD
b2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKKyAgICBjb2RlQmxvY2stPnNldElzUmVnaXN0ZXJlZFdp
dGhEZWJ1Z2dlcigpOwogICAgIGFwcGx5QnJlYWtwb2ludHMoY29kZUJsb2NrKTsKICAgICBpZiAo
aXNTdGVwcGluZygpKQogICAgICAgICBjb2RlQmxvY2stPnNldFN0ZXBwaW5nTW9kZShDb2RlQmxv
Y2s6OlN0ZXBwaW5nTW9kZUVuYWJsZWQpOwpAQCAtMzAwLDcgKzMwMSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgb3BlcmF0b3IoKShDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7Ci0gICAgICAg
IGlmIChtX2RlYnVnZ2VyID09IGNvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCkp
CisgICAgICAgIGlmIChjb2RlQmxvY2stPmlzUmVnaXN0ZXJlZFdpdGhEZWJ1Z2dlcigpICYmIG1f
ZGVidWdnZXIgPT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkKICAgICAg
ICAgICAgIG1fZGVidWdnZXItPnRvZ2dsZUJyZWFrcG9pbnQoY29kZUJsb2NrLCBtX2JyZWFrcG9p
bnQsIG1fZW5hYmxlZE9yTm90KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTQ3
OCw4ICs0NzksMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBvcGVyYXRvcigpKENvZGVCbG9jayog
Y29kZUJsb2NrKQogICAgIHsKLSAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzRGVidWdnZXJSZXF1
ZXN0cygpICYmIG1fZGVidWdnZXIgPT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdn
ZXIoKSkKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+aGFzRGVidWdnZXJSZXF1ZXN0cygpICYmIG1f
ZGVidWdnZXIgPT0gY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgeworICAg
ICAgICAgICAgQVNTRVJUKGNvZGVCbG9jay0+aXNSZWdpc3RlcmVkV2l0aERlYnVnZ2VyKCkpOwog
ICAgICAgICAgICAgY29kZUJsb2NrLT5jbGVhckRlYnVnZ2VyUmVxdWVzdHMoKTsKKyAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="249452"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225616</attachid>
            <date>2014-03-02 16:24:17 -0800</date>
            <delta_ts>2014-03-03 11:45:03 -0800</delta_ts>
            <desc>patch 2: eagerly reaps zombie CodeBlocks, and waits for compilations to complete before proceeding with debugger/profiler work</desc>
            <filename>bug-129393.patch</filename>
            <type>text/plain</type>
            <size>17924</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY0OTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBA
QAorMjAxNC0wMy0wMiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
QVNTRVJUSU9OIEZBSUxFRDogbV9udW1CcmVha3BvaW50cyA+PSBudW1CcmVha3BvaW50cyB3aGVu
IGRlbGV0aW5nIGJyZWFrcG9pbnRzLgorICAgICAgICA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTI5
MzkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBpc3N1ZSBtYW5pZmVzdHMgYmVjYXVzZSB0aGUgZGVidWdnZXIgd2lsbCBpdGVyYXRlIGFsbCBD
b2RlQmxvY2tzIGluCisgICAgICAgIHRoZSBoZWFwIHdoZW4gc2V0dGluZyAvIGNsZWFyaW5nIGJy
ZWFrcG9pbnRzLCBidXQgaXQgaXMgcG9zc2libGUgZm9yIGEKKyAgICAgICAgQ29kZUJsb2NrIHRv
IGhhdmUgYmVlbiBpbnN0YW50aWF0ZSBidXQgaXMgbm90IHlldCByZWdpc3RlcmVkIHdpdGggdGhl
CisgICAgICAgIGRlYnVnZ2VyLiAgVGhpcyBjYW4gaGFwcGVuIGJlY2F1c2Ugb2YgdGhlIGZvbGxv
d2luZzoKKworICAgICAgICAxLiBERkcgd29ya2xpc3QgY29tcGlsYXRpb24gaXMgc3RpbGwgaW4g
cHJvZ3Jlc3MsIGFuZCB0aGUgdGFyZ2V0CisgICAgICAgICAgIGNvZGVCbG9jayBpcyBub3QgcmVh
ZHkgZm9yIGluc3RhbGxhdGlvbiBpbiBpdHMgZXhlY3V0YWJsZSB5ZXQuCisKKyAgICAgICAgMi4g
REZHIGNvbXBpbGF0aW9uIGZhaWxlZCBhbmQgd2UgaGF2ZSBhIGNvZGVCbG9jayB0aGF0IHdpbGwg
bmV2ZXIgYmUKKyAgICAgICAgICAgaW5zdGFsbGVkIGluIGl0cyBleGVjdXRhYmxlLCBhbmQgdGhl
IGNvZGVCbG9jayBoYXMgbm90IGJlZW4gY2xlYW5lZAorICAgICAgICAgICB1cCBieSB0aGUgR0Mg
eWV0LgorCisgICAgICAgIFRoZSBjb2RlIGZvciBpbnN0YWxsaW5nIHRoZSBjb2RlQmxvY2sgaW4g
aXRzIGV4ZWN1dGFibGUgaXMgdGhlIHNhbWUgY29kZQorICAgICAgICB0aGF0IHJlZ2lzdGVycyBp
dCB3aXRoIHRoZSBkZWJ1Z2dlci4gIEhlbmNlLCB0aGVzZSBjb2RlQmxvY2tzIGFyZSBub3QKKyAg
ICAgICAgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkZWJ1Z2dlciwgYW5kIGFueSBwZW5kaW5nIGJyZWFr
cG9pbnRzIHRoYXQgd291bGQgbWFwCisgICAgICAgIHRvIHRoYXQgQ29kZUJsb2NrIGlzIGFzIHll
dCB1bnNldCBvciB3aWxsIG5ldmVyIGJlIHNldC4gIEFzIHN1Y2gsIGFuCisgICAgICAgIGF0dGVt
cHQgdG8gcmVtb3ZlIGEgYnJlYWtwb2ludCBpbiB0aGF0IENvZGVCbG9jayB3aWxsIGZhaWwgdGhh
dCBhc3NlcnRpb24uCisKKyAgICAgICAgVG8gZml4IHRoaXMsIHdlIGRvIHRoZSBmb2xsb3dpbmc6
CisKKyAgICAgICAgMS4gV2UnbGwgZWFnZXJseSBjbGVhbiB1cCBhbnkgem9tYmllIENvZGVCbG9j
a3MgZHVlIHRvIGZhaWxlZCBERkcgLyBGVEwKKyAgICAgICAgICAgY29tcGlsYXRpb24uICBUaGlz
IGlzIGFjaGlldmVkIGJ5IHByb3ZpZGluZyBhCisgICAgICAgICAgIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjazo6Y29tcGlsYXRpb25EaWRDb21wbGV0ZSgpIHRoYXQgZG9lcyB0aGlzCisgICAg
ICAgICAgIGNsZWFuIHVwLCBhbmQgaGF2ZSBhbGwgc3ViIGNsYXNzZXMgY2FsbCBpdCBhdCB0aGUg
ZW5kIG9mIHRoZWlyCisgICAgICAgICAgIGNvbXBpbGF0aW9uRGlkQ29tcGxldGUoKSBtZXRob2Rz
LgorCisgICAgICAgIDIuIEJlZm9yZSB0aGUgZGVidWdnZXIgb3IgcHJvZmlsZXIgaXRlcmF0ZXMg
Q29kZUJsb2NrcyBpbiB0aGUgaGVhcCwgdGhleQorICAgICAgICAgICB3aWxsIHdhaXQgZm9yIGFs
bCBjb21waWxhdGlvbnMgdG8gY29tcGxldGUgYmVmb3JlIHByb2NlZWRpbmcuICBUaGlzCisgICAg
ICAgICAgIGVuc3VyZXMgdGhhdDoKKyAgICAgICAgICAgMS4gYW55IHpvbWJpZSBDb2RlQmxvY2tz
IHdvdWxkIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCBhbmQgd29uJ3QgYmUKKyAgICAgICAgICAgICAg
c2VlbiBieSB0aGUgZGVidWdnZXIgb3IgcHJvZmlsZXIuCisgICAgICAgICAgIDIuIGFsbCBDb2Rl
QmxvY2tzIHRoYXQgdGhlIGRlYnVnZ2VyIGFuZCBwcm9maWxlciBuZWVkcyB0byBvcGVyYXRlIG9u
CisgICAgICAgICAgICAgIHdpbGwgYmUgInJlYWR5IiBmb3Igd2hhdGV2ZXIgbmVlZHMgdG8gYmUg
ZG9uZSB0byB0aGVtIGUuZy4KKyAgICAgICAgICAgICAgamV0dGlzb24naW5nIG9mIERGRyBjb2Rl
QmxvY2tzLgorCisgICAgICAgICogYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNr
LmNwcDoKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxh
dGlvbkRpZENvbXBsZXRlKToKKyAgICAgICAgKiBieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaDoKKyAgICAgICAgLSBQcm92aWRlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gbWV0
aG9kIHRvIGNsZWFuIHVwIHpvbWJpZSBDb2RlQmxvY2tzLgorCisgICAgICAgICogZGVidWdnZXIv
RGVidWdnZXIuY3BwOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6Zm9yRWFjaENvZGVCbG9jayk6
CisgICAgICAgIC0gVXRpbGl0eSBmdW5jdGlvbiB0byBpdGVyYXRlIENvZGVCbG9ja3MuICBJdCBl
bnN1cmVzIHRoYXQgYWxsIGNvbXBpbGF0aW9ucworICAgICAgICAgIGFyZSBjb21wbGV0ZSBiZWZv
cmUgcHJvY2VlZGluZy4KKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnNldFN0ZXBwaW5nTW9kZSk6
CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KToKKyAgICAgICAgKEpT
Qzo6RGVidWdnZXI6OmNsZWFyQnJlYWtwb2ludHMpOgorICAgICAgICAoSlNDOjpEZWJ1Z2dlcjo6
Y2xlYXJEZWJ1Z2dlclJlcXVlc3RzKToKKyAgICAgICAgLSBVc2UgdGhlIHV0aWxpdHkgaXRlcmF0
b3IgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dlci5oOgorCisgICAgICAg
ICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAtIEFkZGVkIGFuIGFzc2VydCB0byBl
bnN1cmUgdGhhdCB6b21iaWUgQ29kZUJsb2NrcyB3aWxsIGJlIGltbWluZW50bHkgY2xlYW5lZCB1
cC4KKworICAgICAgICAqIGRmZy9ERkdQbGFuLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQbGFu
OjpmaW5hbGl6ZVdpdGhvdXROb3RpZnlpbmdDYWxsYmFjayk6CisgICAgICAgIC0gUmVtb3ZlIHVu
bmVlZGVkIGNvZGUgKHRoYXQgd2FzIG5vdCB0aGUgYmVzdCBzb2x1dGlvbiBhbnl3YXkpIGZvciBl
bnN1cmluZworICAgICAgICAgIHRoYXQgd2UgZG9uJ3QgZ2VuZXJhdGUgbmV3IERGRyBjb2RlQmxv
Y2tzIGFmdGVyIGVuYWJsaW5nIHRoZSBkZWJ1Z2dlciBvcgorICAgICAgICAgIHByb2ZpbGVyLiAg
Tm93IHRoYXQgd2Ugd2FpdCBmb3IgY29tcGlsYXRpb25zIHRvIGNvbXBsZXRlIGJlZm9yZSBwcm9j
ZWVkaW5nCisgICAgICAgICAgd2l0aCBkZWJ1Z2dlciBhbmQgcHJvZmlsZXIgd29yaywgdGhpcyBz
Y2VuYXJpbyB3aWxsIG5ldmVyIGhhcHBlbi4KKworICAgICAgICAqIGRmZy9ERkdUb0ZUTERlZmVy
cmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VG9GVExEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAg
ICAtIENhbGwgdGhlIHN1cGVyIGNsYXNzIG1ldGhvZCB0byBjbGVhbiB1cCB6b21iaWUgY29kZUJs
b2Nrcy4KKworICAgICAgICAqIGRmZy9ERkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxh
dGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUb0ZUTEZvck9TUkVudHJ5RGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpjb21waWxhdGlvbkRpZENvbXBsZXRlKToKKyAgICAg
ICAgLSBDYWxsIHRoZSBzdXBlciBjbGFzcyBtZXRob2QgdG8gY2xlYW4gdXAgem9tYmllIGNvZGVC
bG9ja3MuCisKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9ja1NldDo6cmVtb3ZlKToKKyAgICAgICAgKiBoZWFwL0NvZGVCbG9ja1NldC5oOgor
ICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAgICAoSlNDOjpIZWFwOjpyZW1vdmVDb2RlQmxv
Y2spOgorICAgICAgICAtIE5ldyBtZXRob2QgdG8gcmVtb3ZlIGEgY29kZUJsb2NrIGZyb20gdGhl
IGNvZGVCbG9jayBzZXQuCisKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAg
ICAgIC0gQWRkZWQgYW4gYXNzZXJ0IHRvIGVuc3VyZSB0aGF0IHpvbWJpZSBDb2RlQmxvY2tzIHdp
bGwgYmUgaW1taW5lbnRseSBjbGVhbmVkIHVwLgorCisgICAgICAgICogaml0L0pJVFRvREZHRGVm
ZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVG9ERkdEZWZl
cnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUpOgorICAgICAg
ICAtIENhbGwgdGhlIHN1cGVyIGNsYXNzIG1ldGhvZCB0byBjbGVhbiB1cCB6b21iaWUgY29kZUJs
b2Nrcy4KKworICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6d2Fp
dEZvckNvbXBpbGF0aW9uc1RvQ29tcGxldGUpOgorICAgICAgICAtIFJlbmFtZWQgZnJvbSBwcmVw
YXJlVG9EaXNjYXJkQ29kZSgpIHRvIGJlIGNsZWFyZXIgYWJvdXQgd2hhdCBpdCBkb2VzLgorCisg
ICAgICAgIChKU0M6OlZNOjpzZXRFbmFibGVkUHJvZmlsZXIpOgorICAgICAgICAtIFdhaXQgZm9y
IGNvbXBpbGF0aW9uIHRvIGNvbXBsZXRlIGJlZm9yZSBlbmFibGluZyB0aGUgcHJvZmlsZXIuCisK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgIChKU0M6OlZNOjpwcmVwYXJlVG9EaXNj
YXJkQ29kZSk6CisgICAgICAgIC0gUmUtaW50cm9kdWNlZCBhcyBhbiBpbmxpbmUgbWV0aG9kIHRo
YXQgY2FsbHMgd2FpdEZvckNvbXBpbGF0aW9uc1RvQ29tcGxldGUoKS4KKwogMjAxNC0wMy0wMiAg
TWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQ2xlYW4gdXAgdXNlIG9m
IE9wdGlvbnM6OmVuYWJsZUNvbmN1cnJlbnRKSVQoKS4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suY3BwCShyZXZpc2lvbiAxNjQ4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYs
MTAgKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmgiCiAKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKwogbmFtZXNwYWNl
IEpTQyB7CiAKIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6RGVmZXJyZWRDb21waWxhdGlv
bkNhbGxiYWNrKCkgeyB9CiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6On5EZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2soKSB7IH0KIAordm9pZCBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2s6OmNvbXBpbGF0aW9uRGlkQ29tcGxldGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIENvbXBpbGF0
aW9uUmVzdWx0IHJlc3VsdCkKK3sKKyAgICBBU1NFUlQocmVzdWx0ID09IENvbXBpbGF0aW9uRmFp
bGVkIHx8IHJlc3VsdCA9PSBDb21waWxhdGlvbkludmFsaWRhdGVkIHx8IHJlc3VsdCA9PSBDb21w
aWxhdGlvblN1Y2Nlc3NmdWwpOworICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNz
ZnVsKQorICAgICAgICBjb2RlQmxvY2stPmhlYXAoKS0+cmVtb3ZlQ29kZUJsb2NrKGNvZGVCbG9j
ayk7Cit9CisKIH0gLy8gSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9EZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgJKHJldmlz
aW9uIDE2NDgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9EZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB+RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRCZWNvbWVSZWFkeUFzeW5jaHJvbm91c2x5KENvZGVC
bG9jayopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29tcGlsYXRpb25EaWRDb21wbGV0ZShDb2Rl
QmxvY2sqLCBDb21waWxhdGlvblJlc3VsdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb21waWxh
dGlvbkRpZENvbXBsZXRlKENvZGVCbG9jayosIENvbXBpbGF0aW9uUmVzdWx0KTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIv
RGVidWdnZXIuY3BwCShyZXZpc2lvbiAxNjQ4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGVidWdnZXIvRGVidWdnZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiArMTM4LDEzIEBA
IHByaXZhdGU6CiAgICAgRGVidWdnZXImIG1fZGVidWdnZXI7CiB9OwogCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgordm9pZCBEZWJ1Z2dlcjo6Zm9yRWFjaENvZGVCbG9jayhGdW5jdG9yJiBm
dW5jdG9yKQoreworICAgIG1fdm0tPndhaXRGb3JDb21waWxhdGlvbnNUb0NvbXBsZXRlKCk7Cisg
ICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOworfQorCiBEZWJ1Z2dlcjo6
RGVidWdnZXIoYm9vbCBpc0luV29ya2VyVGhyZWFkKQogICAgIDogbV92bShudWxscHRyKQogICAg
ICwgbV9wYXVzZU9uRXhjZXB0aW9uc1N0YXRlKERvbnRQYXVzZU9uRXhjZXB0aW9ucykKQEAgLTIz
Miw3ICsyMzksNyBAQCB2b2lkIERlYnVnZ2VyOjpzZXRTdGVwcGluZ01vZGUoU3RlcHBpbmdNCiAg
ICAgaWYgKCFtX3ZtKQogICAgICAgICByZXR1cm47CiAgICAgU2V0U3RlcHBpbmdNb2RlRnVuY3Rv
ciBmdW5jdG9yKHRoaXMsIG1vZGUpOwotICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9jayhm
dW5jdG9yKTsKKyAgICBmb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQogCiB2b2lkIERlYnVn
Z2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTMxNiw3ICsz
MjMsNyBAQCB2b2lkIERlYnVnZ2VyOjp0b2dnbGVCcmVha3BvaW50KEJyZWFrcG9pCiAgICAgaWYg
KCFtX3ZtKQogICAgICAgICByZXR1cm47CiAgICAgVG9nZ2xlQnJlYWtwb2ludEZ1bmN0b3IgZnVu
Y3Rvcih0aGlzLCBicmVha3BvaW50LCBlbmFibGVkT3JOb3QpOwotICAgIG1fdm0tPmhlYXAuZm9y
RWFjaENvZGVCbG9jayhmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwog
fQogCiB2b2lkIERlYnVnZ2VyOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucyhWTSogdm0pCkBAIC00
OTYsNyArNTAzLDcgQEAgdm9pZCBEZWJ1Z2dlcjo6Y2xlYXJCcmVha3BvaW50cygpCiAgICAgaWYg
KCFtX3ZtKQogICAgICAgICByZXR1cm47CiAgICAgQ2xlYXJDb2RlQmxvY2tEZWJ1Z2dlclJlcXVl
c3RzRnVuY3RvciBmdW5jdG9yKHRoaXMpOwotICAgIG1fdm0tPmhlYXAuZm9yRWFjaENvZGVCbG9j
ayhmdW5jdG9yKTsKKyAgICBmb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQogCiBjbGFzcyBE
ZWJ1Z2dlcjo6Q2xlYXJEZWJ1Z2dlclJlcXVlc3RzRnVuY3RvciB7CkBAIC01MjEsNyArNTI4LDcg
QEAgdm9pZCBEZWJ1Z2dlcjo6Y2xlYXJEZWJ1Z2dlclJlcXVlc3RzKEpTRwogewogICAgIEFTU0VS
VChtX3ZtKTsKICAgICBDbGVhckRlYnVnZ2VyUmVxdWVzdHNGdW5jdG9yIGZ1bmN0b3IoZ2xvYmFs
T2JqZWN0KTsKLSAgICBtX3ZtLT5oZWFwLmZvckVhY2hDb2RlQmxvY2soZnVuY3Rvcik7CisgICAg
Zm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKIH0KIAogdm9pZCBEZWJ1Z2dlcjo6c2V0QnJlYWtw
b2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGVidWdnZXIvRGVidWdnZXIuaAkocmV2aXNpb24gMTY0ODIwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4Miw2ICsx
ODIsOCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjbGVhckRlYnVnZ2VyUmVxdWVzdHMoSlNHbG9i
YWxPYmplY3QqKTsKIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IGlubGluZSB2b2lk
IGZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYpOworCiAgICAgVk0qIG1fdm07CiAgICAgSGFzaFNl
dDxKU0dsb2JhbE9iamVjdCo+IG1fZ2xvYmFsT2JqZWN0czsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNjQ4MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjUzLDEzICsxMjUzLDE2IEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gdHJpZ2dlck9TUkVu
dHJ5Tm93KAogICAgIE9wZXJhbmRzPEpTVmFsdWU+IG11c3RIYW5kbGVWYWx1ZXM7CiAgICAgaml0
Q29kZS0+cmVjb25zdHJ1Y3QoCiAgICAgICAgIGV4ZWMsIGNvZGVCbG9jaywgQ29kZU9yaWdpbihi
eXRlY29kZUluZGV4KSwgc3RyZWFtSW5kZXgsIG11c3RIYW5kbGVWYWx1ZXMpOworICAgIFJlZlB0
cjxDb2RlQmxvY2s+IHJlcGxhY2VtZW50Q29kZUJsb2NrID0gY29kZUJsb2NrLT5uZXdSZXBsYWNl
bWVudCgpOwogICAgIENvbXBpbGF0aW9uUmVzdWx0IGZvckVudHJ5UmVzdWx0ID0gY29tcGlsZSgK
LSAgICAgICAgKnZtLCBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIGNvZGVCbG9j
aywgRlRMRm9yT1NSRW50cnlNb2RlLCBieXRlY29kZUluZGV4LAorICAgICAgICAqdm0sIHJlcGxh
Y2VtZW50Q29kZUJsb2NrLmdldCgpLCBjb2RlQmxvY2ssIEZUTEZvck9TUkVudHJ5TW9kZSwgYnl0
ZWNvZGVJbmRleCwKICAgICAgICAgbXVzdEhhbmRsZVZhbHVlcywgVG9GVExGb3JPU1JFbnRyeURl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y3JlYXRlKGNvZGVCbG9jaykpOwogICAgIAotICAg
IGlmIChmb3JFbnRyeVJlc3VsdCAhPSBDb21waWxhdGlvblN1Y2Nlc3NmdWwpCisgICAgaWYgKGZv
ckVudHJ5UmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgeworICAgICAgICBBU1NFUlQo
Zm9yRW50cnlSZXN1bHQgPT0gQ29tcGlsYXRpb25EZWZlcnJlZCB8fCByZXBsYWNlbWVudENvZGVC
bG9jay0+aGFzT25lUmVmKCkpOwogICAgICAgICByZXR1cm4gMDsKLSAgICAKKyAgICB9CisKICAg
ICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGZvci1lbnRyeSBjb21waWxlIGFscmVhZHkgc3Vj
Y2VlZGVkLiBJbiB0aGF0IGNhc2UgT1NSCiAgICAgLy8gZW50cnkgd2lsbCBzdWNjZWVkIHVubGVz
cyB3ZSByYW4gb3V0IG9mIHN0YWNrLiBJdCdzIG5vdCBjbGVhciB3aGF0IHdlIHNob3VsZCBkby4K
ICAgICAvLyBXZSBzaWduYWwgdG8gdHJ5IGFnYWluIGFmdGVyIGEgd2hpbGUgaWYgdGhhdCBoYXBw
ZW5zLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAx
NjQ4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTEsMTMgKzM5MSw2IEBAIENvbXBpbGF0aW9uUmVzdWx0IFBsYW46OmZpbmFs
aXplV2l0aG91dE4KICAgICBpZiAoIWlzU3RpbGxWYWxpZCgpKQogICAgICAgICByZXR1cm4gQ29t
cGlsYXRpb25JbnZhbGlkYXRlZDsKIAotICAgIGlmICh2bS5lbmFibGVkUHJvZmlsZXIoKSkKLSAg
ICAgICAgcmV0dXJuIENvbXBpbGF0aW9uSW52YWxpZGF0ZWQ7Ci0KLSAgICBEZWJ1Z2dlciogZGVi
dWdnZXIgPSBjb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5kZWJ1Z2dlcigpOwotICAgIGlmIChk
ZWJ1Z2dlciAmJiAoZGVidWdnZXItPmlzU3RlcHBpbmcoKSB8fCBjb2RlQmxvY2stPmJhc2VsaW5l
QWx0ZXJuYXRpdmUoKS0+aGFzRGVidWdnZXJSZXF1ZXN0cygpKSkKLSAgICAgICAgcmV0dXJuIENv
bXBpbGF0aW9uSW52YWxpZGF0ZWQ7Ci0KICAgICBib29sIHJlc3VsdDsKICAgICBpZiAoY29kZUJs
b2NrLT5jb2RlVHlwZSgpID09IEZ1bmN0aW9uQ29kZSkKICAgICAgICAgcmVzdWx0ID0gZmluYWxp
emVyLT5maW5hbGl6ZUZ1bmN0aW9uKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxi
YWNrLmNwcAkocmV2aXNpb24gMTY0ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDYgKzg1LDggQEAgdm9pZCBUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Ywog
ICAgIAogICAgIG1fZGZnQ29kZUJsb2NrLT5qaXRDb2RlKCktPmRmZygpLT5zZXRPcHRpbWl6YXRp
b25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25SZXN1bHQoCiAgICAgICAgIG1fZGZnQ29kZUJs
b2NrLmdldCgpLCByZXN1bHQpOworCisgICAgRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrOjpj
b21waWxhdGlvbkRpZENvbXBsZXRlKGNvZGVCbG9jaywgcmVzdWx0KTsKIH0KIAogfSB9IC8vIEpT
Qzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RvRlRMRm9yT1NSRW50
cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAJKHJldmlzaW9uIDE2NDgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc5LDE5ICs3OSwxOSBAQCB2b2lkIFRvRlRMRm9yT1NSRW50cnlEZWZl
cnJlZENvbXBpbGF0aW9uCiAgICAgc3dpdGNoIChyZXN1bHQpIHsKICAgICBjYXNlIENvbXBpbGF0
aW9uU3VjY2Vzc2Z1bDoKICAgICAgICAgaml0Q29kZS0+b3NyRW50cnlCbG9jayA9IGNvZGVCbG9j
azsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBicmVhazsKICAgICBjYXNlIENvbXBpbGF0aW9u
RmFpbGVkOgogICAgICAgICBqaXRDb2RlLT5vc3JFbnRyeVJldHJ5ID0gMDsKICAgICAgICAgaml0
Q29kZS0+YWJhbmRvbk9TUkVudHJ5ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBi
cmVhazsKICAgICBjYXNlIENvbXBpbGF0aW9uRGVmZXJyZWQ6Ci0gICAgICAgIHJldHVybjsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICBjYXNlIENvbXBpbGF0aW9u
SW52YWxpZGF0ZWQ6CiAgICAgICAgIGppdENvZGUtPm9zckVudHJ5UmV0cnkgPSAwOwotICAgICAg
ICByZXR1cm47CisgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKLSAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gfSAvLyBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tTZXQuY3BwCShy
ZXZpc2lvbiAxNjQ4MjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Db2RlQmxvY2tT
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw2ICs5NiwxMiBAQCB2b2lkIENvZGVCbG9ja1Nl
dDo6ZGVsZXRlVW5tYXJrZWRBbmRVbnJlCiAgICAgfQogfQogCit2b2lkIENvZGVCbG9ja1NldDo6
cmVtb3ZlKENvZGVCbG9jayogY29kZUJsb2NrKQoreworICAgIGNvZGVCbG9jay0+ZGVyZWYoKTsK
KyAgICBtX3NldC5yZW1vdmUoY29kZUJsb2NrKTsKK30KKwogdm9pZCBDb2RlQmxvY2tTZXQ6OnRy
YWNlTWFya2VkKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIGlmICh2ZXJib3NlKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ29kZUJsb2NrU2V0LmgJKHJldmlzaW9uIDE2
NDgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NvZGVCbG9ja1NldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NSw2ICs2NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhpcyBzZXQp
LCBhbmQgdGhhdCBoYXZlIG5vdCBiZWVuIG1hcmtlZC4KICAgICB2b2lkIGRlbGV0ZVVubWFya2Vk
QW5kVW5yZWZlcmVuY2VkKCk7CiAgICAgCisgICAgLy8gUmVtb3ZlIGEgQ29kZUJsb2NrLiBUaGlz
IGlzIG9ubHkgY2FsbGVkIHdoZW4gY29tcGlsYXRpb24gaXMgbm90IHN1Y2Nlc3NmdWwKKyAgICAv
LyBpbiBnZW5lcmF0aW5nIHRoZSBqaXRDb2RlIGZvciB0aGUgQ29kZUJsb2NrLgorICAgIHZvaWQg
cmVtb3ZlKENvZGVCbG9jayopOworICAgIAogICAgIC8vIFRyYWNlIGFsbCBtYXJrZWQgY29kZSBi
bG9ja3MuIFRoZSBDb2RlQmxvY2sgaXMgZnJlZSB0byBtYWtlIHVzZSBvZgogICAgIC8vIG1heUJl
RXhlY3V0aW5nLgogICAgIHZvaWQgdHJhY2VNYXJrZWQoU2xvdFZpc2l0b3ImKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgJKHJldmlzaW9uIDE2NDgyMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIHJlbGVh
c2VTb29uKFJldGFpblB0cjxUPiYmKTsKICNlbmRpZgogCisgICAgICAgIHZvaWQgcmVtb3ZlQ29k
ZUJsb2NrKENvZGVCbG9jayogY2IpIHsgbV9jb2RlQmxvY2tzLnJlbW92ZShjYik7IH0KKwogICAg
IHByaXZhdGU6CiAgICAgICAgIGZyaWVuZCBjbGFzcyBDb2RlQmxvY2s7CiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBDb3BpZWRCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTY0ODIwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OSwxMiArMTE5
OSwxNSBAQCBTbG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgICAg
ICAgICAgICAgbXVzdEhhbmRsZVZhbHVlc1tpXSA9IGV4ZWMtPnVuY2hlY2tlZFIob3BlcmFuZCku
anNWYWx1ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgUmVmUHRyPENvZGVCbG9jaz4gcmVwbGFj
ZW1lbnRDb2RlQmxvY2sgPSBjb2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCk7CiAgICAgICAgIENv
bXBpbGF0aW9uUmVzdWx0IHJlc3VsdCA9IERGRzo6Y29tcGlsZSgKLSAgICAgICAgICAgIHZtLCBj
b2RlQmxvY2stPm5ld1JlcGxhY2VtZW50KCkuZ2V0KCksIDAsIERGRzo6REZHTW9kZSwgYnl0ZWNv
ZGVJbmRleCwKKyAgICAgICAgICAgIHZtLCByZXBsYWNlbWVudENvZGVCbG9jay5nZXQoKSwgMCwg
REZHOjpERkdNb2RlLCBieXRlY29kZUluZGV4LAogICAgICAgICAgICAgbXVzdEhhbmRsZVZhbHVl
cywgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2s6OmNyZWF0ZSgpKTsKICAgICAg
ICAgCi0gICAgICAgIGlmIChyZXN1bHQgIT0gQ29tcGlsYXRpb25TdWNjZXNzZnVsKQorICAgICAg
ICBpZiAocmVzdWx0ICE9IENvbXBpbGF0aW9uU3VjY2Vzc2Z1bCkgeworICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdCA9PSBDb21waWxhdGlvbkRlZmVycmVkIHx8IHJlcGxhY2VtZW50Q29kZUJsb2Nr
LT5oYXNPbmVSZWYoKSk7CiAgICAgICAgICAgICByZXR1cm4gZW5jb2RlUmVzdWx0KDAsIDApOwor
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogb3B0aW1pemVkQ29kZUJsb2Nr
ID0gY29kZUJsb2NrLT5yZXBsYWNlbWVudCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5jcHAJKHJldmlzaW9uIDE2NDgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw2ICs2NSw4IEBAIHZvaWQgSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJh
Y2sKICAgICAgICAgY29kZUJsb2NrLT5pbnN0YWxsKCk7CiAgICAgCiAgICAgY29kZUJsb2NrLT5h
bHRlcm5hdGl2ZSgpLT5zZXRPcHRpbWl6YXRpb25UaHJlc2hvbGRCYXNlZE9uQ29tcGlsYXRpb25S
ZXN1bHQocmVzdWx0KTsKKworICAgIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjazo6Y29tcGls
YXRpb25EaWRDb21wbGV0ZShjb2RlQmxvY2ssIHJlc3VsdCk7CiB9CiAKIH0gLy8gSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxNjQ4MjApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUx
Miw3ICs1MTIsNyBAQCB2b2lkIFZNOjpzdG9wU2FtcGxpbmcoKQogICAgIGludGVycHJldGVyLT5z
dG9wU2FtcGxpbmcoKTsKIH0KIAotdm9pZCBWTTo6cHJlcGFyZVRvRGlzY2FyZENvZGUoKQordm9p
ZCBWTTo6d2FpdEZvckNvbXBpbGF0aW9uc1RvQ29tcGxldGUoKQogewogI2lmIEVOQUJMRShERkdf
SklUKQogICAgIGZvciAodW5zaWduZWQgaSA9IERGRzo6bnVtYmVyT2ZXb3JrbGlzdHMoKTsgaS0t
OykgewpAQCAtODcyLDYgKzg3Miw3IEBAIHZvaWQgVk06OnNldEVuYWJsZWRQcm9maWxlcihMZWdh
Y3lQcm9maWwKIHsKICAgICBtX2VuYWJsZWRQcm9maWxlciA9IHByb2ZpbGVyOwogICAgIGlmICht
X2VuYWJsZWRQcm9maWxlcikgeworICAgICAgICB3YWl0Rm9yQ29tcGlsYXRpb25zVG9Db21wbGV0
ZSgpOwogICAgICAgICBTZXRFbmFibGVkUHJvZmlsZXJGdW5jdG9yIGZ1bmN0b3I7CiAgICAgICAg
IGhlYXAuZm9yRWFjaENvZGVCbG9jayhmdW5jdG9yKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE2NDgyMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMywgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTQ5OCw3ICs0OTgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSlNMb2NrJiBhcGlMb2Nr
KCkgeyByZXR1cm4gKm1fYXBpTG9jazsgfQogICAgICAgICBDb2RlQ2FjaGUqIGNvZGVDYWNoZSgp
IHsgcmV0dXJuIG1fY29kZUNhY2hlLmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBwcmVwYXJlVG9E
aXNjYXJkQ29kZSgpOworICAgICAgICB2b2lkIHByZXBhcmVUb0Rpc2NhcmRDb2RlKCkgeyB3YWl0
Rm9yQ29tcGlsYXRpb25zVG9Db21wbGV0ZSgpOyB9CisgICAgICAgIHZvaWQgd2FpdEZvckNvbXBp
bGF0aW9uc1RvQ29tcGxldGUoKTsKICAgICAgICAgCiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGlzY2FyZEFsbENvZGUoKTsKIAo=
</data>
<flag name="review"
          id="249766"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>